{"version":3,"file":"static/js/index.ea50fca0.js","sources":["webpack://@jotforminc/inbox/../../configs/tracking-config/src/index.js","webpack://@jotforminc/inbox/./src/constants/index.js","webpack://@jotforminc/inbox/./src/constants/proptypes.js","webpack://@jotforminc/inbox/./src/constants/team.js","webpack://@jotforminc/inbox/./src/constants/texts.js","webpack://@jotforminc/inbox/./src/containers/NoteContent/index.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/HOCs/OnClickOutside/index.js","webpack://@jotforminc/inbox/../../../../src/icons/general/ellipsis-horizontal-circle-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/box-archive-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/box-archive-arrow-up-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/documents/document-xls-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/documents/document-csv-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/documents/document-pdf-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/editor/pencil-line.svg","webpack://@jotforminc/inbox/../../../../src/icons/alert-feedback/bell-diagonal-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/star-minus-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-inbox-color-border.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-inbox-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/communication/envelope-form-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/forms-files/file-pencil-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/star.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/turn-arrow-left-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/editor/droplet-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/turn-arrow-right-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/grid-dots-vertical.svg","webpack://@jotforminc/inbox/../../../../src/icons/security/key.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/arrow-down.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/arrow-up-to-line.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/arrow-up.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/gear-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/bars.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/arrow-up-right-from-square-sm.svg","webpack://@jotforminc/inbox/../../../../src/icons/forms-files/paperclip-vertical.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/angle-down.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/arrows-up-down.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/arrows-to-center.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/arrows-switch-horizontal.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/angle-left.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/angle-right.svg","webpack://@jotforminc/inbox/../../../../src/icons/time-date/calendar-plus.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/turn-arrow-short-right-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/time-date/clock.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/ellipsis-vertical.svg","webpack://@jotforminc/inbox/../../../../src/icons/editor/pencil-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/forms-files/file-paperclip-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/communication/envelope-opened-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/plus-sm.svg","webpack://@jotforminc/inbox/../../../../src/icons/forms-files/form-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/arrow-up-right-from-square.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/chevron-up.svg","webpack://@jotforminc/inbox/../../../../src/icons/communication/message-check-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/angle-up.svg","webpack://@jotforminc/inbox/../../../../src/icons/users/user-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/funnel-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/time-date/calendar-event-check-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/finance/basket-shopping-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/trash-clock-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/forms-files/file-arrow-flip-right-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/editor/pencil-line-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/communication/annotation-info-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-sentbox-color-border.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/ai-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/circle-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/circle-lg-filled.svg","webpack://@jotforminc/inbox/./src/assets/svg/tabs/iconTabSignDeclined.svg","webpack://@jotforminc/inbox/./src/assets/svg/tabs/iconTabSignWaiting.svg","webpack://@jotforminc/inbox/./src/assets/svg/tabs/iconTabSignCompleted.svg","webpack://@jotforminc/inbox/./src/assets/svg/tabs/iconTabSignAll.svg","webpack://@jotforminc/inbox/./src/assets/svg/tabs/IconTabSignWaitingMySignature.svg","webpack://@jotforminc/inbox/./src/assets/svg/tabs/IconTabSignCanceled.svg","webpack://@jotforminc/inbox/./src/assets/svg/logoGrey.svg","webpack://@jotforminc/inbox/./src/assets/svg/iconQuestionAlignmentLeft.svg","webpack://@jotforminc/inbox/./src/assets/svg/iconQuestionAlignmentTop.svg","webpack://@jotforminc/inbox/./src/assets/svg/iconWide.svg","webpack://@jotforminc/inbox/./src/assets/svg/iconNormal.svg","webpack://@jotforminc/inbox/./src/assets/svg/iconCompact.svg","webpack://@jotforminc/inbox/./src/assets/svg/branding/commonIcons/empty-screen.svg","webpack://@jotforminc/inbox/./src/assets/svg/branding/commonIcons/empty-filter.svg","webpack://@jotforminc/inbox/./src/assets/svg/iconNoPermission.svg","webpack://@jotforminc/inbox/./src/assets/svg/iconEmptyState.svg","webpack://@jotforminc/inbox/./src/assets/svg/iconPermissions.svg","webpack://@jotforminc/inbox/./src/assets/svg/iconApprovalHeader.svg","webpack://@jotforminc/inbox/./src/assets/svg/iconPendingApproval.svg","webpack://@jotforminc/inbox/./src/assets/svg/iconTerminateFlow.svg","webpack://@jotforminc/inbox/./src/assets/svg/iconRestartFlow.svg","webpack://@jotforminc/inbox/./src/assets/svg/workflow/iconApprovalFlow.svg","webpack://@jotforminc/inbox/./src/assets/svg/workflow/iconTakeover.svg","webpack://@jotforminc/inbox/./src/assets/svg/workflow/iconReassign.svg","webpack://@jotforminc/inbox/./src/assets/svg/branding/commonIcons/warning-delete-icon.svg","webpack://@jotforminc/inbox/./src/assets/svg/branding/commonIcons/warning-warn-icon.svg","webpack://@jotforminc/inbox/./src/assets/svg/iconIncomplete.svg","webpack://@jotforminc/inbox/./src/assets/svg/sign/iconClose.svg","webpack://@jotforminc/inbox/./src/assets/svg/sign/iconInfo.svg","webpack://@jotforminc/inbox/./src/assets/svg/sign/iconDuplicate.svg","webpack://@jotforminc/inbox/./src/assets/svg/sign/iconSignedDoc.svg","webpack://@jotforminc/inbox/./src/assets/svg/sign/iconWarning.svg","webpack://@jotforminc/inbox/./src/assets/svg/sign/iconReminderEmail.svg","webpack://@jotforminc/inbox/./src/assets/svg/sign/iconReminder.svg","webpack://@jotforminc/inbox/../../libs/workflow-components/src/constants/systemOutcomes.js","webpack://@jotforminc/inbox/../../../../src/icons/general/loading.svg","webpack://@jotforminc/inbox/../../../../src/icons/forms-files/form-check-filled.svg","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Workflow/Status/index.js","webpack://@jotforminc/inbox/../../../../src/logos/integration/googledrive-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/box-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/onedrive-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/dropbox-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/egnyte-logomark-dark.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/quickbooks-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/airtable-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/monday-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/googlesheets-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/microsoftteams-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/webhooks-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/campaignmonitor-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/trello-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/slack-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/clickup-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/zoho-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/googlecalendar-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/zoom-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/hubspot-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/asana-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/mailerlite-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/constantcontact-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/mailchimp-logomark-dark.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/getresponse-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/activecampaign-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/aweber-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/keap-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/zendesk-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/pipedrive-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/sendgrid-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/ftp-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/icontact-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/madmimi-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/highrise-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/solve-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/insightly-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/callingly-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/verticalresponse-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/zapier-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/xzazu-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/paymo-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/boxsign-color.svg","webpack://@jotforminc/inbox/../../libs/single-submission-buttons/src/assets/iconModalClose.svg","webpack://@jotforminc/inbox/../../libs/single-submission-buttons/src/assets/iconViewAllSubmission.svg","webpack://@jotforminc/inbox/../../libs/single-submission-buttons/src/assets/iconViewNewSubmission.svg","webpack://@jotforminc/inbox/../../libs/single-submission-buttons/src/assets/arrow_left.svg","webpack://@jotforminc/inbox/../../libs/single-submission-buttons/src/assets/iconPrint.svg","webpack://@jotforminc/inbox/../../libs/single-submission-buttons/src/assets/icon_pdf.svg","webpack://@jotforminc/inbox/../../libs/single-submission-buttons/src/assets/icon_download.svg","webpack://@jotforminc/inbox/../../libs/single-submission-buttons/src/assets/iconInboxNavigator.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/task-filled.svg","webpack://@jotforminc/inbox/../../libs/workflow-components/src/assets/iconAssignFormFlow.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/xmark-circle.svg","webpack://@jotforminc/inbox/../../../../src/icons/media/triangle-circle-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/arrows-rotate.svg","webpack://@jotforminc/inbox/../../libs/workflow-components/src/assets/iconTakeover.svg","webpack://@jotforminc/inbox/../../libs/signature/src/assets/svg/signature_icon.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/link-diagonal.svg","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/StartCancelAction.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/hooks/useActionComponents.js","webpack://@jotforminc/inbox/../../libs/image-upload/src/assets/svg/unsplash_icon.svg","webpack://@jotforminc/inbox/../../libs/workflow-components/src/SubmissionThread/EntryTypes.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/assets/iconRequestMoreInfo.svg","webpack://@jotforminc/inbox/../../../../src/icons/security/unlock-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-form-builder-mono.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/buildings.svg","webpack://@jotforminc/inbox/../../libs/ep-share-panel/src/assets/ssoAdLegacy.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/arrow-up-from-bracket.svg","webpack://@jotforminc/inbox/../../libs/editable-pill/src/assets/svg/icon_cross.svg","webpack://@jotforminc/inbox/../../libs/editable-pill/src/assets/svg/icon_pill.svg","webpack://@jotforminc/inbox/../../libs/share-panel/src/assets/svg/iconPrefillEdit.svg","webpack://@jotforminc/inbox/../../libs/share-panel/src/assets/svg/iconPrefillEditWhite.svg","webpack://@jotforminc/inbox/../../libs/share-panel/src/assets/svg/assign_to_organization.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/exclamation-triangle.svg","webpack://@jotforminc/inbox/../../../../src/icons/communication/envelope-closed-check-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/communication/envelope-closed-xmark-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-tables-filled.svg","webpack://@jotforminc/inbox/../../libs/share-panel/src/assets/svg/iconManage.svg","webpack://@jotforminc/inbox/../../libs/share-panel/src/assets/svg/icon_scheduleReminder.svg","webpack://@jotforminc/inbox/../../libs/share-panel/src/assets/svg/icon_scheduledReminderIndicator.svg","webpack://@jotforminc/inbox/../../libs/share-panel/src/assets/svg/actionRequired.svg","webpack://@jotforminc/inbox/../../libs/share-panel/src/assets/svg/icon_shared_with_no_one.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/rocket-filled.svg","webpack://@jotforminc/inbox/../../libs/ep-utils/src/assets/icon.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/arrow-rotate-right.svg","webpack://@jotforminc/inbox/../../libs/share-panel/src/assets/svg/faq.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/puzzle-piece-filled.svg","webpack://@jotforminc/inbox/../../libs/workflow-components/src/assets/iconCalendar.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/info-circle.svg","webpack://@jotforminc/inbox/../../libs/workflow-components/src/assets/icon_SignTrackAvatar.svg","webpack://@jotforminc/inbox/../../libs/workflow-components/src/assets/icon_workflowApproval.svg","webpack://@jotforminc/inbox/../../../../src/icons/alert-feedback/thumbs-up.svg","webpack://@jotforminc/inbox/../../../../src/icons/alert-feedback/thumbs-down.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/cloud-arrow-up.svg","webpack://@jotforminc/inbox/../../../../src/icons/forms-files/folder-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/media/camera-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/ellipsis-horizontal.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/line-horizontal.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/arrows-from-center.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/rocket-square-broken-filled.svg","webpack://@jotforminc/inbox/../../libs/message/src/assets/svg/logoGrey.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/building.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-teams-basic-filled.svg","webpack://@jotforminc/inbox/../../libs/message/src/assets/svg/iconValid.svg","webpack://@jotforminc/inbox/../../libs/message/src/assets/svg/iconInvalid.svg","webpack://@jotforminc/inbox/../../../../src/icons/editor/text-size.svg","webpack://@jotforminc/inbox/../../../../src/icons/editor/bold.svg","webpack://@jotforminc/inbox/../../../../src/icons/editor/italic.svg","webpack://@jotforminc/inbox/../../../../src/icons/editor/underline.svg","webpack://@jotforminc/inbox/../../../../src/icons/editor/list-number.svg","webpack://@jotforminc/inbox/../../../../src/icons/editor/list-bullet.svg","webpack://@jotforminc/inbox/../../libs/message/src/assets/svg/iconSmile.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-pages-color.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-pages-mono.svg","webpack://@jotforminc/inbox/../../../../src/icons/finance/cart-shopping-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-sign-color-border.svg","webpack://@jotforminc/inbox/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noFormsFoundIcon.svg","webpack://@jotforminc/inbox/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noAppsFoundIcon.svg","webpack://@jotforminc/inbox/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noTablesFoundIcon.svg","webpack://@jotforminc/inbox/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noReportsFoundIcon.svg","webpack://@jotforminc/inbox/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noApprovalsFoundIcon.svg","webpack://@jotforminc/inbox/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noSignDocumentsFoundIcon.svg","webpack://@jotforminc/inbox/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noBoardsFoundIcon.svg","webpack://@jotforminc/inbox/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noFormsIcon.svg","webpack://@jotforminc/inbox/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noAppsIcon.svg","webpack://@jotforminc/inbox/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noTablesIcon.svg","webpack://@jotforminc/inbox/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noReportsIcon.svg","webpack://@jotforminc/inbox/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noApprovalsIcon.svg","webpack://@jotforminc/inbox/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noSignDocumentsIcon.svg","webpack://@jotforminc/inbox/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noBoardsIcon.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconAppAnalytics.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconAppBuilder.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconAppCards.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconAppForm.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconAppInbox.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconAppPdfEditor.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconAppReports.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconAppSheets.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconAppUploads.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconAppMyApps.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconAppAiAgentBuilder1.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconAppAiAgentBuilder2.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconConversationsv1.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconAppMyKiosks.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconAppMyForms.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconAppMyTasks.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconAppSign.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconAppApprovals.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconAppMyContacts.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/appIcons/boards_selected.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-form-builder-magnifying-glass-mono.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-form-builder-magnifying-glass-color.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-form-builder-color.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-pdf-editor-mono.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-pdf-editor-color.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-tables-mono.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-tables-color.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-inbox-mono.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-inbox-color.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-report-builder-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-report-builder-color.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-sign-color.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-apps-color.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-form-analytics-mono.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-form-analytics-color.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-teams-mono.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-teams-color.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/appIcons/contacts_default.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/appIcons/contacts_selected.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/appIcons/boards_default.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconConversationsv2.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/components/Navigation/navigationConstants.js","webpack://@jotforminc/inbox/../../libs/empty-list/src/assets/svg/noFormsIcon.svg","webpack://@jotforminc/inbox/../../libs/empty-list/src/assets/svg/noAppsIcon.svg","webpack://@jotforminc/inbox/../../libs/empty-list/src/assets/svg/noTablesIcon.svg","webpack://@jotforminc/inbox/../../libs/empty-list/src/assets/svg/noReportsIcon.svg","webpack://@jotforminc/inbox/../../libs/empty-list/src/assets/svg/noApprovalsIcon.svg","webpack://@jotforminc/inbox/../../libs/empty-list/src/assets/svg/noSignDocumentsIcon.svg","webpack://@jotforminc/inbox/../../libs/empty-list/src/assets/svg/noTeamFormsIcon.svg","webpack://@jotforminc/inbox/../../libs/empty-list/src/assets/svg/noDocumentIcon.svg","webpack://@jotforminc/inbox/../../libs/empty-list/src/assets/svg/noFormsFoundIcon.svg","webpack://@jotforminc/inbox/../../libs/empty-list/src/assets/svg/noAppsFoundIcon.svg","webpack://@jotforminc/inbox/../../libs/empty-list/src/assets/svg/noTablesFoundIcon.svg","webpack://@jotforminc/inbox/../../libs/empty-list/src/assets/svg/noReportsFoundIcon.svg","webpack://@jotforminc/inbox/../../libs/empty-list/src/assets/svg/noApprovalsFoundIcon.svg","webpack://@jotforminc/inbox/../../libs/empty-list/src/assets/svg/noSignDocumentsFoundIcon.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/caret-down-bars.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-payment-form-filled.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/teamselection-noteam.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/emptyFormList.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconHipaa.svg","webpack://@jotforminc/inbox/../../libs/router-bridge/src/init.js","webpack://@jotforminc/inbox/../../libs/tracking/src/init.ts","webpack://@jotforminc/inbox/./src/actions/actionTypes.js","webpack://@jotforminc/inbox/./src/constants/recaptcha.js","webpack://@jotforminc/inbox/./src/reducers/ui.js","webpack://@jotforminc/inbox/./src/reducers/user.js","webpack://@jotforminc/inbox/./src/reducers/form.js","webpack://@jotforminc/inbox/./src/reducers/submission.js","webpack://@jotforminc/inbox/./src/reducers/tabs.js","webpack://@jotforminc/inbox/./src/reducers/team.js","webpack://@jotforminc/inbox/./src/reducers/aiAgents.js","webpack://@jotforminc/inbox/./src/reducers/index.js","webpack://@jotforminc/inbox/./src/api/requestLayer.js","webpack://@jotforminc/inbox/../../libs/custom-socket-client/src/utils/index.js","webpack://@jotforminc/inbox/../../libs/custom-socket-client/src/CustomWebSocket.js","webpack://@jotforminc/inbox/./src/actions/index.js","webpack://@jotforminc/inbox/./src/contexts/Socket.js","webpack://@jotforminc/inbox/./src/api/index.js","webpack://@jotforminc/inbox/./src/utils/WatchmanRecorder.js","webpack://@jotforminc/inbox/./src/sagas/userSagas.js","webpack://@jotforminc/inbox/../../libs/permissions/src/components/Permissions.js","webpack://@jotforminc/inbox/../../libs/utils/src/htmlTools.js","webpack://@jotforminc/inbox/./src/sagas/sagaHelpers.js","webpack://@jotforminc/inbox/./src/sagas/formSagas.js","webpack://@jotforminc/inbox/./src/sagas/questionSagas.js","webpack://@jotforminc/inbox/../../libs/decryptor/src/components/SingletonOldEngine.js","webpack://@jotforminc/inbox/../../libs/decryptor/src/components/index.js","webpack://@jotforminc/inbox/../../libs/decryptor/src/utils/index.js","webpack://@jotforminc/inbox/../../libs/cors-worker/src/utils/UnavailableClass.ts","webpack://@jotforminc/inbox/../../libs/cors-worker/src/utils/CorsWorker.ts","webpack://@jotforminc/inbox/../../libs/worker-pool/src/utils/JfWorker.js","webpack://@jotforminc/inbox/../../libs/worker-pool/src/utils/WorkerPool.js","webpack://@jotforminc/inbox/../../libs/decryption-worker/src/DecryptSubmissionWorkerPool.js","webpack://@jotforminc/inbox/../../libs/answer-utils/src/constants/index.js","webpack://@jotforminc/inbox/../../libs/answer-utils/src/utils/index.js","webpack://@jotforminc/inbox/./src/components/SVG/index.js","webpack://@jotforminc/inbox/./src/components/AnswerTag/index.js","webpack://@jotforminc/inbox/./src/utils/Submissions.js","webpack://@jotforminc/inbox/./src/sagas/submissionSagas.js","webpack://@jotforminc/inbox/./src/sagas/uiSagas.js","webpack://@jotforminc/inbox/./src/sagas/otherSagas.js","webpack://@jotforminc/inbox/./src/sagas/teamSagas.js","webpack://@jotforminc/inbox/./src/sagas/aiAgentsSagas.js","webpack://@jotforminc/inbox/./src/sagas/index.js","webpack://@jotforminc/inbox/./src/styles/errorBoundry.module.scss?fa07","webpack://@jotforminc/inbox/./src/hocs/ErrorBoundry/index.js","webpack://@jotforminc/inbox/./src/utils/Initiator.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/api/index.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/contexts/Thread.js","webpack://@jotforminc/inbox/../../libs/constants/src/date/index.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/utils/index.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/contexts/Workflow.js","webpack://@jotforminc/inbox/../../libs/common/src/components/Popover/context.js","webpack://@jotforminc/inbox/../../libs/common/src/components/Popover/container.js","webpack://@jotforminc/inbox/../../libs/permissions/src/hooks/index.js","webpack://@jotforminc/inbox/../../libs/permissions/src/components/withPermissions.js","webpack://@jotforminc/inbox/./src/vendor/keyboard/index.js","webpack://@jotforminc/inbox/../../libs/common/src/components/MobileAppSheet/index.js","webpack://@jotforminc/inbox/../../libs/magnet/src/layouts/Flex/flex.cva.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/layouts/Flex/Flex.tsx","webpack://@jotforminc/inbox/../../libs/apploaders/src/Circle/index.js","webpack://@jotforminc/inbox/../../libs/utils/src/a11y.js","webpack://@jotforminc/inbox/../../libs/two-button-popup/src/components/TwoButtonPopup.js","webpack://@jotforminc/inbox/./src/hooks/index.js","webpack://@jotforminc/inbox/./src/hocs/UserInterfaceManager/index.js","webpack://@jotforminc/inbox/./src/hocs/Translation/index.js","webpack://@jotforminc/inbox/./src/hocs/InboxEnhancer/index.js","webpack://@jotforminc/inbox/./src/containers/SearchPanelToolbar/index.js","webpack://@jotforminc/inbox/./src/components/CreateTabModal/index.js","webpack://@jotforminc/inbox/./src/components/FilterResultBar/index.js","webpack://@jotforminc/inbox/./src/components/Warnings/index.js","webpack://@jotforminc/inbox/./src/components/Placeholder/index.js","webpack://@jotforminc/inbox/./src/components/SubmissionListPlaceholder/index.js","webpack://@jotforminc/inbox/./src/components/SubmissionListEncrypted/index.js","webpack://@jotforminc/inbox/./src/components/CampaignComponents/CampaignSubmissionListItem/index.js","webpack://@jotforminc/inbox/./src/components/SubmissionList/index.js","webpack://@jotforminc/inbox/./src/components/NoResult/index.js","webpack://@jotforminc/inbox/./src/components/NoSubmission/index.js","webpack://@jotforminc/inbox/./src/components/NoPermission/index.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/utils/helper.js","webpack://@jotforminc/inbox/../../libs/placeholder/src/PlaceHolder.js","webpack://@jotforminc/inbox/../../libs/placeholder/src/WorkflowStatus.js","webpack://@jotforminc/inbox/../../libs/single-submission-buttons/src/api.js","webpack://@jotforminc/inbox/../../libs/single-submission-buttons/src/context.js","webpack://@jotforminc/inbox/../../libs/preview/src/hocs/index.js","webpack://@jotforminc/inbox/../../libs/preview/src/components/SVG.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/View/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/ViewWithAlignment/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/Text/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/Label/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/LabelWithAlignment/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/Answer/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/AnswerWithAlignment/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/Baseline/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/Image/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/Imageline/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/Hypertext/index.js","webpack://@jotforminc/inbox/../../libs/fileuploadfield/src/components/FileUploadField/index.js","webpack://@jotforminc/inbox/../../libs/fileuploadfield/src/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Address/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/utils/styled.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Appointment/index.js","webpack://@jotforminc/inbox/../../libs/emoji-mart/src/components/EmojiWithoutLazy.js","webpack://@jotforminc/inbox/../../libs/icon-selector/src/components/EmojiRenderer/EmojiRendererWithoutLazy.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/AssigneeLine/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/AssigneeItem/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/constants/schemas.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/AssigneeList/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/ImageItem/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/ImageList/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/CommaList/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/OptionItem/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/OptionList/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/OrderedList/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/Checkbox/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/CheckboxList/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/UnorderedList/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/List/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/hocs/SubmissionWidget/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Assignee/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/Touchable/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Checkbox/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Datetime/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/constants/specials.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Dropdown/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Email/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Fileupload/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Fullname/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Image/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Imagechoice/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Inline/helpers/utils.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Inline/helpers/getHTMLAnswer.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/Line/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Inline/helpers/getListAnswer.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Inline/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/Emoji/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/Tableview/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/hocs/Matrix/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Matrix/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Mixed/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Number/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Phone/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Radio/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Rating/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Scale/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Sheetbox/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Spinner/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Text/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Textarea/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Textbox/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Time/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Yesno/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Autocomp/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Autoincrement/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Birthdate/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Calculation/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Grading/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Hidden/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Range/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Signature/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Slider/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/MetaWidget/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/editables/Widget/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/utils.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/CustomWidgets/5295b800485bd19f5d000005.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/CustomWidgets/529467003477f3512000001f.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/CustomWidgets/533946093c1ad0c45d000070.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/CustomWidgets/529c8286a75dae5e7f000005.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/CustomWidgets/5297188631357d390700000d.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/CustomWidgets/55486915347ef1086c000017.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/CustomWidgets/52961c97e3e5266570000004.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/CustomWidgets/528ee7cf8d5a5fc76a000004.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/CustomWidgets/5295f8da6396ecd66d00000e.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/CustomWidgets/5290397c57a764425100000b.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/CustomWidgets/573ae96be567f40178000011.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/CustomWidgets/52934dbf3be147110a000030.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/CustomWidgets/5343b614d5f416b42a000004.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/CustomWidgets/5379f8c6d6aa823065000009.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/CustomWidgets/5935688a725d1797050002e7.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/CustomWidgets/5ce54324d21603df40000031.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/CustomWidgets/302518f9f4744e3ae379dd71.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/CustomWidgets/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Widget/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/ClickOutside/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Payments/StyledComponents.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Payments/PaymentView.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/HtmlRenderer/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Payments/Payment/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Paymentmethods/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Submission/Date/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Submission/ID/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Submission/IP/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Submission/Submitter/index.js","webpack://@jotforminc/inbox/../../libs/utils/src/color.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Submission/SubmittedVia/index.js","webpack://@jotforminc/inbox/../../libs/integration-constants/src/types/index.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/icons.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/GoogleDriveDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/BoxDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/DropboxDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/OnedriveDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/EgnyteDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/AirtableDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/QuickbooksDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/MondayDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/GoogleSheetsDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/WebhooksV2Details.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/MicrosoftTeamsDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/CampaignMonitorDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/AsanaDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/TrelloDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/SlackDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/ClickUpDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/ZohoDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/HubspotDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/GoogleCalendarDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/ZoomDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/MailerliteDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/ConstantContactDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/GetResponseDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/MailchimpDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/ActiveCampaignDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/AWeberDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/KeapDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/ZendeskDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/PipedriveDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/SendgridDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/MailsoftlyDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/NotionDetails.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/V1Details.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/partnerDetails/index.ts","webpack://@jotforminc/inbox/../../libs/integration-constants/src/utils/index.tsx","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Submission/Thread/ThreadActor.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Submission/Thread/ThreadAction.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Submission/Thread/ThreadDate.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/Submission/Thread/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/DocumentStatus/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/fields/UserInfo/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/commonRenderers/MissingField.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/commonRenderers/getAnswerFieldComponent.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/components/commonRenderers/makeGetAnswerFieldComponent.js","webpack://@jotforminc/inbox/../../libs/singlesubmissionview/src/constants/index.js","webpack://@jotforminc/inbox/../../libs/singlesubmissionview/src/utils/index.js","webpack://@jotforminc/inbox/../../libs/singlesubmissionview/src/components/ViewItem.js","webpack://@jotforminc/inbox/../../libs/singlesubmissionview/src/components/ViewHeader.js","webpack://@jotforminc/inbox/../../libs/singlesubmissionview/src/components/SingleSubmissionView.js","webpack://@jotforminc/inbox/../../libs/single-submission-buttons/src/FormName.js","webpack://@jotforminc/inbox/../../libs/single-submission-buttons/src/helper.js","webpack://@jotforminc/inbox/../../libs/single-submission-buttons/src/DownloadButton.js","webpack://@jotforminc/inbox/../../libs/single-submission-buttons/src/ViewInInboxButton.js","webpack://@jotforminc/inbox/../../libs/single-submission-buttons/src/CustomName.js","webpack://@jotforminc/inbox/../../libs/single-submission-buttons/src/SingleSubmissionViewWithButton.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/ApprovalOptions.js","webpack://@jotforminc/inbox/../../libs/avatar-groups/src/components/SingleAvatar.js","webpack://@jotforminc/inbox/../../libs/avatar-groups/src/components/SingleAvatarWithDetails.js","webpack://@jotforminc/inbox/../../libs/avatar-groups/src/components/AvatarGroup.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/AvatarGroupWithContact.js","webpack://@jotforminc/inbox/../../libs/right-panel/src/index.tsx","webpack://@jotforminc/inbox/../../libs/collapse/src/index.js","webpack://@jotforminc/inbox/../../libs/signature/src/sc/scSignature.js","webpack://@jotforminc/inbox/../../libs/signature/src/helpers/utils.js","webpack://@jotforminc/inbox/../../libs/signature/src/components/TypingArea.js","webpack://@jotforminc/inbox/../../libs/signature/src/components/ColorSelection.js","webpack://@jotforminc/inbox/../../libs/signature/src/components/FontSelection.js","webpack://@jotforminc/inbox/../../libs/signature/src/components/Button.js","webpack://@jotforminc/inbox/../../libs/signature/src/components/Signature.js","webpack://@jotforminc/inbox/../../libs/signature/src/components/AsyncModalWrapper.js","webpack://@jotforminc/inbox/../../libs/short-date/src/constants/index.js","webpack://@jotforminc/inbox/../../libs/short-date/src/index.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/UserAccount.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/constants/texts.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/Comment.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/Outcome.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/SubmissionThread/scModal.js","webpack://@jotforminc/inbox/../../libs/email-wizards/src/components/Dropdown/index.js","webpack://@jotforminc/inbox/../../libs/email-wizards/src/components/EmailDropdown/index.js","webpack://@jotforminc/inbox/../../libs/utils/src/emailUtils.js","webpack://@jotforminc/inbox/../../libs/search-input/src/index.js","webpack://@jotforminc/inbox/../../libs/form-fields-menu/src/components/SelectionGroup.js","webpack://@jotforminc/inbox/../../libs/form-fields-menu/src/components/ProtectedTag.js","webpack://@jotforminc/inbox/../../libs/form-fields-menu/src/components/EncryptedTag.js","webpack://@jotforminc/inbox/../../libs/form-fields-menu/src/components/Option.js","webpack://@jotforminc/inbox/../../libs/form-fields-menu/src/components/MultipleForms.js","webpack://@jotforminc/inbox/../../libs/form-fields-menu/src/components/SingleForm.js","webpack://@jotforminc/inbox/../../libs/form-fields-menu/src/index.js","webpack://@jotforminc/inbox/../../libs/user-list/src/styles/index.js","webpack://@jotforminc/inbox/../../libs/user-list/src/index.js","webpack://@jotforminc/inbox/../../libs/tag-input/src/utils/index.js","webpack://@jotforminc/inbox/../../libs/tag-input/src/patch/index.js","webpack://@jotforminc/inbox/../../libs/tag-input/src/constants/index.js","webpack://@jotforminc/inbox/../../libs/tag-input/src/index.js","webpack://@jotforminc/inbox/../../libs/single-email-input/src/index.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/IndependentReassign.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/Reassign.new.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/hooks/index.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/constants/propTypes.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/sections/Task.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/containers/TaskSection.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/ActionButton.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/MoreButton.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/AvatarWithApprovalAction.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/HiddenFrame/index.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/DragContainer/index.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/FileUpload/defaults/Text.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/FileUpload/defaults/Form.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/FileUpload/defaults/Wrapper.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/FileUpload/defaults/ErrorText.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/FileUpload/defaults/FileInput.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/FileUpload/defaults/FilePreview.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/FileUpload/defaults/TextWrapper.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/FileUpload/defaults/DragContainer.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/FileUpload/defaults/Thumbnail.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/FileUpload/defaults/LoadingScreen.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/FileUpload/index.js","webpack://@jotforminc/inbox/../../libs/tabs/src/tab-list/components/Wrapper.js","webpack://@jotforminc/inbox/../../libs/tabs/src/tab-list/components/TabListContainer.js","webpack://@jotforminc/inbox/../../libs/tabs/src/tab-list/components/TabButtonContainer.js","webpack://@jotforminc/inbox/../../libs/tabs/src/tab-list/components/TabButton.js","webpack://@jotforminc/inbox/../../libs/tabs/src/tab-list/TabListWithStyles.js","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Textarea/textarea.cva.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Textarea/textarea.types.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Textarea/Textarea.tsx","webpack://@jotforminc/inbox/../../libs/image-upload/src/components/IconSelector.js","webpack://@jotforminc/inbox/../../libs/image-upload/src/components/UploadedImagesPanel.js","webpack://@jotforminc/inbox/../../libs/image-upload/src/components/ImagePreview.js","webpack://@jotforminc/inbox/../../libs/image-upload/src/components/LoadingScreen.js","webpack://@jotforminc/inbox/../../libs/image-upload/src/utils/index.js","webpack://@jotforminc/inbox/../../libs/image-upload/src/actions/index.js","webpack://@jotforminc/inbox/../../libs/image-upload/src/constants/index.js","webpack://@jotforminc/inbox/../../libs/image-upload/src/components/ImageUpload.js","webpack://@jotforminc/inbox/../../libs/emoji-mart/src/components/Picker.js","webpack://@jotforminc/inbox/../../libs/icon-selector/src/components/IconEmojiSelector/index.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/ColorPicker/defaults/Color.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/ColorPicker/defaults/Wrapper.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/ColorPicker/index.js","webpack://@jotforminc/inbox/../../libs/enterprise-components/src/utils/api.ts","webpack://@jotforminc/inbox/../../libs/enterprise-components/src/components/Cover/api.ts","webpack://@jotforminc/inbox/../../libs/enterprise-components/src/utils/index.ts","webpack://@jotforminc/inbox/../../libs/enterprise-components/src/components/Cover/utils.ts","webpack://@jotforminc/inbox/../../libs/enterprise-components/src/components/Cover/ColorRenderer.tsx","webpack://@jotforminc/inbox/../../libs/enterprise-components/src/components/Cover/constants.ts","webpack://@jotforminc/inbox/../../libs/enterprise-components/src/components/Cover/StyledElements.tsx","webpack://@jotforminc/inbox/../../libs/enterprise-components/src/components/Cover/CustomizeTeamAvatar.tsx","webpack://@jotforminc/inbox/../../libs/enterprise-components/src/components/Cover/CustomizeCover.tsx","webpack://@jotforminc/inbox/../../libs/enterprise-components/src/components/Cover/CustomizationButton.tsx","webpack://@jotforminc/inbox/../../libs/emoji-mart/src/components/Emoji.js","webpack://@jotforminc/inbox/../../libs/icon-selector/src/components/EmojiRenderer/index.js","webpack://@jotforminc/inbox/../../libs/enterprise-components/src/components/Image/StyledElements.tsx","webpack://@jotforminc/inbox/../../libs/enterprise-components/src/components/Image/index.tsx","webpack://@jotforminc/inbox/../../libs/enterprise-components/src/components/Image/ImageWithWrapper.tsx","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/TeamImageWithWrapper.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/WorkflowInformationPanel.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/AvatarGroupWithPanel.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/ThreadAvatar.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/WorkflowStatus.js","webpack://@jotforminc/inbox/../../libs/tooltip/src/components/PortalTooltip/PortalTooltip.js","webpack://@jotforminc/inbox/./src/components/GhostButton/index.js","webpack://@jotforminc/inbox/./src/components/PurgeButton/index.js","webpack://@jotforminc/inbox/./src/components/SubmissionHeader/index.js","webpack://@jotforminc/inbox/../../libs/upload-fields/src/components/LazyPreview/LazyPreview.js","webpack://@jotforminc/inbox/../../libs/upload-fields/src/constants/index.js","webpack://@jotforminc/inbox/../../libs/upload-fields/src/components/FileList.js","webpack://@jotforminc/inbox/./src/components/FileUpload/index.js","webpack://@jotforminc/inbox/./src/utils/getAnswerField.js","webpack://@jotforminc/inbox/../../libs/checkbox/src/components/Checkbox.js","webpack://@jotforminc/inbox/../../libs/checkbox/src/components/CheckboxItem.js","webpack://@jotforminc/inbox/./src/components/InlineWrapper/index.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/SubmissionThread/Entry.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/SubmissionThread/SubThread.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/SubmissionThread/hooks.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/SubmissionThread/SubThreadToggle.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/TaskMoreButton.js","webpack://@jotforminc/inbox/../../libs/search-filter/src/components/FilterHoverText.js","webpack://@jotforminc/inbox/../../libs/contact-card/src/constants.js","webpack://@jotforminc/inbox/../../libs/contact-card/src/utils.js","webpack://@jotforminc/inbox/../../libs/contact-card/src/components/ContactAvatar.js","webpack://@jotforminc/inbox/../../libs/contact-card/src/components/QuestionBasedContactCard.js","webpack://@jotforminc/inbox/../../libs/contact-card/src/components/ContactCard.js","webpack://@jotforminc/inbox/../../libs/contact-card/src/components/ContactCardPopover.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/ContactWithApproval.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/SubmissionThread/EntryLayout.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/SubmissionThread/AnswerLayout.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/SubmissionThread/index.js","webpack://@jotforminc/inbox/./src/contexts/Comment.js","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Dialog/DialogContent.tsx","webpack://@jotforminc/inbox/./src/components/NoteEditor/WaitingPermissionDialog.js","webpack://@jotforminc/inbox/./src/components/NoteEditor/index.js","webpack://@jotforminc/inbox/./src/components/AnswerNotes/index.js","webpack://@jotforminc/inbox/./src/components/Answer/index.js","webpack://@jotforminc/inbox/./src/components/LabellessAnswer/index.js","webpack://@jotforminc/inbox/./src/components/SubmissionWidget/index.js","webpack://@jotforminc/inbox/./src/components/ShortDate/index.js","webpack://@jotforminc/inbox/./src/components/Feature/index.js","webpack://@jotforminc/inbox/./src/components/SubmissionListItem/index.js","webpack://@jotforminc/inbox/./src/components/Pill/index.js","webpack://@jotforminc/inbox/./src/components/ContextMenu/index.js","webpack://@jotforminc/inbox/./src/components/ArchiveButton/index.js","webpack://@jotforminc/inbox/./src/components/ReadButton/index.js","webpack://@jotforminc/inbox/./src/components/FavoriteButton/index.js","webpack://@jotforminc/inbox/./src/components/DeleteButton/index.js","webpack://@jotforminc/inbox/./src/hocs/SubmissionEnhancer/index.js","webpack://@jotforminc/inbox/../../libs/search-filter/src/components/FilterButton.js","webpack://@jotforminc/inbox/../../libs/search-filter/src/components/FilterRowFields.js","webpack://@jotforminc/inbox/../../libs/search-filter/src/components/FilterRowOperators.js","webpack://@jotforminc/inbox/../../libs/dropdown/src/GroupOptionRenderer.js","webpack://@jotforminc/inbox/../../libs/dropdown/src/index.js","webpack://@jotforminc/inbox/../../libs/search-filter/src/components/IconRenderer.js","webpack://@jotforminc/inbox/../../libs/search-filter/src/components/FilterRowValue.js","webpack://@jotforminc/inbox/../../libs/search-filter/src/components/FilterRow.js","webpack://@jotforminc/inbox/../../libs/search-filter/src/components/FilterTimeRange.js","webpack://@jotforminc/inbox/../../libs/search-filter/src/components/SearchInRow.js","webpack://@jotforminc/inbox/../../libs/search-filter/src/components/index.js","webpack://@jotforminc/inbox/./src/components/TextInput/index.js","webpack://@jotforminc/inbox/./src/components/AdvanceSearch/index.js","webpack://@jotforminc/inbox/./src/components/RestoreButton/index.js","webpack://@jotforminc/inbox/./src/components/EditButton/index.js","webpack://@jotforminc/inbox/../../libs/feature-toggle/src/components/FeatureToggle.js","webpack://@jotforminc/inbox/../../libs/feature-toggle/src/components/Feature.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/sc/scIndex.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/components/Section.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/helpers/constants.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/helpers/layer.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/helpers/utils.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/helpers/texts.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/helpers/hooks.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/sections/Permission.js","webpack://@jotforminc/inbox/../../libs/date-picker/src/index.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/components/Dropdown.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/sections/LinkExpire.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/sections/LinkSettings.js","webpack://@jotforminc/inbox/../../libs/ep-share-panel/src/components/SsoAccessLegacyBanner/SsoAccessLegacyBanner.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/components/SSOAccess.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/components/CompanyTextBox.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/components/OrganizationAccess.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/components/CompanyAccess.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/sections/AccessSettings.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/sc/scSettings.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/sc/scAssigneeList.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/components/ResourcePicker.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/sections/ResourceSection.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/modals/Settings.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/sections/Header.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/Pillbox/index.js","webpack://@jotforminc/inbox/../../libs/editable-pill/src/index.js","webpack://@jotforminc/inbox/../../libs/email-input/src/components/Pill/index.js","webpack://@jotforminc/inbox/../../libs/email-input/src/utils/index.js","webpack://@jotforminc/inbox/../../libs/email-input/src/styles/index.js","webpack://@jotforminc/inbox/../../libs/email-input/src/index.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/components/AvatarHolder.js","webpack://@jotforminc/inbox/../../libs/dropdown-with-extra-elements/src/components/OptionRenderer.js","webpack://@jotforminc/inbox/../../libs/dropdown-with-extra-elements/src/components/ContainerRenderer.js","webpack://@jotforminc/inbox/../../libs/dropdown-with-extra-elements/src/index.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/components/DropdownWithDetails.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/sc/scRevokeAccess.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/modals/AssignToOrganizationModal.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/sections/Invite.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/sc/scUserList.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/components/UserListItemRenderer.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/components/WarningMessage.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/sections/InviteByAppUserList.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/sections/InviteByAppPrefill.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/components/DropdownButton.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/helpers/FetchAppUsersWithCache.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/sections/InviteByApp.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/modals/RevokeAccess.js","webpack://@jotforminc/inbox/../../libs/schedule-panel/src/components/Dropdown.js","webpack://@jotforminc/inbox/../../libs/schedule-panel/src/scIndex.js","webpack://@jotforminc/inbox/../../libs/schedule-panel/src/components/Toggle.js","webpack://@jotforminc/inbox/../../libs/schedule-panel/src/index.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/modals/RemoveScheduledReminder.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/sc/scScheduleReminder.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/modals/ScheduleReminder.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/modals/ActionRequired.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/components/AssigneeModalControlBar.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/modals/AssigneeResources.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/Assignee.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/AssigneeRow.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/sc/scSharedWithNoOne.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/modals/AssigneeList.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/utils/renderModal.js","webpack://@jotforminc/inbox/../../libs/ep-share-panel/src/components/CustomDomainTooltip/CustomDomainTooltipAlt.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/components/CollaborationModal/Renderers.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/components/CollaborationModal/CollaborationModal.js","webpack://@jotforminc/inbox/../../libs/ep-share-panel/src/components/CustomDomainTooltip/WhiteLabelingModal.js","webpack://@jotforminc/inbox/../../libs/ep-share-panel/src/components/CustomDomainTooltip/FormWhiteLabelingModal.js","webpack://@jotforminc/inbox/../../libs/ep-share-panel/src/components/CustomDomainTooltip/FormCustomDomainTooltip.js","webpack://@jotforminc/inbox/../../libs/ep-share-panel/src/testers/CustomDomainTooltipAbTester.js","webpack://@jotforminc/inbox/../../libs/utils/src/mobileUtils.js","webpack://@jotforminc/inbox/../../libs/styled-copy-button/src/index.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/sc/scGenerateNewLink.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/modals/GenerateNewLink.js","webpack://@jotforminc/inbox/../../libs/modals/src/components/UserSlugModal/components/ModalHeader.js","webpack://@jotforminc/inbox/../../libs/modals/src/components/UserSlugModal/components/ModalFooter.js","webpack://@jotforminc/inbox/../../libs/modals/src/components/UserSlugModal/components/ModalDialog.js","webpack://@jotforminc/inbox/../../libs/modals/src/components/UserSlugModal/components/ModalContent.js","webpack://@jotforminc/inbox/../../libs/modals/src/components/UserSlugModal/components/FormModal.js","webpack://@jotforminc/inbox/../../libs/modals/src/components/UserSlugModal/components/ThankYouModal.js","webpack://@jotforminc/inbox/../../libs/modals/src/components/UserSlugModal/components/UpdateModal.js","webpack://@jotforminc/inbox/../../libs/modals/src/components/UserSlugModal/index.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/components/ShareLinkRenderer.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/components/SettingsButton.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/sc/scAccessType.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/components/AccessType.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/sections/Link.js","webpack://@jotforminc/inbox/../../libs/ep-share-panel/src/components/AssignToOrganizationModal.js","webpack://@jotforminc/inbox/../../libs/ep-share-panel/src/testers/AssignToEveryoneAbTester.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/modals/RevokeFromOrganizationModal.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/sections/AssignToOrganization.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/sc/scInvitePredefinedUsersSection.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/containers/sections/InvitePredefinedUsersSection.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/helpers/apps.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/components/index.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/components/SharePanelTabs.js","webpack://@jotforminc/inbox/../../libs/share-panel/src/components/ShareButton.js","webpack://@jotforminc/inbox/./src/components/SubmissionShareButton/index.js","webpack://@jotforminc/inbox/./src/components/PDFButton/index.js","webpack://@jotforminc/inbox/./src/containers/DownloadAll/index.js","webpack://@jotforminc/inbox/./src/containers/SearchPanel/SearchRightPanel.js","webpack://@jotforminc/inbox/./src/containers/SearchPanel/index.js","webpack://@jotforminc/inbox/./src/components/Dropdown/index.js","webpack://@jotforminc/inbox/./src/components/SettingsGeneral/index.js","webpack://@jotforminc/inbox/./src/components/Item/index.js","webpack://@jotforminc/inbox/./src/components/ItemsListItems/index.js","webpack://@jotforminc/inbox/./src/components/ItemList/index.js","webpack://@jotforminc/inbox/./src/components/SettingsFields/index.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/SubmissionThread/ActionLayout.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/ErrorAction.js","webpack://@jotforminc/inbox/../../libs/limit-dialog/src/utils/abtests.js","webpack://@jotforminc/inbox/../../libs/limit-dialog/src/components/openFormLimitDialog.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/StartFlowAction.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/TakeOver.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/CustomMoreActions.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/MultipleApprovalTakeOver.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/containers/WorkflowActions.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/constants/statuses.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/sections/Approval.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/containers/Approval.js","webpack://@jotforminc/inbox/./src/containers/SubmissionApproval/index.js","webpack://@jotforminc/inbox/./src/components/SubmissionAnswer/index.js","webpack://@jotforminc/inbox/./src/components/Submission/index.js","webpack://@jotforminc/inbox/./src/components/NoAnswer/index.js","webpack://@jotforminc/inbox/./src/components/SettingsPrint/index.js","webpack://@jotforminc/inbox/./src/containers/SettingsPanel/index.js","webpack://@jotforminc/inbox/../../libs/apploaders/src/Inbox/index.js","webpack://@jotforminc/inbox/./src/containers/Form/index.js","webpack://@jotforminc/inbox/../../libs/agent-utils/src/utils/shadow.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/MessageList.js","webpack://@jotforminc/inbox/../../libs/agent-utils/src/utils/text.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/Avatar.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/ChoiceButton.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/hooks/useStep.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/ChoiceList.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/YesNo.js","webpack://@jotforminc/inbox/../../libs/constants/src/specialOptions/index.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/MultipleChoice.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/ImageChoice.js","webpack://@jotforminc/inbox/../../libs/agent-utils/src/utils/matrixUtils.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/MatrixSlider.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/MatrixYesNo.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/Matrix.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/icons/StarIcon.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/constants/index.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/StarRating.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/ScaleRating.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/Submit.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/icons/SignatureIcon.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/Signature.js","webpack://@jotforminc/inbox/../../libs/agent-utils/src/utils/fileOperation.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/Upload.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/widgets/ImageUploadPreview.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/widgets/PDFEmbedder.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/widgets/TakePhoto.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/widgets/TermsAndCondition.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/Appointment.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/Image.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/HTMLTyping.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/Paragraph.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/Review.js","webpack://@jotforminc/inbox/../../libs/agent-utils/src/utils/productListUtils.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/ProductList.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/Generic.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/ChatActionView.js","webpack://@jotforminc/inbox/../../libs/magnet/src/layouts/Flex/FlexItem.tsx","webpack://@jotforminc/inbox/../../libs/drawer/src/utils/index.js","webpack://@jotforminc/inbox/../../libs/drawer/src/components/MenuComponents/MenuItemSubheader.js","webpack://@jotforminc/inbox/../../libs/drawer/src/components/MenuComponents/MenuItemButton.js","webpack://@jotforminc/inbox/../../libs/drawer/src/components/MenuComponents/MenuItemIcon.js","webpack://@jotforminc/inbox/../../libs/drawer/src/components/MenuComponents/MenuItemTitle.js","webpack://@jotforminc/inbox/../../libs/drawer/src/components/MenuComponents/MenuItemBadge.js","webpack://@jotforminc/inbox/../../libs/drawer/src/components/MenuComponents/MenuItemShortcut.js","webpack://@jotforminc/inbox/../../libs/drawer/src/components/MenuComponents/MenuItem.js","webpack://@jotforminc/inbox/../../libs/drawer/src/components/MenuComponents/MenuList.js","webpack://@jotforminc/inbox/../../libs/drawer/src/components/MenuComponents/MenuDivider.js","webpack://@jotforminc/inbox/../../libs/context-menu/src/components/ContextMenu.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/utils/index.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/GiveFeedback.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/hooks/index.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/utils/stepUtils.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/DefaultErrorBoundaryFallback.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/ErrorBoundary.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/MessageView.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/FormHeader.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/History.js","webpack://@jotforminc/inbox/./src/components/TetheredMenu/index.js","webpack://@jotforminc/inbox/./src/components/Tags/colors.js","webpack://@jotforminc/inbox/./src/components/Tags/index.js","webpack://@jotforminc/inbox/./src/components/SubmissionHeaderTitle/index.js","webpack://@jotforminc/inbox/./src/components/UndoToast/index.js","webpack://@jotforminc/inbox/../../libs/upload-fields/src/api/index.js","webpack://@jotforminc/inbox/../../libs/upload-fields/src/components/FileUploadField.js","webpack://@jotforminc/inbox/./src/containers/SubmissionSign/SignFileUploadFields.js","webpack://@jotforminc/inbox/./src/containers/SubmissionView/index.js","webpack://@jotforminc/inbox/../../libs/workflow-components/src/components/WorkflowButton.js","webpack://@jotforminc/inbox/./src/components/SubmissionDate/index.js","webpack://@jotforminc/inbox/../../libs/header-components/src/components/PreviewToggle/index.js","webpack://@jotforminc/inbox/../../libs/message/src/components/BrandingTooltip/index.js","webpack://@jotforminc/inbox/../../libs/message/src/utils/layer.js","webpack://@jotforminc/inbox/../../libs/message/src/utils/sendEmailAPI.js","webpack://@jotforminc/inbox/../../libs/email-wizards/src/components/GroupedDropdown/CustomBadge.js","webpack://@jotforminc/inbox/../../libs/email-wizards/src/assets/google.js","webpack://@jotforminc/inbox/../../libs/email-wizards/src/assets/microsoft.js","webpack://@jotforminc/inbox/../../libs/email-wizards/src/components/GroupedDropdown/ProviderBadge.js","webpack://@jotforminc/inbox/../../libs/email-wizards/src/helpers/constants.js","webpack://@jotforminc/inbox/../../libs/email-wizards/src/components/GroupedDropdown/DropdownItem.js","webpack://@jotforminc/inbox/../../libs/email-wizards/src/components/GroupedDropdown/DropdownList.js","webpack://@jotforminc/inbox/../../libs/email-wizards/src/components/GroupedDropdown/index.js","webpack://@jotforminc/inbox/../../libs/message/src/utils/addSMTPAccount.js","webpack://@jotforminc/inbox/../../libs/message/src/fields/Dropdown/index.js","webpack://@jotforminc/inbox/../../libs/message/src/fields/ValidatedInput/index.js","webpack://@jotforminc/inbox/../../libs/message/src/utils/validatePort.js","webpack://@jotforminc/inbox/../../libs/message/src/components/NewSenderEmail/CustomSender/index.js","webpack://@jotforminc/inbox/../../libs/message/src/components/NewSenderEmail/index.js","webpack://@jotforminc/inbox/../../libs/message/src/fields/TagsInput/index.js","webpack://@jotforminc/inbox/../../libs/message/src/fields/MixedTagInput/index.js","webpack://@jotforminc/inbox/../../libs/message/src/components/DelayedComponent/index.js","webpack://@jotforminc/inbox/../../libs/message/src/components/Popover/context.js","webpack://@jotforminc/inbox/../../libs/message/src/components/Popover/container.js","webpack://@jotforminc/inbox/../../libs/message/src/components/Popover/popover.js","webpack://@jotforminc/inbox/../../libs/message/src/components/MessageFooter/index.js","webpack://@jotforminc/inbox/../../libs/message/src/components/index.js","webpack://@jotforminc/inbox/../../libs/message/src/templates/RequestMoreInfo.js","webpack://@jotforminc/inbox/../../libs/message/src/templates/index.js","webpack://@jotforminc/inbox/./src/components/RequestMoreEmail/index.js","webpack://@jotforminc/inbox/./src/components/MailPreContent/index.js","webpack://@jotforminc/inbox/./src/components/Mail/index.js","webpack://@jotforminc/inbox/./src/components/ReplyButton/index.js","webpack://@jotforminc/inbox/./src/components/ForwardButton/index.js","webpack://@jotforminc/inbox/./src/components/PDFEditorButton/index.js","webpack://@jotforminc/inbox/./src/components/EncryptionButton/index.js","webpack://@jotforminc/inbox/./src/components/DownloadButton/index.js","webpack://@jotforminc/inbox/./src/components/SettingsButton/index.js","webpack://@jotforminc/inbox/./src/components/RequestAccessButton/index.js","webpack://@jotforminc/inbox/./src/containers/SubmissionToolbar/index.js","webpack://@jotforminc/inbox/../../libs/loading/src/components/Spinner.js","webpack://@jotforminc/inbox/./src/containers/SubmissionSign/CancelModal.js","webpack://@jotforminc/inbox/./src/containers/SubmissionSign/ReminderModal.js","webpack://@jotforminc/inbox/./src/containers/SubmissionSign/Header.js","webpack://@jotforminc/inbox/./src/containers/SubmissionViewHeader/index.js","webpack://@jotforminc/inbox/./src/layout/Submission/index.js","webpack://@jotforminc/inbox/./src/containers/SubmissionContainer/index.js","webpack://@jotforminc/inbox/./src/components/Comment/index.js","webpack://@jotforminc/inbox/./src/components/PrintSettings/index.js","webpack://@jotforminc/inbox/./src/components/PrintButton/index.js","webpack://@jotforminc/inbox/./src/components/SearchButton/index.js","webpack://@jotforminc/inbox/./src/containers/Toolbar/index.js","webpack://@jotforminc/inbox/./src/contexts/TagSuggestions.js","webpack://@jotforminc/inbox/./src/components/SubmissionTags/index.js","webpack://@jotforminc/inbox/../../libs/limit-dialog/src/components/PricingTable/PricingTableRenderer.js","webpack://@jotforminc/inbox/./src/components/CampaignComponents/CampaignSubmissionContent/contents/SummerSaleContent.js","webpack://@jotforminc/inbox/./src/components/CampaignComponents/CampaignSubmissionContent/contents/BlackFridayContent.js","webpack://@jotforminc/inbox/./src/components/CampaignComponents/CampaignSubmissionContent/contents/EoyContent.js","webpack://@jotforminc/inbox/./src/components/CampaignComponents/CampaignSubmissionContent/contents/SpringSaleContent.js","webpack://@jotforminc/inbox/./src/components/CampaignComponents/CampaignSubmissionContent/contents/SilverOneContent.js","webpack://@jotforminc/inbox/./src/components/CampaignComponents/CampaignSubmissionContent/index.js","webpack://@jotforminc/inbox/./src/containers/ContentPanel/index.js","webpack://@jotforminc/inbox/./src/containers/InboxNavigation/index.js","webpack://@jotforminc/inbox/./src/hocs/Breakpoints/index.js","webpack://@jotforminc/inbox/./src/containers/RegularInbox/index.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/utils/utils.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/FormPicker/FormItem/styled.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/FormPicker/helpers/propTypes.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/FormPicker/FormItem/index.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/PortalPicker/defaults/scPortalOption.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/FormPicker/helpers/defaultTheme.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/PortalPicker/defaults/PortalOption.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/FormPicker/CheckBox.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/ResourcePicker/items/Sheet/index.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/ResourcePicker/items/Reports/index.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/ResourcePicker/items/Approval/index.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/ResourcePicker/items/Sign/styles.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/ResourcePicker/items/Sign/index.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/ResourcePicker/items/Operation/index.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/ResourcePicker/items/Board/index.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/ResourcePicker/constants.js","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconAppMyTeams.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/assets/svg/iconAppMyWorkspace.svg","webpack://@jotforminc/inbox/../../libs/header-components/src/components/Navigation/appIcons.js","webpack://@jotforminc/inbox/../../libs/header-components/src/utils/api.js","webpack://@jotforminc/inbox/../../libs/header-components/src/constants/index.js","webpack://@jotforminc/inbox/../../libs/header-components/src/utils/utils.js","webpack://@jotforminc/inbox/../../libs/empty-list/src/components/EmptyListBase.js","webpack://@jotforminc/inbox/../../libs/empty-list/src/components/EmptyList.js","webpack://@jotforminc/inbox/../../libs/empty-list/src/components/NotFoundList.js","webpack://@jotforminc/inbox/../../libs/smart-list/src/components/SmartList/helpers/defaultTheme.js","webpack://@jotforminc/inbox/../../libs/smart-list/src/components/SmartList/ControlBar/scControlBar.js","webpack://@jotforminc/inbox/../../libs/smart-list/src/components/SmartList/ControlBar/CheckBox.js","webpack://@jotforminc/inbox/../../libs/smart-list/src/components/SmartList/ControlBar/SearchInput.js","webpack://@jotforminc/inbox/../../libs/smart-list/src/components/SmartList/utils.js","webpack://@jotforminc/inbox/../../libs/smart-list/src/components/SmartList/ControlBar/Dropdown.js","webpack://@jotforminc/inbox/../../libs/smart-list/src/components/SmartList/ControlBar/SortMenu.js","webpack://@jotforminc/inbox/../../libs/smart-list/src/components/SmartList/ControlBar/FilterForm.js","webpack://@jotforminc/inbox/../../libs/smart-list/src/components/SmartList/ControlBar/index.js","webpack://@jotforminc/inbox/../../libs/smart-list/src/components/SmartList/FormLoadingSkeleton.js","webpack://@jotforminc/inbox/../../libs/smart-list/src/components/SmartList/hooks.js","webpack://@jotforminc/inbox/../../libs/smart-list/src/components/SmartList/index.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/FormPicker/FormList/index.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/FormPicker/ConditionalModal.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/ResourcePicker/index.js","webpack://@jotforminc/inbox/../../libs/activity-logger/src/utils/ActivityLogger.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/HOCs/OnClickOutside/dom-helpers.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/HOCs/OnClickOutside/detect-passive-events.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/HOCs/OnClickOutside/uid.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/FormUserAccountBox.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/Content.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/AccountBox.js","webpack://@jotforminc/inbox/../../libs/enterprise-components/src/components/TeamBadge/index.tsx","webpack://@jotforminc/inbox/../../libs/picker-modal/src/styles/ScRB.js","webpack://@jotforminc/inbox/../../libs/picker-modal/src/components/PickerModal.js","webpack://@jotforminc/inbox/../../libs/header-components/src/components/Navigation/ScPickerModal.js","webpack://@jotforminc/inbox/../../libs/header-components/src/components/Navigation/ScButton.js","webpack://@jotforminc/inbox/../../libs/header-components/src/components/Navigation/ResourcePickerModal.js","webpack://@jotforminc/inbox/../../libs/header-components/src/components/Navigation/NavigationItemBadge.js","webpack://@jotforminc/inbox/../../libs/header-components/src/components/Navigation/NavigationItem.js","webpack://@jotforminc/inbox/../../libs/enterprise-components/src/components/CreateNewTeamModal/CreateTeamButton.tsx","webpack://@jotforminc/inbox/../../libs/header-components/src/components/Navigation/TeamSection.js","webpack://@jotforminc/inbox/../../libs/header-components/src/components/Navigation/index.js","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Badge/badge.cva.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Badge/badge.types.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Badge/Badge.tsx","webpack://@jotforminc/inbox/../../libs/header-components/src/components/Navigation/NavigationTrigger.js","webpack://@jotforminc/inbox/../../libs/header-components/src/components/Navigation/NavigationWrapper.js","webpack://@jotforminc/inbox/../../libs/header-components/src/components/Logo/index.js","webpack://@jotforminc/inbox/../../libs/editable/src/components/Editable.js","webpack://@jotforminc/inbox/../../libs/header-components/src/components/Title/index.js","webpack://@jotforminc/inbox/../../libs/header-components/src/components/SubTitle/index.js","webpack://@jotforminc/inbox/../../libs/header-components/src/components/ProductHeader/IconGovernment.js","webpack://@jotforminc/inbox/../../libs/header-components/src/components/ProductHeader/HeaderBadge.js","webpack://@jotforminc/inbox/../../libs/header-components/src/components/ProductHeader/index.js","webpack://@jotforminc/inbox/../../libs/header-components/src/components/Header/index.js","webpack://@jotforminc/inbox/../../libs/tabs/src/tab-buttons/components/TabItem.js","webpack://@jotforminc/inbox/../../libs/tabs/src/tab-buttons/components/TabItemInfo.js","webpack://@jotforminc/inbox/../../libs/tabs/src/tab-buttons/components/TabList.js","webpack://@jotforminc/inbox/../../libs/tabs/src/tab-buttons/components/index.js","webpack://@jotforminc/inbox/./src/containers/FormMenu/index.js","webpack://@jotforminc/inbox/./src/components/HeaderTabs/TabWarningDialog.js","webpack://@jotforminc/inbox/./src/components/HeaderTabs/index.js","webpack://@jotforminc/inbox/./src/components/ShareButton/index.js","webpack://@jotforminc/inbox/./src/components/AllSubmissionsButton/index.js","webpack://@jotforminc/inbox/./src/components/RequestAccessDropdown/index.js","webpack://@jotforminc/inbox/./src/containers/HeaderWrapper/index.js","webpack://@jotforminc/inbox/./src/components/SearchPanelButton/index.js","webpack://@jotforminc/inbox/./src/components/ErrorPage/index.js","webpack://@jotforminc/inbox/./src/components/PrintViewCurtain/index.js","webpack://@jotforminc/inbox/../../libs/header-components/src/components/FormList/index.js","webpack://@jotforminc/inbox/./src/containers/FormPicker/index.js","webpack://@jotforminc/inbox/./src/contexts/Assistant/constants.js","webpack://@jotforminc/inbox/./src/contexts/Assistant/index.js","webpack://@jotforminc/inbox/../../libs/common/src/components/AutoDeleteSubmissionsInfoModal/AutoDeleteSubmissionsInfoModal.js","webpack://@jotforminc/inbox/../../libs/common/src/components/AutoDeleteSubmissionsInfoModal/index.js","webpack://@jotforminc/inbox/./src/components/IntroModals/AutoDeleteSubmissionsInfoModal.js","webpack://@jotforminc/inbox/./src/containers/IntroModalsContainer/index.js","webpack://@jotforminc/inbox/./src/containers/App/index.js","webpack://@jotforminc/inbox/./src/containers/AppWrapper/index.js","webpack://@jotforminc/inbox/./src/containers/SingleSubmission/index.js","webpack://@jotforminc/inbox/./src/containers/SingleSubmissionEmpty/index.js","webpack://@jotforminc/inbox/./src/history.js","webpack://@jotforminc/inbox/./src/containers/Feedback/index.js","webpack://@jotforminc/inbox/./src/containers/LiteModeInbox/index.js","webpack://@jotforminc/inbox/./src/components/FeatureToggles/index.js","webpack://@jotforminc/inbox/./src/components/LazyPreview/LazyPreview.js","webpack://@jotforminc/inbox/./src/components/NoteEntry/index.js","webpack://@jotforminc/inbox/./src/containers/MessageContainer/index.js","webpack://@jotforminc/inbox/./src/containers/ReplyEmailContainer/index.js","webpack://@jotforminc/inbox/./src/containers/InboxRoot/index.js","webpack://@jotforminc/inbox/./src/root.js","webpack://@jotforminc/inbox/./src/selectors/index.js","webpack://@jotforminc/inbox/./src/utils/EventQueue.js","webpack://@jotforminc/inbox/./src/utils/SentryRecorder.js","webpack://@jotforminc/inbox/./src/utils/index.js","webpack://@jotforminc/inbox/./src/vendor/pampy.js","webpack://@jotforminc/inbox/../../libs/abtest-manager/src/utils/utils.js","webpack://@jotforminc/inbox/../../libs/abtest-manager/src/utils/ABTestVariantCache.js","webpack://@jotforminc/inbox/../../libs/abtest-manager/src/utils/layer.js","webpack://@jotforminc/inbox/../../libs/abtest-manager/src/utils/ABTestManager.js","webpack://@jotforminc/inbox/../../libs/abtest-manager/src/utils/ActionManager.js","webpack://@jotforminc/inbox/../../../../src/icons/editor/print-xmark.svg","webpack://@jotforminc/inbox/../../libs/ep-account-box/src/assets/iconEnterprise.svg","webpack://@jotforminc/inbox/../../libs/ep-account-box/src/assets/graph.svg","webpack://@jotforminc/inbox/../../libs/ep-account-box/src/assets/enterpriseRocketMini.svg","webpack://@jotforminc/inbox/../../libs/ep-account-box/src/assets/enterpriseRocket.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/arrow-right.svg","webpack://@jotforminc/inbox/../../libs/limit-assets/src/components/UI/Button.js","webpack://@jotforminc/inbox/../../libs/limit-assets/src/constants/texts.js","webpack://@jotforminc/inbox/../../libs/limit-assets/src/api/index.js","webpack://@jotforminc/inbox/../../libs/limit-assets/src/constants/index.js","webpack://@jotforminc/inbox/../../libs/limit-assets/src/utils/index.js","webpack://@jotforminc/inbox/../../libs/limit-assets/src/components/LimitEstimationWarning/index.js","webpack://@jotforminc/inbox/../../libs/limit-assets/src/components/AccountBoxLimitWarnings/index.js","webpack://@jotforminc/inbox/../../libs/account-box/src/utils/utils.js","webpack://@jotforminc/inbox/../../libs/account-box/src/constants/tracking.js","webpack://@jotforminc/inbox/../../libs/ep-account-box/src/components/LimitBanner/LimitBanner.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/AccountBoxStandalone/EnterpriseInlineLimitAlert.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/AccountBoxStandalone/InlineLimitAlert.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/AccountBoxStandalone/AlertRenderer.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/AccountBoxStandalone/InlineLimitAlertWithTrackings.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/AccountBoxStandalone/InvoiceWarning.js","webpack://@jotforminc/inbox/../../libs/ep-account-box/src/components/AdminConsoleDarkModal/Renderers.js","webpack://@jotforminc/inbox/../../libs/ep-account-box/src/components/AdminConsoleDarkModal/AdminConsoleDarkModal.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/constants/adminConsoleDescriptiveSliderItems.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/hooks/useSlider.js","webpack://@jotforminc/inbox/../../libs/ep-account-box/src/components/AbTest/AdminConsoleDescriptiveSliderModal/Renderers.js","webpack://@jotforminc/inbox/../../libs/ep-account-box/src/components/AbTest/AdminConsoleDescriptiveSliderModal/Navigation.js","webpack://@jotforminc/inbox/../../libs/ep-account-box/src/components/AbTest/AdminConsoleDescriptiveSliderModal/Slide.js","webpack://@jotforminc/inbox/../../libs/ep-account-box/src/components/AbTest/AdminConsoleDescriptiveSliderModal/AdminConsoleDescriptiveSliderModal.js","webpack://@jotforminc/inbox/../../libs/ep-account-box/src/components/AdminConsolePromotionButton/AdminConsolePromotionButton.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/AccountBoxStandalone/MenuItems.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/AccountBoxStandalone/UploadUsageInfo.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/AccountBoxStandalone/UsageInfo.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/AccountBoxStandalone/Limit.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/AccountBoxStandalone/SaveBagde.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/AccountBoxStandalone/UpgradeButton.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/AccountBoxStandalone/Limits.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/AccountBoxStandalone/Header.js","webpack://@jotforminc/inbox/../../libs/account-box/src/components/AccountBoxStandalone/AccountBoxStandalone.js","webpack://@jotforminc/inbox/../../libs/account-box/src/constants/constants.js","webpack://@jotforminc/inbox/../../libs/account-box/src/constants/texts.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/Inline.js","webpack://@jotforminc/inbox/../../libs/agent-components/src/components/questions/Widget.js","webpack://@jotforminc/inbox/../../libs/agent-utils/src/utils/fieldValidation.js","webpack://@jotforminc/inbox/../../libs/agent-utils/src/utils/fitb.js","webpack://@jotforminc/inbox/../../libs/agent-utils/src/utils/index.js","webpack://@jotforminc/inbox/../../libs/agent-utils/src/utils/replaceTags.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/constants/index.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/utils/environment.js","webpack://@jotforminc/inbox/../../libs/answer-fields/src/utils/index.js","webpack://@jotforminc/inbox/../../libs/apploaders/src/Container/index.js","webpack://@jotforminc/inbox/../../libs/button-field/src/assets/svg/iconDropdownArrow.svg","webpack://@jotforminc/inbox/../../libs/button-field/src/utils/index.js","webpack://@jotforminc/inbox/../../libs/button-field/src/components/ButtonField.js","webpack://@jotforminc/inbox/../../libs/common-button/src/components/Button.js","webpack://@jotforminc/inbox/../../libs/constants/src/aiAgent/index.js","webpack://@jotforminc/inbox/../../libs/constants/src/countries/index.js","webpack://@jotforminc/inbox/../../libs/constants/src/days/index.js","webpack://@jotforminc/inbox/../../libs/constants/src/genders/index.js","webpack://@jotforminc/inbox/../../libs/constants/src/initiators/index.js","webpack://@jotforminc/inbox/../../libs/constants/src/months/index.js","webpack://@jotforminc/inbox/../../libs/constants/src/propTypes/index.js","webpack://@jotforminc/inbox/../../libs/constants/src/questions/index.js","webpack://@jotforminc/inbox/../../libs/constants/src/states/index.js","webpack://@jotforminc/inbox/../../libs/constants/src/texts/index.js","webpack://@jotforminc/inbox/../../libs/constants/src/time/index.js","webpack://@jotforminc/inbox/../../libs/constants/src/widgets/index.js","webpack://@jotforminc/inbox/../../../../src/icons/general/link-diagonal-broken.svg","webpack://@jotforminc/inbox/../../libs/dialog/src/assets/svg/iconHipaaWarning.svg","webpack://@jotforminc/inbox/../../libs/dialog/src/components/Dialog.js","webpack://@jotforminc/inbox/../../libs/enterprise-utils/src/helpers.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/api/index.js","webpack://@jotforminc/inbox/../../../../src/icons/communication/message-ellipsis-pencil-filled.svg","webpack://@jotforminc/inbox/../../libs/ep-utils/src/hooks/useHubspotTracker.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/components/FeedbackForm.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/components/PrefilledLeadFormAside.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/constants/assetIdentifier/index.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/constants/assetIdentifier/abTest.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/constants/assetIdentifier/campaign.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/constants/assetIdentifier/product.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/constants/assetIdentifier/automation.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/constants/assetIdentifier/webinar.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/constants/constants.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/constants/gaAdFormTrackingItems .js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/constants/gaFormTrackingItems.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/constants/leadFormMap.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/constants/propTypes.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/constants/sdrSources.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/constants/texts.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/constants/urls.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/utils/googleAnalyticsTracking.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/constants/leadFormModifiers.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/utils/prefilledFormUtils.js","webpack://@jotforminc/inbox/../../libs/ep-utils/src/utils/utils.js","webpack://@jotforminc/inbox/../../libs/form-common/src/constants.js","webpack://@jotforminc/inbox/../../libs/form-common/src/utils.js","webpack://@jotforminc/inbox/../../libs/form-common/src/appointment.js","webpack://@jotforminc/inbox/../../libs/form-common/src/components/FormLogo.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Range.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Rating.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Ratingv2.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Separator.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Slider.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Spinner.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Textarea.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Textbox.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Widget.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/BaseInput.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/QuestionProps.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/SubLabel.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/Utils.js","webpack://@jotforminc/inbox/../../../../src/icons/editor/list-check.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/circle-lg.svg","webpack://@jotforminc/inbox/../../../../src/logos/payment/afterpay-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/payment/afterpay-logomark-dark.svg","webpack://@jotforminc/inbox/../../../../src/logos/payment/square-ach-logomark-dark.svg","webpack://@jotforminc/inbox/../../../../src/logos/payment/cashapp-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/payment/applepay-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/logos/payment/googlepay-logomark-color.svg","webpack://@jotforminc/inbox/../../../../src/icons/users/circle-user-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/input-text-short.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/dropdown-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/single-selection-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/time-date/clock-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/plus-circle-filled.svg","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Address.js","webpack://@jotforminc/inbox/../../libs/payment-constants/src/unsupportedDecimalCurrencies.ts","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/FormatPrice.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/MakeProductText.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/PaymentUtils.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/ImageOverlay.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/MultiSelectDropdown.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/PaymentDropdown.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/Payment/WarningMessage.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/ProductContainer.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/PaymentAPMList.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/PaymentCreditCardAndAddress.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Authnet.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Autocomp.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Autoincrement.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Appointment.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Birthdate.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Bluepay.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Bluesnap.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Braintree.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/BaseButton.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Pagebreak.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Button.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Calculation.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/JotCaptcha.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/ReCaptcha.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/HCaptcha.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Captcha.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Cardconnect.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Chargify.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/OptionsBase.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Checkbox.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Clear.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Clickbank.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Collapse.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Timev2.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Datetime.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Dropdown.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Dwolla.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Email.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Echeck.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Eway.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Firstdata.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/PaypalInvoicing.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Payu.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/PayuMoney.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Pagseguro.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Moneris.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/MollieApmLists.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Mollie.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/FilepickerIO.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/IconSVG.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Fileuploadv2.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Fileupload.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Footer.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Fullname.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Geolocation.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Gocardless.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Googleco.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Grading.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Head.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Helper.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Hidden.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/Link.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/DivWrapper.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Image.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Inline.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Location.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Matrix.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Number.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Onebip.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Passwordbox.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Payjunction.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Payment.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Paymentwall.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Sensepass.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Paypal.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Paypalexpress.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/PaymentTypeContainer.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Paypalpro.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Paypalcomplete.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Cybersource.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/PaypalMessages.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/PaypalSPBButtons.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/PaypalSPB.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Paysafe.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Iyzico.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Phone.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Radio.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Scalev2.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Scale.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Screenshot.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Signature.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Sofort.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Skrill.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Square.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Stripe.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/StripeCheckout.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/StripeACH.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/StripeACHManual.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Payfast.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Text.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Time.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/2co.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Wepay.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Worldpay.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Worldpayus.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Divider.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Mixed.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Imagechoice.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/helpers/PaypalCommercePlatform.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/Paymentmethods.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/fields/PortalPayment.js","webpack://@jotforminc/inbox/../../libs/form-fields/src/index.js","webpack://@jotforminc/inbox/../../../src/components/GrowthAssetManager.js","webpack://@jotforminc/inbox/../../../src/components/GrowthAssetRenderer.js","webpack://@jotforminc/inbox/../../../src/context/AssetManagerContext.js","webpack://@jotforminc/inbox/../../../src/utils/namings.js","webpack://@jotforminc/inbox/../../../../../src/components/assets/assetList/_46__46__47__46__46__47_assets_47_campaigns_47__42__42__47__42__46_js","webpack://@jotforminc/inbox/../../../../../src/components/assets/assetList/_46__46__47__46__46__47_assets_47_promotions_47__42__42__47__42__46_js","webpack://@jotforminc/inbox/../../../../../src/components/assets/assetList/_46__46__47__46__46__47_assets_47_launches_47__42__42__47__42__46_js","webpack://@jotforminc/inbox/../../../../../src/components/assets/assetList/_46__46__47__46__46__47_assets_47_announcements_47__42__42__47__42__46_js","webpack://@jotforminc/inbox/../../../src/utils/campaign.js","webpack://@jotforminc/inbox/../../libs/hooks/src/useResize.js","webpack://@jotforminc/inbox/../../libs/hooks/src/index.js","webpack://@jotforminc/inbox/../../libs/icon-selector/src/components/SVGIcon/index.js","webpack://@jotforminc/inbox/../../libs/limit-dialog/src/constants/index.js","webpack://@jotforminc/inbox/../../libs/limit-dialog/src/constants/texts.js","webpack://@jotforminc/inbox/../../libs/limit-dialog/src/api/index.js","webpack://@jotforminc/inbox/../../libs/limit-dialog/src/utils/index.js","webpack://@jotforminc/inbox/../../libs/loading/src/components/Loading.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/assets/close.svg","webpack://@jotforminc/inbox/../../libs/login-flow/src/temporary-duplicate/assets/svg/icon_fb.svg","webpack://@jotforminc/inbox/../../libs/login-flow/src/temporary-duplicate/assets/svg/icon_gl.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/check-sm.svg","webpack://@jotforminc/inbox/../../libs/login-flow/src/assets/icon_ms.svg","webpack://@jotforminc/inbox/../../libs/login-flow/src/temporary-duplicate/assets/svg/icon_em.svg","webpack://@jotforminc/inbox/../../libs/login-flow/src/assets/icon_gl_36.svg","webpack://@jotforminc/inbox/../../libs/login-flow/src/assets/icon_fb_36.svg","webpack://@jotforminc/inbox/../../libs/login-flow/src/temporary-duplicate/assets/svg/icon_apple_white.svg","webpack://@jotforminc/inbox/../../libs/login-flow/src/assets/icon_ms_36.svg","webpack://@jotforminc/inbox/../../libs/login-flow/src/assets/icon_ap_36.svg","webpack://@jotforminc/inbox/../../libs/login-flow/src/temporary-duplicate/assets/svg/icon_back3.svg","webpack://@jotforminc/inbox/../../libs/login-flow/src/temporary-duplicate/assets/svg/icon_back.svg","webpack://@jotforminc/inbox/../../libs/login-flow/src/assets/idp-icons/auth0-logo-icon.svg","webpack://@jotforminc/inbox/../../libs/login-flow/src/assets/idp-icons/azure-logo-icon.svg","webpack://@jotforminc/inbox/../../libs/login-flow/src/assets/idp-icons/google-logo-icon.svg","webpack://@jotforminc/inbox/../../libs/login-flow/src/assets/idp-icons/microsoft-logo-icon.svg","webpack://@jotforminc/inbox/../../libs/login-flow/src/assets/idp-icons/okta-logo-icon.svg","webpack://@jotforminc/inbox/../../../../src/icons/security/scan-filled.svg","webpack://@jotforminc/inbox/../../libs/two-factor-settings/src/assets/svg/icon_gl.svg","webpack://@jotforminc/inbox/../../libs/two-factor-settings/src/assets/svg/icon_fb.svg","webpack://@jotforminc/inbox/../../libs/two-factor-settings/src/assets/svg/icon_apple_white.svg","webpack://@jotforminc/inbox/../../libs/login-flow/src/assets/icon_sf_36.svg","webpack://@jotforminc/inbox/../../libs/login-flow/src/temporary-duplicate/assets/svg/closeWithCircle.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/flag-filled.svg","webpack://@jotforminc/inbox/../../libs/utils/src/loginSignup.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/utils/layer.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/utils/helper.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/OFACModal/OFACModal.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/OFACModal/index.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/utils/loginSignup.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/SalesforceButton.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/FacebookButton.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/GoogleButton.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/Password/scPassword.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/Password/RequirementsList.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/Password/constants.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/ErrorAlert.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/Password/index.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/TermsAndConditionsUrls.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/MicrosoftButton.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/AppleButton.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/SocialButtons.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/api/manager.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/api/index.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/SignupOptions.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/constants/index.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/SignupWithEmail.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/assets/idp-icons/onelogin-logo-icon.svg","webpack://@jotforminc/inbox/../../libs/login-flow/src/assets/idp-icons/private-logo-icon.svg","webpack://@jotforminc/inbox/../../libs/login-flow/src/assets/idp-icons/icons.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/SSOLoginOptions.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/LoginOptions.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/ForgotPassword.js","webpack://@jotforminc/inbox/../../libs/pie-timer/src/sc/scPieTimer.js","webpack://@jotforminc/inbox/../../libs/pie-timer/src/index.js","webpack://@jotforminc/inbox/../../libs/verification-input/src/index.js","webpack://@jotforminc/inbox/../../libs/two-factor-settings/src/helpers/constants.js","webpack://@jotforminc/inbox/../../libs/two-factor-settings/src/components/styled.js","webpack://@jotforminc/inbox/../../libs/two-factor-settings/src/sc/scTwoFactorSettings.js","webpack://@jotforminc/inbox/../../libs/two-factor-settings/src/components/InfoBox.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/Checkbox.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/TwoFactorLogin.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/EmailAuthLogin.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/TwoFactorMethods.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/SocialInit.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/LoginError.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/DeleteAccountModal/DeleteAccountModalStep1.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/DeleteAccountModal/SocialsContainer.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/DeleteAccountModal/ModalHeader.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/DeleteAccountModal/ErrorMessage.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/DeleteAccountModal/DeleteAccountModalStep2.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/DeleteAccountModal/DeleteAccountModalStep3.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/DeleteAccountModal/DeleteAccountModal.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/DeleteAccountModal/index.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/ResetSuccess.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/SocialTermsStep.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/SocialTermsModal.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/utils/renderStandaloneSocialTermsModal.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/EmailAuthLoginModal.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/utils/renderStandaloneEmailAuthModal.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/VerifyAccountModal/Verification.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/VerifyAccountModal/index.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/UnusualSignup/index.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/SignupWithSocialOpts.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/RecoverAccountPage.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/RecoverAccountNotification.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/AccountRecoveryViewTicket.js","webpack://@jotforminc/inbox/../../libs/login-flow/src/components/LoginFlow.js","webpack://@jotforminc/inbox/../../../../src/icons/editor/align-text-center.svg","webpack://@jotforminc/inbox/../../../../src/icons/editor/align-text-right.svg","webpack://@jotforminc/inbox/../../libs/message/src/constants/index.js","webpack://@jotforminc/inbox/../../libs/message/src/utils/index.js","webpack://@jotforminc/inbox/../../libs/option-group/src/components/StyledComponents.js","webpack://@jotforminc/inbox/../../libs/option-group/src/components/OptionGroup.js","webpack://@jotforminc/inbox/../../libs/preview/src/components/Image.js","webpack://@jotforminc/inbox/../../../../src/icons/general/magnifying-glass-minus.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/magnifying-glass-plus.svg","webpack://@jotforminc/inbox/../../libs/preview/src/components/PreviewZoomContainer.js","webpack://@jotforminc/inbox/../../libs/preview/src/components/Tiff.js","webpack://@jotforminc/inbox/../../libs/preview/src/components/Audio.js","webpack://@jotforminc/inbox/../../libs/preview/src/components/Video.js","webpack://@jotforminc/inbox/../../libs/preview/src/components/PDF.js","webpack://@jotforminc/inbox/../../libs/preview/src/components/PreviewArea.js","webpack://@jotforminc/inbox/../../libs/preview/src/components/PreviewThumbnail.js","webpack://@jotforminc/inbox/../../libs/preview/src/components/PreviewFooter.js","webpack://@jotforminc/inbox/../../libs/preview/src/components/PreviewHeader.js","webpack://@jotforminc/inbox/../../libs/preview/src/components/Preview.js","webpack://@jotforminc/inbox/../../../../src/icons/documents/document-simple-filled.svg","webpack://@jotforminc/inbox/../../libs/preview/src/components/Unsupported.js","webpack://@jotforminc/inbox/../../../../src/icons/products/product-sign-filled.svg","webpack://@jotforminc/inbox/../../libs/preview/src/constants/index.js","webpack://@jotforminc/inbox/../../libs/preview/src/utils/index.js","webpack://@jotforminc/inbox/../../libs/pricing-table/src/components/SkeletonLoading.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/PortalPicker/defaults/scPortalItem.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/PortalPicker/defaults/PortalItemDefaults/TitleRenderer.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/PortalPicker/defaults/PortalItemDefaults/DescriptionRenderer.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/PortalPicker/defaults/PortalItemDefaults/ItemContentRenderer.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/PortalPicker/defaults/PortalItemDefaults/IconRenderer.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/PortalPicker/defaults/PortalItem.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/PortalPicker/defaults/PortalItemDefaults/commonCss.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/PortalPicker/defaults/PortalItemDefaults/constants.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/components/PortalPicker/defaults/SmallPortalItem.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/constants/index.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/utils/moment.js","webpack://@jotforminc/inbox/../../libs/resource-picker/src/utils/hooks.js","webpack://@jotforminc/inbox/../../libs/router-bridge/src/jfrouter.js","webpack://@jotforminc/inbox/../../libs/safe-lazy-import/src/components/ErrorPage.js","webpack://@jotforminc/inbox/../../libs/safe-lazy-import/src/utils/safeLazy.js","webpack://@jotforminc/inbox/../../libs/search-filter/src/components/constants.js","webpack://@jotforminc/inbox/../../../../src/icons/editor/type-square-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/finance/tag-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/squares-arrow.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/shapes-filled.svg","webpack://@jotforminc/inbox/../../libs/search-filter/src/utils/index.js","webpack://@jotforminc/inbox/../../libs/sign-info-panel/src/components/Button.js","webpack://@jotforminc/inbox/../../libs/storage-helper/src/constants.js","webpack://@jotforminc/inbox/../../libs/storage-helper/src/index.js","webpack://@jotforminc/inbox/../../libs/styled-modal/src/components/StyledModal/styled.js","webpack://@jotforminc/inbox/../../libs/styled-modal/src/components/StyledModal/index.js","webpack://@jotforminc/inbox/../../../../src/icons/arrows/arrow-down-to-line.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/chevron-down.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/chevron-left.svg","webpack://@jotforminc/inbox/../../../../src/icons/arrows/chevron-right.svg","webpack://@jotforminc/inbox/../../../../src/icons/brand/salesforce-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/communication/envelope-closed-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/communication/message-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/communication/paper-plane-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/communication/phone-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/documents/document-list-bullet-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/editor/align-text-left.svg","webpack://@jotforminc/inbox/../../../../src/icons/editor/pen-sign-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/editor/printer-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/editor/text-color.svg","webpack://@jotforminc/inbox/../../../../src/icons/finance/tag-percent-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/finance/tags-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/forms-files/paperclip-diagonal.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/at.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/check-circle-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/check-circle.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/check-square-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/check.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/conditional-branch-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/copy-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/exclamation-circle-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/exclamation-circle.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/exclamation-triangle-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/eye-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/eye-slash-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/info-circle-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/info.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/location-pin-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/magnifying-glass.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/minus.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/number-square-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/pencil-to-square.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/plus.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/star-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/text.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/trash-exclamation-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/trash-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/xmark-sm.svg","webpack://@jotforminc/inbox/../../../../src/icons/general/xmark.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-approvals-color.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-approvals-mono.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-apps-mono.svg","webpack://@jotforminc/inbox/../../../../src/icons/products/product-sign-mono.svg","webpack://@jotforminc/inbox/../../../../src/icons/security/key-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/security/lock-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/security/shield-lock.svg","webpack://@jotforminc/inbox/../../../../src/icons/time-date/calendar-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/users/users-filled.svg","webpack://@jotforminc/inbox/../../../../src/icons/users/users-more-filled.svg","webpack://@jotforminc/inbox/../../../../src/logos/integration/salesforce-logomark-color.svg","webpack://@jotforminc/inbox/../../libs/tabs/src/tab-list/Tab.js","webpack://@jotforminc/inbox/../../libs/tabs/src/tab-list/TabList.js","webpack://@jotforminc/inbox/../../libs/toggle/src/index.js","webpack://@jotforminc/inbox/../../libs/tooltip/src/components/index.js","webpack://@jotforminc/inbox/../../libs/translation/src/domHelper.js","webpack://@jotforminc/inbox/../../libs/translation/src/Translation.js","webpack://@jotforminc/inbox/../../libs/translation/src/constants/index.js","webpack://@jotforminc/inbox/../../libs/translation/src/utils.js","webpack://@jotforminc/inbox/../../libs/translation/src/hof.js","webpack://@jotforminc/inbox/../../libs/translation/src/global.js","webpack://@jotforminc/inbox/../../libs/translation/src/index.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/Button/index.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/Dropdown/index.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/Modal/index.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/Option/index.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/OptionGroup/index.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/Popover/index.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/Portal/index.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/SelectionGroup/index.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/TextInput/index.js","webpack://@jotforminc/inbox/../../libs/uikit/src/components/Tooltip/index.js","webpack://@jotforminc/inbox/../../libs/uikit/src/utils/constants.js","webpack://@jotforminc/inbox/../../libs/uikit/src/utils/hooks.js","webpack://@jotforminc/inbox/../../libs/uikit/src/utils/index.js","webpack://@jotforminc/inbox/../../libs/upload-fields/src/index.js","webpack://@jotforminc/inbox/../../libs/upload-fields/src/utils/index.js","webpack://@jotforminc/inbox/../../libs/utils/src/addressFields.js","webpack://@jotforminc/inbox/../../libs/utils/src/cookies.js","webpack://@jotforminc/inbox/../../libs/utils/src/data.js","webpack://@jotforminc/inbox/../../libs/utils/src/dom.js","webpack://@jotforminc/inbox/../../libs/utils/src/limitUtils.js","webpack://@jotforminc/inbox/../../libs/utils/src/misc.js","webpack://@jotforminc/inbox/../../libs/utils/src/moment.js","webpack://@jotforminc/inbox/../../libs/utils/src/pdfjsworker.js","webpack://@jotforminc/inbox/../../libs/constants/src/platforms/index.js","webpack://@jotforminc/inbox/../../libs/feature-flag/src/components/FeatureFlag/FeatureFlag.js","webpack://@jotforminc/inbox/../../libs/utils/src/platform/platform.js","webpack://@jotforminc/inbox/../../libs/utils/src/questions.js","webpack://@jotforminc/inbox/../../libs/utils/src/strings.js","webpack://@jotforminc/inbox/../../libs/utils/src/time.js","webpack://@jotforminc/inbox/../../libs/constants/src/email/index.js","webpack://@jotforminc/inbox/../../libs/utils/src/validation.js","webpack://@jotforminc/inbox/../../libs/warning-box/src/index.js","webpack://@jotforminc/inbox/../../libs/widgets-js-sdk/src/utils/getStyle.js","webpack://@jotforminc/inbox/../../libs/widgets-js-sdk/src/utils/postmessage.js","webpack://@jotforminc/inbox/../../libs/widgets-js-sdk/src/translations/index.js","webpack://@jotforminc/inbox/../../libs/widgets-js-sdk/src/utils/loadWidgetImageAsBase64.js","webpack://@jotforminc/inbox/../../libs/widgets-js-sdk/src/widgetsServer/builder.js","webpack://@jotforminc/inbox/../../libs/widgets-js-sdk/src/index.js","webpack://@jotforminc/inbox/../../../../src/icons/products/product-form-builder-color-border.svg","webpack://@jotforminc/inbox/../../libs/form-encryption/src/components/EncryptedSubmissionPage/index.tsx","webpack://@jotforminc/inbox/../../libs/utils/src/encryption.js","webpack://@jotforminc/inbox/../../libs/form-encryption/src/components/FlushPrivateKeysWizard/index.tsx","webpack://@jotforminc/inbox/../../libs/form-encryption/src/components/ManageEncryptionButton/index.tsx","webpack://@jotforminc/inbox/../../libs/form-encryption/src/types/index.ts","webpack://@jotforminc/inbox/../../libs/form-encryption/src/utils/crypto.ts","webpack://@jotforminc/inbox/../../libs/form-encryption/src/utils/index.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Button/button.cva.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Button/button.types.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Button/ButtonContent.tsx","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Button/Button.tsx","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Checkbox/checkbox.cva.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Checkbox/checkbox.types.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/shared/ChoiceLabel/choice-label.types.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/shared/ChoiceLabel/choice-label.cva.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/shared/ChoiceLabel/ChoiceLabel.tsx","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Checkbox/Checkbox.tsx","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Dialog/Dialog.tsx","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Dialog/DialogActions.tsx","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Dialog/DialogBody.tsx","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Dialog/DialogCloseButton.tsx","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Dialog/DialogDescription.tsx","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Dialog/DialogIcon.tsx","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Dialog/DialogTitle.tsx","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Dialog/dialog.cva.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Dialog/dialog.types.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/components/FormControl/form-control.cva.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/components/FormControl/FormControl.tsx","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Indicator/indicator.cva.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Indicator/indicator.types.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Indicator/Indicator.tsx","webpack://@jotforminc/inbox/../../libs/magnet/src/components/ColorPicker/color-picker.types.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Input/input.types.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Input/input.cva.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Input/BaseInput.tsx","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Input/InputText.tsx","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Link/link.cva.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Link/link.types.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Link/Link.tsx","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Loader/loader.cva.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Loader/loader.types.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/components/Loader/Loader.tsx","webpack://@jotforminc/inbox/../../libs/magnet/src/constants/common.cva.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/constants/common.values.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/contexts/index.tsx","webpack://@jotforminc/inbox/../../libs/magnet/src/tokens/colors/primary.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/tokens/colors/secondary.ts","webpack://@jotforminc/inbox/../../libs/magnet/src/utils/index.ts","webpack://@jotforminc/inbox/../../libs/request-layer/src/request-cache/constants.ts","webpack://@jotforminc/inbox/../../libs/request-layer/src/request-cache/utils.ts","webpack://@jotforminc/inbox/../../libs/request-layer/src/request-cache/index.ts","webpack://@jotforminc/inbox/../../libs/request-layer/src/utils/argumentParser.ts","webpack://@jotforminc/inbox/../../libs/request-layer/src/utils/constructInterceptorConfig.ts","webpack://@jotforminc/inbox/../../libs/request-layer/src/layer/interceptors/index.ts","webpack://@jotforminc/inbox/../../libs/request-layer/src/layer/interceptors/defaultInterceptors/index.ts","webpack://@jotforminc/inbox/../../libs/request-layer/src/layer/interceptors/defaultInterceptors/utils.ts","webpack://@jotforminc/inbox/../../libs/request-layer/src/layer/interceptors/defaultInterceptors/platform/salesforceInterceptors.ts","webpack://@jotforminc/inbox/../../libs/request-layer/src/layer/interceptors/defaultInterceptors/defaultInterceptors.ts","webpack://@jotforminc/inbox/../../libs/request-layer/src/utils/setInterceptors.ts","webpack://@jotforminc/inbox/../../libs/request-layer/src/layer/engines/utils.ts","webpack://@jotforminc/inbox/../../libs/request-layer/src/layer/engines/AxiosEngine.ts","webpack://@jotforminc/inbox/../../libs/request-layer/src/layer/engines/constants.ts","webpack://@jotforminc/inbox/../../libs/request-layer/src/layer/utils.ts","webpack://@jotforminc/inbox/../../libs/request-layer/src/layer/index.ts","webpack://@jotforminc/inbox/../../libs/request-layer/src/layer/interceptors/customInterceptors/index.ts","webpack://@jotforminc/inbox/../../libs/request-layer/src/utils/managerUtils.ts","webpack://@jotforminc/inbox/../../libs/tracking/src/utils/FullStoryManager.ts","webpack://@jotforminc/inbox/../../libs/tracking/src/constants/index.ts","webpack://@jotforminc/inbox/../../libs/tracking/src/utils/SentryManager.ts","webpack://@jotforminc/inbox/../../libs/tracking/src/utils/TrackingManager.ts","webpack://@jotforminc/inbox/../../libs/tracking/src/index.ts"],"sourcesContent":["const { window } = global;\n\nconst getSheetsDSN = () => {\n if (window?.isReport) {\n return 'https://d69c7dc71f6243c19aa8f1466c32ab5c@o61806.ingest.sentry.io/5352078';\n }\n\n if (window?.isBoards) {\n return 'https://983ae60052ddc6cf8a60dca2bfaa3b8c@o61806.ingest.sentry.io/4507571577749504';\n }\n\n // Sheets\n return 'https://23de99eacf6c4a068ba11e1a39556e6a@o61806.ingest.sentry.io/1211430';\n};\n\nconst getFSEnabledForSignFiller = () => {\n try {\n return window?.parent?.fsEnabled;\n } catch (e) {\n return false;\n }\n};\n\nmodule.exports = {\n academy: {\n sentry: {\n enable: true,\n dsn: 'https://e21856d505644c643840103d8dbd250c@o61806.ingest.sentry.io/4506626385641472'\n // name: 'academy',\n }\n },\n checkout: {\n sentry: {\n enable: true,\n dsn: 'https://ca58c76e1157458f941020590eab787c@o61806.ingest.sentry.io/4505396476641280'\n },\n fullStory: {\n enable: true\n }\n },\n 'data-dashboards': {\n sentry: {\n enable: true,\n dsn: 'https://64a93c3dc440e48a9118dc2c169351ef@o61806.ingest.us.sentry.io/4507407451160576'\n }\n },\n 'email-builder': {\n sentry: {\n enable: true,\n dsn: 'https://6625f7b197c65a4d8e49bc8e7641c8c2@o61806.ingest.us.sentry.io/4507407576465408'\n }\n },\n 'email-details': {\n sentry: {\n enable: true,\n dsn: 'https://e0a74287bf15c46b981ddad77de5d7d7@o61806.ingest.sentry.io/4505822059823104'\n },\n fullStory: {\n enable: false\n }\n },\n 'form-builder': {\n sentry: {\n enable: true,\n dsn: 'https://7b39e767f39941dd89d9361cf50382dd@o61806.ingest.sentry.io/132624',\n name: 'jotform-40'\n }\n },\n inbox: {\n sentry: {\n enable: true,\n dsn: 'https://f5fc3cd88f0744df9e3c8a263cd00db1@o61806.ingest.sentry.io/1353659'\n // name: 'inbox'\n },\n fullStory: {\n enable: window?.isFullStoryEnabled\n }\n },\n 'interview-management': {\n sentry: {\n enable: true,\n dsn: 'https://f875f9d7646f4149a6bfff821534e23b@o61806.ingest.sentry.io/4504971807162368'\n }\n },\n listings: {\n sentry: {\n enable: true,\n dsn: 'https://2c715cb8ed4745c383ff6830ca885807@o61806.ingest.sentry.io/5975209',\n name: 'listings'\n },\n fullStory: {\n enable: window?.isFullStoryEnabled\n }\n },\n myaccount: {\n sentry: {\n enable: true,\n dsn: 'https://4048665e726d45eba296f250ad4d09bb@o61806.ingest.sentry.io/6396369'\n // name: 'myaccountv4'\n },\n fullStory: {\n enable: window?.fullstoryEnabled\n }\n },\n 'page-builder': {\n sentry: {\n enable: true,\n dsn: 'https://727c1f481e28485a97e8a4ddae1bdaab@o61806.ingest.sentry.io/6179928'\n // name: 'landing-builder'\n }\n },\n 'pdf-editor': {\n sentry: {\n enable: window?.location.href.indexOf('download') < 0,\n dsn: 'https://10dcd48960b74f9e84c93bee96ee2c9e@o61806.ingest.sentry.io/1234288'\n // name: 'pdf-designer'\n },\n fullStory: {\n enable: window?.isFullStoryEnabled\n }\n },\n portal: {\n sentry: {\n enable: true,\n dsn: 'https://36d29a013f8a4bd7adfe310f5fe4d75a@o61806.ingest.sentry.io/5223511',\n name: 'app-builder'\n },\n fullStory: {\n enable: window?.fullStoryActiveForPortal\n }\n },\n 'refund-request': {\n sentry: {\n enable: true,\n dsn: 'https://c2bf244d1db8d74e25fafaf1b8f70747@o61806.ingest.sentry.io/4505786346110976'\n },\n fullStory: {\n enable: true\n }\n },\n sheets: {\n sentry: {\n enable: true,\n dsn: getSheetsDSN()\n // name: ['reports', 'spreadsheets']\n }\n },\n sign: {\n sentry: {\n enable: true,\n dsn: 'https://9b0abbc9280c47c683b8a9067f61e88e@o61806.ingest.sentry.io/5680940'\n // name: 'sign'\n },\n fullStory: {\n enable: window?.fsEnabled\n }\n },\n 'sign-filler': {\n sentry: {\n enable: true,\n dsn: 'https://1e23807c9020c755e635a09392e97b22@o61806.ingest.us.sentry.io/4507339316985856'\n },\n fullStory: {\n enable: getFSEnabledForSignFiller()\n }\n },\n 'subscription-dashboard': {\n sentry: {\n enable: true,\n dsn: 'https://75f5c88aeffd4f54964275c0fba96d59@o61806.ingest.sentry.io/6190171'\n // name: 'subscription-dashboard'\n }\n },\n workflow: {\n sentry: {\n enable: true,\n dsn: 'https://15571fc5437e4368b4e2ed0e32c6d93f@o61806.ingest.sentry.io/5261296'\n // name: 'workflow'\n },\n fullStory: {\n enable: !window?.isTemplateMode\n }\n },\n 'ai-agent': {\n sentry: {\n enable: true,\n dsn: 'https://9595e22b6185cd8e2ff3ea2fc28cc68f@o61806.ingest.us.sentry.io/4507502561001472',\n name: 'ai-agent'\n }\n },\n 'ai-agent-builder': {\n sentry: {\n enable: true,\n dsn: 'https://59098a0cef7524a00cbc88db5b10e2f5@o61806.ingest.us.sentry.io/4507883422875648'\n },\n fullStory: {\n enable: window?.fsEnabled\n }\n }\n};\n","import { LOCALES } from '@jotforminc/answer-fields';\nimport texts from './texts';\n\nexport const SHEETS_COLOR_LIST = [\n '#FFEBB3',\n '#EDE2FE',\n '#FEE2D5',\n '#D0F0FD',\n '#E1E9F6',\n '#FFBDC7',\n '#BFBCFF',\n '#DCD59D',\n '#D1F7C4',\n '#B5F2EB',\n '#7D7D7D',\n '#FFC59E',\n '#AEE5FF'\n];\nexport const mainFont = 'Circular,-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\"';\nexport const NON_INPUT_QUESTIONS = [\n 'control_pagebreak',\n 'control_collapse',\n 'control_image',\n 'control_button',\n 'control_captcha',\n 'control_separator',\n 'control_clear',\n 'control_divider'\n];\n\nexport const IGNORED_PREVIOUS_ORDERS_QUESTIONS = [\n 'control_submissionID',\n 'control_submissionIP',\n 'control_submissionSubmittedVia',\n 'control_submissionSubmitter'\n];\n\nexport const PROHIBITED_ACTIONS_FOR_GUEST_USERS = [\n 'forCSV',\n 'forExcel',\n 'forDownlaodPDFMenuI',\n 'forDelete',\n 'forArchive',\n 'forNoteEntry',\n 'forAddTag',\n 'forPrint',\n 'forEdit',\n 'forEditForm',\n 'forAccess',\n 'forTrash',\n 'forShareText',\n 'forShareIcon',\n 'jfInboxFilterResultBar-button',\n 'jfNavigation-menu-item-text',\n 'forSettingsSelection'\n];\n\nexport const HEADER_TEXT_QUESTIONS = [\n 'control_head',\n 'control_text'\n];\n\nexport const WRAPPED_QUESTIONS = [\n 'control_inline'\n];\n\nconst SEARCH_PROHIBITED_FIELDS = [\n ...HEADER_TEXT_QUESTIONS\n];\n\nexport { SEARCH_PROHIBITED_FIELDS };\n\nexport const PRIMARY_AVAILABLE_FIELDS = [\n 'control_fullname',\n 'control_email',\n 'control_textbox',\n 'control_phone',\n 'control_dropdown'\n];\n\nexport const SECONDARY_AVAILABLE_FIELDS = [\n 'control_email',\n 'control_textbox',\n 'control_datetime',\n 'control_birthdate',\n 'control_phone',\n 'control_time',\n 'control_number',\n 'control_fullname',\n 'control_dropdown'\n];\n\nexport const FIELDS_WITH_ARRAY_PROPS = [\n 'control_checkbox',\n 'control_dropdown',\n 'control_imagechoice'\n];\n\nexport const FIELDS_WITH_BACKGROUND_COLOR = [\n ...FIELDS_WITH_ARRAY_PROPS,\n 'control_radio',\n 'control_yesno'\n];\n\nexport const SUBJECT_AVAILABLE_FIELDS = [\n 'control_submissionID',\n 'control_submissionIP',\n 'control_submissionDate',\n 'control_checkbox',\n 'control_dropdown',\n 'control_radio',\n 'control_yesno',\n ...SECONDARY_AVAILABLE_FIELDS\n];\n\nexport const PAYMENT_FIELDS = [\n 'control_2co',\n 'control_authnet',\n 'control_bluepay',\n 'control_bluesnap',\n 'control_braintree',\n 'control_cardconnect',\n 'control_clickbank',\n 'control_dwolla',\n 'control_echeck',\n 'control_eway',\n 'control_firstdata',\n 'control_googleco',\n 'control_onebip',\n 'control_payjunction',\n 'control_chargify',\n 'control_payment',\n 'control_paymentwall',\n 'control_paymill',\n 'control_paypal',\n 'control_paypalexpress',\n 'control_paypalpro',\n 'control_paypalSPB',\n 'control_paypalcomplete',\n 'control_sensepass',\n 'control_square',\n 'control_sofort',\n 'control_stripe',\n 'control_stripeACH',\n 'control_wepay',\n 'control_worldpay',\n 'control_worldpayus',\n 'control_payu',\n 'control_pagseguro',\n 'control_moneris',\n 'control_paysafe',\n 'control_iyzico',\n 'control_skrill',\n 'control_gocardless',\n 'control_mollie',\n 'control_stripeCheckout',\n 'control_payfast',\n 'control_stripeACHManual'\n];\n\nexport const PAYMENT_FIELD_NAMES = [\n 'Twoco',\n 'Authnet',\n 'Bluepay',\n 'Bluesnap',\n 'Braintree',\n 'Cardconnect',\n 'Chargify',\n 'Clickbank',\n 'Dwolla',\n 'Echeck',\n 'Eway',\n 'Firstdata',\n 'Moneris',\n 'Onebip',\n 'Pagseguro',\n 'Payjunction',\n 'Payment',\n 'Paymentwall',\n 'Paypal',\n 'Paypalexpress',\n 'Paypalpro',\n 'Payu',\n 'Square',\n 'Stripe',\n 'Wepay',\n 'Worldpay',\n 'Worldpayus',\n 'Mollie',\n 'Stripecheckout',\n 'Payfast',\n 'Stripeachmanual'\n];\n\nexport const MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n];\n\nexport const DEFAULT_DATE_FORMAT = 'MMM D, YYYY h:mm A';\n\nexport const DEFAULT_TAG_OPTIONS = {\n todo: { key: 'todo', value: texts.TODO, color: '#FED3DB' },\n inprogress: { key: 'inprogress', value: texts.IN_PROGRESS, color: '#FBEBB5' },\n done: { key: 'done', value: texts.DONE, color: '#D3FED4' }\n};\n\nexport const DEFAULT_TAG_QUESTION_PROPERTIES = {\n v4: 1,\n text: 'Tags',\n labelAlign: 'Auto',\n required: 'No',\n special: 'None',\n calcValues: null,\n allowOther: 'No',\n otherText: 'Other',\n spreadCols: 1,\n selected: null,\n minSelection: null,\n maxSelection: null,\n description: null,\n shuffle: 'No',\n readonly: 'No',\n type: 'control_checkbox',\n name: 'tags',\n sheetField: 'Yes',\n submissionWidget: 'Yes',\n options_array: DEFAULT_TAG_OPTIONS,\n options: Object.values(DEFAULT_TAG_OPTIONS).map(({ value }) => value).join('|')\n};\n\nexport const TAG_COLOR_LIST = [\n { value: 'Default', color: '#D0F0FE' },\n { value: 'Blue Chalk', color: '#EDE2FE' },\n { value: 'Pink Lace', color: '#FFDAF6' },\n { value: 'Periwinkle', color: '#CEDFFF' },\n { value: 'Gossip', color: '#D0F7C3' },\n { value: 'Peach', color: '#FFEAB6' },\n { value: 'Pastel Pink', color: '#FFDCE5' },\n { value: 'Mint Tulip', color: '#C2F5E9' },\n { value: 'Watusi', color: '#FEE2D5' },\n { value: 'Gallery', color: '#EEEEEE' }\n];\n\nexport const COLOR_LIST = Object.values(TAG_COLOR_LIST).map(({ color }) => color);\n\nexport const PICKER_COLORS = COLOR_LIST.map((color, index) => {\n return index % 6 === 0 ? COLOR_LIST.slice().splice(index, 6) : null;\n}).filter(a => a);\n\nexport const FORM_API_LIMIT = 1000;\nexport const SUBMISSION_API_LIMIT = 20;\nexport const SUBMISSION_ID_ONLY_LIMIT = 10000;\n\nexport const ASYNC_ACTION_TYPES = ['SUCCESS', 'REQUEST', 'FAILURE', 'PENDING'];\nexport const [LOADING_TYPE, LOADED_TYPE, FAILURE_TYPE, PENDING_TYPE] = ASYNC_ACTION_TYPES;\n\nexport const NAVIGATION_PANEL_CLASS = 'jfInbox--isNavigationPanelOpen';\nexport const LEFT_PANEL_CLASS = 'jfInbox--isLeftPanelOpen';\nexport const RIGHT_PANEL_CLASS = 'jfInbox--isRightPanelOpen';\nexport const NOTES_PANEL_CLASS = 'jfInbox--isNotesPanelOpen';\nexport const NOTES_PANEL_MINIMIZED_CLASS = 'jfInbox--isNotesPanelMinimized';\nexport const MOBILE_CLASS = 'jfInbox--isMobile';\nexport const FLEX_TOP_ALIGNED_CLASS = 'jfInbox--align-top';\nexport const COMPACT_SUBMISSION_HEADER_CLASS = 'jfInbox--isCompactSubmissionHeader';\nexport const APPROVAL_PANEL_OPEN_CLASS = 'jfInbox--isApprovalOpen';\n\nexport const RESPONSIVE_RESOLUTION_MULTIPLIER_MAP = {\n xxSmall: {\n width: 320,\n multiplier: 0.7,\n className: 'viewportSmallest'\n },\n xSmall: {\n width: 360,\n multiplier: 0.85,\n className: 'viewportSmaller'\n },\n small: {\n width: 414,\n multiplier: 0.9,\n className: 'viewportSmall'\n },\n medium: {\n width: 460,\n multiplier: 0.95,\n className: 'viewportMedium'\n }\n};\n\nexport const MOBILE_MAX_WIDTH = 960;\nexport const CHANGE_FLEX_LAYOUT_MAX_WIDTH = 600;\n\nexport const SUBMISSION_CONTAINER_CLASS = 'jfInbox-submission-container';\nexport const SUBMISSION_CONTAINER_SCROLL_CLASS = 'jfInbox--isContainerScrolled';\n\nexport const HEADER_SCROLL_POINTS = [\n {\n suffix: 'shadow',\n min: 1,\n max: 2,\n resizeRemove: false\n },\n {\n suffix: 'compactHeader',\n min: 1,\n max: 140,\n resizeRemove: true\n }\n];\n\nexport const JOTFORM_MOMENT_LANGUAGE_MAP = {\n 'en-US': 'en',\n 'es-ES': 'es',\n 'fr-FR': 'fr',\n 'it-IT': 'it',\n 'pt-PT': 'pt',\n 'de-DE': 'de',\n 'tr-TR': 'tr',\n 'ca-ES': 'ca',\n 'nl-NL': 'nl',\n 'sv-SE': 'sv',\n 'hu-HU': 'hu',\n 'no-NO': 'nb',\n 'da-DA': 'da',\n 'ro-RO': 'ro',\n 'fi-FI': 'fi',\n 'pl-PL': 'pl',\n 'ru-RU': 'ru',\n 'zh-CN': 'zh-cn'\n};\n\nexport const IMAGE_ERROR_FALLBACK = 'https://cdn.jotfor.ms/resources/assets/icon/jotform-logomark-white-400x400.png';\n\nexport const submitterInitialQuestions = {\n submitter: {\n qid: 'submitter',\n name: 'Submitter',\n fields: ['name', 'email'],\n sublabels: {\n field_name: 'Name',\n field_email: 'Email'\n },\n order: '10002',\n text: 'Submitter',\n type: 'control_submissionSubmitter'\n }\n};\n\nexport const submittedViaInitialQuestions = {\n submittedVia: {\n qid: 'submittedVia',\n name: 'SubmittedVia',\n fields: ['title'],\n sublabels: {\n field_title: 'Title'\n },\n order: '10003',\n text: 'Source App',\n type: 'control_submissionSubmittedVia',\n portals: []\n }\n};\n\nexport const INITIAL_QUESTIONS = {\n created_at: {\n qid: 'created_at',\n name: 'Submission Date',\n text: 'Submission Date',\n order: '0',\n type: 'control_submissionDate',\n allowTime: 'Yes',\n dateSeparator: '-',\n dateFormat: DEFAULT_DATE_FORMAT,\n liteMode: 'Yes',\n step: '10',\n timeFormat: '24 Hour',\n sublabels: {\n day: 'Day',\n hour: 'Hour',\n last: 'Last',\n litemode: 'Date',\n minutes: 'Minutes',\n month: 'Month',\n year: 'Year'\n }\n },\n ip: {\n qid: 'ip',\n name: 'Submission IP',\n text: 'Submission IP',\n order: '10000',\n type: 'control_submissionIP'\n },\n id: {\n qid: 'id',\n name: 'Submission ID',\n text: 'Submission ID',\n order: '10001',\n type: 'control_submissionID'\n },\n ...submitterInitialQuestions,\n ...submittedViaInitialQuestions\n};\n\nexport const DELETE_BATCH_SIZE = 20;\n\nexport const FILTER_KEYWORDS = {\n READ: 'is:read',\n UNREAD: 'is:unread',\n STARRED: 'is:starred',\n UNSTARRED: 'is:unstarred'\n};\n\nexport const ADDRESS_FIELD_LABEL_MAP = new Map([\n ['st1', 'addr_line1'],\n ['st2', 'addr_line2'],\n ['city', 'city'],\n ['state', 'state'],\n ['zip', 'postal'],\n ['country', 'country']\n]);\n\nexport const MATRIX_FIELD_TABLEIFY_FIELDS = [\n 'Radiobutton', 'Slider', 'Emojislider', 'Yesno'\n];\n\nexport const COMPACT_TOOLBAR_WIDTH = 650;\n\nexport const FILTER_TEXT_LIMIT = 50;\n\nexport const SUBMISSION_DATE_LANGUAGE_DROPDOWN_OPTIONS = Object.entries(LOCALES).map(([value, text]) => ({\n value,\n text\n}));\n\nexport const CURRENCY_SYMBOLS = {\n USD: '$', // US Dollar\n EUR: '€', // Euro\n CRC: '₡', // Costa Rican Colón\n GBP: '£', // British Pound Sterling\n ILS: '₪', // Israeli New Sheqel\n INR: '₹', // Indian Rupee\n JPY: '¥', // Japanese Yen\n KRW: '₩', // South Korean Won\n NGN: '₦', // Nigerian Naira\n PHP: '₱', // Philippine Peso\n PLN: 'zł', // Polish Zloty\n PYG: '₲', // Paraguayan Guarani\n THB: '฿', // Thai Baht\n UAH: '₴', // Ukrainian Hryvnia\n VND: '₫', // Vietnamese Dong\n TL: '₺' // Turkish Lira\n};\n\nexport const SUBMISSION_DATE_FORMATS = [\n 'M/D/YYYY',\n 'D/M/YYYY',\n 'MMM D, YYYY',\n 'MMMM D, YYYY',\n 'ddd, MMM D, YYYY',\n 'dddd, MMMM D, YYYY',\n 'MMM D, YYYY HH:mm',\n DEFAULT_DATE_FORMAT,\n 'ddd, MMM D, YYYY HH:mm',\n 'dddd, MMMM D, YYYY HH:mm'\n];\n\nexport const DEFAULT_SHARE_TEXTS = {\n SHARE_LINK_HEADER: 'Link To Share',\n LINK_EDIT_SUCCESS: 'Custom URL Saved',\n LINK_RESET_SUCCESS: 'Custom URL Deleted',\n SHARE_LINK_HEADER_DESC: '',\n ONLY_AVAILABLE_TO_ASSIGNEES: 'Only available to invited people.',\n ASSIGNED_TO: 'Shared to',\n ASSIGNED_TO_NUMBER: 'Shared with {numberOfUsers} {formNoun}',\n REMOVE_USER_CONFIRM: 'Are you sure you want to revoke access selected user(s)?',\n REMOVE_USER_DESCRIPTION: 'If you revoke the user, they will no longer have access to this form in Jotform Inbox.',\n REVOKE_ALL: 'Revoke All Users',\n REVOKE_SELECTED_USERS: 'Revoke selected {length} Users',\n LIST_WILL_APPEAR_HERE: 'User list will appear here.',\n ASSIGNED_TO_NO_ONE: 'Shared with no one',\n NO_ONE_ASSIGNED: 'This inbox is not shared with anyone',\n SHARE: 'share',\n USER_REQUEST_EDIT_TOOLTIP: 'This user is requesting edit access to this Inbox.'\n};\n\nexport const WORKFLOW_STATUS = {\n ACTIVE: 'In Progress',\n APPROVE: 'Approved',\n DENY: 'Denied',\n CANCELED: 'Canceled',\n COMPLETED: 'Completed',\n ERRORED: 'Error'\n};\n\nexport const signAllowedApps = [\n 'inbox',\n 'tables',\n 'reports',\n 'sign'\n];\n\n// order matters\nexport const ANSWER_TAG_FIELDS = [\n ...PAYMENT_FIELDS,\n 'source_app',\n 'control_fileupload',\n 'control_appointment',\n 'control_datetime',\n 'control_fullname',\n 'control_email'\n];\n\nexport const AUTO_DELETE_INFO_POPUP_KEY = 'AUTO_DELETE_INFO_POPUP_KEY';\nexport const AUTO_DELETE_INFORMATION_MODAL = 'AUTO_DELETE_INFORMATION_MODAL';\n\nexport const LITE_MODE_PAGES = ['myforms', 'myworkspace', 'listings', 'myteams'];\n\nexport const MESSAGE_TYPES = {\n reply: {\n text: texts.REPLY_TO_SUBMISSION,\n icon: 'iconReply'\n },\n forward: {\n text: texts.FORWARD,\n icon: 'iconForward'\n },\n comment: {\n text: texts.COMMENT,\n icon: 'IconMessageFilled'\n },\n requestMoreInfo: {\n text: texts.REQUEST_MORE_INFO,\n icon: 'IconAnnotationInfoFilled'\n }\n};\n\nexport const PREVIOUS_ORDERS_TYPES = {\n STORE: 'STORE',\n DONATION: 'DONATION'\n};\n\nexport const SPACING = [\n {\n value: 'compact',\n text: 'Compact',\n icon: 'IconSpacingCompact'\n },\n {\n value: 'default',\n text: 'Default',\n icon: 'IconSpacingDefault'\n },\n {\n value: 'wide',\n text: 'Wide',\n icon: 'IconSpacingWide'\n }\n];\n\nexport const ALIGNMENTS = [\n {\n value: 'top',\n text: 'Top',\n icon: 'iconQuestionAlignmentTop'\n },\n {\n value: 'left',\n text: 'Side by side',\n icon: 'iconQuestionAlignmentLeft'\n }\n];\n\nexport const MENU_SETTINGS = {\n General: {\n value: 'general',\n label: 'GENERAL'\n },\n Fields: {\n value: 'fields',\n label: 'FIELDS'\n },\n Print: {\n value: 'print',\n label: 'PRINT'\n }\n};\n\nexport const WIDGETS = [\n '52961c97e3e5266570000004', // checklist widget\n '538dddaa976bf61129000004', // multiple text fields widget\n '528ee7cf8d5a5fc76a000004', // Dynamic TextBox\n '5295f3aef2426e7969000009', // Add Options\n '53201a2d6866be393e000028', // Dynamic dropdown\n '5293157eb5ac485477000004', // Multiple Selection\n '529058b0ca06414051000011', // Field Multiplier\n '5329a28886bd958e4c000007', // Multiselect Grid\n '5290397c57a764425100000b', // Button Checkbox\n '529c82a772a985697f000007', // Checkbox in Dropdown\n '52943d56dacb3d5320000010', // Orderable List\n '5298b265886815755900001e', // Visual Multi Select\n '528edc96a4de152e2a00001a' // Dual ListBox\n];\n\nexport const ROLES_DISABLE_TOOLBAR = ['readOnly', 'assignee', 'workflowApprover'];\n\nexport const ACTIVE_TAB_FILTER = {\n inbox: ['DELETED', 'ARCHIVED', 'CUSTOM'],\n archive: ['ACTIVE', 'DELETED'],\n trash: ['ACTIVE', 'ARCHIVED']\n};\n","import {\n bool,\n shape,\n string,\n number,\n oneOf,\n oneOfType,\n arrayOf,\n objectOf,\n element,\n func,\n checkPropTypes,\n node\n} from 'prop-types';\n\nexport const YES_NO_PROPTYPE = oneOf(['Yes', 'No']);\nexport const NUMBER_OR_STRING_PROPTYPE = oneOfType([string, number]);\nexport const VALID_REACT_RENDER_PROPTYPE = oneOfType([element, func]);\n\nexport const renderable = oneOfType([oneOfType([\n arrayOf(node),\n node\n]), string]);\n\nexport const questionTypesPropType = oneOf([\n 'control_head',\n 'control_widget',\n 'control_textbox',\n 'control_calculation',\n 'control_textarea',\n 'control_textarea2',\n 'control_dropdown',\n 'control_radio',\n 'control_checkbox',\n 'control_imagechoice',\n 'control_yesno',\n 'control_fileupload',\n 'control_button',\n 'control_fullname',\n 'control_email',\n 'control_address',\n 'control_phone',\n 'control_datetime',\n 'control_time',\n 'control_birthdate',\n 'control_number',\n 'control_rating',\n 'control_scale',\n 'control_grading',\n 'control_slider',\n 'control_range',\n 'control_spinner',\n 'control_separator',\n 'control_matrix',\n 'control_collapse',\n 'control_pagebreak',\n 'control_text',\n 'control_hidden',\n 'control_autoincrement',\n 'control_signature',\n 'control_captcha',\n 'control_image',\n 'control_autocomp',\n 'control_filepickerIO',\n 'control_payjunction',\n 'control_bluesnap',\n 'control_chargify',\n 'control_cardconnect',\n 'control_eway',\n 'control_paypal',\n 'control_paypalpro',\n 'control_stripe',\n 'control_stripeCheckout',\n 'control_stripeACH',\n 'control_stripeACHManual',\n 'control_authnet',\n 'control_googleco',\n 'control_2co',\n 'control_clickbank',\n 'control_wepay',\n 'control_worldpay',\n 'control_worldpayus',\n 'control_onebip',\n 'control_payment',\n 'control_paymentwall',\n 'control_dwolla',\n 'control_paypalSPB',\n 'control_paypalexpress',\n 'control_paypalcomplete',\n 'control_braintree',\n 'control_square',\n 'control_paysafe',\n 'control_iyzico',\n 'control_skrill',\n 'control_payfast',\n 'control_clear',\n 'control_boxpayment',\n 'control_divider',\n 'control_mixed',\n 'control_submissionDate',\n 'control_submissionIP',\n 'control_submissionID',\n 'control_submissionSubmitter',\n 'control_submissionSubmittedVia',\n 'control_inline'\n]);\n\nexport const historyPropType = shape({\n push: func\n});\n\nexport const paymentStringsPropType = arrayOf(objectOf(string));\nexport const productsPropType = arrayOf(objectOf(oneOfType([shape({}), string])));\n\nexport const formPropType = shape({\n id: NUMBER_OR_STRING_PROPTYPE.isRequired,\n title: string.isRequired,\n isEncrypted: YES_NO_PROPTYPE,\n count: NUMBER_OR_STRING_PROPTYPE.isRequired,\n new: NUMBER_OR_STRING_PROPTYPE.isRequired,\n flag: NUMBER_OR_STRING_PROPTYPE,\n last_submission: string,\n pdfTemplates: arrayOf(shape({})),\n paymentStrings: paymentStringsPropType,\n products: productsPropType,\n hideSubmissionHeader: YES_NO_PROPTYPE,\n showApprovalStatus: YES_NO_PROPTYPE\n});\n\nexport const formsPropType = arrayOf(formPropType);\n\nexport const userPropType = shape({\n email: string,\n username: string.isRequired,\n language: string.isRequired,\n forms: arrayOf(formPropType).isRequired,\n account_type: oneOfType([string, shape({\n name: string\n })]).isRequired,\n isDataOnlyUser: string\n});\n\nexport const questionOrdersPropType = arrayOf(NUMBER_OR_STRING_PROPTYPE);\n\nexport const questionPropType = shape({\n qid: NUMBER_OR_STRING_PROPTYPE.isRequired,\n type: questionTypesPropType.isRequired\n});\n\nexport const submissionWidgetPropType = shape({\n qid: NUMBER_OR_STRING_PROPTYPE.isRequired,\n type: questionTypesPropType.isRequired,\n options_array: oneOfType([\n objectOf(shape({ color: string, key: string.isRequired, value: string.isRequired })),\n string\n ]).isRequired\n});\n\nexport const questionsPropType = objectOf(questionPropType);\n\nexport const answersPropType = oneOfType([\n objectOf(shape({})).isRequired,\n bool\n]);\n\nexport const submissionPropType = shape({\n id: NUMBER_OR_STRING_PROPTYPE.isRequired,\n answers: answersPropType.isRequired,\n created_at: string.isRequired\n});\n\nexport const submissionsPropType = arrayOf(submissionPropType);\n\nexport const translationPropType = shape({});\n\nexport const translatedProps = {\n t: translationPropType.isRequired\n};\nexport const enhancedProps = {\n ...translatedProps,\n addClass: func.isRequired,\n removeClass: func.isRequired,\n hasClass: func.isRequired,\n toggleClass: func.isRequired\n};\n\nconst conditional = (propType, checkProp, expectedValue = true) => {\n const handler = (props, propName, componentName) => {\n const { [checkProp]: value } = props;\n if (value === expectedValue) {\n try {\n checkPropTypes({ [propName]: propType }, props, 'conditional prop', componentName);\n } catch (e) {\n return e;\n }\n }\n return null;\n };\n\n // This is for generateProps\n handler.type = propType.type;\n return handler;\n};\n\nexport const headerQuestionIdsPropType = shape({\n primary: questionOrdersPropType,\n secondary: string\n});\n\nexport const headerFieldOptionsPropType = arrayOf(shape({}));\nexport const headerFieldPropType = oneOfType([node, string, shape({ field: headerFieldOptionsPropType })]);\nexport const locationPropTypes = shape({\n pathname: string.isRequired\n});\n\nexport const uiPropType = shape({\n errored: bool.isRequired\n});\n\nexport const noteUserType = shape({\n name: string.isRequired\n});\n\nexport const noteType = shape({\n user: {\n name: string.isRequired,\n content: shape({}).isRequired,\n user: noteUserType\n }\n});\n\nexport { conditional };\n","export const { teamID: TEAM_ID, isTeamMember } = window;\n","// https://script.google.com/a/jotform.com/macros/s/AKfycbyuFkSopCHb-A4qbfT8W4Yiut023kgjua0cx6QZ1AhOPUevFsU/exec\n// https://docs.google.com/spreadsheets/d/1_11HZgrNetc6UoWo4H7Jpsxh4UPKaSBEDZ1q0mDVr-I/edit?usp=sharing\n\nconst isWorkflowReleased = window?.isWorkflowReleased;\nexport default {\n SHOW_HEADERS_AND_TEXT: 'Show headers and text',\n HIDE_EMPTY_FIELDS_TEXT: 'Hide empty form fields',\n SUBMISSION_DATE: 'Submission Date',\n SEARCH_IN_YOUR_FORMS: 'Search in your forms',\n NO_RESULT_FOUND_FOR: 'No result found for',\n YOU_HAVE_NO_FORMS: 'You have no forms.',\n FORM: 'Form',\n FILTER_YOUR_SUBMISSIONS: 'Filter your Submissions',\n CREATE_ONE: 'create one',\n ACTIVE_FORM: 'Active Form',\n ASSIGN_FORM: 'Assign Form',\n EDIT_FORM: 'Edit Form',\n AUTO_DELETE_SUBMISSIONS: 'Auto-Delete Submission',\n AUTO_DELETE_SUBMISSIONS_INTERVAL: '{autoDeleteInterval} later',\n AUTO_DELETE_SUBMISSIONS_DISABLED: 'Disabled',\n VIEW_FORM: 'View Form',\n FILL_AGAIN: 'Fill Again',\n VIEW_THIS_FORM: 'View This Form',\n FILL_THIS_FORM: 'Fill This Form Again',\n SEARCH_IN_SUBMISSIONS: 'Search',\n DELETE: 'Delete',\n SEARCH: 'Search',\n MOVE_TO_TRASH: 'Move to Trash',\n MOVE_TO_INBOX: 'Move to Inbox',\n CANCEL: 'Cancel',\n ITEM: 'Item',\n ITEMS: 'Items',\n TAB_MENU: 'Tab menu',\n MINIMIZE_MESSAGE_EDITOR: 'Minimize editor',\n EXPAND_MESSAGE_EDITOR: 'Expand editor',\n MAXIMIZE_MESSAGE_EDITOR: 'Maximize editor',\n CLOSE_MESSAGE_EDITOR: 'Close editor',\n DELETE_REQUESTED_SUBMISSION: 'Delete {username}’s Submission Forever',\n DELETE_SUBMISSION_UPON_REQUEST: 'You are deleting this submission upon request, so this submission will be purged. This action cannot be undone!',\n CURRENT_INCOMPLETE_SUBMISSION_WILL_BE_DELETED_PERMANENTLY: 'If you discard this incomplete submissions, your saved data will be deleted.',\n ARE_YOU_SURE_PERMANENTLY_DISCARD_PENDING_SUBMISSION: 'Are you sure you want to discard selected submission?',\n ARE_YOU_SURE_TO_PERMANENTLY_DELETE_SUBMISSIONS: 'Are you sure you want to delete selected submission(s)?',\n ARE_YOU_SURE_TO_PERMANENTLY_DELETE_SUBMISSION: 'Are you sure you want to delete this submission forever?',\n ARE_YOU_SURE_TO_PERMANENTLY_DELETE_USER_SUBMISSION: 'Are you sure you want to permanently delete {username}\\'s submission?',\n ARE_YOU_SURE_TO_PERMANENTLY_DELETE_ACTIVE_SUBMISSION: 'Are you sure you want to delete this submission?',\n ARE_YOU_SURE_TO_PERMANENTLY_DELETE_ALL_SUBMISSIONS: 'Are you sure you want to permanently delete all submissions?',\n ALL_SUBMISSIONS_WILL_BE_DELETED_PERMANENTLY: 'All submissions will be deleted permanently.',\n CURRENT_SUBMISSION_WILL_BE_DELETED_PERMANENTLY: 'If you continue, you will permanently lose the data.',\n THIS_ACTION_CANNOT_BE_UNDONE: 'This action cannot be undone.',\n THIS_ACTION_CANNOT_BE: 'This action cannot be',\n UNDONE: ' undone!',\n DELETE_TAB: 'Delete Tab',\n DELETE_SUBMISSIONS: 'Delete Submissions',\n DELETE_SUBMISSION: 'Delete Submission',\n DISCARD_PENDING_SUBMISSION: 'Discard Incomplete Submission',\n CURRENT_TAB_WILL_BE_DELETED_PERMANENTLY: 'Current tab will be deleted permanently.',\n ARE_YOU_SURE_TO_DELETE_TAB_PERMANENTLY: 'Are you sure you want to permanently delete the selected tab?',\n ARE_YOU_SURE_TO_CANCEL_APPROVAL_FLOW: isWorkflowReleased ? 'Are you sure to cancel the workflow for this submission?' : 'Are you sure to cancel the approval request for this submission?',\n IF_YOU_CONTINUE_ONLY_THIS_SUBMISSION_APPROVAL_FLOW: isWorkflowReleased\n ? 'If you continue, only this submission\\'s workflow will be canceled.'\n : 'If you continue, only this submission\\'s approval request will be canceled.',\n CANCEL_APPROVAL_FLOW: isWorkflowReleased ? 'Cancel Flow' : 'Cancel Approval Request',\n RENAME: 'Rename',\n DUPLICATE: 'Duplicate',\n BACK: 'Back',\n MESSAGE: 'Message',\n SEND_MESSAGE: 'Send Message',\n REQUEST_EDIT: 'Request Edit',\n REQUEST_DELETE: 'Request Delete',\n REQUEST_DELETION: 'Request Deletion',\n EDIT_REQUEST_SENT: 'Your edit request has been sent to the form owner. We’ll let you know when your request is approved.',\n REQUEST_EDIT_ACCESS_FOR_SUBMISSION: 'Request edit access',\n REQUEST_DELETE_FOR_SUBMISSION: 'Ask to delete this submission',\n WRITE_MESSAGE_TO_OWNER: 'Write message to form owner',\n ADD_ATTACHMENTS: 'Add attachments',\n DOWNLOAD_ATTACHMENTS: 'Download attachments',\n REMOVE_ATTACHMENTS: 'Remove attachments',\n SETTINGS: 'Settings',\n CONFIRM: 'Confirm',\n SELECT_ALL: 'Select all',\n SHOW_ALL: 'Show all',\n UNSELECT: 'Unselect',\n SELECT: 'Select...',\n DESELECT: 'Deselect',\n SELECTED: 'Selected',\n LOWER_SELECTED: 'selected',\n ALL: 'All',\n NO_FILES_FOUND: 'No files found for selected submissions or form. Please contact support if you think you should not see this error.',\n NONE: 'None',\n READ: 'Read',\n UNREAD: 'Unread',\n STARRED: 'Starred',\n UNSTARRED: 'Unstarred',\n SELECTED_SUBMISSIONS_WILL_BE_DELETED_PERMANENTLY: 'Selected {submissionCount} submissions will be deleted permanently.',\n MARK_AS_READ: 'Mark as Read',\n MARK_AS_UNREAD: 'Mark as Unread',\n OF: 'of',\n SUBMISSIONS: 'Submissions',\n SUBMISSIONS_LIST: 'Submissions List',\n SUBMISSION_CONTENT: 'Submission Content',\n THREADS: 'Threads',\n ORDRERS: 'Orders',\n NO_SUBMISSIONS: 'No submissions',\n EDIT_SUBMISSION: 'Edit',\n Reques_SUBMISSION: 'Request Edit',\n OPEN_IN_PDF_EDITOR: 'Customize PDF',\n REPLY: 'Reply',\n FORWARD: 'Forward',\n MORE: 'More',\n LAYOUT: 'Layout',\n LESS: 'Less',\n SAVE: 'Save',\n COMPACT: 'Compact',\n MEDIUM: 'Medium',\n WIDE: 'Wide',\n UPDATE_PRINT_SETTINS: 'Update print settings',\n PRINT_SETTINGS: 'Print Settings',\n PREVIEW_LAYOUT: 'Preview Layout',\n FIELD_SETTINGS: 'Field Settings',\n HEADER_SETTINGS: 'Header Settings',\n SELECT_HEADER_FIELD: 'Select field to use as header',\n SELECT_SUBHEADER_FIELD: 'Select field to use as subheader',\n SELECT_SUBHEADER_FIELD_TIP: 'This will appear below the header',\n NO_QUESTION_AVAILABLE: 'No question available',\n INBOX_SETTINGS: 'Inbox Settings',\n GOTO_FIELD_SETTINGS: 'Go to Field Settings',\n SEND_MESSAGE_TO_OWNER: 'Send Message to Form Owner',\n SEND_MESSAGE_TO_SELLER: 'Send Message to Seller',\n CONTACT_US: 'Contact Us',\n IF_WANT_TO_DOWNLOAD: 'Download your submission ',\n DELETE_REQUEST_WILL_BE_SENT_TO_OWNER:\n 'Your request will be sent to the form owner. We’ll let you know when your request is approved',\n EDIT_REQUEST_WILL_BE_SENT_TO_OWNER: 'Your request will be sent to the form owner. We’ll let you know when your request is approved.',\n QUESTION_ALIGNMENT: 'Question Alignment',\n TOP: 'Top',\n LEFT: 'Left',\n CLICK_HERE: 'here.',\n LINE_SPACING: 'Line Spacing',\n SHOW_HIDE_FIELDS: 'Show/Hide fields',\n SHOW_ADDRESSES_ON_MAP: 'Show addresses on map',\n NO_SUBMISSIONS_TO_DISPLAY: 'There are no submissions to display.',\n NO_SUBMISSIONS_TEXT_PENDINGAPPROVALS: 'YOU DON’T HAVE ANY PENDING SUBMISSIONS',\n NO_SUBMISSIONS_TEXT_TRASH: 'YOU DON’T HAVE ANY DELETED SUBMISSIONS',\n NO_SUBMISSIONS_TEXT_ASANA: 'THERE IS NO SUBMISSION FROM THIS ASSIGNEE',\n NO_SUBMISSIONS_TEXT_ARCHIVE: 'YOU DON’T HAVE ANY ARCHIVED SUBMISSIONS',\n NO_SUBMISSIONS_TEXT_SUBMISSIONS: 'YOU DON’T HAVE ANY SUBMISSIONS',\n NO_SUBMISSIONS_TEXT_CONVERSATIONS: 'YOU DON’T HAVE ANY CONVERSATIONS',\n NO_SUBMISSIONS_TEXT_COMPLETED: 'YOU DON’T HAVE ANY COMPLETED SUBMISSIONS',\n NO_SUBMISSIONS_TEXT_FILTER: 'THERE ARE NO RESULTS THAT MATCH WITH SELECTED FILTER(S)',\n NO_SUBMISSIONS_TEXT_SEARCHED: 'NO RESULTS FOUND',\n SUBMISSIONS_APPAER_HERE_PENDINGAPPROVALS: 'The tasks that are assigned to you will be listed here.',\n SUBMISSIONS_APPAER_HERE_ARCHIVE: 'The submission that you will archive will be listed here.',\n SUBMISSIONS_APPAER_HERE_TRASH: 'The submissions that you will delete will be listed here.',\n SUBMISSIONS_APPAER_HERE_SUBMISSIONS: 'Your submissions will be listed here.',\n SUBMISSIONS_APPAER_HERE_CONVERSATIONS: 'Your conversations will be listed here.',\n SUBMISSIONS_APPAER_HERE_COMPLETED: 'Your completed submissions will be listed here.',\n SUBMISSIONS_APPAER_HERE_FILTER: 'Choose different conditions to view the relevant results.',\n SUBMISSIONS_APPAER_HERE_SEARCHED: 'We couldn’t find any matching items.',\n SUBMISSIONS_APPAER_HERE_ASANA: 'As the assignee completes the task, the submission will appear here.',\n NO_PERMISSION_TO_DISPLAY: 'You don’t have permission to view submissions.',\n NO_ANSWERS_TO_DISPLAY: 'ALL FIELDS ARE HIDDEN.',\n NO_ANSWER_DESCRIPTION: 'To view your submissions please change the Show/Hide Field Settings.',\n FLUSH_KEYS: 'Encrypt Entries',\n ENTER_KEYS: 'Decrypt Entries',\n SWITCH_TO_OLD_VERSION: 'Switch to the old version.',\n SEND_YOUR_FEEDBACK: 'Send your feedback.',\n SEND: 'Send',\n GIVE_FEEDBACK: 'Give Feedback',\n GO_TO_A_FORM: 'Go to a Form',\n PICK_A_GREAT_FORM_JOURNEY: 'Pick a great form to begin your journey!',\n LAST_SUBMISSIONS: 'Last submission:',\n SUBMISSION_DETAIL: 'Submission detail',\n SELECT_SUBMISSION: 'Select the submission',\n NEVER: 'Never',\n UNTITLED_FORM: 'Untitled Form',\n OPEN_IN_JOTFORM_INBOX: 'Open in Jotform Inbox',\n BACK_TO_INBOX_VIEW: 'Back to Inbox',\n BACK_TO_SENTBOX_VIEW: 'Back to Sentbox',\n THERE_WAS_AN_ERROR_UPDATING: 'An error occurred while updating.',\n FIELD: 'field',\n PLEASE_TRY_AGAIN: 'Please try again.',\n DELETING_SUBMISSIONS: 'Deleting submissions...',\n ERROR_DELETING_SUBMISSIONS: 'An error occurred while deleting the selected submission(s).',\n CANCELED: 'Canceled',\n SOME_SUBMISSIONS_DELETED: 'Some submission(s) were deleted.',\n SUBMISSION_REQUESTED_TO_BE_DELETED: 'You are requested to delete this submission.',\n USER_REQUESTED_TO_DELETE: '{username} asked to delete this submission.',\n DELETE_REQUEST_SENT: 'Your request has been sent to the form owner. We’ll let you know when your submission is deleted.',\n SUBMISSION_SUCCESSFULLY_DELETED: 'Submission deleted',\n SUBMISSION_PURGED: 'Submission has been permanently deleted.',\n SUBMISSIONS_SUCCESSFULLY_DELETED: 'Submissions deleted',\n SUBMISSION_UPDATED: 'Submission updated',\n YOU_HAVE_NEW_SUBMISSION: 'You have a new submission!',\n VIEW_ON_JOTFORM_INBOX: 'View in Jotform Inbox',\n VIEW_ON_INBOX: 'View in Inbox',\n NOW: 'Now',\n X_MINUTE_SHORT: 'XXm',\n X_HOUR_SHORT: 'XXh',\n X_DAY_SHORT: 'XXd',\n THERE_WAS_AN_ERROR_SHARE_LINK_TRY_AGAIN: 'An error occurred while generating the share link. Please try again.',\n SHARE_SUBMISSION: 'Share submission',\n CURRENT_SUBMISSION_WILL_BE_ACCESSIBLE_VIA: 'The current submission will be accessible via the link below.',\n SHARE: 'Share',\n COPY_LINK: 'Copy link',\n THERE_WAS_AN_ERROR_WHILE_DOWNLOADING_PDF_TRY_AGAIN: 'An error occurred while downloading the PDF. Please try again.',\n PREPARING: 'Preparing...',\n DOWNLOAD: 'Download',\n SET_YOUR_PRINT_SETTINGS_FOR: 'Set your print settings for',\n REMEMBER_MY_CHOICES: 'Remember my choices.',\n SELECT_A_LAYOUT: 'Select a layout',\n SUBMISSION_THREAD: 'Submission Thread',\n INCLUDE_THREAD_LABEL: 'Include email, comment, and approval flow entries.',\n CONTENT: 'Content',\n TOP_ALIGNED: 'Top aligned',\n QUESTIONS_AND_ANSWERS_ARE_ALIGNED_COLUMN_LAYOUT: 'Answers appear directly below questions in a single column.',\n QUESTIONS_AND_ANSWERS_ALIGNED_SAME_LINE: 'Questions and answers appear side by side in two columns.',\n SIDE_BY_SIDE: 'Side by side',\n PRINT: 'Print',\n UPDATE: 'Update',\n DRAG_DROP_FIELDS_YOU_WANT_TO_VIEW: 'Drag and drop the fields you want to view.',\n UNLABELLED_QUESTION: 'Unlabeled question',\n EMAIL: 'Email',\n ADD_EMAIL: 'Add Email',\n NO_EMAIL_FIELD: 'There is no email address on the submission.',\n SEND_EMAIL: 'Send Email',\n EMAIL_SENT_SUCCESSFULLY: 'Email sent successfully.',\n NO_SUBMISSION_MATCHED: 'There are no submissions matching your criteria.',\n SHOW_ALL_SUBMISSIONS: 'See all submissions',\n CURRENT_VIEW: 'Print version',\n MARK_AS_STARRED: 'Add Star',\n MARK_AS_UNSTARRED: 'Remove Star',\n LOADING_TAKES_TOO_LONG: 'The operation is taking longer than expected.',\n UNABLE_TO_LOAD: 'Unable to load form. You may not have access to this form.',\n UNABLE_TO_LOAD_SUBMISSION: 'Unable to load submission. You may not have access to this submission.',\n GREETING_HI: 'Hi,',\n GREETING_REPLY: 'Thank you for completing \\'{formTitle}\\' form.',\n GREETING_FORWARD: 'Checkout this submission for the \\'{formTitle}\\' form.',\n HIDE_SUBMISSION_HEADER: 'Hide submission header',\n LANGUAGE: 'Language',\n FORMAT: 'Format',\n DOWNLOAD_ALL: 'Download All',\n DOWNLOAD_ALL_AS_FORMAT: 'Download as {format}',\n DOWNLOAD_ALL_AS_IMPORTED_PDF: 'Original PDFs Filled',\n DOWNLOAD_PDF: 'Download PDF',\n DOWNLOAD_AS_PDF: 'Download as PDF',\n DOWNLOAD_ORIGINAL_PDF: 'Original PDF',\n FILTER_ACTIVE: 'Filter Active',\n EMAIL_QUOTE_TEXT: 'On {submissionDate} {userNameEmail} submitted:',\n EMAIL_QUOTE_TEXT_NO_EMAIL: 'Received on {submissionDate}:',\n DATE_SETTINGS: 'Date Settings',\n DATE_FORMAT: 'Date Format',\n LANGUAGE_SETTINGS: 'Language Settings',\n PRINT_TEXT: 'Set your print settings for {title} Submissions',\n PRINTING_TEXT: 'Please wait while your document is printing.',\n TODO: 'Todo',\n IN_PROGRESS: 'In Progress',\n PLEASE_WAIT: 'Please Wait...',\n DONE: 'Done',\n DOWNLOADING: 'Downloading',\n THERE_WAS_AN_ERROR_DOWNLOADING: 'There was an error while downloading submission. Please try again.',\n PAGE_TITLE: '{formTitleCurrent} · Jotform Inbox',\n ACTIVE_SUBMISSION_OF_TOTAL: '{activeSubmission} of {totalSubmissions} submissions',\n SUBMISSIONS_ARE: 'are {filtered}',\n ACTIVE_ORDERS: 'Showing {activeOrders} {orderText}',\n CURRENT_SUBMISSION_OF_TOTAL: '{activeSubmission} of {totalSubmissions} Submissions',\n TOTAL_SUBMISSIONS: '{totalSubmissions} Submissions',\n FILTERED_SUBMISSIONS: 'Filtered: {count} Submissions',\n SUBMISSION_INDEX: 'Submission {submissionIndex}',\n SELECT_AN_OPTION: 'Select an option or create one',\n ADD_A_TAG: 'Add tag',\n CHOOSE_AN_OPTION: 'Choose an option',\n ADD_MESSAGE: 'Add message',\n REPLY_TO_SUBMISSION: 'Reply to Submission',\n FORWARD_SUBMISSION: 'Forward Submission',\n SOMETHING_WENT_WRONG: 'Something went wrong. Please try again.',\n WILL_SEND_EMAIL_ON_EXPORT_READY: 'We will send you an email to {email} when your export is ready for download.',\n YOUR_PDF_FILES_ARE_PREPARING_PERCENTAGE_ARE_READY: 'Your PDF files are preparing... {percentage}% are ready.',\n YOUR_PDF_FILES_ARE_PREPARING: 'Your PDF files are preparing...',\n MOVED_TO_TRASH: 'Submission(s) moved to Trash',\n ARCHIVED: 'Submission(s) archived',\n MOVED_TO_INBOX: 'Submission(s) moved to Inbox',\n RESTORING_SUBMISSIONS: 'Restoring Submissions',\n SUBMISSIONS_RESTORED: 'Submission(s) restored',\n PURGE: 'Delete Forever',\n RESTORE: 'Restore',\n SUBMISSIONS_IN_TRASH_EXPIRY_MESSAGE: 'Submissions that have been in Trash more than 30 days will be automatically deleted.',\n EMPTY_TRASH_NOW: 'Empty Trash Now',\n DRAFT: 'Draft',\n REAL_PURGE: 'Purge',\n INCOMPLETE: 'Incomplete',\n INCOMPLETE_SUBMISSIONS: 'Incomplete Submissions',\n SENTBOX: 'Sentbox',\n CONTINUE_TO_EDIT: 'Continue Filling',\n DISCARD: 'Discard',\n DISCARD_DELETE_REQUEST: 'Discard Delete',\n DISCARD_DRAFT: 'Discard Draft',\n DISCARD_DRAFT_SUBMISSION: 'Discard Draft Submission',\n TRASH: 'Trash',\n INBOX: 'Inbox',\n UPLOADING_FILES: 'Uploading Files...',\n REQUESTED: 'Requested',\n ARCHIVE: 'Archive',\n EXPAND: 'Expand',\n UNARCHIVE: 'Unarchive',\n JOTFORM_TITLE: 'Jotform Inbox',\n ADD_A_NOTE: 'Comment',\n AVAILABLE_TAGS: 'Available Tags',\n TAGS: 'Tags',\n SEE_ALL_COMMENTS: 'See all comments',\n valueOf: 'valueOf',\n GOT_SMTH_TO_SAY: 'Got something to say?',\n START_TO_COMMENT: 'Start to a comment or add a note in your submission.',\n NO_NOTES_PERMISSION: 'You don\\'t have permission to add notes.',\n TO_ADD_NOTE: 'To add, you can request access.',\n SHOW_FULL_TEXT: 'Show full text',\n SHOW_SUBLABELS: 'Show sublabels',\n PENDING_APPROVALS: 'Waiting For Me',\n WAITING_APPROVALS: 'Awaiting Approvals',\n COMPLETED: 'Completed Approvals',\n COLLABORATOR: 'Collaborator',\n CANVIEW_EDIT: 'Can view & edit',\n READ_ONLY: 'Read Only',\n NAME_FOR_TAB: 'ENTER A NAME FOR YOUR TAB',\n COMMENTER: 'Commenter',\n YOU_ARE_CURRENTLY_VIEWER: 'Read only permissions.',\n ASK_OWNER_FOR_ACCESS: 'You can only view these submissions. To make changes, ask form owner for edit access.',\n REQUEST_EDIT_ACCESS: 'Request Edit Access',\n YOU_ARE_ASKING_ACCESS: 'You are asking {owner} (owner) for edit access.',\n ADD_A_MESSAGE: 'Add a message for form owner...',\n SEND_REQUEST: 'Send Request',\n REQUEST_SENT: 'Request sent',\n APPROVAL_STATUS: 'Approval Status',\n SHOW_APPROVAL_STATUS: 'Show approval status',\n TERMINATE_APPROVAL_FLOW: isWorkflowReleased ? 'Cancel Flow' : 'Cancel Approval Request',\n RESTART_APPROVAL_FLOW: isWorkflowReleased ? 'Restart Flow' : 'Restart Approval Request',\n NEEDS_ACCESS: 'Someone needs access to this Inbox',\n ACCESS_WARN: \"Following users don't have the permission to access to this Inbox or to comment, so we need to share this Inbox with these users with a collaborator permission.\",\n FILTER: 'Filter',\n COMMENT: 'Comment',\n REQUEST_MORE_INFO: 'Request more information',\n CREATE_NEW_TAB: 'Create New Tab',\n CREATE_A_NEW_TAB: 'Create a New Tab',\n TAB_FOR_FILTERED: 'Create a New tab for your filtered results.',\n CANCEL_APPROVAL_FLOW_TITLE: isWorkflowReleased ? 'Cancel Flow' : 'Cancel the approval request for this submission',\n RESTART_APPROVAL_FLOW_TITLE: isWorkflowReleased ? 'Restart Flow' : 'Restart Approval Request',\n CANCEL_APPROVAL_FLOW_SUBTITLE: isWorkflowReleased\n ? 'Terminating this flow will stop all ongoing and future tasks associated with it.'\n : 'You can cancel approval request for this submission.',\n RESTART_APPROVAL_FLOW_SUBTITLE: isWorkflowReleased\n ? 'Restarting this flow will reset all actions and start the flow from the beginning.'\n : 'You can restart approval request for this submission.',\n SIGN_CANCEL_SUCCESS: 'Document is canceled successfully.',\n SIGN_CANCEL_TITLE: 'Are you sure you want to cancel this document?',\n // eslint-disable-next-line max-len\n SIGN_CANCEL_PLACEHOLDER: 'Please enter a reason for cancel',\n SIGN_CANCEL_BUTTON_TEXT: 'CANCEL DOCUMENT',\n SIGN_DOWNLOAD: 'Download Signed Document',\n SIGN_SEND_REMINDER: 'Send Reminder Email',\n SIGN_CANCEL_DOC: 'Cancel Document',\n SIGN_DOC_INFO: 'Document Information',\n SIGN_DOC_STAT: 'Document Status',\n SIGN_DOC_ID: 'Document ID',\n SIGN_DOC_DATE: 'Document sent date',\n SIGN_ALL_DOCS: 'All Documents',\n SIGN_WAITING_FOR_SIGNATURE: 'Waiting for My Signature',\n SIGN_WAITING_FOR_OTHERS: 'Waiting for Others',\n SIGN_COMPLETED: 'Completed',\n SIGN_CANCELED: 'Canceled',\n SIGN_DECLINED: 'Declined',\n SIGN_SIGNED_DOCUMENT: 'Signed Document',\n SIGN_SIGNED_DOCUMENT_WITH_AUDIT: 'Signed Document with Audit Trail',\n SIGN_REMINDER_ALREADY_SENT: 'You already sent a reminder email. You can send one reminder email within a day.',\n SIGN_TEAMS_NO_PERMISSION_FOR_REMINDER: 'You don\\'t have permission to send reminder email.',\n EDIT_REQUEST_TEXT: 'Request edit access from the inbox owner to make changes.',\n EDIT_REQUEST_ALREADY_SENT: 'Your edit request has been sent to the form owner. We’ll let you know when your request is approved.',\n EDIT_REQUEST_SENT_SUCCESS: 'Your edit request has been sent to the form owner successfully',\n REMOVE_FILTER: 'Remove Filter',\n DELETE_TAB_TITLE: 'Do you want to permanently delete',\n NO_KEEP: 'No, Keep',\n YES_DELETE: 'Yes, Delete',\n VIEW_AI_CHAT: 'View AI Chat',\n AI_CHAT_HISTORY: 'AI Chat History',\n YOU_CAN_SEE_AI_CHAT_HISTORY_DETAILS_BELOW: 'You can see AI chat history details below',\n AI_CONVERSATIONS: 'Conversations'\n};\n","/* eslint-disable camelcase */\nimport React, { useEffect, useMemo, useRef } from 'react';\nimport { string, shape, oneOfType } from 'prop-types';\nimport DOMPurify from 'dompurify';\nimport { connect } from 'react-redux';\nimport { focusAnswerField, focusAnswerThread, sanitizeDOM } from '../../utils';\nimport { questionsSelector } from '../../selectors';\n\nconst mention = props => {\n const {\n href, label, id\n } = props;\n return href ? {label} : label;\n};\n\nmention.propTypes = {\n id: string.isRequired,\n href: string.isRequired,\n label: string.isRequired\n};\n\nconst enhancedLink = props => {\n const { href, label } = props;\n return {label || href};\n};\n\nenhancedLink.propTypes = {\n href: string.isRequired,\n label: string\n};\n\nenhancedLink.defaultProps = {\n label: null\n};\n\nexport const markMap = {\n mention,\n enhancedLink\n};\n\nexport const ContentRenderer = ({ value }) => {\n const isLegacy = typeof value === 'object';\n const wrapperRef = useRef();\n\n const handleClick = e => {\n const { id, denotationChar } = e.target.parentNode?.dataset || {};\n\n if (denotationChar === '#') {\n focusAnswerField(id)(e);\n }\n };\n\n useEffect(() => {\n if (!isLegacy) {\n wrapperRef.current.addEventListener('click', handleClick);\n return () => wrapperRef?.current?.removeEventListener('click', handleClick);\n }\n }, []);\n\n return
;\n};\n\nContentRenderer.propTypes = {\n value: oneOfType([shape({}), string]).isRequired\n};\n\nconst NoteContent = ({\n content, parentID, parentType, questions\n}) => {\n const text = (parentType === 'question' && questions[parentID]?.text) || '';\n const formattedText = text?.length >= 20 ? `${text.substr(0, 18)}..` : text;\n\n const handleTagClick = () => focusAnswerThread(parentID);\n\n const sanitizedContent = useMemo(() => sanitizeDOM(content), [content]);\n\n return (\n
\n {formattedText ? : null }\n \n
\n );\n};\n\nNoteContent.propTypes = {\n content: oneOfType([shape({}), string]),\n questions: shape({}),\n parentID: string,\n parentType: string\n};\n\nNoteContent.defaultProps = {\n content: {},\n questions: {},\n parentID: false,\n parentType: false\n};\n\nconst mapStateToProps = state => (\n {\n questions: questionsSelector(state)\n }\n);\n\nexport default connect(mapStateToProps)(NoteContent);\n","/* eslint-disable react/static-property-placement */\n/* eslint-disable react/sort-comp */\n/* eslint-disable space-in-parens */\n/* eslint-disable react/no-find-dom-node */\n/* eslint-disable react/prop-types */\nimport { createElement, Component } from 'react';\nimport { findDOMNode } from 'react-dom';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport * as DOMHelpers from './dom-helpers';\nimport { testPassiveEventSupport } from './detect-passive-events';\nimport uid from './uid';\n\nlet passiveEventSupport;\n\nconst handlersMap = {};\nconst enabledInstances = {};\n\nconst touchEvents = ['touchstart', 'touchmove'];\nconst IGNORE_CLASS_NAME = 'ignore-react-onclickoutside';\n\n/**\n * Options for addEventHandler and removeEventHandler\n */\nfunction getEventHandlerOptions(instance, eventName) {\n let handlerOptions = null;\n const isTouchEvent = touchEvents.indexOf(eventName) !== -1;\n\n if (isTouchEvent && passiveEventSupport) {\n handlerOptions = { passive: !instance.props.preventDefault };\n }\n return handlerOptions;\n}\n\n/**\n * This function generates the HOC function that you'll use\n * in order to impart onOutsideClick listening to an\n * arbitrary component. It gets called at the end of the\n * bootstrapping code to yield an instance of the\n * onClickOutsideHOC function defined inside setupHOC().\n */\nexport default function onClickOutsideHOC(WrappedComponent, config) {\n const componentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n class onClickOutside extends Component {\n static displayName = `OnClickOutside(${componentName})`;\n\n static defaultProps = {\n eventTypes: ['mousedown', 'touchstart'],\n excludeScrollbar: (config && config.excludeScrollbar) || false,\n outsideClickIgnoreClass: IGNORE_CLASS_NAME,\n preventDefault: false,\n stopPropagation: false\n };\n\n static getClass = () => (WrappedComponent.getClass ? WrappedComponent.getClass() : WrappedComponent);\n\n constructor(props) {\n super(props);\n this._uid = uid();\n }\n\n /**\n * Access the WrappedComponent's instance.\n */\n getInstance() {\n if (!WrappedComponent.prototype.isReactComponent) {\n return this;\n }\n const ref = this.instanceRef;\n return ref.getInstance ? ref.getInstance() : ref;\n }\n\n __outsideClickHandler = event => {\n if (typeof this.__clickOutsideHandlerProp === 'function') {\n this.__clickOutsideHandlerProp(event);\n return;\n }\n\n const instance = this.getInstance();\n\n if (typeof instance.props.handleClickOutside === 'function') {\n instance.props.handleClickOutside(event);\n return;\n }\n\n if (typeof instance.handleClickOutside === 'function') {\n instance.handleClickOutside(event);\n return;\n }\n\n throw new Error(`WrappedComponent: ${componentName} lacks a handleClickOutside(event) function for processing outside click events.` );\n };\n\n /**\n * Add click listeners to the current document,\n * linked to this component's state.\n */\n componentDidMount() {\n // If we are in an environment without a DOM such\n // as shallow rendering or snapshots then we exit\n // early to prevent any unhandled errors being thrown.\n if (typeof document === 'undefined' || !document.createElement) {\n return;\n }\n\n const instance = this.getInstance();\n\n if (config && typeof config.handleClickOutside === 'function') {\n this.__clickOutsideHandlerProp = config.handleClickOutside(instance);\n if (typeof this.__clickOutsideHandlerProp !== 'function') {\n throw new Error(`WrappedComponent: ${componentName} lacks a function for processing outside click events specified by the handleClickOutside config option.` );\n }\n }\n\n this.componentNode = findDOMNode(this.getInstance());\n this.enableOnClickOutside();\n }\n\n componentDidUpdate() {\n this.componentNode = findDOMNode(this.getInstance());\n }\n\n /**\n * Remove all document's event listeners for this component\n */\n componentWillUnmount() {\n this.disableOnClickOutside();\n }\n\n /**\n * Can be called to explicitly enable event listening\n * for clicks and touches outside of this element.\n */\n enableOnClickOutside = () => {\n if (typeof document === 'undefined' || enabledInstances[this._uid]) {\n return;\n }\n\n if (typeof passiveEventSupport === 'undefined') {\n passiveEventSupport = testPassiveEventSupport();\n }\n\n enabledInstances[this._uid] = true;\n\n const { eventTypes } = this.props;\n let events = eventTypes;\n const {\n disableOnClickOutside,\n preventDefault,\n stopPropagation,\n excludeScrollbar,\n outsideClickIgnoreClass\n } = this.props;\n\n if (!events.forEach) {\n events = [events];\n }\n\n handlersMap[this._uid] = event => {\n if (disableOnClickOutside) return;\n if (this.componentNode === null) return;\n\n if (preventDefault) {\n event.preventDefault();\n }\n\n if (stopPropagation) {\n event.stopPropagation();\n }\n\n // eslint-disable-next-line react/prop-types\n if (excludeScrollbar && DOMHelpers.clickedScrollbar(event)) return;\n\n const current = event.target;\n\n // eslint-disable-next-line react/prop-types\n if (DOMHelpers.findHighest(current, this.componentNode, outsideClickIgnoreClass) !== document) {\n return;\n }\n\n this.__outsideClickHandler(event);\n };\n\n events.forEach(eventName => {\n document.addEventListener(eventName, handlersMap[this._uid], getEventHandlerOptions(this, eventName));\n });\n };\n\n /**\n * Can be called to explicitly disable event listening\n * for clicks and touches outside of this element.\n */\n disableOnClickOutside = () => {\n delete enabledInstances[this._uid];\n const fn = handlersMap[this._uid];\n\n if (fn && typeof document !== 'undefined') {\n const { eventTypes } = this.props;\n let events = eventTypes;\n if (!events.forEach) {\n events = [events];\n }\n events.forEach(eventName => document\n .removeEventListener(eventName, fn, getEventHandlerOptions(this, eventName)));\n delete handlersMap[this._uid];\n }\n };\n\n // eslint-disable-next-line no-return-assign\n getRef = ref => (this.instanceRef = ref);\n\n /**\n * Pass-through render\n */\n render() {\n // eslint-disable-next-line no-unused-vars\n const { excludeScrollbar, ...props } = this.props;\n\n if (WrappedComponent.prototype.isReactComponent) {\n props.ref = this.getRef;\n } else {\n props.wrappedRef = this.getRef;\n }\n\n props.disableOnClickOutside = this.disableOnClickOutside;\n props.enableOnClickOutside = this.enableOnClickOutside;\n\n return createElement(WrappedComponent, props);\n }\n }\n\n hoistNonReactStatics(onClickOutside, WrappedComponent);\n\n return onClickOutside;\n}\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n \n \n \n \n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n \n \n \n \n\n","\n \n\n","\n \n\n","\n \n\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconTabSignDeclined = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"#fff\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m19.22 4.78-.018-.014A10.213 10.213 0 0 0 4.766 19.202l.013.019.019.013A10.213 10.213 0 0 0 19.234 4.798l-.013-.019ZM12 5.19c1.212.006 2.4.34 3.437.965l-9.28 9.28A6.718 6.718 0 0 1 5.19 12 6.809 6.809 0 0 1 12 5.191Zm0 13.618a6.718 6.718 0 0 1-3.437-.965l9.28-9.28A6.718 6.718 0 0 1 18.81 12 6.809 6.809 0 0 1 12 18.809Z\"\n})));\nexport default SvgIconTabSignDeclined;","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconTabSignWaiting = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"#fff\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Zm0-16a1 1 0 0 1 1 1v4.132l1.445-.964a1 1 0 0 1 1.11 1.664l-2.989 1.992a.994.994 0 0 1-1.038.058.994.994 0 0 1-.528-.896V7a1 1 0 0 1 1-1Z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m15 11-3 2\",\n stroke: \"#fff\",\n strokeOpacity: 0.5,\n strokeWidth: 2,\n strokeLinecap: \"round\"\n})));\nexport default SvgIconTabSignWaiting;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconTabSignCompleted = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"#fff\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2Zm-1.25 14.25L6.5 12l1.75-1.75 2.5 2.5 5-5L17.5 9.5l-6.75 6.75Z\"\n})));\nexport default SvgIconTabSignCompleted;","var _path, _path2, _path3, _path4, _path5, _path6;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconTabSignAll = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3 20V4C3 2.34315 4.34315 1 6 1H15.7929C15.9255 1 16.0527 1.05268 16.1464 1.14645L18.5 3.5L20.8536 5.85355C20.9473 5.94732 21 6.0745 21 6.20711V20C21 21.6569 19.6569 23 18 23H6C4.34315 23 3 21.6569 3 20Z\",\n fill: \"#E4EBFC\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 4V1L21 6H18C16.8954 6 16 5.10457 16 4Z\",\n fill: \"#C8CEED\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.5 10.14C6.5 9.5104 7.0104 9 7.64 9H16.36C16.9896 9 17.5 9.5104 17.5 10.14C17.5 10.7696 16.9896 11.28 16.36 11.28H7.64C7.0104 11.28 6.5 10.7696 6.5 10.14Z\",\n fill: \"#0099FF\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.5 14.0599C6.5 13.4303 7.0104 12.9199 7.64 12.9199H16.36C16.9896 12.9199 17.5 13.4303 17.5 14.0599C17.5 14.6895 16.9896 15.1999 16.36 15.1999H7.64C7.0104 15.1999 6.5 14.6895 6.5 14.0599Z\",\n fill: \"#FF6100\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.30683 18.1013C9.30683 18.028 9.2784 18.0427 9.23638 18.0437C9.18055 18.0449 8.13146 18.6975 8.13146 18.6975C8.13146 18.6975 7.67276 18.895 7.54906 18.9948C6.83173 19.687 6.59114 19.0949 6.549 18.9949C6.40684 18.6576 6.59629 18.3519 6.83173 18.1013C6.95418 18.0025 7.54872 17.4948 8.18803 17.1901C8.51697 17.0333 8.79984 16.8634 9.1815 16.8549C9.33125 16.8398 9.76918 16.796 10.0488 16.9948C10.2561 17.1423 10.2758 17.6835 10.3177 17.7816C10.3955 17.9634 10.455 18.0052 10.455 18.3555C10.455 18.5267 10.1334 19.0902 10.0498 19.4899C10.0906 19.4668 10.391 19.3681 10.5722 19.309C10.8339 19.2236 10.9853 19.2373 11.2492 19.1122L11.4548 19.0148C12.5008 18.5186 14.0488 17.9949 14.5019 17.8626C14.6348 17.8238 15.2126 17.7565 15.5488 17.9949C15.8599 18.2154 16.0191 18.8507 16.0191 18.8507C16.0191 18.8507 16.0488 18.9949 16.4433 18.8507V19.7644C16.2255 19.6988 16.0593 19.6901 15.9299 19.5949C15.6488 19.299 15.4816 18.8561 15.3496 18.8949C14.4579 19.1564 14.0488 19.4949 12.0482 20.1849C11.6494 20.3224 11.3603 20.5438 11.0488 20.5949C10.6121 20.6665 10.2823 20.7392 9.93521 20.7045C9.68854 20.6798 9.58953 20.6174 9.43472 20.4661C9.22641 20.2624 9.26515 20.0434 9.1815 19.7644C9.09281 19.4686 8.98871 19.2996 8.99902 18.9949C9.00765 18.74 9.1815 18.3555 9.1815 18.3555C9.1815 18.3555 9.30683 18.1746 9.30683 18.1013Z\",\n fill: \"#FFB629\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.8478 12.5605C22.5217 12.2344 21.993 12.2344 21.667 12.5605L19.5293 14.6982L16.997 17.2304C16.8688 17.3586 16.7779 17.5192 16.734 17.695L16.3527 19.2201C16.2762 19.5259 16.5532 19.8029 16.859 19.7264L18.3841 19.3451C18.5599 19.3012 18.7205 19.2103 18.8487 19.0821L21.3809 16.5498L23.5186 14.4121C23.8447 14.0861 23.8447 13.5574 23.5186 13.2313L22.8478 12.5605Z\",\n fill: \"#0A1551\"\n})));\nexport default SvgIconTabSignAll;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconTabSignWaitingMySignature = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"#fff\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.462 12c2.473 0 4.477-2.015 4.477-4.5S14.934 3 12.462 3C9.99 3 7.986 5.015 7.986 7.5S9.99 12 12.462 12Zm-.002 1.5c-5.035 0-7.46 3.16-7.46 5v1c0 .828.668 1.5 1.492 1.5H18.43c.824 0 1.492-.672 1.492-1.5v-1c0-1.84-2.425-5-7.46-5Z\"\n})));\nexport default SvgIconTabSignWaitingMySignature;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconTabSignCanceled = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"#fff\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 2C6.49468 2 2 6.49473 2 12C2 17.5053 6.49454 22 12 22C17.5055 22 22 17.5055 22 12C22 6.49454 17.5055 2 12 2ZM15.9361 14.4468C16.3617 14.8724 16.3617 15.5373 15.9361 15.9629C15.75 16.1489 15.4575 16.2554 15.1914 16.2554C14.9254 16.2554 14.6596 16.1491 14.4468 15.9363L12 13.5161L9.55314 15.9629C9.34035 16.149 9.07433 16.2554 8.80846 16.2554C8.54243 16.2554 8.2766 16.1491 8.06378 15.9364C7.63821 15.5108 7.63821 14.8459 8.06378 14.4203L10.5106 11.9735L8.06378 9.52668C7.63821 9.10111 7.63821 8.43621 8.06378 8.01063C8.48936 7.58505 9.15425 7.58505 9.57983 8.01063L12.0266 10.4574L14.4735 8.01063C14.899 7.58505 15.5639 7.58505 15.9895 8.01063C16.4151 8.4362 16.4151 9.1011 15.9895 9.52668L13.516 12L15.9361 14.4468Z\"\n})));\nexport default SvgIconTabSignCanceled;","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgLogoGrey = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 91 16\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M63.4889 12.4421C62.9321 12.4421 62.4018 12.2392 62.0108 11.8463C61.621 11.4547 61.3578 10.8621 61.3578 10.061C61.3578 9.25016 61.6213 8.65797 62.0104 8.26906C62.4008 7.87888 62.931 7.67979 63.4889 7.67979C64.0469 7.67979 64.5771 7.87888 64.9675 8.26906C65.3566 8.65797 65.6201 9.25016 65.6201 10.061C65.6201 10.8718 65.3566 11.464 64.9675 11.8529C64.5771 12.243 64.0469 12.4421 63.4889 12.4421ZM63.4889 5.0913C60.6611 5.0913 58.5193 7.17191 58.5193 10.061C58.5193 12.9312 60.6606 15.0306 63.4889 15.0306C66.3173 15.0306 68.4586 12.9312 68.4586 10.061C68.4586 7.17191 66.3168 5.0913 63.4889 5.0913Z\",\n fill: \"#6F76A7\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M39.974 12.4421C39.4172 12.4421 38.8868 12.2392 38.4959 11.8463C38.1061 11.4547 37.8429 10.8621 37.8429 10.061C37.8429 9.25016 38.1064 8.65797 38.4955 8.26906C38.8859 7.87888 39.4161 7.67979 39.974 7.67979C40.5319 7.67979 41.0621 7.87888 41.4525 8.26906C41.8417 8.65797 42.1052 9.25016 42.1052 10.061C42.1052 10.8718 41.8417 11.464 41.4525 11.8529C41.0621 12.243 40.5319 12.4421 39.974 12.4421ZM39.974 5.0913C37.1462 5.0913 35.0044 7.17191 35.0044 10.061C35.0044 12.9312 37.1457 15.0306 39.974 15.0306C42.8024 15.0306 44.9437 12.9312 44.9437 10.061C44.9437 7.17191 42.8019 5.0913 39.974 5.0913Z\",\n fill: \"#6F76A7\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M76.1878 15.0297H79.0094V9.39641C79.0094 8.93354 79.1542 8.53006 79.4098 8.24469C79.6633 7.96171 80.0366 7.78222 80.5228 7.78222C81.0322 7.78222 81.3784 7.95095 81.6005 8.21122C81.8265 8.47613 81.9439 8.85957 81.9439 9.32226V15.0297H84.747V9.39641C84.747 8.94341 84.8915 8.5391 85.1461 8.25061C85.3984 7.96464 85.7673 7.78222 86.2419 7.78222C86.7615 7.78222 87.1069 7.95144 87.326 8.21061C87.5495 8.47488 87.6631 8.85805 87.6631 9.32226V15.0297H90.4108V8.82176C90.4108 7.55567 89.994 6.6366 89.3389 6.03543C88.6868 5.43712 87.818 5.17139 86.943 5.17139C86.3226 5.17139 85.7531 5.27691 85.2415 5.5339C84.8062 5.75263 84.4208 6.07708 84.0848 6.5252C83.5403 5.63965 82.5464 5.17139 81.3714 5.17139C80.5148 5.17139 79.5234 5.51112 78.8987 6.17171V5.43091H76.1878V15.0297Z\",\n fill: \"#6F76A7\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M75.1255 5.4082V8.28359L74.9053 8.23918C74.6425 8.18619 74.4156 8.16865 74.206 8.16865C73.6077 8.16865 73.0761 8.3151 72.6945 8.67083C72.3154 9.02421 72.0541 9.61254 72.0541 10.5618V15.0303H69.2402V5.42768H71.9806V6.32655C72.6583 5.5118 73.7108 5.35352 74.3715 5.35352C74.5831 5.35352 74.7747 5.37284 74.9567 5.39118L75.1255 5.4082Z\",\n fill: \"#6F76A7\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M24.4846 10.2972L27.2212 10.2972L27.2523 10.3276C27.2732 10.3479 27.2876 10.3769 27.2905 10.4092C27.3435 11.0073 27.579 11.4584 27.9313 11.759C28.282 12.058 28.7357 12.1972 29.2085 12.1972C29.7854 12.1972 30.2572 11.9851 30.5831 11.6164C30.9071 11.2499 31.0759 10.7414 31.0759 10.1652V2.18164H34.0347V10.2478C34.0347 12.83 32.0553 14.9895 29.2291 14.9895C27.8173 14.9895 26.6334 14.5213 25.8032 13.7088C24.9922 12.915 24.5078 11.7821 24.4863 10.4056L24.4846 10.2972Z\",\n fill: \"#6F76A7\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M58.1191 3.50347L58.2754 3.54813V1.37034L58.2035 1.33767C58.0935 1.28764 57.9164 1.24235 57.712 1.20938C57.5049 1.17599 57.2607 1.15379 57.0118 1.15379C56.0418 1.15379 54.9513 1.47476 54.3867 2.053C53.8223 2.63092 53.5111 3.45464 53.5111 4.44016V4.88942H52.0935V7.35076H53.5111V15.029H56.3564V7.35076H58.2754V4.88942H56.3564V4.47474C56.3564 4.03189 56.5113 3.77696 56.7093 3.62846C56.9135 3.47529 57.1819 3.42175 57.4267 3.42175C57.7948 3.42175 58.0082 3.47178 58.1191 3.50347Z\",\n fill: \"#6F76A7\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M51.0751 12.6715L51.2219 12.6266V14.813L51.1544 14.8458C51.051 14.896 50.8846 14.9415 50.6925 14.9746C50.4979 15.0081 50.2684 15.0304 50.0344 15.0304C49.1229 15.0304 48.1036 14.7082 47.573 14.1276C47.0427 13.5474 46.7502 12.7205 46.7502 11.7311V7.38836H45.418V4.92027L46.7502 4.92027V2.25196H49.4185V4.92027L51.2219 4.92027V7.38836L49.4185 7.38836V11.6964C49.4185 12.141 49.5641 12.3969 49.7502 12.546C49.9421 12.6998 50.1943 12.7535 50.4243 12.7535C50.7703 12.7535 50.9708 12.7033 51.0751 12.6715Z\",\n fill: \"#6F76A7\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.98543 15.2053C4.2875 15.4981 4.07404 15.9999 3.64508 15.9999H0.96061C0.430966 15.9999 0 15.5821 0 15.0686V12.4663C0 12.0504 0.517562 11.8435 0.81964 12.1363L3.98543 15.2053Z\",\n fill: \"#6F76A7\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.18184 15.4078C7.38722 14.6184 7.38722 13.3385 8.18184 12.549L11.0496 9.69999C11.8442 8.91055 13.1325 8.91055 13.9271 9.69999C14.7218 10.4894 14.7218 11.7693 13.9271 12.5588L11.0594 15.4078C10.2648 16.1973 8.97645 16.1973 8.18184 15.4078Z\",\n fill: \"#6F76A7\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0.609326 8.24892C-0.185287 7.45948 -0.185286 6.17956 0.609327 5.39012L5.43546 0.592077C6.23007 -0.197358 7.51839 -0.197359 8.31301 0.592076C9.10762 1.38151 9.10762 2.66144 8.31301 3.45087L3.48688 8.24892C2.69226 9.03835 1.40394 9.03835 0.609326 8.24892Z\",\n fill: \"#6F76A7\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.55104 11.6691C3.75642 10.8797 3.75643 9.59974 4.55104 8.81031L11.072 2.33182C11.8666 1.54239 13.155 1.54239 13.9496 2.33182C14.7442 3.12126 14.7442 4.40118 13.9496 5.19062L7.42859 11.6691C6.63397 12.4585 5.34565 12.4585 4.55104 11.6691Z\",\n fill: \"#6F76A7\"\n})));\nexport default SvgLogoGrey;","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconQuestionAlignmentLeft = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 149 38\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n className: \"jfQuestion\",\n d: \"M4 0h46a4 4 0 014 4 4 4 0 01-4 4H4a4 4 0 01-4-4 4 4 0 014-4z\",\n fill: \"rgba(255,255,255,0.3)\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"jfAnswer\",\n d: \"M65 3h75a2 2 0 012 2 2 2 0 01-2 2H65a2 2 0 01-2-2 2 2 0 012-2zm0 10h57a2 2 0 012 2 2 2 0 01-2 2H65a2 2 0 01-2-2 2 2 0 012-2zm0 11h82a2 2 0 012 2 2 2 0 01-2 2H65a2 2 0 01-2-2 2 2 0 012-2zm0 10h75a2 2 0 012 2 2 2 0 01-2 2H65a2 2 0 01-2-2 2 2 0 012-2z\",\n fill: \"#fff\"\n})));\nexport default SvgIconQuestionAlignmentLeft;","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconQuestionAlignmentTop = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 149 38\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n className: \"jfQuestion\",\n d: \"M4 0h46a4 4 0 014 4 4 4 0 01-4 4H4a4 4 0 01-4-4 4 4 0 014-4z\",\n fill: \"rgba(255,255,255,0.3)\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"jfAnswer\",\n d: \"M2 15h109a2 2 0 012 2 2 2 0 01-2 2H2a2 2 0 01-2-2 2 2 0 012-2zm0 10h83a2 2 0 012 2 2 2 0 01-2 2H2a2 2 0 01-2-2 2 2 0 012-2zm0 9h145a2 2 0 012 2 2 2 0 01-2 2H2a2 2 0 01-2-2 2 2 0 012-2z\",\n fill: \"#fff\"\n})));\nexport default SvgIconQuestionAlignmentTop;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconWide = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 36 24\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip0_978_4548)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M33.0477 0.500366H14.9523C14.4264 0.500366 14 0.948197 14 1.50044C14 2.05268 14.4264 2.50037 14.9523 2.50037H33.0477C33.5736 2.50037 34 2.05254 34 1.50029C34 0.948048 33.5736 0.500366 33.0477 0.500366Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M28.7693 7.50037H15.2307C14.551 7.50037 14 7.94805 14 8.50029V8.50044C14 9.05268 14.551 9.50037 15.2307 9.50037H28.7693C29.449 9.50037 30 9.05268 30 8.50044V8.50029C30 7.94805 29.449 7.50037 28.7693 7.50037Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M28.7693 21.5004H15.2307C14.551 21.5004 14 21.948 14 22.5003V22.5004C14 23.0527 14.551 23.5004 15.2307 23.5004H28.7693C29.449 23.5004 30 23.0527 30 22.5004V22.5003C30 21.948 29.449 21.5004 28.7693 21.5004Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M30.9412 14.5004H15.0588C14.474 14.5004 14 14.948 14 15.5003V15.5004C14 16.0527 14.474 16.5004 15.0588 16.5004H30.9412C31.526 16.5004 32 16.0527 32 15.5004V15.5003C32 14.948 31.526 14.5004 30.9412 14.5004Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.35355 2.14681C8.15829 1.95155 7.84171 1.95155 7.64645 2.14681L5.14645 4.64681C4.95118 4.84207 4.95118 5.15866 5.14645 5.35392C5.34171 5.54918 5.65829 5.54918 5.85355 5.35392L7.5 3.70747V9.50037C7.5 9.77651 7.72386 10.0004 8 10.0004C8.27614 10.0004 8.5 9.77651 8.5 9.50037V3.70747L10.1464 5.35392C10.3417 5.54918 10.6583 5.54918 10.8536 5.35392C11.0488 5.15866 11.0488 4.84207 10.8536 4.64681L8.35355 2.14681Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.5 14.5004C8.5 14.2242 8.27614 14.0004 8 14.0004C7.72386 14.0004 7.5 14.2242 7.5 14.5004V20.2933L5.85355 18.6468C5.65829 18.4516 5.34171 18.4516 5.14645 18.6468C4.95118 18.8421 4.95118 19.1587 5.14645 19.3539L7.64645 21.8539C7.84171 22.0492 8.15829 22.0492 8.35355 21.8539L10.8536 19.3539C11.0488 19.1587 11.0488 18.8421 10.8536 18.6468C10.6583 18.4516 10.3417 18.4516 10.1464 18.6468L8.5 20.2933V14.5004Z\",\n fill: \"white\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip0_978_4548\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 36,\n height: 24,\n fill: \"white\",\n transform: \"translate(0 0.000366211)\"\n})))));\nexport default SvgIconWide;","var _path, _path2, _path3, _path4, _path5;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconNormal = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.8572 2H1.14281C0.511653 2 0 2.44768 0 2.99993V3.00007C0 3.55232 0.511653 4 1.14281 4H22.8572C23.4883 4 24 3.55232 24 3.00007V2.99993C24 2.44768 23.4883 2 22.8572 2Z\",\n fill: \"white\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.8236 6.50024H1.17642C0.526701 6.50024 0 6.94793 0 7.50017V7.50032C0 8.05256 0.526701 8.50024 1.17642 8.50024H18.8236C19.4733 8.50024 20 8.05256 20 7.50032V7.50017C20 6.94793 19.4733 6.50024 18.8236 6.50024Z\",\n fill: \"white\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.9231 11.0004H1.07687C0.482133 11.0004 0 11.448 0 12.0003V12.0004C0 12.5527 0.482133 13.0004 1.07687 13.0004H12.9231C13.5179 13.0004 14 12.5527 14 12.0004V12.0003C14 11.448 13.5179 11.0004 12.9231 11.0004Z\",\n fill: \"white\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.8236 15.5006H1.17642C0.526701 15.5006 0 15.9483 0 16.5005V16.5007C0 17.0529 0.526701 17.5006 1.17642 17.5006H18.8236C19.4733 17.5006 20 17.0529 20 16.5007V16.5005C20 15.9483 19.4733 15.5006 18.8236 15.5006Z\",\n fill: \"white\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.88894 20.0007H1.11106C0.497437 20.0007 0 20.4484 0 21.0007V21.0008C0 21.553 0.497437 22.0007 1.11106 22.0007H8.88894C9.50256 22.0007 10 21.553 10 21.0008V21.0007C10 20.4484 9.50256 20.0007 8.88894 20.0007Z\",\n fill: \"white\"\n})));\nexport default SvgIconNormal;","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconCompact = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 36 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31.0477 1.00037H12.9523C12.4264 1.00037 12 1.4482 12 2.00044C12 2.55268 12.4264 3.00037 12.9523 3.00037H31.0477C31.5736 3.00037 32 2.55254 32 2.00029C32 1.44805 31.5736 1.00037 31.0477 1.00037Z\",\n fill: \"white\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M34.5883 5.00037H13.4117C12.632 5.00037 12 5.44805 12 6.00029V6.00044C12 6.55268 12.632 7.00037 13.4117 7.00037H34.5883C35.368 7.00037 36 6.55268 36 6.00044V6.00029C36 5.44805 35.368 5.00037 34.5883 5.00037Z\",\n fill: \"white\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26.7693 9.00037H13.2307C12.551 9.00037 12 9.44805 12 10.0003V10.0004C12 10.5527 12.551 11.0004 13.2307 11.0004H26.7693C27.449 11.0004 28 10.5527 28 10.0004V10.0003C28 9.44805 27.449 9.00037 26.7693 9.00037Z\",\n fill: \"white\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26.7693 21.0004H13.2307C12.551 21.0004 12 21.448 12 22.0003V22.0004C12 22.5527 12.551 23.0004 13.2307 23.0004H26.7693C27.449 23.0004 28 22.5527 28 22.0004V22.0003C28 21.448 27.449 21.0004 26.7693 21.0004Z\",\n fill: \"white\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M28.9412 13.0004H13.0588C12.474 13.0004 12 13.448 12 14.0003V14.0004C12 14.5527 12.474 15.0004 13.0588 15.0004H28.9412C29.526 15.0004 30 14.5527 30 14.0004V14.0003C30 13.448 29.526 13.0004 28.9412 13.0004Z\",\n fill: \"white\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.1112 17.0004H12.8888C12.3979 17.0004 12 17.448 12 18.0003V18.0004C12 18.5527 12.3979 19.0004 12.8888 19.0004H19.1112C19.6021 19.0004 20 18.5527 20 18.0004V18.0003C20 17.448 19.6021 17.0004 19.1112 17.0004Z\",\n fill: \"white\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M6.35355 14.1468C6.15829 13.9516 5.84171 13.9516 5.64645 14.1468L3.14645 16.6468C2.95118 16.8421 2.95118 17.1587 3.14645 17.3539C3.34171 17.5492 3.65829 17.5492 3.85355 17.3539L5.5 15.7075V21.5004C5.5 21.7765 5.72386 22.0004 6 22.0004C6.27614 22.0004 6.5 21.7765 6.5 21.5004V15.7075L8.14645 17.3539C8.34171 17.5492 8.65829 17.5492 8.85355 17.3539C9.04882 17.1587 9.04882 16.8421 8.85355 16.6468L6.35355 14.1468Z\",\n fill: \"white\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M6.5 2.50037C6.5 2.22422 6.27614 2.00037 6 2.00037C5.72386 2.00037 5.5 2.22422 5.5 2.50037V8.29326L3.85355 6.64681C3.65829 6.45155 3.34171 6.45155 3.14645 6.64681C2.95118 6.84207 2.95118 7.15866 3.14645 7.35392L5.64645 9.85392C5.84171 10.0492 6.15829 10.0492 6.35355 9.85392L8.85355 7.35392C9.04882 7.15866 9.04882 6.84207 8.85355 6.64681C8.65829 6.45155 8.34171 6.45155 8.14645 6.64681L6.5 8.29326V2.50037Z\",\n fill: \"white\"\n})));\nexport default SvgIconCompact;","var _circle, _path, _path2, _path3, _path4, _path5, _path6, _rect, _rect2, _path7, _path8, _g, _path9, _path10, _path11, _path12;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgEmptyScreen = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 105 117\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 52.5,\n cy: 64.5,\n r: 52.5,\n fill: \"#E3E5F5\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M32 72.4537L53.8374 56.2778L75.6747 72.4537V94.0214H32V72.4537Z\",\n fill: \"#B1C3E9\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37.2656 51.4449C37.2656 48.8138 39.2783 46.75 41.6782 46.75H66.2004C68.6003 46.75 70.613 48.8138 70.613 51.4449V84.1143C70.613 86.7453 68.6003 88.8092 66.2004 88.8092H41.6782C39.2783 88.8092 37.2656 86.7453 37.2656 84.1143V51.4449Z\",\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M43.0508 56.3919C43.0508 55.1031 44.0955 54.0583 45.3843 54.0583H62.4968C63.7856 54.0583 64.8304 55.1031 64.8304 56.3919C64.8304 57.6806 63.7856 58.7254 62.4968 58.7254H45.3843C44.0955 58.7254 43.0508 57.6806 43.0508 56.3919Z\",\n fill: \"#0099FF\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M43.0508 64.1702C43.0508 62.8814 44.0955 61.8367 45.3843 61.8367H62.4968C63.7856 61.8367 64.8304 62.8814 64.8304 64.1702C64.8304 65.459 63.7856 66.5037 62.4968 66.5037H45.3843C44.0955 66.5037 43.0508 65.459 43.0508 64.1702Z\",\n fill: \"#FF6100\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M43.0508 71.9485C43.0508 70.6597 44.0955 69.615 45.3843 69.615H62.4968C63.7856 69.615 64.8304 70.6597 64.8304 71.9485C64.8304 73.2373 63.7856 74.282 62.4968 74.282H45.3843C44.0955 74.282 43.0508 73.2373 43.0508 71.9485Z\",\n fill: \"#FFB629\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M38.5 100H69.375C72.9649 100 75.875 96.5088 75.875 92.7227V73L53.9375 85.4015L32 73V92.7227C32 96.5088 34.9101 100 38.5 100Z\",\n fill: \"#C6D6F7\"\n})), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n className: \"buble big\",\n x: 23,\n y: 1,\n width: 60.4502,\n height: 32.8534,\n rx: 4,\n fill: \"#5A80FF\"\n})), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n className: \"buble small\",\n x: 35,\n y: 1,\n width: 37,\n height: 33,\n rx: 4,\n fill: \"#249BB4\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"buble\",\n d: \"M53.82 27.8216C53.4314 27.442 52.8108 27.442 52.4222 27.8216L47.7047 32.4311C47.3383 32.7891 47.3017 33.3662 47.62 33.7676L52.3375 39.7177C52.7379 40.2227 53.5043 40.2227 53.9047 39.7177L58.6222 33.7676C58.9404 33.3662 58.9039 32.7891 58.5374 32.4311L53.82 27.8216Z\",\n fill: \"#249BB4\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"zero\",\n d: \"M72.4082 17.224C72.4082 15.256 72.0722 13.744 71.3042 12.784C70.7762 12.088 70.0322 11.632 68.9042 11.632C67.7762 11.632 67.0562 12.088 66.5042 12.784C65.7602 13.744 65.4242 15.256 65.4242 17.224C65.4242 19.192 65.7602 20.704 66.5042 21.664C67.0562 22.36 67.7762 22.816 68.9042 22.816C70.0322 22.816 70.7762 22.36 71.3042 21.664C72.0482 20.704 72.4082 19.192 72.4082 17.224ZM75.2642 17.224C75.2642 19.288 74.9282 21.232 73.8722 22.816C72.8642 24.328 71.2322 25.36 68.9042 25.36C66.5762 25.36 64.9682 24.328 63.9602 22.816C62.9042 21.232 62.5682 19.288 62.5682 17.224C62.5682 15.16 62.9042 13.216 63.9602 11.632C64.9682 10.12 66.5762 9.088 68.9042 9.088C71.2322 9.088 72.8642 10.12 73.8722 11.632C74.9282 13.216 75.2642 15.16 75.2642 17.224Z\",\n fill: \"white\"\n})), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n className: \"waiting\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 41,\n cy: 18,\n r: 9,\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 41.0006,\n cy: 17.9993,\n r: 1.28571,\n fill: \"#5A80FF\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 44.8599,\n cy: 17.9993,\n r: 1.28571,\n fill: \"#5A80FF\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 37.1451,\n cy: 17.9993,\n r: 1.28571,\n fill: \"#5A80FF\"\n}))), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"asana\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M43.4 11C43.4 12.9882 41.7882 14.6 39.8 14.6C37.8118 14.6 36.2 12.9882 36.2 11C36.2 9.01178 37.8118 7.4 39.8 7.4C41.7882 7.4 43.4 9.01178 43.4 11ZM40.7197 25.3337C40.943 25.3393 41.064 25.0537 40.9204 24.8825C40.2211 24.0486 39.8 22.9735 39.8 21.8C39.8 19.5814 41.3052 17.7143 43.3502 17.1643C43.5649 17.1066 43.6252 16.8135 43.4296 16.7076C42.3639 16.1306 41.1237 15.8 39.8 15.8C35.8235 15.8 32.6 18.7839 32.6 22.4648C32.6 25.5485 34.8626 25.47 37.9349 25.3634C38.5298 25.3428 39.155 25.3211 39.8 25.3211C40.1116 25.3211 40.4185 25.3261 40.7197 25.3337ZM49.4 22.4C49.4 24.7196 47.5196 26.6 45.2 26.6C42.8804 26.6 41 24.7196 41 22.4C41 20.0804 42.8804 18.2 45.2 18.2C47.5196 18.2 49.4 20.0804 49.4 22.4ZM47.9841 20.1391C48.2387 20.3512 48.273 20.7295 48.0609 20.9841L45.0609 24.5841C44.953 24.7136 44.7956 24.7917 44.6272 24.7994C44.4588 24.807 44.2949 24.7435 44.1757 24.6243L42.9757 23.4243C42.7414 23.19 42.7414 22.8101 42.9757 22.5757C43.21 22.3414 43.5899 22.3414 43.8242 22.5757L44.5597 23.3112L47.139 20.2159C47.3512 19.9613 47.7295 19.9269 47.9841 20.1391Z\",\n fill: \"white\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"trash\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M34.8401 12.7183H46.4334V12.9634C46.4333 17.2725 46.434 21.5815 46.4327 25.8905C46.4324 27.1058 45.5938 27.9965 44.4451 27.9977C41.9056 28.0006 39.3662 28.0006 36.8268 27.9977C35.6785 27.9964 34.8409 27.1055 34.8406 25.8892C34.8393 21.5802 34.8401 17.2712 34.8401 12.9621C34.8401 12.8884 34.8401 12.8147 34.8401 12.7183ZM43.5206 24.9247V15.7683L43.277 15.7684C42.812 15.7684 42.347 15.7682 41.882 15.7684C41.6037 15.7685 41.6033 15.7688 41.6033 16.0634C41.6031 18.9239 41.6032 21.7843 41.6032 24.6447V24.9247H43.5206ZM37.7524 24.9404C38.3115 24.9403 38.8532 24.9406 39.3949 24.9401C39.6697 24.9399 39.6702 24.9394 39.6702 24.6396C39.6702 21.7811 39.6702 18.9226 39.6702 16.0642C39.6702 16.0114 39.6853 15.9502 39.6651 15.9079C39.6392 15.8538 39.5852 15.7759 39.5425 15.7752C38.9507 15.7665 38.3587 15.7694 37.7524 15.7694V24.9404Z\",\n fill: \"white\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"trash\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M33.6641 11.4963V9.17256C33.7597 9.17256 33.845 9.17256 33.9304 9.17256C35.0977 9.17256 36.2651 9.17723 37.4324 9.16528C37.5488 9.16414 37.6884 9.09295 37.7761 9.00078C38.0341 8.72945 38.2657 8.42382 38.5207 8.14823C38.5931 8.06998 38.7099 8.00773 38.8068 8.007C40.0258 7.99765 41.245 7.99765 42.464 8.00711C42.561 8.00783 42.6779 8.07039 42.7504 8.14885C43.0054 8.42444 43.2368 8.73017 43.4949 9.0014C43.5826 9.09358 43.7223 9.16414 43.8387 9.16539C44.9986 9.17723 46.1587 9.17256 47.3187 9.17256C47.4065 9.17256 47.4943 9.17256 47.6015 9.17256V11.4963H33.6641Z\",\n fill: \"white\"\n})), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"archive\",\n d: \"M48.75 8H31.25C30.5 8 30 8.5 30 9.25V26.75C30 27.5 30.5 28 31.25 28H48.75C49.5 28 50 27.5 50 26.75V9.25C50 8.5 49.5 8 48.75 8ZM47.5 10.5V19.25H43.75C43 19.25 42.5 19.75 42.5 20.5V23H37.5V20.5C37.5 19.75 37 19.25 36.25 19.25H32.5V10.5H47.5Z\",\n fill: \"white\"\n})));\nexport default SvgEmptyScreen;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgEmptyFilter = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 108 120\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip0)\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 54.5,\n cy: 58.0742,\n r: 52.5,\n fill: \"#F3F3FE\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M35.4727 24.9586L54.4248 10.9199L73.377 24.9586V43.6768H35.4727V24.9586Z\",\n fill: \"#B1C3E9\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M40.1406 6.72551C40.1406 4.49177 41.8479 2.75 43.8711 2.75H65.1534C67.1766 2.75 68.8839 4.49177 68.8839 6.72551V35.0786C68.8839 37.3123 67.1766 39.0541 65.1534 39.0541H43.8711C41.8479 39.0541 40.1406 37.3123 40.1406 35.0786V6.72551Z\",\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M45.0625 11.0189C45.0625 9.90037 45.9692 8.99365 47.0877 8.99365H61.9393C63.0578 8.99365 63.9645 9.90037 63.9645 11.0189C63.9645 12.1374 63.0578 13.0441 61.9393 13.0441H47.0877C45.9692 13.0441 45.0625 12.1374 45.0625 11.0189Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M45.0625 17.7694C45.0625 16.6509 45.9692 15.7441 47.0877 15.7441H61.9393C63.0578 15.7441 63.9645 16.6509 63.9645 17.7694C63.9645 18.8879 63.0578 19.7946 61.9393 19.7946H47.0877C45.9692 19.7946 45.0625 18.8879 45.0625 17.7694Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M45.0625 24.5203C45.0625 23.4018 45.9692 22.4951 47.0877 22.4951H61.9393C63.0578 22.4951 63.9645 23.4018 63.9645 24.5203C63.9645 25.6388 63.0578 26.5456 61.9393 26.5456H47.0877C45.9692 26.5456 45.0625 25.6388 45.0625 24.5203Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.1139 48.8653H67.9096C71.0252 48.8653 73.5508 45.8354 73.5508 42.5495V25.4326L54.5117 36.1956L35.4727 25.4326V42.5495C35.4727 45.8354 37.9983 48.8653 41.1139 48.8653Z\",\n fill: \"#C6D6F7\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9 75.899L27.9522 61.8604L46.9043 75.899V94.6172H9V75.899Z\",\n fill: \"#B1C3E9\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.6641 57.6659C13.6641 55.4322 15.3714 53.6904 17.3945 53.6904H38.6768C40.7 53.6904 42.4073 55.4322 42.4073 57.6659V86.019C42.4073 88.2527 40.7 89.9945 38.6768 89.9945H17.3945C15.3714 89.9945 13.6641 88.2527 13.6641 86.019V57.6659Z\",\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.5859 61.9593C18.5859 60.8408 19.4927 59.9341 20.6112 59.9341H35.4627C36.5812 59.9341 37.488 60.8408 37.488 61.9593C37.488 63.0778 36.5812 63.9845 35.4627 63.9845H20.6112C19.4927 63.9845 18.5859 63.0778 18.5859 61.9593Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.5859 68.7098C18.5859 67.5913 19.4927 66.6846 20.6112 66.6846H35.4627C36.5812 66.6846 37.488 67.5913 37.488 68.7098C37.488 69.8283 36.5812 70.735 35.4627 70.735H20.6112C19.4927 70.735 18.5859 69.8283 18.5859 68.7098Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.5859 75.4608C18.5859 74.3423 19.4927 73.4355 20.6112 73.4355H35.4627C36.5812 73.4355 37.488 74.3423 37.488 75.4608C37.488 76.5793 36.5812 77.486 35.4627 77.486H20.6112C19.4927 77.486 18.5859 76.5793 18.5859 75.4608Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.6412 99.8058H41.4369C44.5525 99.8058 47.0781 96.7758 47.0781 93.4899V76.373L28.0391 87.136L9 76.373V93.4899C9 96.7758 11.5257 99.8058 14.6412 99.8058Z\",\n fill: \"#C6D6F7\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M60.9219 75.899L79.874 61.8604L98.8262 75.899V94.6172H60.9219V75.899Z\",\n fill: \"#B1C3E9\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M65.5859 57.6659C65.5859 55.4322 67.2933 53.6904 69.3164 53.6904H90.5987C92.6219 53.6904 94.3292 55.4322 94.3292 57.6659V86.019C94.3292 88.2527 92.6219 89.9945 90.5987 89.9945H69.3164C67.2933 89.9945 65.5859 88.2527 65.5859 86.019V57.6659Z\",\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M70.5078 61.9593C70.5078 60.8408 71.4145 59.9341 72.533 59.9341H87.3846C88.5031 59.9341 89.4098 60.8408 89.4098 61.9593C89.4098 63.0778 88.5031 63.9845 87.3846 63.9845H72.533C71.4145 63.9845 70.5078 63.0778 70.5078 61.9593Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M70.5078 68.7098C70.5078 67.5913 71.4145 66.6846 72.533 66.6846H87.3846C88.5031 66.6846 89.4098 67.5913 89.4098 68.7098C89.4098 69.8283 88.5031 70.735 87.3846 70.735H72.533C71.4145 70.735 70.5078 69.8283 70.5078 68.7098Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M70.5078 75.4608C70.5078 74.3423 71.4145 73.4355 72.533 73.4355H87.3846C88.5031 73.4355 89.4098 74.3423 89.4098 75.4608C89.4098 76.5793 88.5031 77.486 87.3846 77.486H72.533C71.4145 77.486 70.5078 76.5793 70.5078 75.4608Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M66.5631 99.8058H93.3588C96.4744 99.8058 99 96.7758 99 93.4899V76.373L79.9609 87.136L60.9219 76.373V93.4899C60.9219 96.7758 63.4475 99.8058 66.5631 99.8058Z\",\n fill: \"#C6D6F7\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.5,\n d: \"M53.464 99.8528C60.6507 98.6776 65.5241 91.8989 64.3489 84.7121C63.1736 77.5253 56.3949 72.652 49.2081 73.8272C42.0213 75.0024 37.148 81.7811 38.3232 88.9679C39.4984 96.1547 46.2772 101.028 53.464 99.8528Z\",\n fill: \"url(#paint0_linear)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56.6863 100.25L59.2282 98.9344L64.5936 109.282L62.0547 110.6L56.6863 100.25Z\",\n fill: \"#0A1551\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.646 73.9471C42.0976 75.2702 39.9985 77.3192 38.6145 79.835C37.2304 82.3507 36.6236 85.2203 36.8703 88.081C37.117 90.9418 38.2063 93.6651 40.0006 95.9068C41.7949 98.1485 44.2136 99.808 46.9509 100.675C49.6882 101.542 52.621 101.579 55.3788 100.779C58.1366 99.9795 60.5956 98.3803 62.4446 96.1835C64.2936 93.9867 65.4498 91.2909 65.7669 88.4371C66.084 85.5833 65.5479 82.6996 64.2263 80.1505C62.4522 76.7322 59.3931 74.1585 55.7218 72.9951C52.0505 71.8318 48.0676 72.174 44.6486 73.9467L44.646 73.9471ZM56.8331 97.4181C54.7384 98.5067 52.3681 98.9497 50.0217 98.6909C47.6752 98.432 45.4581 97.4831 43.6511 95.9641C41.844 94.4451 40.5281 92.4243 39.8697 90.1573C39.2113 87.8903 39.24 85.479 39.9522 83.2283C40.6644 80.9777 42.0282 78.9888 43.8709 77.5133C45.7136 76.0378 47.9525 75.142 50.3044 74.9391C52.6563 74.7362 55.0156 75.2355 57.0838 76.3736C59.152 77.5118 60.8362 79.2378 61.9233 81.3333C63.3784 84.141 63.6594 87.4116 62.7049 90.4266C61.7503 93.4415 59.6382 95.9543 56.8322 97.413L56.8331 97.4181Z\",\n fill: \"#0A1551\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M67.433 117.953C67.1854 118.082 66.9149 118.161 66.6367 118.185C66.3586 118.21 66.0784 118.179 65.8123 118.094C65.5461 118.01 65.299 117.874 65.0855 117.694C64.872 117.514 64.6962 117.294 64.568 117.046L57.214 102.886L60.9833 100.926L68.3399 115.086C68.4694 115.333 68.5487 115.604 68.5731 115.882C68.5976 116.161 68.5669 116.441 68.4827 116.708C68.3984 116.974 68.2621 117.222 68.082 117.435C67.9019 117.649 67.6813 117.825 67.433 117.953Z\",\n fill: \"#0A1551\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear\",\n x1: 49.2081,\n y1: 73.8272,\n x2: 53.4639,\n y2: 99.8528,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#92B0EC\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#92B0EC\",\n stopOpacity: 0.51\n})), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip0\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 108,\n height: 120,\n fill: \"white\"\n})))));\nexport default SvgEmptyFilter;","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconNoPermission = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 53 51\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n d: \"M30.623 2H5.896a3.84 3.84 0 00-3.84 3.84v37.387a3.84 3.84 0 003.84 3.841H36.88a3.84 3.84 0 003.84-3.84v-31.13L30.623 2z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"#9297AB\",\n strokeWidth: 2.5,\n d: \"M30.623 2H5.896a3.84 3.84 0 00-3.84 3.84v37.387a3.84 3.84 0 003.84 3.841H36.88a3.84 3.84 0 003.84-3.84v-31.13L30.623 2z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#9297AB\",\n d: \"M30.623 8.257a3.84 3.84 0 003.84 3.84h6.257L30.623 2v6.257zm-2.316 8.287H7.837a1.102 1.102 0 000 2.205h20.47a1.102 1.102 0 000-2.205m0 7.52H7.837a1.102 1.102 0 000 2.205h20.47a1.102 1.102 0 000-2.205M19.01 31.42H7.839a1.102 1.102 0 100 2.205H19.01a1.102 1.102 0 000-2.205\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 15.978,\n cy: 15.978,\n r: 15.978,\n fill: \"#F54C4C\",\n stroke: \"#FFF\",\n strokeWidth: 2.5,\n transform: \"translate(19 17)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n d: \"M39.573 29.73h-.71v-1.422a3.555 3.555 0 00-3.555-3.554 3.555 3.555 0 00-3.554 3.554v1.421h-.71c-.782 0-1.422.64-1.422 1.422v7.108c0 .782.64 1.422 1.421 1.422h8.53c.782 0 1.422-.64 1.422-1.422v-7.108c0-.782-.64-1.422-1.422-1.422zm-2.061 0h-4.407v-1.422c0-1.216.988-2.204 2.203-2.204 1.216 0 2.204.988 2.204 2.204v1.421z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F54C4C\",\n d: \"M35.427 32.735a1.451 1.451 0 01.726 2.709v1.645H34.7l-.001-1.646a1.45 1.45 0 01.727-2.708z\"\n}))));\nexport default SvgIconNoPermission;","var _circle, _path, _path2, _path3, _path4, _path5, _path6, _rect, _path7, _path8;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconEmptyState = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 105 117\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 52.5,\n cy: 64.5,\n r: 52.5,\n fill: \"#E3E5F5\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31 70.4537L52.8374 54.2778L74.6747 70.4537V92.0214H31V70.4537Z\",\n fill: \"#B1C3E9\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M36.2653 49.4449C36.2653 46.8138 38.278 44.75 40.6778 44.75H65.2C67.5999 44.75 69.6126 46.8138 69.6126 49.4449V82.1143C69.6126 84.7453 67.5999 86.8092 65.2 86.8092H40.6778C38.278 86.8092 36.2653 84.7453 36.2653 82.1143V49.4449Z\",\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42.0499 54.3919C42.0499 53.1031 43.0947 52.0583 44.3835 52.0583H61.496C62.7848 52.0583 63.8295 53.1031 63.8295 54.3919C63.8295 55.6806 62.7848 56.7254 61.496 56.7254H44.3835C43.0947 56.7254 42.0499 55.6806 42.0499 54.3919Z\",\n fill: \"#0099FF\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42.0499 62.1702C42.0499 60.8814 43.0947 59.8367 44.3835 59.8367H61.496C62.7848 59.8367 63.8295 60.8814 63.8295 62.1702C63.8295 63.459 62.7848 64.5037 61.496 64.5037H44.3835C43.0947 64.5037 42.0499 63.459 42.0499 62.1702Z\",\n fill: \"#FF6100\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42.0499 69.9485C42.0499 68.6597 43.0947 67.615 44.3835 67.615H61.496C62.7848 67.615 63.8295 68.6597 63.8295 69.9485C63.8295 71.2373 62.7848 72.282 61.496 72.282H44.3835C43.0947 72.282 42.0499 71.2373 42.0499 69.9485Z\",\n fill: \"#FFB629\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37.5 98H68.375C71.9649 98 74.875 94.5088 74.875 90.7227V71L52.9375 83.4015L31 71V90.7227C31 94.5088 33.9101 98 37.5 98Z\",\n fill: \"#C6D6F7\"\n})), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 34,\n y: 1,\n width: 37,\n height: 33,\n rx: 4,\n fill: \"#249BB4\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M53.6984 27.8216C53.3098 27.442 52.6892 27.442 52.3006 27.8216L47.5832 32.4311C47.2167 32.7891 47.1802 33.3662 47.4984 33.7676L52.2159 39.7177C52.6163 40.2227 53.3827 40.2227 53.7831 39.7177L58.5006 33.7676C58.8189 33.3662 58.7823 32.7891 58.4159 32.4311L53.6984 27.8216Z\",\n fill: \"#249BB4\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M45.744 10.7441C46.0695 10.4186 46.5971 10.4186 46.9225 10.7441L60.2559 24.0774C60.5813 24.4028 60.5813 24.9305 60.2559 25.2559C59.9304 25.5814 59.4028 25.5814 59.0774 25.2559L45.744 11.9226C45.4186 11.5972 45.4186 11.0695 45.744 10.7441ZM56.616 22.7951C56.616 22.7952 56.616 22.7951 56.616 22.7951L57.2226 23.4017C56.0299 24.1427 54.6152 24.6667 52.9994 24.6667C50.7315 24.6667 48.8597 23.6344 47.442 22.4185C46.0249 21.2032 45.0338 19.7815 44.5151 18.94C44.1572 18.3593 44.1572 17.6407 44.5151 17.06C45.0311 16.2227 46.0149 14.8111 47.4207 13.5998L48.0117 14.1908L50.1276 16.3068C49.8344 16.8031 49.6661 17.3819 49.6661 18C49.6661 19.8409 51.1585 21.3333 52.9995 21.3333C53.6176 21.3333 54.1964 21.1651 54.6926 20.8719L56.616 22.7951ZM56.3266 17.7951C56.2249 16.1174 54.8821 14.7746 53.2043 14.6729L50.676 12.1445C50.676 12.1445 50.676 12.1445 50.676 12.1445L50.3503 11.8188C51.1603 11.5162 52.0448 11.3333 52.9994 11.3333C55.2673 11.3333 57.1392 12.3656 58.5569 13.5815C59.974 14.7968 60.9651 16.2185 61.4838 17.06C61.8417 17.6407 61.8417 18.3593 61.4838 18.94C61.1283 19.5168 60.5508 20.3661 59.7663 21.2348L59.4713 20.9398C59.4713 20.9398 59.4713 20.9398 59.4713 20.9398L56.3266 17.7951ZM51.3892 17.5685C51.3524 17.7061 51.3328 17.8508 51.3328 18C51.3328 18.9205 52.079 19.6667 52.9995 19.6667C53.1487 19.6667 53.2934 19.647 53.431 19.6103L51.3892 17.5685Z\",\n fill: \"white\"\n})));\nexport default SvgIconEmptyState;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconPermissions = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 18 12\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.061 5.84C17.016 5.62 14.915.463 8.768.463 2.62.462.486 5.555.476 5.84.473 5.92.463 5.9.462 6c-.002.076.017.176.024.232.036.3 2.407 5.306 8.282 5.306S16.924 6.6 17.05 6.232a.915.915 0 00.011-.391zM8.768 9.364c-1.607 0-2.91-1.491-2.91-3.331 0-1.84 1.303-3.332 2.91-3.332 1.606 0 2.909 1.492 2.909 3.332-.002 1.839-1.303 3.33-2.91 3.331z\",\n fill: \"#FFF\",\n fillRule: \"nonzero\"\n})));\nexport default SvgIconPermissions;","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconApprovalHeader = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 10,\n cy: 10,\n r: 10,\n fill: \"#23283A\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"#FFF\",\n strokeLinecap: \"round\",\n strokeWidth: 2,\n d: \"M6.48 10.11L8.901 12.925 13.98 7.567\"\n}))));\nexport default SvgIconApprovalHeader;","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconPendingApproval = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 16 16\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF8B00\",\n fillRule: \"nonzero\",\n d: \"M7.494 1.25c-3.45 0-6.244 2.8-6.244 6.25s2.794 6.25 6.244 6.25c3.456 0 6.256-2.8 6.256-6.25s-2.8-6.25-6.256-6.25zM7.5 12.5c-2.763 0-5-2.238-5-5 0-2.763 2.237-5 5-5 2.762 0 5 2.237 5 5 0 2.762-2.238 5-5 5z\",\n transform: \"translate(-292 -267) translate(290 265) translate(2.5 2.5)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0L15 0 15 15 0 15z\",\n transform: \"translate(-292 -267) translate(290 265) translate(2.5 2.5)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF8B00\",\n fillRule: \"nonzero\",\n d: \"M7.813 4.375L6.875 4.375 6.875 8.125 10.156 10.094 10.625 9.325 7.813 7.656z\",\n transform: \"translate(-292 -267) translate(290 265) translate(2.5 2.5)\"\n})))))));\nexport default SvgIconPendingApproval;","var _path, _path2, _path3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconTerminateFlow = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M10 3.5C6.41015 3.5 3.5 6.41015 3.5 10C3.5 13.5899 6.41015 16.5 10 16.5C13.5899 16.5 16.5 13.5899 16.5 10C16.5 6.41015 13.5899 3.5 10 3.5ZM2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10Z\",\n fill: \"white\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M13.2777 6.72232C13.5741 7.01874 13.5741 7.49933 13.2777 7.79576L7.79576 13.2777C7.49933 13.5741 7.01874 13.5741 6.72232 13.2777C6.42589 12.9813 6.42589 12.5007 6.72232 12.2042L12.2042 6.72232C12.5007 6.42589 12.9813 6.42589 13.2777 6.72232Z\",\n fill: \"white\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M6.72232 6.72232C7.01874 6.42589 7.49933 6.42589 7.79576 6.72232L13.2777 12.2042C13.5741 12.5007 13.5741 12.9813 13.2777 13.2777C12.9813 13.5741 12.5007 13.5741 12.2042 13.2777L6.72232 7.79576C6.42589 7.49933 6.42589 7.01874 6.72232 6.72232Z\",\n fill: \"white\"\n})));\nexport default SvgIconTerminateFlow;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconRestartFlow = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 15\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.9978 3.03944L11.9985 7.03869H14.9981C14.9981 7.04169 14.9981 7.04469 14.9981 7.04769C14.9981 9.80884 12.7597 12.0473 9.9985 12.0473C8.61567 12.0473 7.36408 11.4856 6.45894 10.579L5.04912 11.9888C6.31571 13.2554 8.06524 14.0391 9.9985 14.0391C13.8643 14.0391 16.9974 10.9052 16.9974 7.04019C16.9974 7.04019 16.9974 7.04019 16.9974 7.03944H19.997L15.9978 3.03944ZM7.9985 7.03944H4.99888C4.99888 7.03644 4.99888 7.03344 4.99888 7.03044C4.99888 4.26928 7.23735 2.03081 9.9985 2.03081C11.3813 2.03081 12.6329 2.59249 13.5381 3.49913L14.9479 2.08931C13.6813 0.822715 11.931 0.0390625 9.9985 0.0390625C6.13273 0.0390625 2.99962 3.17292 2.99962 7.03794C2.99962 7.03794 2.99962 7.03794 2.99962 7.03869H0L3.99925 11.0379L5.61905 9.41814L7.9985 7.03944Z\",\n fill: \"white\"\n})));\nexport default SvgIconRestartFlow;","var _path, _path2, _path3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconApprovalFlow = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 15 15\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M2.08005 13.1676C2.08005 13.4438 2.30391 13.6676 2.58005 13.6676H9.61005C9.88619 13.6676 10.11 13.4438 10.11 13.1676V10.3811C10.0912 10.3827 10.129 10.3843 10.11 10.3856C10.1417 10.3803 10.0739 10.3878 10.11 10.3856C9.01972 10.5599 7.78811 10.3871 6.80386 9.88226C6.71204 9.83861 6.61188 9.81645 6.51065 9.81736C5.79162 9.81359 5.07259 9.81435 4.35356 9.81435H3.57C3.43193 9.81435 3.32 9.70242 3.32 9.56435V9.0079C3.32 8.86983 3.43193 8.7579 3.57 8.7579H5.33191L5.15879 8.50284C5.01218 8.28929 4.86852 8.08026 4.73297 7.8652C4.67256 7.77012 4.61215 7.73314 4.50311 7.73616C4.27179 7.74069 4.03972 7.73993 3.80471 7.73918L3.56961 7.73881C3.43169 7.7386 3.32 7.62673 3.32 7.48881V6.9448C3.32 6.80673 3.43193 6.6948 3.57 6.6948H4.232C4.03972 5.98396 3.97857 5.28369 4.06772 4.57361C4.13087 4.08158 4.42948 3.26762 4.60443 2.84118H2.58005C2.30391 2.84118 2.08005 3.06503 2.08005 3.34118V13.1676ZM9.13187 9.40912C11.3715 9.4144 13.2133 7.54524 13.2199 5.25954C13.2265 2.95045 11.4024 1.04884 9.17534 1.04129C6.89227 1.03375 5.06743 2.88253 5.05638 5.21351C5.05327 5.7636 5.15642 6.30888 5.35987 6.81798C5.56333 7.32707 5.86308 7.78992 6.24187 8.17987C6.62067 8.56983 7.07102 8.8792 7.56701 9.09016C8.06299 9.30113 8.59482 9.40953 9.13187 9.40912ZM11.42 13.8326C11.2441 14.5196 10.625 15 9.91592 15H1.80005C1.24776 15 0.800049 14.5523 0.800049 14V2.72689C0.800049 2.06227 1.33883 1.52349 2.00345 1.52349V1.52349C3.12473 1.52349 4.246 1.52424 5.36728 1.51896C5.46231 1.5182 5.57871 1.47217 5.6487 1.40652C6.76703 0.365166 8.08206 -0.10269 9.58274 0.0188011C11.8665 0.20368 13.7695 2.00568 14.1585 4.31855C14.5464 6.62008 13.441 8.85992 11.42 9.90061C11.4729 9.87558 11.3684 9.92723 11.42 9.90061C11.42 10.1094 11.42 10.0913 11.42 10.212C11.4237 11.4194 11.4208 12.626 11.42 13.8326V13.8326ZM8.55797 11.632C8.55797 11.77 8.44604 11.882 8.30797 11.882H3.57C3.43193 11.882 3.32 11.77 3.32 11.632V11.1042C3.32 10.9661 3.43193 10.8542 3.57 10.8542H8.30797C8.44604 10.8542 8.55797 10.9661 8.55797 11.1042V11.632Z\",\n fill: \"#5E74E6\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M11.6638 3.3011C11.3802 3.01747 10.9203 3.01747 10.6367 3.3011L8.30404 5.63375L7.53403 4.86374C7.2504 4.58011 6.79054 4.58011 6.50691 4.86374C6.22328 5.14737 6.22328 5.60723 6.50691 5.89086L7.79081 7.17476C8.07444 7.45839 8.5343 7.45839 8.81793 7.17476C8.82422 7.16847 8.83038 7.16209 8.83639 7.15563C8.83734 7.15469 8.83828 7.15375 8.83923 7.1528L11.6638 4.32822C11.9474 4.04459 11.9474 3.58473 11.6638 3.3011Z\",\n fill: \"#5E74E6\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M9.11759 9.01496C11.2455 9.01496 12.9705 7.28994 12.9705 5.16202C12.9705 3.0341 11.2455 1.30908 9.11759 1.30908C6.98967 1.30908 5.26465 3.0341 5.26465 5.16202C5.26465 7.28994 6.98967 9.01496 9.11759 9.01496ZM9.11759 10.015C11.7978 10.015 13.9705 7.84223 13.9705 5.16202C13.9705 2.48182 11.7978 0.309082 9.11759 0.309082C6.43738 0.309082 4.26465 2.48182 4.26465 5.16202C4.26465 7.84223 6.43738 10.015 9.11759 10.015Z\",\n fill: \"#5E74E6\"\n})));\nexport default SvgIconApprovalFlow;","var _path, _path2, _path3, _path4;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconTakeover = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 16 14\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2 0C0.895508 0 0 0.894531 0 2V12L0.0117188 12.2227L0.0429688 12.418C0.234375 13.3242 1.03809 14 2 14H9.26172L7.44824 11.8711C7.23047 11.6172 7.09277 11.3125 7.0332 11H2C1.44727 11 1 10.5508 1 10V2C1 1.70312 1.13086 1.43359 1.33887 1.25C1.47168 1.13281 1.63574 1.05078 1.81836 1.01562C1.87695 1.00391 1.9375 1 2 1H12C12.1709 1 12.332 1.04297 12.4727 1.12109C12.6279 1.20312 12.7578 1.32812 12.8506 1.47656C12.9453 1.62891 13 1.80859 13 2V8.47656L13.9443 7.52734C13.9629 7.50781 13.9814 7.48828 14 7.47266V2C14 0.894531 13.1045 0 12 0H2Z\",\n fill: \"#fff\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.64355 3.14844C2.73438 3.05859 2.86035 3 3 3H11C11.2764 3 11.5 3.22266 11.5 3.5C11.5 3.77734 11.2764 4 11 4H3C2.72363 4 2.5 3.77734 2.5 3.5L2.5127 3.38672C2.53418 3.29688 2.58008 3.21484 2.64355 3.14844Z\",\n fill: \"#fff\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3 6C2.72363 6 2.5 6.22266 2.5 6.5C2.5 6.77734 2.72363 7 3 7H9C9.27637 7 9.5 6.77734 9.5 6.5C9.5 6.22266 9.27637 6 9 6H3Z\",\n fill: \"#fff\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.653 8.23163C14.9755 7.90798 15.4817 7.92566 15.7838 8.27112C16.0859 8.61658 16.0694 9.15901 15.747 9.48266L11.4774 13.7684C11.152 14.095 10.6403 14.0736 10.3397 13.7208L8.20922 11.2208C7.91131 10.8712 7.93431 10.3291 8.26059 10.0099C8.58687 9.69068 9.09288 9.71532 9.39079 10.0649L10.9748 11.9237L14.653 8.23163Z\",\n fill: \"#fff\"\n})));\nexport default SvgIconTakeover;","var _path, _path2, _path3, _path4;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconReassign = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 16 13\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.42496 11.5426H1.65911C0.737162 11.5426 -0.000398062 10.8758 -0.000398062 10.0756C-0.000398062 9.87556 0.0610657 9.67551 0.122529 9.47546C1.1674 7.60835 3.07277 6.34138 5.59276 6.80816C5.65422 6.80816 2.82691 8.942 4.42496 11.5426Z\",\n fill: \"#fff\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.97849 5.01378C3.89224 5.01378 3.01166 4.05843 3.01166 2.87994C3.01166 1.70145 3.89224 0.746094 4.97849 0.746094C6.06474 0.746094 6.94531 1.70145 6.94531 2.87994C6.94531 4.05843 6.06474 5.01378 4.97849 5.01378Z\",\n fill: \"#fff\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.17719 9.66789C6.28353 7.60073 8.86499 6.26708 11.6923 6.73386C13.4133 7.00059 14.8269 8.00083 15.6874 9.40116C15.7489 9.46784 15.8103 9.60121 15.8718 9.66789C15.8718 9.66789 15.8718 9.66789 15.8718 9.73457C15.9947 9.93462 15.9947 10.1347 15.9947 10.4014C16.0562 11.2683 15.2572 12.0018 14.2123 12.0018H6.8367C5.85329 12.0018 4.9928 11.2683 4.9928 10.3347C5.05426 10.1347 5.11573 9.86794 5.17719 9.66789Z\",\n fill: \"#fff\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.5285 4.66778C9.34039 4.66778 8.37726 3.62287 8.37726 2.33389C8.37726 1.04492 9.34039 0 10.5285 0C11.7166 0 12.6797 1.04492 12.6797 2.33389C12.6797 3.62287 11.7166 4.66778 10.5285 4.66778Z\",\n fill: \"#fff\"\n})));\nexport default SvgIconReassign;","var _path, _path2, _ellipse, _path3, _ellipse2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgWarningDeleteIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 55 57\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M11.7233 12.2677H41.8658V12.9051C41.8656 24.1088 41.8676 35.3122 41.8642 46.5157C41.8633 49.6753 39.683 51.991 36.6964 51.9943C30.0937 52.0018 23.4913 52.0018 16.8886 51.9943C13.9031 51.9908 11.7255 49.6746 11.7246 46.5121C11.7212 35.3087 11.7233 24.1052 11.7233 12.9016C11.7233 12.7101 11.7233 12.5186 11.7233 12.2677ZM34.2925 44.0045V20.1977L33.6593 20.1979C32.4502 20.1979 31.2414 20.1975 30.0323 20.1979C29.3087 20.1984 29.3075 20.1991 29.3075 20.9651C29.3071 28.4024 29.3073 35.8394 29.3073 43.2764V44.0045H34.2925ZM19.2954 44.0452C20.749 44.045 22.1574 44.0457 23.5659 44.0445C24.2804 44.044 24.2815 44.0426 24.2815 43.2632C24.2817 35.8311 24.2817 28.3991 24.2815 20.967C24.2815 20.8299 24.3208 20.6707 24.2683 20.5607C24.2011 20.4201 24.0607 20.2175 23.9495 20.2158C22.4108 20.1932 20.8718 20.2005 19.2954 20.2005V44.0452Z\",\n fill: \"#FF4947\",\n fillOpacity: 0.4\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.66797 9.09034V3.04864C8.91659 3.04864 9.13845 3.04864 9.36032 3.04864C12.3954 3.04864 15.4307 3.0608 18.4656 3.02973C18.7684 3.02676 19.1312 2.84168 19.3593 2.60202C20.0302 1.89656 20.6321 1.10193 21.2952 0.385391C21.4834 0.181939 21.7871 0.0200954 22.039 0.0182041C25.2085 -0.0061129 28.3783 -0.00611288 31.5478 0.0184743C31.7999 0.0203657 32.1039 0.183019 32.2925 0.387012C32.9554 1.10355 33.5571 1.89845 34.2282 2.60364C34.4561 2.8433 34.8193 3.02676 35.1221 3.03C38.1378 3.0608 41.154 3.04864 44.17 3.04864C44.3983 3.04864 44.6266 3.04864 44.9052 3.04864V9.09034H8.66797Z\",\n fill: \"#FF4947\",\n fillOpacity: 0.4\n})), _ellipse || (_ellipse = /*#__PURE__*/React.createElement(\"ellipse\", {\n cx: 43,\n cy: 44.3019,\n rx: 12,\n ry: 12.0323,\n fill: \"#FF4948\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41 36.2803H44.6L44.2 46.8288H41.8L41 36.2803Z\",\n fill: \"white\"\n})), _ellipse2 || (_ellipse2 = /*#__PURE__*/React.createElement(\"ellipse\", {\n cx: 43,\n cy: 50.4662,\n rx: 2,\n ry: 1.8187,\n fill: \"white\"\n})));\nexport default SvgWarningDeleteIcon;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgWarningWarnIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 53 49\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M32.2735 4.50168C30.3155 1.14512 25.9799 -0.0436585 22.6234 1.91433C21.5744 2.54369 20.6654 3.45276 20.036 4.50168L0.945583 37.5778C-1.01241 40.9343 0.176373 45.2699 3.53293 47.2279C4.58185 47.8572 5.84056 48.2069 7.09927 48.2069H45.35C49.266 48.2069 52.4128 45.0601 52.4128 41.1441C52.4128 39.8854 52.0632 38.6966 51.4338 37.5778L32.2735 4.50168ZM26.1897 42.5427C24.6513 42.5427 23.3926 41.284 23.3926 39.7455C23.3926 38.2071 24.6513 36.9484 26.1897 36.9484C27.7281 36.9484 28.9868 38.2071 28.9868 39.7455C28.9868 41.284 27.7281 42.5427 26.1897 42.5427ZM28.9868 29.8157C28.9868 31.3541 27.7281 32.6128 26.1897 32.6128C24.6513 32.6128 23.3926 31.3541 23.3926 29.8157V13.5924C23.3926 12.0539 24.6513 10.7952 26.1897 10.7952C27.7281 10.7952 28.9868 12.0539 28.9868 13.5924V29.8157Z\",\n fill: \"#FFB629\"\n})));\nexport default SvgWarningWarnIcon;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconIncomplete = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 14 14\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M14 7C14 10.866 10.866 14 7 14C3.13401 14 0 10.866 0 7C0 3.13401 3.13401 0 7 0C10.866 0 14 3.13401 14 7ZM11.2 7H2.8C2.8 4.6804 4.6804 2.8 7 2.8C9.3196 2.8 11.2 4.6804 11.2 7Z\",\n fill: \"white\"\n})));\nexport default SvgIconIncomplete;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconClose = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 27 26\",\n fill: \"#81829E\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M19.67 18.35l-5.38-5.37 5.38-5.38a.76.76 0 00-1.08-1.07l-5.38 5.37-5.37-5.37A.76.76 0 006.76 7.6l5.38 5.38-5.38 5.37a.76.76 0 001.08 1.08l5.37-5.38 5.38 5.38a.76.76 0 001.08-1.08z\"\n})));\nexport default SvgIconClose;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconInfo = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"#a1a6cc\",\n viewBox: \"0 0 16 16\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8,0A8,8,0,1,1,0,8,8,8,0,0,1,8,0Zm.93,6.7H7.07v6H8.93ZM8,3.72A.93.93,0,1,0,8,5.58.93.93,0,1,0,8,3.72Z\"\n})));\nexport default SvgIconInfo;","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconDuplicate = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 13 14\",\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"#B6B7E3\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.54 3.5h-7c-.53 0-.88.35-.88.88v8.75c0 .52.35.87.88.87h7c.52 0 .87-.35.87-.88V4.38c0-.53-.35-.88-.87-.88z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.04 0H3.29v1.75h7.87v9.63h1.75V.88c0-.53-.35-.88-.87-.88z\"\n})));\nexport default SvgIconDuplicate;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconSignedDoc = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"-2 -2 26 30\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M0.5 22.3333V3.66663C0.5 1.73363 2.067 0.166626 4 0.166626H13.0492C13.6738 0.166626 14.2724 0.417115 14.711 0.862019L20.8285 7.06865C21.2588 7.50522 21.5 8.09359 21.5 8.70659V22.3333C21.5 24.2663 19.933 25.8333 18 25.8333H4C2.067 25.8333 0.5 24.2663 0.5 22.3333ZM14.5 5.99996V2.49996L19.1667 7.16663H15.6667C15.0223 7.16663 14.5 6.64429 14.5 5.99996ZM5.17499 11.0283L6.73027 17.5404C6.82995 17.9577 7.16001 18.2811 7.57936 18.3722L10.6731 19.0441C10.604 19.3967 10.706 19.7762 10.9792 20.0494L11.7688 20.839C12.2049 21.2751 12.9119 21.2751 13.348 20.839L16.5063 17.6807C16.9424 17.2446 16.9424 16.5376 16.5063 16.1015L15.7167 15.3119C15.4434 15.0386 15.0638 14.9366 14.711 15.0059L14.039 11.9125C13.9479 11.4931 13.6246 11.1631 13.2072 11.0634L6.69656 9.50829C6.42267 9.44287 6.23519 9.77812 6.43433 9.97722L10.2958 13.8385C10.6685 13.7389 11.0826 13.8352 11.3749 14.1276C11.811 14.5637 11.811 15.2707 11.3749 15.7067C10.9389 16.1428 10.2318 16.1428 9.79576 15.7067C9.5036 15.4146 9.40718 15.0008 9.50651 14.6284L5.64391 10.7661C5.4448 10.567 5.10958 10.7544 5.17499 11.0283ZM11.7688 19.2598L11.9584 19.0702L11.9661 19.0626L14.7297 16.2991L14.7373 16.2914L14.9271 16.1015L15.7167 16.8911L12.5584 20.0494L11.7688 19.2598Z\",\n fill: \"#fff\"\n})));\nexport default SvgIconSignedDoc;","var _path, _text;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconWarning = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 84 73\",\n id: \"pdfImport_warning.cad4c263\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#a6a8c7\",\n d: \"M47.399 3.269l35.644 59.724a6 6 0 01-5.152 9.075H6.602a6 6 0 01-5.152-9.075L37.094 3.269a6 6 0 0110.305 0z\"\n})), _text || (_text = /*#__PURE__*/React.createElement(\"text\", {\n fill: \"#FFF\",\n fontFamily: \"CircularStd-Medium, Circular Std\",\n fontSize: 50,\n fontWeight: 400,\n transform: \"translate(1 1)\"\n}, /*#__PURE__*/React.createElement(\"tspan\", {\n x: 33.2,\n y: 59\n}, \"!\"))));\nexport default SvgIconWarning;","var _path, _rect, _rect2, _path2, _path3, _path4, _circle, _path5, _path6, _path7;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconReminderEmail = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 206.31 195.31\"\n}, props), /*#__PURE__*/React.createElement(\"g\", {\n \"data-name\": \"Layer 2\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n \"data-name\": \"Layer 1\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M113 188c43.63 0 79-1.79 79-4s-35.37-4-79-4-79 1.79-79 4 35.37 4 79 4Z\",\n style: {\n isolation: \"isolate\"\n },\n fill: \"#9ca8c9\",\n fillRule: \"evenodd\",\n opacity: 0.28\n}), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m182.58 110.25-66.15 39-66.14-39a.45.45 0 0 1 0-.11c.06-.24 3.71-3.29 9.27-7.81l.16-.13C78 87.37 116.43 57 116.43 57s38.45 30.37 56.71 45.2c5.66 4.58 9.37 7.69 9.43 7.94a.45.45 0 0 1 .01.11Z\",\n fill: \"#618e0f\",\n fillRule: \"evenodd\"\n})), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 85.92,\n y: 100.15,\n width: 63.34,\n height: 31.18,\n rx: 3,\n fill: \"#cad2e0\"\n})), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 62,\n y: 28,\n width: 110,\n height: 132,\n rx: 6,\n fill: \"#e3ecff\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M80.5 50h73a3.5 3.5 0 0 1 3.5 3.5 3.5 3.5 0 0 1-3.5 3.5h-73a3.5 3.5 0 0 1-3.5-3.5 3.5 3.5 0 0 1 3.5-3.5ZM80.5 64h73a3.5 3.5 0 0 1 3.5 3.5 3.5 3.5 0 0 1-3.5 3.5h-73a3.5 3.5 0 0 1-3.5-3.5 3.5 3.5 0 0 1 3.5-3.5ZM80.5 78h33a3.5 3.5 0 0 1 3.5 3.5 3.5 3.5 0 0 1-3.5 3.5h-33a3.5 3.5 0 0 1-3.5-3.5 3.5 3.5 0 0 1 3.5-3.5ZM80.5 92h73a3.5 3.5 0 0 1 3.5 3.5 3.5 3.5 0 0 1-3.5 3.5h-73a3.5 3.5 0 0 1-3.5-3.5 3.5 3.5 0 0 1 3.5-3.5ZM80.5 106h73a3.5 3.5 0 0 1 3.5 3.5 3.5 3.5 0 0 1-3.5 3.5h-73a3.5 3.5 0 0 1-3.5-3.5 3.5 3.5 0 0 1 3.5-3.5ZM80.5 120h73a3.5 3.5 0 0 1 3.5 3.5 3.5 3.5 0 0 1-3.5 3.5h-73a3.5 3.5 0 0 1-3.5-3.5 3.5 3.5 0 0 1 3.5-3.5Z\",\n fill: \"#c1cee0\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M183.35 110v64.19a8.17 8.17 0 0 1-8.15 8.16H57.66a8.16 8.16 0 0 1-8.13-8.16V110l66.91 39.45Z\",\n fill: \"#7bb60f\",\n fillRule: \"evenodd\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M181.09 179.79 138 136.73l-21.58 12.72-21.57-12.73-43.07 43.07a8.06 8.06 0 0 0 5.88 2.56H175.2a8.09 8.09 0 0 0 5.89-2.56Z\",\n fill: \"#88c519\",\n fillRule: \"evenodd\"\n})), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 175.66,\n cy: 164.66,\n r: 30.66,\n fill: \"#3e74ff\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m177.83 148.34 15 12.28a.65.65 0 0 1 .26.53.68.68 0 0 1-.16.44l-2.48 2.93a.7.7 0 0 1-.53.24.71.71 0 0 1-.45-.16l-15-12.24a.68.68 0 0 1-.26-.53.73.73 0 0 1 .15-.44l2.5-3a.71.71 0 0 1 .52-.24.68.68 0 0 1 .44.16Zm5.47 26.38a.66.66 0 0 1-.55.49l-17.2 4.33 6.66-8a3.36 3.36 0 0 0 1.6.4 3.44 3.44 0 0 0 2.64-1.23 3.45 3.45 0 0 0-.44-4.8 3.44 3.44 0 0 0-4.83.44 3.41 3.41 0 0 0-.79 2.19v.31a3.44 3.44 0 0 0 .75 1.83l-6.67 8 1.08-17.68a.66.66 0 0 1 .38-.58l10.12-4.94 10.14 8.45Z\",\n fill: \"#fff\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42.94.2c18.69 1.85 33.62 17.45 35 36.43a39.63 39.63 0 0 1-6.84 25.3 9.69 9.69 0 0 0-.91 9.13l3.09 7.52-12.6-3.31a9.42 9.42 0 0 0-6.17.48 38.4 38.4 0 0 1-19.33 3.06A39.38 39.38 0 0 1 .19 43.43C-2.19 18.5 18.33-2.25 42.94.2Z\",\n fill: \"#d64164\",\n fillRule: \"evenodd\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56 51.17v-3.36S51.54 46 51.83 35.06c.17-6.5-2.15-10.31-4.93-12.55a12.39 12.39 0 0 0-15.35 0c-2.78 2.23-5.09 6-4.92 12.55.3 10.92-4.19 12.73-4.19 12.73v3.37ZM32.75 53.87a6.56 6.56 0 0 0 13 0ZM42.45 15.7v2.1a14.33 14.33 0 0 0-6.45 0v-2.1a3.23 3.23 0 1 1 6.45 0Z\",\n fill: \"#fff\",\n fillRule: \"evenodd\"\n})))));\nexport default SvgIconReminderEmail;","var _circle, _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconReminder = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 7,\n cy: 7,\n r: 7,\n fill: \"#3E74F8\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.9 7a.24.24 0 0 0-.13-.2L4.61 3.61a.24.24 0 0 0-.34.27l.69 2.62 2.7.49-2.7.5-.69 2.6a.24.24 0 0 0 .34.28l6.16-3.17A.24.24 0 0 0 10.9 7Z\",\n fill: \"#fff\"\n})));\nexport default SvgIconReminder;","export const WORKFLOW_SYSTEM_OUTCOMES = {\n expire: {\n id: 'expire',\n text: 'Expire',\n passiveText: 'Expired',\n textColor: '#23283A',\n buttonColor: '#37836F'\n },\n escalate: {\n id: 'escalate',\n text: 'Escalate',\n passiveText: 'Escalated',\n textColor: '#23283A',\n buttonColor: '#37836F'\n },\n reassign: {\n id: 'reassign',\n text: 'Reassign',\n passiveText: 'Reassigned',\n textColor: '#23283A',\n buttonColor: '#FF9946'\n },\n start: {\n id: 'start',\n text: window?.isWorkflowReleased ? 'Start Flow' : 'Start Approval Flow',\n passiveText: 'Started',\n textColor: '#FFFFFF',\n buttonColor: '#01BD6F'\n },\n requestMoreInfo: {\n id: 'requestMoreInfo',\n text: 'Requested more info',\n passiveText: 'Requested more info',\n textColor: '#4599FF',\n buttonColor: '#01BD6F'\n }\n};\n","\n \n\n","\n \n\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Baseline from '../../../components/Baseline';\nimport List from '../../../components/List';\nimport { ListTypes } from '../../../constants/schemas';\nimport { hexToRgba } from '../../../utils';\n\nconst WorkflowStatus = ({\n text,\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n containerProps,\n baselineProps,\n direction\n}) => (\n \n \n \n);\n\nWorkflowStatus.propTypes = {\n options: PropTypes.string,\n answer: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.shape({\n other: PropTypes.string\n })\n ]),\n showAll: PropTypes.bool,\n listType: ListTypes.schema,\n containerProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({\n backgroundColor: PropTypes.string\n }),\n answerWrapperProps: PropTypes.shape({}),\n text: PropTypes.string,\n labelProps: PropTypes.shape({}),\n editMode: PropTypes.bool,\n isToggleActive: PropTypes.bool,\n toggleProps: PropTypes.shape([\n PropTypes.object\n ]),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nWorkflowStatus.defaultProps = {\n options: '',\n answer: '',\n showAll: false,\n listType: ListTypes.default,\n containerProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n labelProps: {},\n text: global?.isWorklfowStatus ? 'Flow Status' : 'Approval Status',\n editMode: false,\n toggleProps: {},\n isToggleActive: false,\n direction: 'column'\n};\n\nexport default WorkflowStatus;\n","\n \n \n \n \n \n \n\n","\n \n\n","\n \n \n \n \n\n","\n \n \n\n","\n \n \n\n","\n \n \n\n","\n \n \n \n \n\n","\n \n \n \n\n","\n \n \n \n\n","\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n","\n \n \n \n\n","\n \n\n","\n \n \n \n \n \n \n \n\n","\n \n \n \n \n\n","\n \n \n \n \n \n \n \n \n \n \n \n \n\n","\n \n \n \n \n \n\n","\n \n \n \n \n \n \n \n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n \n\n","\n \n \n \n\n","\n \n \n\n","\n \n \n\n","\n \n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n \n\n","\n \n \n \n \n \n\n","\n \n \n \n \n \n \n \n \n\n","\n \n \n\n","\n \n \n \n \n \n \n \n \n \n \n\n","\n \n \n \n \n \n \n \n \n \n \n \n \n\n","\n \n\n","\n \n\n","\n \n \n\n","\n \n \n \n \n\n","\n \n \n\n","\n \n \n \n\n","\n \n \n\n","\n \n \n \n\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconModalClose = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 6 6\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.9349 5.4457 3.4892 3 5.9348.5543A.3507.3507 0 0 0 5.4457.065L3 2.5108.5543.0652A.3507.3507 0 0 0 .065.5543L2.5108 3 .0652 5.4457a.3507.3507 0 0 0 .4892.4892L3 3.4892l2.4457 2.4457a.3507.3507 0 0 0 .4892-.4892\",\n fill: \"#fff\"\n})));\nexport default SvgIconModalClose;","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconViewAllSubmission = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 16 14\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M11.844 0v.131c0 .571-.002 1.143.002 1.714 0 .09-.026.117-.121.118a8.266 8.266 0 0 0-2.053.264c-1.104.294-2.06.83-2.834 1.654-.767.816-1.253 1.776-1.534 2.838-.05.19-.085.385-.127.578.032-.005.039-.017.044-.03.173-.37.441-.668.764-.922.632-.499 1.37-.788 2.147-.991 1.18-.31 2.388-.397 3.605-.41.088 0 .11.027.109.108-.003.574-.002 1.15-.002 1.724v.13l3.566-3.453L11.844 0Z\",\n fill: \"#5E74E6\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12.063 14H2.458A1.87 1.87 0 0 1 .59 12.132v-9.91A1.87 1.87 0 0 1 2.458.351h5.675a.64.64 0 0 1 0 1.282H2.458a.588.588 0 0 0-.587.587v9.91c0 .324.264.588.587.588h9.605a.588.588 0 0 0 .587-.587v-4.41a.64.64 0 0 1 1.281 0v4.41A1.87 1.87 0 0 1 12.063 14Z\",\n fill: \"#5E74E6\"\n})));\nexport default SvgIconViewAllSubmission;","var _rect, _path, _path2, _path3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconViewNewSubmission = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 26 32\"\n}, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 0.533,\n y: 0.533,\n width: 24.933,\n height: 30.933,\n rx: 3.733,\n fill: \"#fff\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.067\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.79 10.706c0-.933.787-1.69 1.758-1.69h12.9c.971 0 1.759.757 1.759 1.69 0 .934-.788 1.691-1.76 1.691H6.549c-.971 0-1.759-.757-1.759-1.69Z\",\n fill: \"#09F\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.79 16.342c0-.934.787-1.69 1.758-1.69h12.9c.971 0 1.759.756 1.759 1.69 0 .934-.788 1.69-1.76 1.69H6.549c-.971 0-1.759-.756-1.759-1.69Z\",\n fill: \"#FF6100\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.79 21.98c0-.934.787-1.69 1.758-1.69h12.9c.971 0 1.759.756 1.759 1.69 0 .934-.788 1.69-1.76 1.69H6.549c-.971 0-1.759-.756-1.759-1.69Z\",\n fill: \"#FFB629\"\n})));\nexport default SvgIconViewNewSubmission;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgArrowLeft = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 9 15\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M242.656854,19.2928932 C243.047379,18.9023689 243.680544,18.9023689 244.071068,19.2928932 C244.461592,19.6834175 244.461592,20.3165825 244.071068,20.7071068 L238.414214,26.363961 L244.071068,32.0208153 C244.461592,32.4113396 244.461592,33.0445046 244.071068,33.4350288 C243.680544,33.8255531 243.047379,33.8255531 242.656854,33.4350288 L236.292893,27.0710678 C235.902369,26.6805435 235.902369,26.0473785 236.292893,25.6568542 L242.656854,19.2928932 Z\",\n transform: \"translate(-236 -19)\"\n})));\nexport default SvgArrowLeft;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconPrint = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 15 15\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.43975 5.95834c-.00106-.45279-.29734-.74682-.7502-.7443-.44853.00253-.74429.30439-.74064.75585.00359.44243.29861.73407.74383.7352.45272.00112.74808-.29403.74701-.74675zm-2.9828 7.45772v-.18531c0-1.1167-.00346-2.2334.00391-3.35004.001-.1597-.05223-.1901-.19772-.18976a1245.05512 1245.05512 0 0 1-5.58896.00007c-.14535-.00034-.19872.03013-.19766.18988.00737 1.12215.00372 2.24436.00432 3.36664 0 .0533.00617.10666.01002.16852h5.96608zm-7.46928 1.49117V11.1863h-.20316c-.85719 0-1.71445.00007-2.57164-.00013-.21205 0-.21232-.00046-.21232-.21903-.00007-1.40475-.00146-2.8095.0004-4.2142.00219-1.68876 1.29232-3.01885 2.97949-3.02715a913.39338 913.39338 0 0 1 8.97597 0c1.68677.00823 2.97784 1.33865 2.97996 3.02682.00186 1.40476.00046 2.80951.0004 4.21427 0 .2191-.00027.21929-.22852.21936-.84617.00006-1.69235.00006-2.53852.00006h-.21345v3.72093h-8.9686zM2.99934 2.96044h8.94411V.00007H2.99934z\",\n fillRule: \"evenodd\"\n})));\nexport default SvgIconPrint;","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconPdf = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 16 16\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.0742 0L14.777 3.78152H12.6769C11.7917 3.78152 11.0742 3.064 11.0742 2.17888V0Z\",\n fill: \"#252D5B\",\n fillOpacity: 0.5\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M3.70317 16H12.8509C13.9145 16 14.7767 15.0924 14.7767 13.9728V3.82663L14.7327 3.78152H12.6771C11.792 3.78152 11.0745 3.064 11.0745 2.17888V0.0322187L11.043 0H3.70317C2.63957 0 1.77734 0.907609 1.77734 2.0272V13.9728C1.77734 15.0924 2.63957 16 3.70317 16ZM4.27734 5.24125C4.27734 4.78419 4.64787 4.41367 5.10493 4.41367H11.1739C11.631 4.41367 12.0015 4.78419 12.0015 5.24125C12.0015 5.69831 11.631 6.06884 11.1739 6.06884H5.10493C4.64787 6.06884 4.27734 5.69831 4.27734 5.24125ZM4.27734 7.99987C4.27734 7.54281 4.64787 7.17228 5.10493 7.17228H11.1739C11.631 7.17228 12.0015 7.54281 12.0015 7.99987C12.0015 8.45693 11.631 8.82746 11.1739 8.82746H5.10493C4.64787 8.82746 4.27734 8.45693 4.27734 7.99987ZM5.10493 9.93089C4.64787 9.93089 4.27734 10.3014 4.27734 10.7585C4.27734 11.2155 4.64787 11.5861 5.10493 11.5861H11.1739C11.631 11.5861 12.0015 11.2155 12.0015 10.7585C12.0015 10.3014 11.631 9.93089 11.1739 9.93089H5.10493Z\",\n fill: \"#252D5B\"\n})));\nexport default SvgIconPdf;","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconDownload = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 14 16\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#2C3345\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.933 11.886c.297 0 .496-.1.694-.297l5.645-5.646-1.386-1.387-3.962 3.962V0H5.943v8.518L1.98 4.556.594 5.943l5.646 5.646c.198.198.396.297.693.297zM0 13.867L13.867 13.867 13.867 15.848 0 15.848z\"\n}))));\nexport default SvgIconDownload;","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconInboxNavigator = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 16 15\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M11.3924 0C11.3924 0.0469045 11.3924 0.0898704 11.3924 0.132881C11.3924 0.710907 11.3905 1.28889 11.3944 1.86687C11.395 1.95893 11.3683 1.98614 11.2717 1.98713C10.5683 1.99438 9.87377 2.0723 9.19394 2.25352C8.07609 2.55146 7.10905 3.09319 6.32557 3.92744C5.54968 4.75369 5.05716 5.72499 4.77337 6.80057C4.72247 6.99342 4.68706 7.19013 4.64453 7.38508C4.67694 7.37998 4.68383 7.36794 4.6896 7.35545C4.86393 6.9795 5.13584 6.67847 5.46226 6.42117C6.10224 5.91677 6.84837 5.6242 7.63485 5.41832C8.82961 5.10552 10.0524 5.01717 11.2841 5.00401C11.3729 5.00307 11.3944 5.0314 11.394 5.11272C11.391 5.69446 11.3924 6.2762 11.3924 6.8579C11.3924 6.901 11.3924 6.9441 11.3924 6.98904C12.6049 5.81522 13.8076 4.65088 15.0017 3.49483C13.8083 2.33927 12.6058 1.17489 11.3924 0\",\n fill: \"white\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M11.6133 14.1694H1.89295C0.850253 14.1694 0.00195312 13.3211 0.00195312 12.2784V2.24842C0.00195312 1.20568 0.850253 0.357422 1.89295 0.357422H7.63639C7.99449 0.357422 8.28481 0.647739 8.28481 1.00584C8.28481 1.36393 7.99449 1.65425 7.63639 1.65425H1.89295C1.56532 1.65425 1.29878 1.92079 1.29878 2.24842V12.2784C1.29878 12.606 1.56532 12.8725 1.89295 12.8725H11.6133C11.941 12.8725 12.2075 12.606 12.2075 12.2784V7.81614C12.2075 7.45804 12.4978 7.16772 12.8559 7.16772C13.214 7.16772 13.5043 7.45804 13.5043 7.81614V12.2784C13.5043 13.3211 12.656 14.1694 11.6133 14.1694\",\n fill: \"white\"\n})));\nexport default SvgIconInboxNavigator;","\n \n\n","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAssignFormFlow = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 15 20\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M1.28 15.1676C1.28 15.4438 1.50386 15.6676 1.78 15.6676H8.81C9.08614 15.6676 9.31 15.4438 9.31 15.1676V12.3811C9.2911 12.3827 9.32892 12.3843 9.31 12.3856C9.34168 12.3803 9.2739 12.3878 9.31 12.3856C8.21967 12.5599 6.98806 12.3871 6.00381 11.8823C5.91199 11.8386 5.81183 11.8164 5.7106 11.8174C4.99157 11.8136 4.27254 11.8143 3.55351 11.8143H2.76995C2.63188 11.8143 2.51995 11.7024 2.51995 11.5643V11.0079C2.51995 10.8698 2.63188 10.7579 2.76995 10.7579H4.53186L4.35874 10.5028C4.21213 10.2893 4.06847 10.0803 3.93292 9.8652C3.87251 9.77012 3.8121 9.73314 3.70306 9.73616C3.47174 9.74069 3.23967 9.73993 3.00466 9.73918L2.76956 9.73881C2.63164 9.7386 2.51995 9.62673 2.51995 9.48881V8.9448C2.51995 8.80673 2.63188 8.6948 2.76995 8.6948H3.43195C3.23967 7.98396 3.17853 7.28369 3.26767 6.57361C3.33082 6.08158 3.62943 5.26762 3.80438 4.84118H1.78C1.50386 4.84118 1.28 5.06503 1.28 5.34118V15.1676ZM10.62 15.8326C10.444 16.5196 9.825 17 9.11587 17H0.999999C0.447714 17 0 16.5523 0 16V4.72689C0 4.06227 0.538781 3.52349 1.2034 3.52349C2.32468 3.52349 3.44595 3.52424 4.56723 3.51896C4.66226 3.5182 4.77866 3.47217 4.84865 3.40652C5.96698 2.36517 7.28201 1.89731 8.78269 2.0188C11.0665 2.20368 12.9694 4.00568 13.3584 6.31855C13.7463 8.62008 12.6409 10.8599 10.62 11.9006C10.6729 11.8756 10.5683 11.9272 10.62 11.9006C10.62 12.1094 10.62 12.0913 10.62 12.212C10.6237 13.4194 10.6207 14.626 10.62 15.8326ZM7.75792 13.632C7.75792 13.77 7.646 13.882 7.50792 13.882H2.76995C2.63188 13.882 2.51995 13.77 2.51995 13.632V13.1042C2.51995 12.9661 2.63188 12.8542 2.76995 12.8542H7.50792C7.646 12.8542 7.75792 12.9661 7.75792 13.1042V13.632Z\",\n fill: \"#5E74E6\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.3 10.6V4H7.95973C7.81331 4.76587 7.06997 5.3628 6 5.37406V6.4215H7.757V10.6H9.3Z\",\n fill: \"white\"\n})));\nexport default SvgIconAssignFormFlow;","\n \n\n","\n \n\n","\n \n\n","var _path, _path2, _path3, _path4;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconTakeover = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 16 14\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2 0C0.895508 0 0 0.894531 0 2V12L0.0117188 12.2227L0.0429688 12.418C0.234375 13.3242 1.03809 14 2 14H9.26172L7.44824 11.8711C7.23047 11.6172 7.09277 11.3125 7.0332 11H2C1.44727 11 1 10.5508 1 10V2C1 1.70312 1.13086 1.43359 1.33887 1.25C1.47168 1.13281 1.63574 1.05078 1.81836 1.01562C1.87695 1.00391 1.9375 1 2 1H12C12.1709 1 12.332 1.04297 12.4727 1.12109C12.6279 1.20312 12.7578 1.32812 12.8506 1.47656C12.9453 1.62891 13 1.80859 13 2V8.47656L13.9443 7.52734C13.9629 7.50781 13.9814 7.48828 14 7.47266V2C14 0.894531 13.1045 0 12 0H2Z\",\n fill: \"#fff\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.64355 3.14844C2.73438 3.05859 2.86035 3 3 3H11C11.2764 3 11.5 3.22266 11.5 3.5C11.5 3.77734 11.2764 4 11 4H3C2.72363 4 2.5 3.77734 2.5 3.5L2.5127 3.38672C2.53418 3.29688 2.58008 3.21484 2.64355 3.14844Z\",\n fill: \"#fff\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3 6C2.72363 6 2.5 6.22266 2.5 6.5C2.5 6.77734 2.72363 7 3 7H9C9.27637 7 9.5 6.77734 9.5 6.5C9.5 6.22266 9.27637 6 9 6H3Z\",\n fill: \"#fff\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.653 8.23163C14.9755 7.90798 15.4817 7.92566 15.7838 8.27112C16.0859 8.61658 16.0694 9.15901 15.747 9.48266L11.4774 13.7684C11.152 14.095 10.6403 14.0736 10.3397 13.7208L8.20922 11.2208C7.91131 10.8712 7.93431 10.3291 8.26059 10.0099C8.58687 9.69068 9.09288 9.71532 9.39079 10.0649L10.9748 11.9237L14.653 8.23163Z\",\n fill: \"#fff\"\n})));\nexport default SvgIconTakeover;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgSignatureIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 18.23 16.63\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.14 8.86L11 .15a.39.39 0 00-.56-.06l-1.7 1.44a.41.41 0 00-.05.57l7.12 8.71a.39.39 0 00.56.06l1.72-1.45a.4.4 0 00.05-.56zM2.8 5.68a.39.39 0 00-.28.32L0 16l4.65-3.87a2 2 0 01.49-2.47 2 2 0 012.79.26 2 2 0 01-.26 2.81 2 2 0 01-1.45.45 2 2 0 01-1.06-.43L.51 16.63 10.79 16a.39.39 0 00.34-.22L14 9.9 9.09 4z\"\n})));\nexport default SvgSignatureIcon;","\n \n\n","import React, { useState } from 'react';\nimport {\n func, string, node, shape, bool\n} from 'prop-types';\nimport classNames from 'classnames';\nimport { Dialog } from '@jotforminc/dialog';\n\nconst isWorkflowReleased = window?.isWorkflowReleased;\n\nconst dialogProps = {\n cancel: {\n type: 'warning',\n title: isWorkflowReleased ? 'Cancel Flow' : 'Cancel approval flow for this submission',\n subTitles: [\n isWorkflowReleased ? 'Terminating this flow will stop all ongoing and future tasks associated with it.'\n : 'You can cancel approval flow for this submission.',\n 'This action cannot be undone.'\n ],\n otherButtonText: isWorkflowReleased ? 'CANCEL FLOW' : 'CANCEL APPROVAL FLOW'\n },\n startover: {\n type: 'warning',\n title: isWorkflowReleased ? 'Restart Flow' : 'Restart the approval flow',\n subTitles: [\n isWorkflowReleased ? 'Restarting this flow will reset all actions and start the flow from the beginning.' : 'You can restart approval flow for this submission.',\n 'This action cannot be undone.'\n ],\n otherButtonText: isWorkflowReleased ? 'RESTART FLOW' : 'RESTART APPROVAL FLOW'\n },\n retryAction: {\n type: 'warning',\n title: 'Retry Failed Integration',\n subTitles: [\n 'Do you want to proceed with retrying the integration?'\n ],\n otherButtonText: 'RETRY'\n }\n};\n\nconst StartCancelAction = ({\n onActionClick,\n renewFlow,\n propName,\n buttonName,\n ButtonRenderer,\n buttonProps,\n onError,\n recordEvent,\n fromError\n}) => {\n const [isDialogOpen, setIsDialogOpen] = useState(false);\n\n const ButtonToRender = ButtonRenderer || (({ onClick, children }) => );\n\n const closeDialog = () => setIsDialogOpen(false);\n\n const openDialog = () => {\n recordEvent(`open${propName}Action`, 'workflow');\n setIsDialogOpen(true);\n };\n\n const handleActionResult = data => {\n if (!data) {\n onError();\n return;\n }\n renewFlow();\n };\n\n const onDialogSubmit = () => {\n const cancelAction = fromError ? 'WF-Error-Canceled' : 'WF-Canceled';\n const takeoverAction = fromError ? 'WF-Error-TakeOver' : 'WF-FlowOwnerTakeOver';\n const action = propName === 'cancel' ? cancelAction : takeoverAction;\n recordEvent(action, 'workflow');\n onActionClick()\n .then(data => {\n handleActionResult(data);\n })\n .catch(() => {\n handleActionResult();\n });\n closeDialog();\n };\n return (\n <>\n {buttonName}\n \n \n );\n};\n\nStartCancelAction.propTypes = {\n onActionClick: func.isRequired,\n renewFlow: func.isRequired,\n propName: string.isRequired,\n buttonName: string.isRequired,\n ButtonRenderer: node,\n buttonProps: shape({}),\n onError: func,\n recordEvent: func,\n fromError: bool\n};\n\nStartCancelAction.defaultProps = {\n ButtonRenderer: null,\n buttonProps: {},\n onError: f => f,\n recordEvent: f => f,\n fromError: false\n};\n\nexport default StartCancelAction;\n","import React, { useMemo } from 'react';\nimport { t, translationRenderer } from '@jotforminc/translation';\nimport { handleCustomNavigation } from '@jotforminc/utils';\nimport {\n IconUsersFilled, IconFormCheckFilled, IconTriangleCircleFilled,\n IconXmarkCircle, IconArrowUpRightFromSquareSm, IconArrowsRotate\n} from '@jotforminc/svg-icons';\nimport IconTakeOver from '../assets/iconTakeover.svg';\nimport TaskSection from '../containers/TaskSection';\nimport StartCancelAction from '../components/StartCancelAction';\nimport ReassignComponent from '../components/Reassign.new';\n\nconst isWorkflowReleased = window?.isWorkflowReleased;\n\nconst getTakeOverText = ({ name, email, isGroupApproval }) => {\n const approver = name || email;\n if (approver) {\n return translationRenderer(`[1[{Complete}]] ${approver}[2[{continueApprovalFlow}]]`)({\n renderer1: () => 'Complete',\n renderer2: () => '’s task yourself and continue the approval flow.'\n });\n }\n\n return translationRenderer(`[1[{Complete}]] ${isGroupApproval ? t(\"Group Approval's\") : t('this')} [2[{continueApprovalFlow}]]`)({\n renderer1: () => 'Complete',\n renderer2: () => 'task yourself and continue the approval flow.'\n });\n};\n\nexport const useActionComponents = props => {\n return useMemo(() => {\n const {\n approver,\n task,\n isCommentRequired,\n onTaskListRenew,\n submissionID,\n formID,\n onCancelClick,\n onStartOverClick,\n onError,\n ActionButton,\n recordEvent = f => f,\n isHIPAA,\n fromError,\n teamInfo,\n onRetryActionClick,\n isGroupApproval = false\n } = props;\n\n let documentFormID = null;\n let documentSubmissionID = null;\n if (task && task?.properties && task?.properties?.documentFormID && task?.properties?.submissionID) {\n documentFormID = task?.properties?.documentFormID;\n documentSubmissionID = task?.properties?.submissionID;\n }\n return {\n takeover: () => ({\n title: t('Take Over'),\n icon: ,\n component: (\n <>\n \n {getTakeOverText({ name: approver?.name, email: approver?.email, isGroupApproval })}\n \n \n \n )\n }),\n reassign: () => ({\n title: t('Reassign'),\n icon: ,\n component: (\n <>\n \n \n )\n }),\n cancelFlow: () => ({\n button: (\n \n }}\n recordEvent={recordEvent}\n fromError={fromError}\n />)\n }),\n startOver: () => ({\n button: (\n \n }}\n recordEvent={recordEvent}\n fromError={fromError}\n />)\n }),\n openWorkflowBuilder: () => ({\n title: isWorkflowReleased ? t('View Flow') : t('View Approval Flow'),\n icon: ,\n onClick: () => {\n handleCustomNavigation(`/workflow/withForm/${formID}`, '_blank');\n recordEvent('WF-Error-VisitApprovalFlow', 'workflow');\n }\n }),\n openSignInbox: () => ({\n title: t('Track'),\n icon: ,\n onClick: () => {\n if (documentFormID && documentSubmissionID) {\n handleCustomNavigation(`/inbox/${documentFormID}/signAllDocuments/${documentSubmissionID}`);\n recordEvent('WF-Error-Visit', 'workflow');\n }\n }\n }),\n retryAction: () => ({\n button: (\n \n }}\n recordEvent={recordEvent}\n fromError={fromError}\n />)\n })\n };\n }, [props]);\n};\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgUnsplashIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 32 32\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10 9V0h12v9H10zm12 5h10v18H0V14h10v9h12v-9z\",\n fill: \"#000000\",\n fillRule: \"nonzero\"\n})));\nexport default SvgUnsplashIcon;","/* eslint-disable max-lines */\n/* eslint-disable camelcase */\nimport React, {\n useState, useEffect, useRef\n} from 'react';\nimport { array, shape, string } from 'prop-types';\nimport DOMPurify from 'dompurify';\nimport { Button } from '@jotforminc/magnet';\nimport { rgba } from 'polished';\nimport classNames from 'classnames';\nimport { Portal } from '@jotforminc/uikit';\nimport Tracking from '@jotforminc/tracking';\nimport {\n IconPencilToSquare,\n IconFormCheckFilled,\n IconEnvelopeClosedFilled,\n IconArrowUpRightFromSquareSm,\n IconUserFilled\n} from '@jotforminc/svg-icons';\nimport { Unsupported, Preview } from '@jotforminc/preview';\nimport { t, translationRenderer } from '@jotforminc/translation';\nimport { handleCustomNavigation, safeJSONParse, escapeHTML } from '@jotforminc/utils';\nimport { WorkflowStatus } from '@jotforminc/placeholder';\nimport {\n SingleSubmissionViewWithButton, fetchQuestions, fetchSubmission, SingleSubmissionButtonContext\n} from '@jotforminc/single-submission-buttons';\nimport { getAllIntegrationsDetails } from '@jotforminc/integration-constants';\nimport IconAssignFormWF from '../assets/iconAssignFormFlow.svg';\nimport { decodeHTML, stripHTML } from '../utils';\nimport ApprovalOptions from '../components/ApprovalOptions';\nimport AvatarGroupWithPanel from '../components/AvatarGroupWithPanel';\nimport { isTeamApproval } from '../utils/helper';\n\nexport const INTEGRATION_DETAILS = getAllIntegrationsDetails();\n\nconst isWorkflowReleased = window?.isWorkflowReleased;\n\nconst getElementName = (type, subType) => {\n // eslint-disable-next-line default-case\n switch (true) {\n case type === 'workflow_assign_form':\n return 'Form';\n case type === 'workflow_approval' && subType && subType === 'workflow_approval_with_sign':\n return 'Approve & Sign';\n case type === 'workflow_approval':\n return 'Approval';\n }\n};\n\nconst getUsers = actionDetails => {\n const { newAssigneeEmail, newAssigneeUser } = actionDetails;\n\n const { previousAssigneeEmail, previousAssigneeUser } = actionDetails;\n\n return {\n next: {\n ...newAssigneeUser,\n name: newAssigneeUser?.name || newAssigneeEmail\n },\n prev: {\n ...previousAssigneeUser,\n name: previousAssigneeUser?.name || previousAssigneeEmail\n }\n };\n};\n\nconst getAssignee = actionDetails => {\n const { assigneeUser } = actionDetails;\n return assigneeUser;\n};\n\nconst getSystemUser = () => {\n return {\n name: 'Notification',\n avatarUrl: \"data:image/svg+xml,%3Csvg width='40' height='40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23fff' d='M15.5 13h9v4h-9z'/%3E%3Cpath d='M12.5 24v-5h15v5' stroke='%23fff' stroke-width='1.7' stroke-linejoin='round'/%3E%3Cpath stroke='%23fff' stroke-width='1.7' d='M19.9 24v-5'/%3E%3Ccircle cx='12.5' cy='24.5' r='2.5' fill='%23fff'/%3E%3Ccircle cx='27.5' cy='24.5' r='2.5' fill='%23fff'/%3E%3Cpath fill='%23fff' d='M17.5 22h5v5h-5z'/%3E%3C/svg%3E\", // eslint-disable-line\n isSystem: true\n };\n};\n\nconst getGroupApproverUser = () => {\n return {\n name: 'Group Approval',\n avatarUrl: \"data:image/svg+xml,%3Csvg width='40' height='40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23fff' d='M15.5 13h9v4h-9z'/%3E%3Cpath d='M12.5 24v-5h15v5' stroke='%23fff' stroke-width='1.7' stroke-linejoin='round'/%3E%3Cpath stroke='%23fff' stroke-width='1.7' d='M19.9 24v-5'/%3E%3Ccircle cx='12.5' cy='24.5' r='2.5' fill='%23fff'/%3E%3Ccircle cx='27.5' cy='24.5' r='2.5' fill='%23fff'/%3E%3Cpath fill='%23fff' d='M17.5 22h5v5h-5z'/%3E%3C/svg%3E\", // eslint-disable-line\n isSystem: true\n };\n};\n\nconst getTerminate = () => {\n return {\n name: 'Terminate',\n avatarUrl: \"data:image/svg+xml,%3Csvg width='44' height='44' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='22' cy='22' r='22' fill='%23C90909'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M17 13.667A3.333 3.333 0 0 0 13.667 17v10A3.333 3.333 0 0 0 17 30.333h10A3.333 3.333 0 0 0 30.333 27V17A3.333 3.333 0 0 0 27 13.667H17Z' fill='%23fff'/%3E%3C/svg%3E\"// eslint-disable-line\n };\n};\n\nconst getGroupTeamApproverUser = team => {\n return {\n name: team?.teamName,\n isSystem: true,\n team\n };\n};\n\nconst entryPropTypes = {\n actionDetails: shape({}),\n user: shape({ })\n};\n\nexport const statusTexts = {\n APPROVE: 'Approved',\n DENY: 'Denied',\n EXPIRE: 'Expired',\n AUTO: 'Automatically Finished',\n ESCALATE: 'Escalated',\n REASSIGN: 'Reassigned',\n CANCEL: 'Canceled',\n CUSTOM_EMAIL: 'Email Sent',\n REPLY: 'Replied',\n RESTART: 'Restarted',\n TASK: 'Waiting',\n REQUEST_MORE_INFO: 'Requested more info',\n EDIT_SUBMISSION: 'Edit submission',\n ASSIGN_FORM_SUBMISSION: 'Form Submitted',\n ASSIGN_FORM_NOTIFICATION_MAIL: 'Form Assigned',\n MULTIPLE_APPROVAL_MAIL: 'Group Approval',\n REMINDER: 'Reminder'\n};\n\nconst WFCategoryName = ({ actionDetails: { type } }) => (\n \n \n {isWorkflowReleased ? t('Workflow') : t('Approval Flow')}\n \n);\n\nWFCategoryName.propTypes = {\n actionDetails: shape({}).isRequired\n};\n\nconst WFNewSubmissionCategoryName = ({ actionDetails: { type } }) => (\n \n \n {t('New Submission')}\n \n);\n\nWFNewSubmissionCategoryName.propTypes = {\n actionDetails: shape({}).isRequired\n};\n\nconst WFCategoryLoadingName = () => (\n \n
\n \n
\n
\n\n);\n\nWFCategoryLoadingName.propTypes = {};\n\nconst EditSubmisisonCategoryName = ({ actionDetails: { type } }) => (\n \n \n {t('Edit Submission')}\n \n);\n\nEditSubmisisonCategoryName.propTypes = {\n actionDetails: shape({}).isRequired\n};\n\nconst EmailCategoryName = ({ actionType, actionDetails: { type } }) => (\n \n \n {t(actionType.toLowerCase())}\n \n);\n\nEmailCategoryName.propTypes = {\n actionType: string.isRequired,\n actionDetails: shape({}).isRequired\n};\n\nconst ReplyEntry = ({ actionDetails }) => {\n const { body } = actionDetails;\n const ref = useRef();\n const sanitizedBody = DOMPurify.sanitize(body);\n\n const [quotationCollapsed, setQuotationCollapsed] = useState(true);\n const [showButton, setShowButton] = useState(ref?.current?.querySelector('.quotationWrapper'));\n\n const handleExpand = () => setQuotationCollapsed(!quotationCollapsed);\n\n useEffect(() => {\n setShowButton(ref?.current?.querySelector('.quotationWrapper'));\n }, [body]);\n\n return (\n <>\n
\n
\n { showButton ? (\n \n ) : null }\n
\n \n );\n};\n\nReplyEntry.Name = EmailCategoryName;\n\nReplyEntry.propTypes = {\n ...entryPropTypes\n};\n\nReplyEntry.Status = ({ actionDetails: { subject, to } }) => {\n return (\n <>\n {subject}\n `).replace(/{subject}/g, escapeHTML(subject))\n }}\n />\n
\n {t('to: {to}').replace(/{to}/g, to)}\n
\n \n );\n};\n\nReplyEntry.Status.propTypes = {\n actionDetails: shape({}).isRequired\n};\n\nReplyEntry.Attachment = ({ actionDetails: { attachments } }) => {\n const [fileIndex, setFileIndex] = useState(0);\n const [previewVisibility, setPreviewVisibility] = useState(false);\n let uploadUrls = attachments && JSON.parse(attachments);\n\n if (Array.isArray(uploadUrls)) {\n uploadUrls = uploadUrls.map(uploadUrl => {\n const hiddenExtensions = ['JPEG', 'PNG', 'GIF', 'JPG', 'DOCX'];\n const fullName = /[^/]*$/.exec(uploadUrl)[0];\n const extension = fullName?.split('.')?.pop()?.toUpperCase();\n\n return {\n description: '',\n fileName: fullName,\n fileThumbnailUrl: uploadUrl,\n fileUrl: uploadUrl,\n previewUrl: uploadUrl,\n size: '',\n extension,\n isHidden: hiddenExtensions.indexOf(extension) > -1\n };\n });\n return (\n \n {uploadUrls.map(({ fileName, extension, isHidden }, i) => {\n return (\n {\n setFileIndex(i);\n setPreviewVisibility(true);\n }}\n >\n
\n \n
\n \n {fileName}\n \n \n );\n })}\n {previewVisibility && (\n setPreviewVisibility(false)}\n />\n )}\n
\n );\n } return null;\n};\n\nReplyEntry.Attachment.propTypes = ReplyEntry.Status.propTypes;\n\nconst ForwardEntry = props => ;\nForwardEntry.Name = EmailCategoryName;\nForwardEntry.Status = ReplyEntry.Status;\nForwardEntry.Attachment = ReplyEntry.Attachment;\n\nForwardEntry.propTypes = {\n ...entryPropTypes\n};\n\nconst AssignEntry = ({ user, actionDetails }) => {\n const { name, email } = user;\n const assignerID = name || email;\n\n const { assigneeName, assigneeEmail } = actionDetails;\n\n const assigneeID = email === assigneeEmail ? (\n assignerID\n ) : (assigneeName || assigneeEmail);\n\n return (\n
\n {translationRenderer('[1[{assignerID}]] [2[assigned]] this submission to [3[{assigneeID}]]')({\n renderer1: () => <>{assignerID},\n renderer2: text => {text},\n renderer3: () => {assigneeID}\n })}\n
\n );\n};\n\nAssignEntry.propTypes = {\n ...entryPropTypes\n};\n\nconst ReAssignEntry = ({ actionDetails }) => {\n const { comment } = actionDetails;\n return comment ?
{comment}
: null;\n};\n\nReAssignEntry.propTypes = {\n ...entryPropTypes\n};\n\nReAssignEntry.Name = WFCategoryName;\n\nReAssignEntry.Status = ({ /* user, */ actionDetails }) => {\n // const { name, email } = user;\n // const assignerID = name || email;\n\n const {\n // newAssigneeName,\n newAssigneeEmail,\n newAssigneeUser: { name: assigneeName }\n } = actionDetails;\n\n // const assigneeID = email === newAssigneeEmail ? (\n // assignerID\n // ) : (newAssigneeName || newAssigneeEmail);\n\n return (\n <>\n
\n {translationRenderer('[1[Reassigned]] to [2[{user}]]')({\n renderer1: text => {text},\n renderer2: () => {assigneeName || newAssigneeEmail}\n })}\n
\n \n );\n};\n\nReAssignEntry.Status.propTypes = {\n ...entryPropTypes\n};\n\nReAssignEntry.PopoverDescription = ({ /* user, */ actionDetails }) => {\n const {\n newAssigneeEmail,\n newAssigneeUser: { name: assigneeName }\n } = actionDetails;\n\n return t('to: {user}.').replace(/{user}/g, assigneeName || newAssigneeEmail);\n};\n\nReAssignEntry.PopoverDescription.propTypes = {\n ...entryPropTypes\n};\n\nconst requestMoreInfoEntry = {};\n\nrequestMoreInfoEntry.propTypes = {\n ...entryPropTypes\n};\nrequestMoreInfoEntry.Name = WFCategoryName;\n\nrequestMoreInfoEntry.Status = ({ actionDetails }) => {\n const { assigneeUser = {}, assigneeEmail = '' } = actionDetails;\n const { name, email } = assigneeUser;\n return (\n <>\n
\n {translationRenderer('[1[Requested more info]] from [2[{userDetails}]]')({\n renderer1: text => {text},\n renderer2: () => {name || email || assigneeEmail}\n })}\n
\n \n );\n};\n\nrequestMoreInfoEntry.Status.propTypes = {\n ...entryPropTypes\n};\n\nrequestMoreInfoEntry.Attachment = ({ actionDetails }) => {\n const { attachments } = actionDetails;\n\n const [fileIndex, setFileIndex] = useState(0);\n const [previewVisibility, setPreviewVisibility] = useState(false);\n let uploadUrls = attachments && JSON.parse(attachments);\n if (!attachments || !uploadUrls || uploadUrls?.length === 0) {\n return null;\n }\n\n if (Array.isArray(uploadUrls)) {\n uploadUrls = uploadUrls.map(uploadUrl => {\n const hiddenExtensions = ['JPEG', 'PNG', 'GIF', 'JPG', 'DOCX'];\n const fullName = /[^/]*$/.exec(uploadUrl)[0];\n const extension = fullName?.split('.')?.pop()?.toUpperCase();\n\n return {\n description: '',\n fileName: fullName,\n fileThumbnailUrl: uploadUrl,\n fileUrl: uploadUrl,\n previewUrl: uploadUrl,\n size: '',\n extension,\n isHidden: hiddenExtensions.indexOf(extension) > -1\n };\n });\n return (\n \n {uploadUrls.map(({ fileName, extension, isHidden }, i) => {\n return (\n {\n setFileIndex(i);\n setPreviewVisibility(true);\n }}\n >\n
\n \n
\n \n {fileName}\n \n \n );\n })}\n {previewVisibility && (\n setPreviewVisibility(false)}\n />\n )}\n
\n );\n } return null;\n};\n\nrequestMoreInfoEntry.Attachment.propTypes = {\n ...entryPropTypes\n};\n\nconst undoLoadingEntry = {};\n\nundoLoadingEntry.propTypes = {\n};\n\nundoLoadingEntry.Name = WFCategoryName;\n\nundoLoadingEntry.Status = () => {\n return (\n
\n \n
\n );\n};\n\nundoLoadingEntry.Status.propTypes = {\n ...entryPropTypes\n};\n\nconst mockApproveDenyEntry = ({ actionDetails, user }) => {\n const { comment, signature } = actionDetails;\n return (\n <>\n {/* eslint-disable-next-line no-nested-ternary */}\n {user?.username === '!workflow_system'\n ? null // \n : (\n <>\n {comment ?
{comment}
: null}\n {signature ?
{`${user.username}'s
: null}\n \n )}\n \n );\n};\n\nmockApproveDenyEntry.propTypes = {\n};\n\nmockApproveDenyEntry.Name = WFCategoryName;\n\nmockApproveDenyEntry.Status = ({\n actionDetails: {\n text, buttonColor: color, type, assigneeEmail, assigneeUser: { name } = {}\n },\n user: { username, email }\n}) => {\n const isSystem = username === '!workflow_system';\n const hideBehalf = isSystem || (!name && !assigneeEmail) || assigneeEmail === email;\n const badgeText = statusTexts[text?.toUpperCase()] || text;\n const badgeClass = type?.toLowerCase();\n const displayName = name || assigneeEmail;\n const contentText = `${isSystem ? \"[1[{user}'s]] task was automatically\" : ''} [2[{badgeText}]] ${hideBehalf ? '' : 'on behalf of [3[{user}]]'}`;\n return (\n <>\n
\n {translationRenderer(contentText)({\n renderer1: usernameText => {usernameText.replace('{user}', displayName)},\n renderer2: () => {t(badgeText)},\n renderer3: usernameText => {usernameText.replace('{user}', displayName)}\n })}\n
\n {isSystem\n ? (\n
\n {'{user} didn\\'t take any action in the time allowed.'.replace(/{user}/, name || assigneeEmail)}\n
\n )\n : null}\n \n );\n};\n\nmockApproveDenyEntry.Status.propTypes = {\n ...entryPropTypes\n};\n\nconst editSubmissionEntry = {};\n\neditSubmissionEntry.propTypes = {\n ...entryPropTypes\n};\n\neditSubmissionEntry.Name = EditSubmisisonCategoryName;\n\neditSubmissionEntry.Status = ({ actionDetails }) => {\n const { assigneeUser: { name, email } = {}, assigneeEmail } = actionDetails;\n const actionOwner = name || email || assigneeEmail || 'Form User';\n\n return (\n <>\n
\n \n {' '}\n {actionOwner}\n \n {' '}\n edited the submission.\n
\n \n );\n};\n\neditSubmissionEntry.Status.propTypes = {\n ...entryPropTypes\n};\n\nconst UserNoAction = ({ user }) => (\n
\n {user.avatarUrl ? (\n \n ) : null}\n {t('{user} did not complete this submission in the time allowed.').replace(/{user}/g, user.name)}\n
\n);\n\nUserNoAction.propTypes = {\n user: shape({}).isRequired\n};\n\nconst EscalateEntry = {};\n\nEscalateEntry.propTypes = {\n ...entryPropTypes\n};\n\nEscalateEntry.user = getSystemUser;\n\nEscalateEntry.Name = WFCategoryName;\n\n// Please dont use dangerouslySetInnerHTML for translations, its dangerous >_<\nEscalateEntry.Status = ({ actionDetails }) => {\n const { prev, next } = getUsers(actionDetails);\n const { fromMultipleApproval } = actionDetails;\n const displayName = fromMultipleApproval ? 'Group Approval' : (prev.name || prev.email);\n return (\n <>\n
\n {translationRenderer(\"[1[{prevName}'s]] task has been [2[Escalated]] to [3[{nextName}]]\")({\n renderer1: text => {text.replace(/{prevName}/g, displayName)},\n renderer2: text => {text},\n renderer3: () => {next.name || next.email}\n })}\n
\n
\n {t('{prevName} didn\\'t take any action in the time allowed.').replace(/{prevName}/g, displayName)}\n
\n \n );\n};\n\nEscalateEntry.Status.propTypes = {\n ...entryPropTypes\n};\n\nEscalateEntry.PopoverDescription = ({ actionDetails }) => {\n const { next } = getUsers(actionDetails);\n return t('to: {nextName}').replace(/{nextName}/g, next.name || next.email);\n};\n\nEscalateEntry.PopoverDescription.propTypes = {\n ...entryPropTypes\n};\n\nconst ExpiredEntry = {};\n\nExpiredEntry.propTypes = {\n ...entryPropTypes\n};\n\nExpiredEntry.user = getSystemUser;\n\nExpiredEntry.Name = WFCategoryName;\n\nExpiredEntry.Status = ({ actionDetails }) => {\n const user = getAssignee(actionDetails);\n const { fromMultipleApproval } = actionDetails;\n const displayName = fromMultipleApproval ? 'Group Approval' : user?.name || user?.email;\n return (\n
\n
\n {translationRenderer('[1[{user}]] task was [2[Expired]]')({\n renderer1: text => {text.replace('{user}', displayName)},\n renderer2: text => {text}\n })}\n
\n
\n {t(\"{user} didn't take any action in the time allowed.\").replace('{user}', displayName)}\n
\n
\n );\n};\n\nExpiredEntry.Status.propTypes = {\n ...entryPropTypes\n};\n\nconst CompleteEntry = ({ actionDetails }) => {\n const { type } = actionDetails;\n const { prev } = getUsers(actionDetails);\n const typeText = t(statusTexts[type]);\n return (\n
\n
\n {translationRenderer('This submission has [1[Automatically Finished]] as [2[{typeText}]]')({\n renderer1: text => {text},\n renderer2: () => {typeText}\n })}\n
\n \n
\n );\n};\n\nCompleteEntry.propTypes = {\n ...entryPropTypes\n};\n\nconst ApproveRejectEntry = ({ actionDetails, user }) => {\n const { comment, signature } = actionDetails;\n return (\n <>\n {/* eslint-disable-next-line no-nested-ternary */}\n {user?.username === '!workflow_system'\n ? null // \n : (\n <>\n {comment ?
{comment}
: null}\n {signature ?
{`${user.username}'s
: null}\n \n )}\n \n );\n};\n\nApproveRejectEntry.user = (actionDetails, user) => (\n user?.username === '!workflow_system' ? getSystemUser() : { ...user, color: actionDetails?.buttonColor }\n);\n\nApproveRejectEntry.propTypes = {\n ...entryPropTypes\n};\n\nApproveRejectEntry.Status = ({\n actionDetails: {\n text, buttonColor: color, type, assigneeEmail, assigneeUser: { name } = {}, title, takenOver, fromMultipleApproval\n },\n user: { username, email }\n}) => {\n const isSystem = username === '!workflow_system';\n const hideBehalfEmail = assigneeEmail?.toLowerCase() === email?.toLowerCase();\n const hideBehalf = (!takenOver || isSystem) && (isSystem || (!name && !assigneeEmail) || hideBehalfEmail || (!username && !email && (name || assigneeEmail)));\n const badgeText = statusTexts[text?.toUpperCase()] || text;\n const badgeClass = type?.toLowerCase();\n const displayName = fromMultipleApproval ? 'Group Approval' : name || assigneeEmail;\n const contentText = `${isSystem ? \"[1[{user}'s]] task was automatically\" : ''} [2[{badgeText}]] ${hideBehalf ? '' : ' on behalf of [3[{user}]]'}`;\n return (\n <>\n {title ? (\n {translationRenderer('[1[{taskTitle}]] Step')({ renderer1: () => <>{title} })}\n ) : null}\n
\n {translationRenderer(contentText)({\n renderer1: usernameText => {usernameText.replace('{user}', displayName)},\n renderer2: () => {t(badgeText)},\n renderer3: usernameText => {usernameText.replace('{user}', displayName)}\n })}\n
\n {isSystem\n ? (\n
\n {'{user} didn\\'t take any action in the time allowed.'.replace(/{user}/, displayName)}\n
\n )\n : null}\n \n );\n};\n\nApproveRejectEntry.Attachment = ({ actionDetails: { attachment } }) => {\n const [fileIndex, setFileIndex] = useState(0);\n const [previewVisibility, setPreviewVisibility] = useState(false);\n let uploadUrls = [];\n if (attachment && attachment?.url) {\n uploadUrls.push(attachment?.url);\n }\n\n if (uploadUrls && Array.isArray(uploadUrls) && uploadUrls?.length > 0) {\n uploadUrls = uploadUrls?.map(uploadUrl => {\n const hiddenExtensions = ['JPEG', 'PNG', 'GIF', 'JPG', 'DOCX'];\n const fullName = /[^/]*$/.exec(uploadUrl)[0];\n const extension = fullName?.split('.')?.pop()?.toUpperCase();\n\n return {\n description: '',\n fileName: fullName,\n fileThumbnailUrl: uploadUrl,\n fileUrl: uploadUrl,\n previewUrl: uploadUrl,\n size: '',\n extension,\n isHidden: hiddenExtensions?.indexOf(extension) > -1\n };\n });\n return (\n \n {uploadUrls?.map(({ fileName, extension, isHidden }, i) => {\n return (\n {\n setFileIndex(i);\n setPreviewVisibility(true);\n }}\n >\n
\n \n
\n \n {fileName}\n \n \n );\n })}\n {previewVisibility && (\n setPreviewVisibility(false)}\n />\n )}\n \n );\n } return null;\n};\n\nApproveRejectEntry.Attachment.propTypes = {\n ...entryPropTypes\n};\n\nApproveRejectEntry.Status.propTypes = {\n ...entryPropTypes\n};\n\nApproveRejectEntry.Name = WFCategoryName;\n\nconst MultipleApproveReject = ({ actionDetails, user }) => {\n const { comment, signature } = actionDetails;\n return (\n <>\n {/* eslint-disable-next-line no-nested-ternary */}\n {user?.username === '!workflow_system'\n ? null // \n : (\n <>\n {comment ?
{comment}
: null}\n {signature ?
{`${user.username}'s
: null}\n \n )}\n \n );\n};\n\nMultipleApproveReject.user = actionDetails => (\n isTeamApproval(actionDetails?.subType || actionDetails?.type, actionDetails?.team) ? getGroupTeamApproverUser(actionDetails?.team) : getGroupApproverUser()\n);\n\nMultipleApproveReject.propTypes = {\n ...entryPropTypes\n};\n\nMultipleApproveReject.Status = ({\n actionDetails: {\n text = '', buttonColor: color, type, subtaskHistory, title, approvalOptions, subType, sentDate, cancelReason, team = null\n }\n}) => {\n const badgeText = statusTexts[text?.toUpperCase()] || text;\n const badgeClass = type?.toLowerCase();\n const filteredsubTaskHistory = subtaskHistory?.filter(history => history?.actionDetails?.assigneeUser);\n const subtaskActionDetails = filteredsubTaskHistory?.map(history => history?.actionDetails);\n const parsedDataForWorkflow = filteredsubTaskHistory?.map(({\n actionDetails, timestamp, user\n }) => {\n const {\n buttonColor,\n assigneeUser,\n outcomeInfo,\n notRequired,\n notQualifiedReason = null,\n comment,\n takenOver: subtaskTakenOver,\n signature\n } = actionDetails;\n\n const {\n name, status, email, avatarUrl\n } = assigneeUser || {};\n\n const {\n username, email: userEmail, name: userName, avatarUrl: userAvatarUrl\n } = user;\n const userValue = name || email;\n const contentText = subtaskTakenOver ? `on behalf of ${userValue}` : '';\n\n return {\n name: !subtaskTakenOver || Array.isArray(user) ? name : userName || username,\n email: !subtaskTakenOver || Array.isArray(user) ? email : userEmail,\n avatarUrl: !subtaskTakenOver || Array.isArray(user) ? avatarUrl : userAvatarUrl,\n status,\n timestamp,\n comment,\n properties: {\n outcomeInfo, notRequired, contentText, notQualifiedReason\n },\n notRequired,\n notQualifiedReason,\n signature: signature?.value,\n style: { '--outcome-color': buttonColor }\n };\n });\n return (\n <>\n {title ? (\n {translationRenderer('[1[{taskTitle}]] Step')({ renderer1: () => <>{title} })}\n ) : null}\n {!cancelReason && (\n
\n {t(badgeText)}\n
\n )}\n
\n \n
\n \n );\n};\n\nMultipleApproveReject.Attachment = ({ actionDetails: { attachment } }) => {\n const [fileIndex, setFileIndex] = useState(0);\n const [previewVisibility, setPreviewVisibility] = useState(false);\n let uploadUrls = [];\n if (attachment && attachment?.url) {\n uploadUrls.push(attachment?.url);\n }\n\n if (uploadUrls && Array.isArray(uploadUrls) && uploadUrls?.length > 0) {\n uploadUrls = uploadUrls?.map(uploadUrl => {\n const hiddenExtensions = ['JPEG', 'PNG', 'GIF', 'JPG', 'DOCX'];\n const fullName = /[^/]*$/.exec(uploadUrl)[0];\n const extension = fullName?.split('.')?.pop()?.toUpperCase();\n\n return {\n description: '',\n fileName: fullName,\n fileThumbnailUrl: uploadUrl,\n fileUrl: uploadUrl,\n previewUrl: uploadUrl,\n size: '',\n extension,\n isHidden: hiddenExtensions?.indexOf(extension) > -1\n };\n });\n return (\n \n {uploadUrls?.map(({ fileName, extension, isHidden }, i) => {\n return (\n {\n setFileIndex(i);\n setPreviewVisibility(true);\n }}\n >\n
\n \n
\n \n {fileName}\n \n \n );\n })}\n {previewVisibility && (\n setPreviewVisibility(false)}\n />\n )}\n \n );\n } return null;\n};\n\nMultipleApproveReject.Attachment.propTypes = {\n ...entryPropTypes\n};\n\nMultipleApproveReject.Status.propTypes = {\n ...entryPropTypes\n};\n\nMultipleApproveReject.Name = WFCategoryName;\n\nconst ErrorEntry = {};\nErrorEntry.Name = WFCategoryName;\n\nErrorEntry.Status = () => (\n
\n {translationRenderer(isWorkflowReleased ? '[1[Canceled]] flow.' : '[1[Canceled]] approval flow.')({\n renderer1: text => {text}\n })}\n
\n);\n\nconst RestartEntry = {};\nRestartEntry.Name = WFCategoryName;\n\nRestartEntry.Status = () => {\n return (\n
\n {translationRenderer(isWorkflowReleased ? '[1[Restarted]] flow.' : '[1[Restarted]] approval flow.')({\n renderer1: text => {text}\n })}\n
\n );\n};\n\nconst AssignFormNotificationEntry = {};\n\nAssignFormNotificationEntry.user = getSystemUser;\nAssignFormNotificationEntry.Status = ({ actionDetails }) => {\n const {\n to, subject, formTitle, assigneeUser\n } = actionDetails;\n const userName = assigneeUser?.name || assigneeUser?.username || to;\n return (\n <>\n
\n {translationRenderer('[1[{form}]] [2[{sent}]] to [3[{to}]] [4[{subject}]]')({\n renderer1: formText => {formText.replace('{form}', formTitle)},\n renderer2: sentText => {sentText.replace('{sent}', ' sent')},\n renderer3: toText => {toText.replace('{to}', userName)},\n renderer4: subjectText =>
{stripHTML(decodeHTML(subjectText.replace('{subject}', subject)))}
\n })}\n
\n \n );\n};\nAssignFormNotificationEntry.Status.propTypes = {\n ...entryPropTypes\n};\n\nAssignFormNotificationEntry.Name = WFCategoryName;\n\nconst SignDocumentNotification = {};\n\nconst ViewSignInboxButton = ({ documentFormID, submissionID }) => {\n const redirectToBuild = () => handleCustomNavigation(`/inbox/${documentFormID}/signAllDocuments/${submissionID}`);\n return (\n <>\n \n View Sign Inbox\n \n \n );\n};\n\nViewSignInboxButton.propTypes = {\n submissionID: string,\n documentFormID: string\n};\n\nViewSignInboxButton.defaultProps = {\n submissionID: '',\n documentFormID: ''\n};\n\nconst ReminderEntry = {};\n\nReminderEntry.user = getSystemUser;\nReminderEntry.Status = ({ actionDetails }) => {\n const {\n to, subject, elementType, elementSubType\n } = actionDetails;\n return (\n <>\n
\n {translationRenderer('[1[{element}]] Step - Email sent to [2[{to}]] [3[{subject}]]')({\n renderer1: elementName => {elementName.replace('{element}', getElementName(elementType, elementSubType))},\n renderer2: toText => {toText.replace('{to}', to)},\n renderer3: subjectText => (\n
\n \n {' '}\n { subjectText.replace('{subject}', subject)}\n \n
\n )\n })}\n
\n \n );\n};\n\nReminderEntry.Status.propTypes = {\n ...entryPropTypes\n};\n\nReminderEntry.Name = WFCategoryName;\n\nSignDocumentNotification.user = getSystemUser;\nSignDocumentNotification.Status = ({ actionDetails }) => {\n const {\n documentTitle\n } = actionDetails;\n return (\n <>\n
\n {translationRenderer('[1[{title}]] sent for signature. [2[{viewSignInbox}]]')({\n renderer1: subjectText => {stripHTML(decodeHTML(subjectText.replace('{title}', documentTitle)))},\n renderer2: () =>
\n })}\n
\n \n );\n};\nSignDocumentNotification.Status.propTypes = {\n ...entryPropTypes\n};\n\nSignDocumentNotification.Name = WFCategoryName;\n\nconst SignEntry = {};\n\nSignEntry.user = getSystemUser;\nSignEntry.Status = ({\n actionDetails\n}) => {\n const {\n text, buttonColor: color, type, documentTitle\n } = actionDetails;\n const badgeText = statusTexts[text?.toUpperCase()] || text;\n const badgeClass = type?.toLowerCase();\n return (\n <>\n
\n
\n {\n translationRenderer('[1[{status}]]')({\n renderer1: subjectText => (\n <>\n \n {stripHTML(decodeHTML(subjectText.replace('{status}', badgeText)))}\n \n {' '}\n \n )\n })\n }\n {stripHTML(decodeHTML(documentTitle))}\n
\n {translationRenderer('[1[{viewSignInbox}]]')({\n renderer1: () => \n })}\n
\n \n );\n};\n\nSignEntry.Status.propTypes = {\n ...entryPropTypes\n};\nSignEntry.Name = WFCategoryName;\n\nconst MailEntry = {};\n\nMailEntry.user = getSystemUser;\nMailEntry.Status = ({ actionDetails }) => {\n const {\n to, subject, subType, reason\n } = actionDetails;\n switch (reason) {\n case 'ASSIGN_FORM_NOTIFICATION_MAIL':\n return AssignFormNotificationEntry.Status({ actionDetails });\n case 'SEND_SIGN_NOTIFICATION':\n return SignDocumentNotification.Status({ actionDetails });\n case 'SIGN_DOCUMENT':\n return SignEntry.Status({ actionDetails });\n case 'SEND_REMINDER':\n return ReminderEntry.Status({ actionDetails });\n default:\n const emailList = to?.split(',')?.filter(Boolean)?.join(',') || '';\n return (\n <>\n
\n {translationRenderer(['workflow_send_approval_report', 'workflow_send_default_report'].includes(subType) ? 'Approval Report Email sent to [1[{to}]] [2[{subject}]]'\n : 'Email sent to [1[{to}]] [2[{subject}]]')({\n renderer1: toText => {toText.replace('{to}', emailList.replace(/,/g, ', '))},\n renderer2: subjectText =>
{stripHTML(decodeHTML(subjectText.replace('{subject}', subject)))}
\n })}\n
\n \n );\n }\n};\nMailEntry.Status.propTypes = {\n ...entryPropTypes\n};\n\nMailEntry.Name = WFCategoryName;\n\nconst MultipleApprovalMail = {};\n\nMultipleApprovalMail.user = getSystemUser;\nMultipleApprovalMail.Status = ({ actionDetails }) => {\n const {\n title, reason, approvalOptions, subType, team = null\n } = actionDetails;\n const { option, value = null } = (approvalOptions && safeJSONParse(approvalOptions, approvalOptions)) || {};\n switch (reason) {\n case 'TEAM_START':\n return (\n <>\n
\n {translationRenderer('[1[{title}]] [2[{sent}]] to [3[group approval]] [4[{approverOptions}]]')({\n renderer1: titleText => {titleText.replace('{title}', title)},\n renderer2: sentText => {sentText.replace('{sent}', ' request sent')},\n renderer3: () => {team?.teamName},\n renderer4: () => (\n
\n \n
\n )\n })}\n
\n \n );\n case 'SEND_REMINDER':\n const overriddenActionDetails = { ...actionDetails, to: actionDetails?.mergeTo || actionDetails?.to };\n return ReminderEntry.Status({ actionDetails: overriddenActionDetails });\n default:\n return (\n <>\n
\n {translationRenderer('[1[{title}]] [2[{sent}]] to [3[group approval]] [4[{approverOptions}]]')({\n renderer1: titleText => {titleText.replace('{title}', title)},\n renderer2: sentText => {sentText.replace('{sent}', ' sent')},\n renderer3: text => {text},\n renderer4: () => (\n
\n \n
\n )\n })}\n
\n \n );\n }\n};\nMultipleApprovalMail.Status.propTypes = {\n ...entryPropTypes\n};\n\nMultipleApprovalMail.Name = WFCategoryName;\n\nconst AssignFormSubmissionEntry = {};\n\nAssignFormSubmissionEntry.user = getAssignee;\nAssignFormSubmissionEntry.Status = ({ actionDetails, timestamp, name }) => {\n const formID = actionDetails?.formID;\n const submissionID = actionDetails?.submissionID;\n\n const { formTitle } = actionDetails;\n const [question, setQuestion] = useState({});\n const [submission, setSubmission] = useState({});\n const [singleSubmission, setSingleSubmission] = useState(false);\n const [isPanelOpen, setPanelOpen] = useState(false);\n\n const containers = ['.jSheetSingleSub', '.jfInbox-submission-wrapper'];\n let portalContainer = 'body';\n let insideContainer = false;\n\n containers.forEach(container => {\n if (global.document.querySelector(container)) {\n portalContainer = container;\n insideContainer = true;\n }\n });\n\n const getSubmissionInfo = async () => {\n try {\n if (Object.keys(question).length === 0 || Object.keys(submission).length === 0) {\n const questionRes = await fetchQuestions(formID, 'inbox');\n const submissionRes = await fetchSubmission(submissionID, 'inbox');\n setQuestion(questionRes);\n setSubmission(submissionRes);\n }\n setSingleSubmission(true);\n // JS Callstack - animation needs\n // This component/file needs to be refactored.\n setTimeout(() => {\n document.body.classList.add('jfSingleSubmissionView-standalone-isVisible');\n });\n } catch (e) {\n Tracking.captureException(e);\n setQuestion({});\n setSubmission({});\n setSingleSubmission(true);\n if (e?.response?.status === 401) {\n handleCustomNavigation(`/inbox/${formID}/${submissionID}`, '_blank');\n setPanelOpen(false);\n }\n }\n };\n\n useEffect(() => {\n return () => document.body.classList.remove('jfSingleSubmissionView-standalone-isVisible');\n }, []);\n\n useEffect(() => {\n if (isPanelOpen === submissionID) {\n getSubmissionInfo();\n } else {\n document.body.classList.remove('jfSingleSubmissionView-standalone-isVisible');\n }\n }, [isPanelOpen, submissionID]);\n\n return (\n \n
\n {translationRenderer('[1[{newSubmission}]] [2[{formName}]] [3[{viewSubmission}]] ')({\n renderer1: newSubmission => {newSubmission.replace('{newSubmission}', 'New submission on ')},\n renderer2: formNameText => {formNameText.replace('{formName}', formTitle)},\n renderer3: () => (\n <>\n
\n setPanelOpen(submissionID)}\n style={{ display: 'flex', alignItems: 'center' }}\n >\n View Submission\n \n
\n \n )\n })}\n
\n\n \n {isPanelOpen === submissionID ? (\n
\n
\n {singleSubmission && (\n \n )}\n
\n
\n ) : null}\n
\n
\n );\n};\nAssignFormSubmissionEntry.Status.propTypes = {\n ...entryPropTypes\n};\n\nAssignFormSubmissionEntry.Name = WFNewSubmissionCategoryName;\n\nconst AssignTaskCompleteEntry = {};\n\nAssignTaskCompleteEntry.user = getAssignee;\nAssignTaskCompleteEntry.Status = ({\n actionDetails, timestamp, name, actionType\n}) => {\n const formID = actionDetails?.taskFormID;\n const submissionID = actionDetails?.submissionID;\n const outcomeInfo = actionDetails?.outcomeInfo;\n\n const {\n text, type, buttonColor\n } = outcomeInfo;\n\n const badgeText = statusTexts[text?.toUpperCase()] || text;\n const badgeClass = type?.toLowerCase();\n\n const { title } = actionDetails;\n const [question, setQuestion] = useState({});\n const [submission, setSubmission] = useState({});\n const [singleSubmission, setSingleSubmission] = useState(false);\n const [isPanelOpen, setPanelOpen] = useState(false);\n\n const containers = ['.jSheetSingleSub', '.jfInbox-submission-wrapper'];\n let portalContainer = 'body';\n let insideContainer = false;\n\n containers.forEach(container => {\n if (global.document.querySelector(container)) {\n portalContainer = container;\n insideContainer = true;\n }\n });\n\n const getSubmissionInfo = async () => {\n try {\n if (Object.keys(question).length === 0 || Object.keys(submission).length === 0) {\n const questionRes = await fetchQuestions(formID, 'inbox');\n const submissionRes = await fetchSubmission(submissionID, 'inbox');\n setQuestion(questionRes);\n setSubmission(submissionRes);\n }\n setSingleSubmission(true);\n // JS Callstack - animation needs\n // This component/file needs to be refactored.\n setTimeout(() => {\n document.body.classList.add('jfSingleSubmissionView-standalone-isVisible');\n });\n } catch (e) {\n Tracking.captureException(e);\n setQuestion({});\n setSubmission({});\n setSingleSubmission(true);\n if (e?.response?.status === 401) {\n handleCustomNavigation(`/inbox/${submissionID}`, '_blank');\n setPanelOpen(false);\n }\n }\n };\n\n useEffect(() => {\n return () => document.body.classList.remove('jfSingleSubmissionView-standalone-isVisible');\n }, []);\n\n useEffect(() => {\n if (isPanelOpen === submissionID) {\n getSubmissionInfo();\n } else {\n document.body.classList.remove('jfSingleSubmissionView-standalone-isVisible');\n }\n }, [isPanelOpen, submissionID]);\n\n return (\n \n {title ? (\n {translationRenderer('[1[{taskTitle}]]')({ renderer1: () => <>{title} })}\n ) : null}\n
\n {translationRenderer('[1[{formName}]] [2[{viewSubmission}]] ')({\n renderer1: () => {t(badgeText)},\n renderer2: () => (\n <>\n
\n setPanelOpen(submissionID)}\n style={{ display: 'flex', alignItems: 'center' }}\n >\n View Task\n \n
\n \n )\n })}\n
\n\n \n {isPanelOpen === submissionID ? (\n
\n
\n {singleSubmission && (\n \n )}\n
\n
\n ) : null}\n
\n
\n );\n};\nAssignTaskCompleteEntry.Status.propTypes = {\n ...entryPropTypes\n};\n\nAssignTaskCompleteEntry.Name = WFCategoryName;\n\nconst restartEditEntry = {};\nrestartEditEntry.user = getSystemUser;\nrestartEditEntry.Name = WFCategoryName;\nrestartEditEntry.Status = () => {\n return (\n
\n {translationRenderer('Due to submission edit, the approval flow automatically [1[restarted]].')({\n renderer1: text => {text}\n })}\n
\n );\n};\n\nconst ViewIntegrationDetails = ({ links }) => {\n if (!Array.isArray(links)) {\n return null;\n }\n\n return links.map(l => (\n handleCustomNavigation(`${l}`)}\n endIcon={IconArrowUpRightFromSquareSm}\n >\n {l}\n \n )\n );\n};\n\nViewIntegrationDetails.propTypes = {\n links: array\n};\n\nViewIntegrationDetails.defaultProps = {\n links: []\n};\n\nconst IntegrationTriggerEntry = {};\nIntegrationTriggerEntry.user = ({ partner }) => {\n const details = INTEGRATION_DETAILS[partner];\n return {\n name: details?.text,\n avatarUrl: details?.icon\n };\n};\nIntegrationTriggerEntry.Name = WFCategoryName;\nIntegrationTriggerEntry.Status = ({ actionDetails }) => {\n const {\n result, integrationAccountName, action, links, partner = '', errorDetails = ''\n } = actionDetails;\n const details = INTEGRATION_DETAILS[partner];\n const [showError, handleShowError] = useState(false);\n const integrationErrorText = 'Unable to complete the action.';\n const getErrorDetails = () => {\n if (typeof errorDetails === 'string') {\n try {\n const parsed = JSON.parse(errorDetails);\n if (parsed?.[0]?.message) {\n return parsed?.[0]?.message;\n }\n } catch (e) {\n return errorDetails;\n }\n }\n };\n\n if (result === 'ERRORED') {\n return (\n <>\n
\n \n {t(integrationErrorText)}\n
\n \n
\n {showError && getErrorDetails() && (\n
\n {getErrorDetails()}\n
\n )}\n
\n
\n \n );\n }\n\n return (\n <>\n
\n {translationRenderer('[1[actionTypeName]]')({\n renderer1: () => {details?.actions?.find(e => e.value === action)?.text}\n })}\n
\n
\n
\n \n {integrationAccountName}\n
\n
1 && 'multiple'].filter(Boolean).join(' ')}>\n \n
\n
\n \n );\n};\n\nIntegrationTriggerEntry.Status.propTypes = {\n ...entryPropTypes\n};\n\nconst TerminatedEntry = {};\nTerminatedEntry.user = () => getTerminate();\nTerminatedEntry.Name = WFCategoryName;\nTerminatedEntry.Status = ({ actionDetails }) => {\n const {\n reasonOfTerminate\n } = actionDetails;\n\n return (\n <>\n
\n {t('Flow Terminated.')}\n
\n
\n \n {reasonOfTerminate}\n \n
\n \n );\n};\n\nTerminatedEntry.Status.propTypes = {\n ...entryPropTypes\n};\n\nconst TaskEntry = {};\nTaskEntry.propTypes = {\n ...entryPropTypes\n};\n\nconst EmailEntryTypes = {\n reply: ReplyEntry,\n forward: ForwardEntry\n};\n\nconst WorkFlowEntryTypes = {\n task: TaskEntry,\n // assign: AssignEntry,\n reassign: ReAssignEntry,\n escalate: EscalateEntry,\n approve_reject: ApproveRejectEntry,\n sign_document: SignEntry,\n expire: ExpiredEntry,\n cancel: ErrorEntry,\n restart: RestartEntry,\n // complete: CompleteEntry\n mail: MailEntry,\n multiple_approval_mail: MultipleApprovalMail,\n multiple_approve_reject: MultipleApproveReject,\n request_more_info: requestMoreInfoEntry,\n edit_submission: editSubmissionEntry,\n undo_loading: undoLoadingEntry,\n mock_approve_deny: mockApproveDenyEntry,\n restart_edit: restartEditEntry,\n assign_form_notification_mail: AssignFormNotificationEntry,\n sign_document_notification: SignDocumentNotification,\n assign_form_submission: AssignFormSubmissionEntry,\n reminder: ReminderEntry,\n integration_trigger: IntegrationTriggerEntry,\n terminated: TerminatedEntry,\n assign_task_complete: AssignTaskCompleteEntry\n};\n\nconst EntryTypes = {\n ...WorkFlowEntryTypes,\n ...EmailEntryTypes\n};\n\nexport const EntryCategories = {\n workflow: Object.keys(WorkFlowEntryTypes).map(e => e.toUpperCase()),\n email: Object.keys(EmailEntryTypes).map(e => e.toUpperCase()),\n all: Object.keys(EntryTypes).map(e => e.toUpperCase())\n};\n\n// eslint-disable-next-line max-len\nexport const entryFiltererGenerator = (category = 'all') => ({ actionType, actionDetails }) => {\n if (!EntryCategories[category].includes(actionType) || !actionDetails) return false;\n if (actionType === 'MAIL') {\n if (actionDetails?.reason === 'ASSIGN_FORM_NOTIFICATION_MAIL') {\n return true;\n }\n return (actionDetails?.type === 'custom_email' && actionDetails?.to !== '');\n }\n if (actionType === 'MULTIPLE_APPROVE_REJECT' && (actionDetails?.cancelReason === 'TAKEN_OVER' || actionDetails?.cancelReason === 'EXPIRED')) {\n return false;\n }\n return true;\n};\nexport const convertTasks = ({\n properties: { assigneeEmail, assigneeUser: user },\n status,\n id\n}) => {\n const el = {\n id,\n status,\n user,\n actionType: 'TASK',\n actionDetails: {}\n };\n\n el.user = el.user || { email: assigneeEmail };\n\n return el;\n};\nexport default EntryTypes;\n","var _path, _path2, _path3, _path4;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconRequestMoreInfo = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 18 15\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.14286 0C0.959473 0 0 0.958426 0 2.14286V12.8571L0.0125559 13.0957L0.046038 13.305C0.251116 14.2759 1.11224 15 2.14286 15H9.92327L7.98026 12.719C7.74693 12.447 7.5994 12.1205 7.53557 11.7857H2.14286C1.55065 11.7857 1.07143 11.3044 1.07143 10.7143V2.14286C1.07143 1.82477 1.21164 1.53599 1.4345 1.33929C1.5768 1.21372 1.75258 1.12584 1.94824 1.08816C2.01102 1.07562 2.07589 1.07143 2.14286 1.07143H12.8571C13.0402 1.07143 13.2129 1.11747 13.3636 1.20117C13.5299 1.28906 13.6691 1.42299 13.7685 1.58203C13.87 1.74526 13.9286 1.93777 13.9286 2.14286V9.08203L14.9403 8.06501C14.9602 8.04408 14.9801 8.02316 15 8.00642V2.14286C15 0.958426 14.0405 0 12.8571 0H2.14286Z\",\n fill: \"#FBFCFF\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.83349 3.37096C2.93081 3.27469 3.06578 3.21191 3.2154 3.21191H11.7868C12.083 3.21191 12.3225 3.45048 12.3225 3.74763C12.3225 4.04478 12.083 4.28334 11.7868 4.28334H3.2154C2.91929 4.28334 2.67969 4.04478 2.67969 3.74763L2.69329 3.62626C2.71631 3.53 2.76549 3.4421 2.83349 3.37096Z\",\n fill: \"#FBFCFF\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.2154 6.43066C2.91929 6.43066 2.67969 6.66923 2.67969 6.96638C2.67969 7.26353 2.91929 7.50209 3.2154 7.50209H9.64397C9.94008 7.50209 10.1797 7.26353 10.1797 6.96638C10.1797 6.66923 9.94008 6.43066 9.64397 6.43066H3.2154Z\",\n fill: \"#FBFCFF\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.6985 8.81751C16.0441 8.47074 16.5864 8.48968 16.9101 8.85982C17.2338 9.22996 17.2161 9.81113 16.8707 10.1579L12.2961 14.7498C11.9475 15.0997 11.3992 15.0768 11.0771 14.6988L8.79447 12.0202C8.47528 11.6456 8.49993 11.0648 8.84951 10.7228C9.1991 10.3808 9.74125 10.4072 10.0604 10.7817L11.7576 12.7733L15.6985 8.81751Z\",\n fill: \"#FBFCFF\"\n})));\nexport default SvgIconRequestMoreInfo;","\n \n\n","\n \n\n","\n \n\n","var _defs, _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _g, _path11, _path12, _path13, _path14, _g2, _path15, _path16, _path17, _path18, _path19, _g3, _path20, _path21, _path22, _g4, _path23, _path24, _path25, _g5, _path26, _path27;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgSsoAdLegacy = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n width: 236,\n height: 169\n}, props), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n id: \"ssoAdLegacy_svg__a\",\n d: \"m27.306 39.217 5.927-31.18L29.386 0l-7.395 2.414L8.557 6.311Q-2.105 8.194.848 9.52c2.953 1.326 11.351 1.359 15.5 1.545 4.15.187 4.994-.777 4.994 0 0 .778-1.695 4.365-1.695 11.392s0 3.688.271 11.559 4.499 2.599 7.388 5.201\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"ssoAdLegacy_svg__c\",\n d: \"M6.03 13.107q-2.836-1.487-2.836.493c0 1.981 1.202 3.075 2.835 3.075q1.875 4.82 9.976 5.117 5.193-.465 4.481-7.704-.642-3.526-2.393-5.674c-1.75-2.147.127-5.526-6.785-5.526q-6.912 0-5.279 10.22\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n id: \"ssoAdLegacy_svg__e\",\n cx: 2.083,\n cy: 2.083,\n r: 1.666\n}))), /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E6EAF8\",\n d: \"M10.165 116.173Q-17.581 68.94 33.29 46.543C84.161 24.146 92.16-7.007 156.024 2.189s97.476 69.16 68.677 106.752c-28.8 37.592-81.828 43.523-106.963 50.14-25.136 6.617-49.73 0-67.593-6.596q-17.862-6.596-39.98-36.312\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#A2B2CF\",\n d: \"M166.772 32.152c-16.076 0-29.108 13.032-29.108 29.108v24.876c0 16.076 13.032 29.108 29.108 29.108s29.108-13.032 29.108-29.108V61.26c0-16.076-13.032-29.108-29.108-29.108m.196 8.33c12.057 0 21.83 9.775 21.83 21.832v23.663c0 12.057-9.773 21.831-21.83 21.831s-21.831-9.774-21.831-21.83V62.313c0-12.057 9.774-21.831 21.83-21.831\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#506A98\",\n d: \"M195.88 69.223h-7.277v4.262h7.277zM145.063 69.223h-7.277v4.262h7.277z\",\n opacity: 0.278\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFCE00\",\n d: \"M204.957 73.805h-75.636a8 8 0 0 0-8 8v70.329a8 8 0 0 0 8 8h75.636a8 8 0 0 0 8-8V81.805a8 8 0 0 0-8-8\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B15100\",\n stroke: \"#FFEAA5\",\n strokeWidth: 6,\n d: \"M167.505 94.13c3.723 0 7.097 1.532 9.538 4.013a13.7 13.7 0 0 1 3.926 9.627c0 3.597-1.375 6.866-3.616 9.3l3.802 21.056a5.99 5.99 0 0 1-1.117 4.386 5.98 5.98 0 0 1-4.827 2.436l-16.672-.005a5.99 5.99 0 0 1-4.117-1.88 5.98 5.98 0 0 1-1.496-5.395l4.543-20.806a13.7 13.7 0 0 1-3.428-9.092c0-3.76 1.503-7.163 3.926-9.627 2.44-2.481 5.814-4.012 9.538-4.012Z\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB500\",\n d: \"m168.133 87.54.764.401a.945.945 0 0 0 1.372-.996l-.147-.855a2 2 0 0 1 .575-1.77l.62-.605a.946.946 0 0 0-.524-1.613l-.855-.125a2 2 0 0 1-1.506-1.094l-.383-.777a.945.945 0 0 0-1.695 0l-.383.777a2 2 0 0 1-1.506 1.094l-.855.125a.946.946 0 0 0-.524 1.613l.62.605a2 2 0 0 1 .575 1.77l-.147.855a.945.945 0 0 0 1.372.996l.764-.402a2 2 0 0 1 1.863 0M153.97 93.787l.765.402a.945.945 0 0 0 1.372-.996l-.147-.856a2 2 0 0 1 .575-1.769l.62-.605a.946.946 0 0 0-.524-1.613l-.855-.125a2 2 0 0 1-1.506-1.095l-.383-.776a.945.945 0 0 0-1.695 0l-.383.776a2 2 0 0 1-1.506 1.095l-.855.125a.946.946 0 0 0-.524 1.613l.62.605a2 2 0 0 1 .575 1.77l-.147.855a.945.945 0 0 0 1.372.996l.764-.402a2 2 0 0 1 1.863 0M181.878 93.787l.764.402a.945.945 0 0 0 1.372-.996l-.146-.856a2 2 0 0 1 .574-1.769l.62-.605a.946.946 0 0 0-.524-1.613l-.855-.125a2 2 0 0 1-1.506-1.095l-.382-.776a.945.945 0 0 0-1.696 0l-.382.776a2 2 0 0 1-1.506 1.095l-.855.125a.946.946 0 0 0-.525 1.613l.62.605a2 2 0 0 1 .575 1.77l-.146.855a.945.945 0 0 0 1.371.996l.765-.402a2 2 0 0 1 1.862 0\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#924400\",\n d: \"M167.21 97.13q-.741.001-1.457.098c5.252.703 9.3 5.155 9.3 10.542 0 3.336-1.552 6.313-3.982 8.264l4.156 22.366a3 3 0 0 1-2.95 3.548h2.916a3 3 0 0 0 2.95-3.548l-4.156-22.366c2.43-1.95 3.982-4.928 3.982-8.264 0-5.876-4.817-10.64-10.758-10.64\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFEAA7\",\n d: \"M212.957 125.038h-18.055a2.428 2.428 0 1 0 0 4.856h18.055zM212.957 143.366h-18.055a2.428 2.428 0 1 0 0 4.856h18.055zM212.957 134.202h-18.055a2.428 2.428 0 1 0 0 4.856h18.055z\",\n opacity: 0.35\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#18265B\",\n d: \"M134.342 118.498q1.41 1.333 1.411 2.245c0 .911-.25 1.915 0 2.995.251 1.08 1.771 4.916.535 5.89h-4.082a2 2 0 0 1-1.955-2.424 37 37 0 0 0 .431-2.312c.308-2.037-1.753-2.037-.597-4.733q1.625-2.843 3.49-1.736l.372-.476z\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#AF8066\",\n d: \"M149.135 76.656q-11.84.495-14.916 0 4.905 9.347 0 42.235-.909 1-2.93.599-5.398-34.22-6.873-40.212c-1.474-5.992-1.813-12.106.616-13.63q2.429-1.526 16.116-.578l10.84 1.54z\"\n})), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"matrix(-1 0 0 1 156.31 66.308)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"ssoAdLegacy_svg__b\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#ssoAdLegacy_svg__a\"\n})), /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#ssoAdLegacy_svg__a\",\n fill: \"#3D54DB\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#2338B3\",\n d: \"M6.067 11.423q11.37-.637 18.765-4.627 3.561-1.659 7.47 6.359t6.538 8.028l-.745-9.76L37.501.814 24.83-2.994 9.498 1.211 5.193 5.742z\",\n mask: \"url(#ssoAdLegacy_svg__b)\",\n opacity: 0.515\n}))), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#18265B\",\n d: \"M104.427 100.658q1.677 3.284-.491 5.195c-2.169 1.912-5.2.689-6.324 1.723s-5.065 4.824-9.105 3.432-.094-3.742 2.738-5.155c2.831-1.412 5.289-5.849 6.28-7.263q2.42-.926 6.902 2.068\"\n})), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#AF8066\",\n d: \"M162.41 65.675q-3.294 21.447-32.944 2.15-3.906-1.663-5.771 3.16c-1.866 4.822-2.89 13.694-20.253 26.823q-.932 1.048.371 3.037.954 1.453-3.077.388a3 3 0 0 1-1.86-4.35l19.803-35.88q2.079-3.295 5.016-3.295h25.219q6.734-.228 10.755 4.944l1.583 2.117z\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#3D54DB\",\n d: \"M161.904 69.027q-2.355 9.781-13.28 7.856c-10.922-1.926-17.12-7.148-19.964-7.856s-3.86 3.21-5.58 7.856q-1.719 4.646-10.124 13.13-6.927-.969-8.812-4.446 11.772-22.573 16.358-26.758c4.585-4.186 21.911 0 25.436-.865q3.525-.865 15.966 11.083\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"#2338B3\",\n strokeDasharray: 4,\n d: \"M148.572 70.058q-3.75 1.44-11.44-1.614c-7.689-3.055-12.04-5.982-13.976.775S118.4 82.073 110.83 88.56\",\n opacity: 0.501\n})), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#2338B3\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"#546BEE\",\n d: \"m151.517 69.069 1.408-.851a1 1 0 0 0 .333-1.382l-.869-1.404a1 1 0 0 0-1.38-.322l-.954.595\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M152.595 70.433q-2.082-2.715-2.553-5.687c-.47-2.97-.62 4.947 2.553 5.687\"\n}))), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#AF8066\",\n d: \"M139.768 28.91q-7.791 4.815-12 5.67c-4.21.855-3.813-1.157-14.154-12.97q-.795-.597-2.73-6.5l-5.818 5.029a1 1 0 0 0-.304 1.046q.444 1.464 2.802 2.229c2.89.937 3.54.036 4.795 1.656s6.937 13.364 12.19 15.068c5.254 1.705 14.673-3.467 16.841-3.467q2.168 0 6.172-7.76z\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#ADAAFE\",\n d: \"M136.847 58.147q1.878 1.636 1.608-9.897c-.005-.213.382-15.519.382-15.735 0-2.229 3.968-7.404 6.726-8.128 3.86-1.012 5.506-.946 8.755 0 5.225 1.523 6.145-1.707 7.7 10.104 2.197 14.7 2.197 32.006 0 34.698-2.199 2.692-6.294-7.198-25.171-11.042\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#AF8066\",\n d: \"M156.933 41.727c-.01 1.97-3.712 16.69-5.882 19.065s-17.172-3.876-20.727-2.253q-3.555 1.624-5.671.074-2.425-2.186-4.252-.923c-1.828 1.264-1.854-1.124-.068-2.587s6.315.603 8.92.215c2.604-.389 18.166-.283 18.565-1.223s1.28-9.205 1.924-11.659q.645-2.453 4.851-.696 2.35-1.982 2.34-.013M154.243 18.013q-.315 5.425 0 6.49c.315 1.066 1.025.118.758 1.94-.267 1.82-.978 9.947-7.588 9.53s-3.787-8.28 0-8.532q2.485-6.968.894-7.995t5.936-1.433\"\n})), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#ADAAFE\",\n d: \"M153.956 56.102q-5.397-3.01-6.376-4.58-.98-1.572 4.222-16.279 5.426-5.012 6.15 1.648t-3.996 19.211M141.99 26.519q-12.961 7.29-15.254 7.29c-2.293 0 .635 6.539 1.83 7.297 1.598 1.012 8.792-3.39 12.591-4.092q3.799-.701.833-10.495\"\n})), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#827EE3\",\n d: \"m154.608 56.474 1.252.411q1.267-2.929 2.485-8.029 1.22-5.1.832-5.992z\",\n opacity: 0.703\n})), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"matrix(-1 0 0 1 166.306 -.337)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"rotate(-14 25.202 1.664)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#835740\",\n d: \"M6.816 17.487q-1.24 4.53 4.84 6.184l.49-1.848z\",\n opacity: 0.535\n}), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .059)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"ssoAdLegacy_svg__d\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#ssoAdLegacy_svg__c\"\n})), /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#ssoAdLegacy_svg__c\",\n fill: \"#AF8067\",\n transform: \"rotate(24 11.883 12.34)\"\n}), /*#__PURE__*/React.createElement(\"ellipse\", {\n cx: 19.289,\n cy: 14.634,\n fill: \"#986A51\",\n mask: \"url(#ssoAdLegacy_svg__d)\",\n opacity: 0.495,\n rx: 2.24,\n ry: 1.561,\n transform: \"rotate(-18 19.29 14.634)\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"#7D5440\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 0.5,\n d: \"M14.87 11.356q1.024 3.332 1.735 4.773-1.245.712-2.987.276\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C94045\",\n stroke: \"#A83E42\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 0.5,\n d: \"M11.96 18.478a10.7 10.7 0 0 0 4.887-.079q-1.222 1.845-2.219 1.693t-2.667-1.614\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 16.674,\n cy: 12.395,\n r: 1,\n fill: \"#262122\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 12.496,\n cy: 12.912,\n r: 1,\n fill: \"#262122\"\n})), /*#__PURE__*/React.createElement(\"ellipse\", {\n cx: 13.954,\n cy: 19.577,\n fill: \"#986A51\",\n opacity: 0.495,\n rx: 2.291,\n ry: 1.666,\n transform: \"rotate(-18 13.954 19.577)\"\n}))), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#ADAAFE\",\n d: \"M141.947 33.981c-2.236-.892-4.875 4.019-5.322 7.665s2.462 4.728 2.085 7.797q-.376 3.068 7.096-3.958-1.621-10.613-3.859-11.504\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#F6C363\",\n opacity: 0.52,\n style: {\n mixBlendMode: \"multiply\"\n }\n}, _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m148.49 42.092-2.976-.979a1 1 0 0 0-1.304.824l-.758 5.935a1 1 0 0 0 .693 1.08l2.907.912a1 1 0 0 0 1.29-.815l.825-5.868a1 1 0 0 0-.678-1.089\",\n opacity: 0.837\n}))), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n stroke: \"#C6D3F1\",\n d: \"m147.656 40.842-2.975-.978a1 1 0 0 0-1.304.823l-.758 5.935a1 1 0 0 0 .693 1.081l2.907.912a1 1 0 0 0 1.29-.815l.825-5.868a1 1 0 0 0-.678-1.09Z\"\n})), _g4 || (_g4 = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"matrix(-1 0 0 1 147.562 41.316)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"ssoAdLegacy_svg__f\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#ssoAdLegacy_svg__e\"\n})), /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#ssoAdLegacy_svg__e\",\n fill: \"#ABBFEB\",\n transform: \"rotate(-15 2.083 2.083)\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#ssoAdLegacy_svg__f)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#AF8066\",\n d: \"M2.426 4.165q-.154-.765-.154-.976c0-.21-1.022-.183-1.022-.39s.42-1.373 1.022-1.088.848.34.848.772c0 .433-.264.492 0 .913q.263.421.2.596z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#2C1CCB\",\n d: \"M1.225 4.165q1.085.006 1.085-.521c0-.528-.033-.722-.385-.973-.352-.252-.426-.164-.217-.52a4 4 0 0 1 .217-.353q.653.028.783.353c.13.325-.13.47 0 .918s.045.448.491.448.612-.22.53-.645c-.084-.424-.54-.866-.7-1.074s-.611-.523-.948-.523-1.057-.13-1.057.197c0 .326-.298.623-.15 1.012.15.388.223 1.092.35 1.319q.129.227 0 .362\"\n})))), _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#ABBFEB\",\n d: \"m146.548 46.288-2.861-.766c-.1-.027-.203.042-.233.153s.026.222.125.249l2.86.767c.1.026.204-.043.233-.154.03-.11-.026-.222-.124-.249M145.28 38.509a.625.625 0 0 0-.723.507l-.217 1.23a.625.625 0 1 0 1.23.217l.218-1.23a.625.625 0 0 0-.507-.724\"\n})), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#402D20\",\n d: \"M145.159 11.484q-3.658 7.863.677 12.245 1.414 1.148 3.165 1.016l-.967 2.7q-5.045-1.631-9.217.894.036-1.084 0-2.525c-.105-4.304 3.697-4.05 2.444-7.244-1.412-3.597 1.154-4.256 1.218-7.086.27-12.158 18.5-9.962 18.5-4.626q4.713.76 4.713 5.419c0 4.643 4.129 4.643 1.477 9.633-1.06 1.995 7.933 3.183 3.94 12.839-2.454 5.936-6.82 3.084-8.013 6.567q-1.78-5.73-6.16-3.554c-5.142 2.552 0-6.01-2.236-6.834-1.953-.721-4.255-5.766-2.002-7.199 3.35-2.13 3.892-4.332 4.534-5.664q3.075-.86 3.053-3.092-.022-2.234-3.053 0-2.925-.51-2.926-3.489c0-2.98-1.687.715-9.147 0\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#2338B3\",\n d: \"M113.14 89.693q.534.324 0 .96a23 23 0 0 1-1.377 1.48q-3.894-.05-8.77-4.534.587-3.106 1.485-2.425c.899.68 1.688 3.49 8.663 4.519M136.49 102.13q.486 1.71 0 2.115c-.488.406-2.413 2.328-7.466 1.367q-1.052-1.537-.325-2.298 3.2 1.431 7.79-1.185\"\n})), _g5 || (_g5 = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(15 129.326)\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 129,\n height: 35.737,\n x: 1.5,\n y: 1.5,\n fill: \"#FFF\",\n stroke: \"#E1E8FB\",\n strokeWidth: 3,\n rx: 7\n}), /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#18265B\",\n transform: \"translate(14.287 16.245)\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 3.332,\n cy: 3.332,\n r: 3.332\n}), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 26.658,\n cy: 3.332,\n r: 3.332\n}), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 61.646,\n cy: 3.332,\n r: 3.332\n}), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 14.995,\n cy: 3.332,\n r: 3.332\n}), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 49.984,\n cy: 3.332,\n r: 3.332\n}), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 38.321,\n cy: 3.332,\n r: 3.332\n}), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 73.309,\n cy: 3.332,\n r: 3.332\n})), /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#18265B\",\n opacity: 0.9\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M111.803 24.028c-.42-.447-.84-.912-1.286-1.352-.076-.075-.264-.077-.392-.057-2.618.412-4.792-1.699-4.449-4.323.016-.12.042-.295-.022-.363-.445-.471-.912-.921-1.387-1.392-1.1 2.03-.543 4.797 1.23 6.456 2.095 1.96 4.996 1.8 6.306 1.031m5.799 2.89-1.307 1.38c-.678-.662-1.384-1.287-2.008-1.984-.419-.467-.789-.532-1.394-.36-5.84 1.66-11.936-.966-14.614-6.222-.303-.596-.318-1.072.001-1.661.777-1.437 1.74-2.712 2.984-3.772.108-.091.213-.185.326-.283l-1.596-1.62L101.315 11zM105.203 12.062a12.6 12.6 0 0 1 4.419-.695c3.298.079 6.189 1.202 8.613 3.458 1.14 1.061 2.044 2.304 2.659 3.74a.94.94 0 0 1-.002.67c-.76 1.746-1.914 3.195-3.388 4.398-.224.182-.36.189-.567-.02a99 99 0 0 0-2.022-1.974c-.163-.155-.213-.28-.12-.512.907-2.28.57-4.375-1.152-6.12-1.76-1.785-3.91-2.18-6.267-1.355-.35.123-.56.108-.807-.173-.422-.479-.884-.922-1.366-1.417\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M108.42 15.277c1.607-.355 2.885.022 3.932 1.117.896.937 1.235 2.457.79 3.5z\"\n})))), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#54B45C\",\n d: \"M34.081 4.76h70.804a6 6 0 0 1 6 6v44.163a6 6 0 0 1-6 6H34.08a6 6 0 0 1-6-6V10.76a6 6 0 0 1 6-6\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n fillRule: \"nonzero\",\n d: \"M53.567 27.292c2.447 0 3.999-1.21 3.999-3.124 0-1.504-.862-2.351-2.837-2.775l-1.197-.253c-1.134-.26-1.613-.602-1.613-1.21 0-.731.684-1.217 1.702-1.217 1.033 0 1.764.506 1.832 1.34h1.935c-.034-1.784-1.477-2.967-3.774-2.967-2.2 0-3.773 1.203-3.773 3.022 0 1.442.896 2.365 2.714 2.755l1.285.28c1.19.266 1.661.622 1.661 1.265 0 .724-.752 1.25-1.852 1.25-1.094 0-1.942-.533-2.037-1.346h-1.99c.062 1.852 1.573 2.98 3.945 2.98m6.513-8.305c.602 0 1.067-.458 1.067-1.033 0-.58-.465-1.032-1.067-1.032s-1.066.451-1.066 1.032c0 .575.465 1.033 1.066 1.033m.999 8.134v-7.328h-1.997v7.328zm3.71 0v-4.204c0-.95.568-1.606 1.464-1.606.895 0 1.346.547 1.346 1.504v4.306h1.996v-4.723c0-1.716-.916-2.741-2.543-2.741-1.128 0-1.9.533-2.29 1.442h-.04v-1.306h-1.928v7.328zm9.81 2.762c2.194 0 3.657-1.114 3.657-2.864v-7.226h-1.969v1.279h-.034c-.383-.841-1.21-1.395-2.263-1.395-1.86 0-3.008 1.429-3.008 3.753 0 2.29 1.183 3.67 2.974 3.67 1.06 0 1.92-.532 2.263-1.312h.04v1.286c0 .847-.574 1.421-1.606 1.421-.759 0-1.333-.348-1.49-.854h-1.955c.157 1.306 1.463 2.242 3.39 2.242m.034-4.32c-.992 0-1.607-.78-1.607-2.12 0-1.332.622-2.166 1.607-2.166.998 0 1.633.847 1.633 2.167 0 1.326-.635 2.119-1.633 2.119m7.354 1.558v-9.864h-1.996v9.864zm5.079.158c1.811 0 3.124-.964 3.342-2.4h-1.832c-.184.56-.745.923-1.476.923-1.019 0-1.682-.718-1.682-1.764v-.123h5.052v-.608c0-2.229-1.347-3.67-3.48-3.67-2.166 0-3.534 1.517-3.534 3.855 0 2.344 1.354 3.787 3.61 3.787m1.483-4.587h-3.11c.068-.916.697-1.58 1.572-1.58.889 0 1.497.643 1.538 1.58m-41.989 25.6c2.447 0 4-1.21 4-3.124 0-1.504-.862-2.351-2.838-2.775l-1.196-.253c-1.135-.26-1.613-.602-1.613-1.21 0-.731.683-1.217 1.702-1.217 1.032 0 1.763.506 1.832 1.34h1.934c-.034-1.784-1.476-2.967-3.773-2.967-2.201 0-3.773 1.203-3.773 3.022 0 1.442.895 2.365 2.713 2.755l1.286.28c1.189.266 1.66.622 1.66 1.265 0 .724-.751 1.25-1.852 1.25-1.094 0-1.941-.533-2.037-1.346h-1.99c.062 1.852 1.573 2.98 3.945 2.98m6.514-8.305c.602 0 1.066-.458 1.066-1.033 0-.58-.464-1.032-1.066-1.032s-1.066.451-1.066 1.032c0 .575.464 1.033 1.066 1.033m.998 8.134v-7.328h-1.996v7.328zm5.065 2.762c2.194 0 3.657-1.114 3.657-2.864v-7.226h-1.969v1.279h-.034c-.383-.841-1.21-1.395-2.263-1.395-1.859 0-3.007 1.429-3.007 3.753 0 2.29 1.182 3.67 2.973 3.67 1.06 0 1.921-.532 2.263-1.312h.04v1.286c0 .847-.573 1.421-1.606 1.421-.758 0-1.333-.348-1.49-.854h-1.955c.157 1.306 1.463 2.242 3.39 2.242m.034-4.32c-.991 0-1.607-.78-1.607-2.12 0-1.332.623-2.166 1.607-2.166.998 0 1.634.847 1.634 2.167 0 1.326-.636 2.119-1.634 2.119m7.307 1.558v-4.204c0-.95.567-1.606 1.463-1.606.895 0 1.346.547 1.346 1.504v4.306h1.996v-4.723c0-1.716-.916-2.741-2.543-2.741-1.127 0-1.9.533-2.29 1.442h-.04v-1.306h-1.928v7.328zm11.148-3.137V43.24h-4.49v1.743zm6.507 3.308c2.92 0 4.758-1.962 4.758-5.1 0-3.144-1.839-5.106-4.758-5.106-2.925 0-4.757 1.962-4.757 5.107 0 3.137 1.832 5.1 4.757 5.1m0-1.73c-1.62 0-2.652-1.305-2.652-3.37 0-2.07 1.04-3.383 2.652-3.383 1.614 0 2.646 1.312 2.646 3.384 0 2.064-1.032 3.37-2.646 3.37m8.299 1.56v-4.205c0-.95.567-1.606 1.462-1.606.896 0 1.347.547 1.347 1.504v4.306h1.996v-4.723c0-1.716-.916-2.741-2.543-2.741-1.128 0-1.9.533-2.29 1.442h-.04v-1.306h-1.929v7.328z\"\n}))));\nexport default SvgSsoAdLegacy;","\n \n\n","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconCross = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"currentColor\",\n viewBox: \"0 0 12 12\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fillRule: \"evenodd\",\n transform: \"rotate(45 7.784 5.486)\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 13.784,\n height: 1.579,\n y: 6.316,\n rx: 0.789\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.892 13.997a.788.788 0 0 1-.79-.78V.994c0-.431.351-.781.79-.781.436 0 .79.355.79.78v12.224c0 .431-.35.78-.79.78z\"\n}))));\nexport default SvgIconCross;","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconPill = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 9 11\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.18225 5.03352C5.56488 5.03352 6.68572 3.90673 6.68572 2.51676C6.68572 1.12679 5.56488 0 4.18225 0C2.79962 0 1.67877 1.12679 1.67877 2.51676C1.67877 3.90673 2.79962 5.03352 4.18225 5.03352Z\",\n fill: \"#81829E\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.18222 5.87244C1.36581 5.87244 0.00976562 7.63921 0.00976562 8.66856V9.22813C0.00976562 9.69145 0.38338 10.067 0.844257 10.067H7.52019C7.98106 10.067 8.35468 9.69145 8.35468 9.22813V8.66856C8.35468 7.63921 6.99863 5.87244 4.18222 5.87244Z\",\n fill: \"#81829E\"\n})));\nexport default SvgIconPill;","var _rect, _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconPrefillEdit = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 18 16\"\n}, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 0.5,\n y: 12.5002,\n width: 17,\n height: 3,\n rx: 1.5,\n stroke: \"#121C48\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 14.0002C0 12.8957 0.895431 12.0002 2 12.0002H9V16.0002H2C0.89543 16.0002 0 15.1048 0 14.0002V14.0002Z\",\n fill: \"#121C48\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.53822 6.27627C5.64023 6.07979 5.79891 5.91762 5.99461 5.80981L15.5402 0.551412C16.0931 0.246864 16.797 0.443131 17.1126 0.989787L17.4286 1.53733C17.7441 2.08398 17.5517 2.77402 16.9989 3.07857L7.4348 8.34715C7.25069 8.44857 7.04116 8.49782 6.82927 8.48948L5.34592 8.43111C4.92361 8.41449 4.65791 7.97174 4.84917 7.60337L5.53822 6.27627Z\",\n fill: \"#121C48\",\n stroke: \"#121C48\",\n strokeWidth: 0.8\n})));\nexport default SvgIconPrefillEdit;","var _rect, _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconPrefillEditWhite = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 18 16\"\n}, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 0.5,\n y: 12.5002,\n width: 17,\n height: 3,\n rx: 1.5,\n stroke: \"#fff\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 14.0002C0 12.8957 0.895431 12.0002 2 12.0002H9V16.0002H2C0.89543 16.0002 0 15.1048 0 14.0002V14.0002Z\",\n fill: \"#fff\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.53822 6.27627C5.64023 6.07979 5.79891 5.91762 5.99461 5.80981L15.5402 0.551412C16.0931 0.246864 16.797 0.443131 17.1126 0.989787L17.4286 1.53733C17.7441 2.08398 17.5517 2.77402 16.9989 3.07857L7.4348 8.34715C7.25069 8.44857 7.04116 8.49782 6.82927 8.48948L5.34592 8.43111C4.92361 8.41449 4.65791 7.97174 4.84917 7.60337L5.53822 6.27627Z\",\n fill: \"#fff\",\n stroke: \"#fff\",\n strokeWidth: 0.8\n})));\nexport default SvgIconPrefillEditWhite;","var _defs, _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgAssignToOrganization = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n viewBox: \"0 0 184 125\"\n}, props), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n id: \"prefix__a\",\n d: \"M0 0H120.643V127.315H0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"prefix__c\",\n d: \"M8.782 2.732c-2.17.62-3.633 2.646-3.532 4.902l.683 15.24s2.05 15.426.505 22.183C4.894 51.814.235 68.111.235 68.111s38.336.444 37.661-.532c-.676-.977-.106-38.07 0-39.045C39.682 11.953 31.414.222 31.414.222 30.184.16 28.981.13 27.81.13c-8.364 0-15.119 1.483-19.028 2.603\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"prefix__e\",\n d: \"M0.635 0.729L33.043 0.729 33.043 33.791 0.635 33.791z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"prefix__g\",\n d: \"M0.293 0.274L27.122 0.274 27.122 27.103 0.293 27.103z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"prefix__i\",\n d: \"M0.095 0.068L22.131 0.068 22.131 22.105 0.095 22.105z\"\n}))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\",\n transform: \"translate(-8 -11)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CAD6F2\",\n d: \"M150.19 135.232c9.529-.393 18.884-4.024 23.458-10.266 4.23-5.772 5.016-14.715 3.123-21.138-1.589-5.394-6.127-10.061-11.304-14.013-10.457-7.984-23.934-13.776-32.772-22.781-4.913-5.006-10.79-16.565-15.514-21.67-9.185-9.927-20.09-16.446-36.178-18.072-20.741-2.095-34.51 12.775-41.23 23.744-5.78 9.435-4.272 20.87-11.39 29.785-3.271 4.097-8.148 7.351-11.74 11.296-6.394 7.02-8.326 16.195-5.125 24.337 3.202 8.14 11.474 15.089 21.941 18.427l116.73.35z\",\n opacity: 0.289\n}), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"prefix__b\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#prefix__a\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#prefix__b)\"\n}, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#2A3068\",\n d: \"M47.36.132s0 8.977 1.602 13.146c1.603 4.17 2.086 10.903-2.885 10.903-4.97 0-10.421-1.283-10.421-1.283l6.253-19.24 5.45-3.526z\",\n transform: \"translate(8.895 11.12) translate(0 14.84)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFBE9D\",\n d: \"M50.618 33.376s-4.874-1.424-2.994 7.872c1.204 5.94 12.418 36.002 20.233 34.6 10.172-1.823 18.934-7.206 24.701-9.28l-2.495-4.153L69.73 65.82c-8.254-9.296-8.473-33.989-19.112-32.445M25.776 35.04s-1.095-4.959-8.341 1.16C12.803 40.11-.474 68.61 4.512 74.787c6.49 8.042 9.688 9.808 14.28 13.868l2.72-5.225-9.49-13.764c4.184-11.706 20.223-26.038 13.754-34.625\",\n transform: \"translate(8.895 11.12) translate(0 14.84)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#1B3C6C\",\n d: \"M52.116 95.407s8.71 49.232 3.661 64.6c-5.182 15.772-42.348 51.157-42.348 51.157l-4.317-4.782c12.585-20.892 22.276-50.086 30.8-52.21l-9.205-60.241 21.41 1.476z\",\n transform: \"translate(8.895 11.12) translate(0 14.84)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(8.895 11.12) translate(14.22 42.67)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"prefix__d\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#prefix__c\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#49A6F7\",\n d: \"M5.25 7.634c-.1-2.255 1.362-4.282 3.531-4.903C13.24 1.455 21.392-.292 31.414.222c0 0 11.73 12.483 6.482 28.312-2.675 8.066-.676 38.068 0 39.044.675.976-37.661.533-37.661.533\",\n mask: \"url(#prefix__d)\"\n})), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#49A6F7\",\n d: \"M15.682 45.445s-6.598 0-15.417 13.553L13.9 70.292s12.57-19.398 1.782-24.847M38.446 42.919l.859.12s4.42-.575 14.917 13.372l-11.24 11.35-4.536-24.842z\",\n transform: \"translate(8.895 11.12) translate(7.076 .008)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#224A7A\",\n d: \"M9.82 101.45c.104.319-4.212 9.001-1.704 18.036 4.497 16.213 16.936 39.68 16.599 61.482-.272 17.63 14.05 53.092 14.05 53.092l6.524-2.357s-2.531-26.38-2.47-60.034c.01-5.708-9.163-47.676-8.924-48.422.539-1.682-.198-12.642-.198-12.642L9.821 101.45z\",\n transform: \"translate(8.895 11.12) translate(7.076 .008)\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#63889C\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.459 21.02c.124-.035.356.397.517.964.163.569.195 1.056.071 1.094-.123.035-.354-.397-.517-.966-.163-.569-.195-1.059-.071-1.092M4.337 16.888c.124-.032.349.403.5.974.151.57.174 1.06.05 1.094-.124.034-.347-.402-.5-.973-.151-.573-.174-1.063-.05-1.095M3.31 12.732c.126-.029.339.412.476.987.138.573.147 1.063.023 1.094-.124.03-.337-.41-.474-.987-.139-.576-.15-1.066-.025-1.094M2.419 8.545c.127-.024.323.424.44 1.002.118.58.112 1.07-.015 1.095-.125.028-.322-.421-.44-1.002-.118-.582-.112-1.07.015-1.095M1.713 4.323c.128-.018.303.44.393 1.023.09.582.06 1.07-.067 1.092-.127.021-.301-.435-.393-1.022-.09-.586-.06-1.076.067-1.093M1.273.065c.128-.008.271.46.322 1.047.049.587-.015 1.073-.141 1.086-.128.014-.272-.455-.322-1.047-.05-.592.011-1.078.14-1.086\",\n transform: \"translate(8.895 11.12) translate(7.076 .008) translate(9.73 103.422)\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#49A6F7\",\n d: \"M12.485 91.667l-4.467 14.086s26.287 13.783 37.023 4.487l-2.838-14.45-29.718-4.123z\",\n transform: \"translate(8.895 11.12) translate(7.076 .008)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFBE9D\",\n d: \"M20.797 28.954c.942 8.467 1.246 12.955.541 14.248-.132.242-1.267 1.131-1.27 1.27-.021.655.279 1.233.43 1.397 1.644 1.807 1.717 1.35 8.073 7.542 2.728-5.956 5.645-8.531 4.847-9.28-2.493-2.34-2.318-.712-1.669-9.168.427-5.552-10.503-6.1-10.615-6.077-.074.014-.187.039-.337.068\",\n transform: \"translate(8.895 11.12) translate(7.076 .008)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFBE9D\",\n d: \"M16.668 29.787c3.871 4.463 8.97 6.696 15.3 6.696 6.427 0 10.069-8.683 8.604-17.216-.698-4.07-1.872-7.624-5.745-11.09-7.995-7.154-14.89-5.627-20.686 4.58l-2.253 7.75 4.78 9.28z\",\n transform: \"translate(8.895 11.12) translate(7.076 .008)\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(8.895 11.12) translate(7.076 .008) translate(8.437)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"prefix__f\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#prefix__e\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#2A3068\",\n d: \"M33.043 14.955c-1.427 2.25-5.487 3.04-12.18 2.367-.23-.657-.586-2.225-1.069-4.705-.723-3.722.635 5.288-.702 5.842-.89.37-2.429.92-4.608 1.65-1.135.22-2.048 1.245-2.74 3.073-1.036 2.74-.961-4.092-3.883-4.084-2.92.007-2.84 4.663-1.143 5.9 1.131.824 1.972 1.223 2.524 1.197 1.75 2.433 3.768 5.811 3.43 7.36-.508 2.323-19.08-12.929-9.09-26.042 4.782-6.277 12.767-7.566 19.78-6.395 6.451 1.078 9.68 5.69 9.68 13.837\",\n mask: \"url(#prefix__f)\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#D87459\",\n fillRule: \"nonzero\",\n d: \"M35.675 29.497c.143-.167.395-.185.561-.042.167.143.186.395.042.561-1.76 2.045-3.46 2.284-4.854.59-.14-.17-.115-.42.055-.56.17-.14.42-.115.56.054 1.038 1.263 2.167 1.104 3.636-.603z\",\n transform: \"translate(8.895 11.12) translate(7.076 .008)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#27364D\",\n d: \"M29.93 22.52c.316 0 .572-.514.572-1.148 0-.634-.256-1.147-.573-1.147-.316 0-.574.513-.574 1.147s.258 1.148.574 1.148M37.117 21.62c.316 0 .574-.513.574-1.147s-.258-1.147-.574-1.147c-.317 0-.573.513-.573 1.147s.256 1.148.573 1.148\",\n transform: \"translate(8.895 11.12) translate(7.076 .008)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#D87459\",\n d: \"M34.051 26.001l-.253-.651c.639-.248 1.39-.604 1.622-.79-.098-.396-.879-1.666-1.606-2.692l.571-.406c2.065 2.912 1.785 3.285 1.65 3.465-.289.387-1.483.88-1.984 1.074\",\n transform: \"translate(8.895 11.12) translate(7.076 .008)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#49A6F7\",\n d: \"M43.225 62.838s3.356 4.055 3.914 7.41c.56 3.356-3.775 8.529-3.775 8.529l-10.067-3.634 9.928-12.305z\",\n transform: \"translate(8.895 11.12) translate(7.076 .008)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#2A3068\",\n d: \"M12.019 7.514s-5.566 6.49-6.047 23.964c-.64 6.894 11.865 12.666 15.554 8.978 3.687-3.687-2.246-10.902-2.246-10.902l-4.168-3.047-2.245-2.404.32-4.65.954-6.696-2.122-5.243z\",\n transform: \"translate(8.895 11.12) translate(7.076 .008)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#49A6F7\",\n d: \"M20.067 44.473s6.013 6.188 7.828 5.345c1.813-.843 4.146-6.933 4.146-6.933l4.988.714-2.202 15.03h-7.515l-2.723-1.878-5.89-6.877-.717-4.332 2.085-1.07z\",\n transform: \"translate(8.895 11.12) translate(7.076 .008)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFBE9D\",\n d: \"M9.871 91.614l4.01 5.172 3.366 3.565s2.974-.48 7.199-.368c4.226.112 7.181-.185 6.201.565-.98.75-7.284 1.284-6.9 2.829.386 1.544 9.814 10.304 9 10.708-.815.402-7.31-5.86-8.335-6.047-1.025-.185 6.175 6.034 5.239 6.078-.936.044-6.817-5.303-7.53-5.505-.713-.2 6.04 6.488 4.735 6.446-1.305-.043-5.126-5.359-6.454-5.868-1.326-.51 4.368 5.863 3.122 5.922-1.247.06-6.579-6.879-8.667-9.671-.159-.214-1.566-.99-3.032-2.116-.577-.443-1.196-.914-1.82-1.388-2.373-1.795-4.534-3.724-4.534-3.724l4.4-6.598z\",\n transform: \"translate(8.895 11.12) translate(7.076 .008)\"\n})))), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFBE9D\",\n d: \"M87.593 89.989l6.484-.886 4.771-1.132s1.071-2.817 3.28-6.42c2.211-3.603 3.431-6.311 3.59-5.088.16 1.224-2.53 6.951-1 7.39 1.531.439 13.832-3.346 13.774-2.44-.06.907-8.73 3.4-9.404 4.195-.673.796 8.312-2.33 7.882-1.497-.43.832-8 3.252-8.531 3.768-.53.517 8.638-1.986 7.949-.877-.69 1.108-7.204 1.76-8.308 2.655-1.106.893 7.26-.852 6.69.257-.573 1.11-9.247 2.258-12.71 2.67-.264.031-1.64.862-3.349 1.568-.671.279-1.39.579-2.11.882-2.742 1.158-5.494 2.065-5.494 2.065l-3.514-7.11z\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n width: 171,\n height: 8.574,\n x: 8,\n y: 127.093,\n fill: \"#C7D4F6\",\n rx: 4.287\n}), /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"#9AA2DC\",\n d: \"M143.613 24.597L79.707 25.093 102.399 68.995 165 89.903 148.116 26.092 112.561 64.538\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(66 11.093)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"prefix__h\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#prefix__g\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C7D4F6\",\n d: \"M.32 12.828C.796 5.435 7.175-.173 14.568.302 21.96.776 27.57 7.155 27.094 14.548c-.475 7.393-6.853 13.002-14.246 12.527C5.454 26.6-.154 20.222.32 12.828\",\n mask: \"url(#prefix__h)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n d: \"M13.02 24.845c3.28.211 6.335-.926 8.624-2.935-.3-1.135-.664-2.244-1.088-3.288-.714-1.76-2.044-3.162-3.665-3.972.012-.02.028-.038.04-.058.704-1.131.918-2.446.907-3.727-.01-1.22-.229-2.475-.973-3.503-.743-1.028-2.098-1.782-3.494-1.656-1.498.136-2.704 1.244-3.217 2.478-.512 1.236-.461 2.583-.36 3.889.073.937.33 1.887.776 2.68-.986.596-1.858 1.469-2.692 2.545-.853 1.1-.818 1.152-1.355 2.449-.263.638-.525 1.298-.752 2.023 1.93 1.756 4.443 2.895 7.249 3.075\"\n})), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(135 11.093)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"prefix__j\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#prefix__i\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#9AA2DC\",\n d: \"M.117 10.384C.505 4.312 5.742-.296 11.815.091c6.073.387 10.681 5.625 10.293 11.697-.387 6.073-5.624 10.682-11.697 10.294C4.338 21.694-.27 16.457.117 10.384\",\n mask: \"url(#prefix__j)\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n d: \"M10.56 20.11c2.66.172 5.138-.75 6.995-2.38-.244-.92-.539-1.821-.883-2.668-.579-1.427-1.658-2.565-2.973-3.222.01-.016.024-.03.034-.047.57-.918.744-1.984.735-3.023-.008-.99-.186-2.008-.79-2.842-.602-.834-1.701-1.446-2.833-1.343-1.216.11-2.195 1.009-2.61 2.01-.416 1.002-.374 2.096-.292 3.155.059.76.267 1.53.629 2.174-.8.483-1.508 1.191-2.184 2.064-.692.893-.663.934-1.099 1.987-.214.517-.426 1.053-.61 1.641 1.565 1.424 3.604 2.349 5.88 2.495\",\n transform: \"translate(135 11.093)\"\n})), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#9AA2DC\",\n d: \"M.044 19.315C.785 7.941 10.742-.687 22.284.043c11.541.73 20.296 10.543 19.555 21.918-.74 11.374-10.698 20.002-22.24 19.272C8.058 40.503-.697 30.689.044 19.315\",\n transform: \"translate(86 49.093)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n d: \"M19.867 39.156c4.948.313 9.556-1.378 13.01-4.365-.454-1.685-1.003-3.336-1.642-4.887-1.078-2.616-3.084-4.7-5.529-5.904.02-.03.044-.057.062-.087 1.062-1.682 1.384-3.636 1.368-5.54-.015-1.813-.346-3.68-1.468-5.208-1.12-1.528-3.164-2.65-5.27-2.462-2.261.202-4.08 1.85-4.854 3.685-.773 1.836-.695 3.84-.542 5.78.11 1.393.497 2.805 1.17 3.985-1.487.885-2.803 2.182-4.06 3.782-1.287 1.636-1.234 1.713-2.044 3.641-.398.948-.793 1.93-1.135 3.008 2.91 2.61 6.702 4.304 10.934 4.572\",\n transform: \"translate(86 49.093)\"\n})), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C7D4F6\",\n d: \"M.056 25.119C1.006 10.327 13.767-.894 28.56.056c14.792.95 26.013 13.711 25.063 28.503-.95 14.792-13.711 26.013-28.503 25.063C10.327 52.672-.894 39.911.056 25.119\",\n transform: \"translate(138 63.093)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n d: \"M25.39 51.032c6.911.444 13.349-1.953 18.173-6.187-.634-2.39-1.4-4.728-2.294-6.927-1.505-3.708-4.306-6.663-7.722-8.369.027-.042.06-.08.087-.122 1.481-2.384 1.933-5.154 1.91-7.853-.022-2.57-.484-5.215-2.05-7.382-1.567-2.166-4.42-3.755-7.363-3.489-3.157.286-5.7 2.62-6.78 5.223-1.079 2.602-.97 5.442-.757 8.193.153 1.973.694 3.976 1.634 5.649-2.077 1.253-3.915 3.092-5.672 5.36-1.797 2.319-1.723 2.427-2.854 5.16-.556 1.345-1.108 2.736-1.586 4.264 4.065 3.7 9.363 6.1 15.274 6.48\",\n transform: \"translate(138 63.093)\"\n})))));\nexport default SvgAssignToOrganization;","\n \n\n","\n \n\n","\n \n\n","\n \n\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconManage = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"#fff\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 16 16\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.135 6.784a2 2 0 01-1.23-2.969c.322-.536.225-.998-.094-1.316l-.31-.31c-.318-.318-.78-.415-1.316-.094A2 2 0 019.216.865C9.065.258 8.669 0 8.219 0h-.438c-.45 0-.845.258-.997.865a2 2 0 01-2.969 1.23c-.536-.322-.999-.225-1.317.093l-.31.31c-.318.318-.415.781-.093 1.317a2 2 0 01-1.23 2.969C.26 6.935 0 7.33 0 7.781v.438c0 .45.258.845.865.997a2 2 0 011.23 2.969c-.322.536-.225.998.094 1.316l.31.31c.319.319.782.415 1.316.094a2 2 0 012.969 1.23c.151.607.547.865.997.865h.438c.45 0 .845-.258.997-.865a2 2 0 012.969-1.23c.535.321.997.225 1.316-.094l.31-.31c.318-.318.415-.78.094-1.316a2 2 0 011.23-2.969c.607-.151.865-.547.865-.997v-.438c0-.451-.26-.846-.865-.997zM8 11a3 3 0 110-6 3 3 0 010 6z\"\n})));\nexport default SvgIconManage;","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconScheduleReminder = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 18 16\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#2C3345\",\n fillRule: \"nonzero\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.125 0H.875C.35 0 0 .35 0 .875V2.1l7 3.937 7-3.85V.875C14 .35 13.65 0 13.125 0z\",\n transform: \"translate(0 2) translate(0 1)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.563 7.787L0 4.112v7.263c0 .525.35.875.875.875h12.25c.525 0 .875-.35.875-.875V4.112L7.437 7.787c-.245.123-.63.123-.875 0z\",\n transform: \"translate(0 2) translate(0 1)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n stroke: \"#FFF\",\n transform: \"translate(0 2) translate(9)\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 3.5,\n cy: 3.5,\n r: 4.25,\n fill: \"#2C3345\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.248 1.167L3.248 3.5 3.248 4.059 5.178 4.059\"\n})))));\nexport default SvgIconScheduleReminder;","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconScheduledReminderIndicator = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 23 20\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#C7C8D4\",\n fillRule: \"nonzero\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.325 0H1.155C.462 0 0 .462 0 1.155v1.617l9.24 5.197 9.24-5.082V1.156C18.48.462 18.018 0 17.325 0z\",\n transform: \"translate(0 2) translate(0 1.32)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.662 10.28L0 5.429v9.586c0 .693.462 1.155 1.155 1.155h16.17c.693 0 1.155-.462 1.155-1.155V5.428L9.818 10.28c-.324.161-.832.161-1.155 0z\",\n transform: \"translate(0 2) translate(0 1.32)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n stroke: \"#FFF\",\n transform: \"translate(0 2) translate(11.88)\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 4.62,\n cy: 4.62,\n r: 5.37,\n fill: \"#C7C8D4\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeWidth: 1.2,\n d: \"M4.288 2.718L4.288 4.848 4.288 5.358 6.836 5.358\"\n})))));\nexport default SvgIconScheduledReminderIndicator;","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgActionRequired = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"66px\",\n height: \"72px\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Improvements\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Action-Required-Modal\",\n transform: \"translate(-687.000000, -320.000000)\",\n fill: \"#CDCDD9\",\n fillRule: \"nonzero\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"bell\",\n transform: \"translate(687.000000, 320.000000)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56.9916655,42.1111611 L56.9916655,27.557105 C56.9916655,17.7072025 50.7621785,9.32463638 41.9877856,5.81201579 L42.0731427,5.81201579 C40.536715,2.40785725 37.0544618,0 33.0015807,0 C28.9439575,0 25.463285,2.40785725 23.9315994,5.81201579 L24.0122144,5.81201579 C15.2394022,9.32463638 9.00991522,17.7072025 9.00991522,27.557105 L9.00991522,42.11426 C4.01810605,42.1576448 0,46.1567951 0,51.0871695 L0,53.0208927 C0,57.9760584 4.08133352,62 9.13795086,62 L56.8636298,62 C61.9186665,62 66,57.9760584 66,53.0208927 L66,51.0871695 C66,46.1552457 61.9834746,42.1560954 56.9916655,42.1111611 Z\",\n id: \"Path\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M33.0023525,72 C37.0251808,72 40.4802649,69.5142629 42,66 L24,66 C25.5197351,69.5158624 28.9779559,72 33.0023525,72 Z\",\n id: \"Path\"\n}))))));\nexport default SvgActionRequired;","var _circle, _path, _path2, _path3, _path4, _path5, _rect, _path6, _path7, _path8;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconSharedWithNoOne = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 105 117\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 52.5,\n cy: 64.5,\n r: 52.5,\n fill: \"#E3E5F5\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31 48.8159C31 45.2438 33.8957 42.3481 37.4677 42.3481H68.1894C71.7614 42.3481 74.6571 45.2438 74.6571 48.8159V87.6222C74.6571 91.1942 71.7614 94.0899 68.1894 94.0899H37.4677C33.8957 94.0899 31 91.1942 31 87.6222V48.8159Z\",\n fill: \"white\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M68.1894 43.9651H37.4677C34.7887 43.9651 32.6169 46.1368 32.6169 48.8159V87.6222C32.6169 90.3012 34.7887 92.473 37.4677 92.473H68.1894C70.8684 92.473 73.0402 90.3012 73.0402 87.6222V48.8159C73.0402 46.1368 70.8684 43.9651 68.1894 43.9651ZM37.4677 42.3481C33.8957 42.3481 31 45.2438 31 48.8159V87.6222C31 91.1942 33.8957 94.0899 37.4677 94.0899H68.1894C71.7614 94.0899 74.6571 91.1942 74.6571 87.6222V48.8159C74.6571 45.2438 71.7614 42.3481 68.1894 42.3481H37.4677Z\",\n fill: \"#B1C3E9\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M40.2397 59.9037C40.2397 58.3728 41.4808 57.1318 43.0116 57.1318H63.3387C64.8696 57.1318 66.1106 58.3728 66.1106 59.9037C66.1106 61.4346 64.8696 62.6756 63.3387 62.6756H43.0116C41.4808 62.6756 40.2397 61.4346 40.2397 59.9037Z\",\n fill: \"#0099FF\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M40.2397 69.1425C40.2397 67.6116 41.4808 66.3706 43.0116 66.3706H63.3387C64.8696 66.3706 66.1106 67.6116 66.1106 69.1425C66.1106 70.6734 64.8696 71.9144 63.3387 71.9144H43.0116C41.4808 71.9144 40.2397 70.6734 40.2397 69.1425Z\",\n fill: \"#FF6100\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M40.2397 78.3822C40.2397 76.8514 41.4808 75.6104 43.0116 75.6104H63.3387C64.8696 75.6104 66.1106 76.8514 66.1106 78.3822C66.1106 79.9131 64.8696 81.1541 63.3387 81.1541H43.0116C41.4808 81.1541 40.2397 79.9131 40.2397 78.3822Z\",\n fill: \"#FFB629\"\n})), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 23,\n y: 1,\n width: 60.4502,\n height: 32.8534,\n rx: 4,\n fill: \"#FF6100\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M53.8224 27.8216C53.4338 27.442 52.8132 27.442 52.4247 27.8216L47.7072 32.4311C47.3408 32.7891 47.3042 33.3662 47.6225 33.7676L52.3399 39.7177C52.7403 40.2227 53.5068 40.2227 53.9071 39.7177L58.6246 33.7676C58.9429 33.3662 58.9063 32.7891 58.5399 32.4311L53.8224 27.8216Z\",\n fill: \"#FF6100\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M31.9634 12.2109C31.9634 14.5328 33.8523 16.4217 36.1742 16.4217C38.4962 16.4217 40.3851 14.5328 40.3851 12.2109C40.3851 9.88895 38.4962 8 36.1742 8C33.8523 8 31.9634 9.88895 31.9634 12.2109ZM42.6353 14.3816C42.6353 16.3463 44.2336 17.9447 46.1983 17.9447C48.163 17.9447 49.7613 16.3463 49.7613 14.3816C49.7613 12.4169 48.163 10.8186 46.1983 10.8186C44.2336 10.8186 42.6353 12.4169 42.6353 14.3816ZM43.605 26.33H28.7431C28.3337 26.33 28.0013 25.9988 28 25.5894C27.9929 23.4341 28.8628 21.3237 30.3871 19.7997C31.9045 18.282 34.0035 17.4128 36.1493 17.4128H36.1753C40.6819 17.4138 44.3481 21.0803 44.3481 25.5869C44.3481 25.9973 44.0155 26.33 43.605 26.33ZM52.4859 26.329H45.9625C45.9997 26.2297 46.02 26.1222 46.02 26.01C46.02 23.4511 45.0548 21.1133 43.4692 19.3417C44.3204 18.9782 45.2436 18.7837 46.1772 18.7837H46.1993C50.0125 18.7845 53.1147 21.8869 53.1147 25.7002C53.1147 26.0475 52.8332 26.329 52.4859 26.329Z\",\n fill: \"white\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M72.4072 17.224C72.4072 15.256 72.0712 13.744 71.3032 12.784C70.7752 12.088 70.0312 11.632 68.9032 11.632C67.7752 11.632 67.0552 12.088 66.5032 12.784C65.7592 13.744 65.4232 15.256 65.4232 17.224C65.4232 19.192 65.7592 20.704 66.5032 21.664C67.0552 22.36 67.7752 22.816 68.9032 22.816C70.0312 22.816 70.7752 22.36 71.3032 21.664C72.0472 20.704 72.4072 19.192 72.4072 17.224ZM75.2632 17.224C75.2632 19.288 74.9272 21.232 73.8712 22.816C72.8632 24.328 71.2312 25.36 68.9032 25.36C66.5752 25.36 64.9672 24.328 63.9592 22.816C62.9032 21.232 62.5672 19.288 62.5672 17.224C62.5672 15.16 62.9032 13.216 63.9592 11.632C64.9672 10.12 66.5752 9.088 68.9032 9.088C71.2312 9.088 72.8632 10.12 73.8712 11.632C74.9272 13.216 75.2632 15.16 75.2632 17.224Z\",\n fill: \"white\"\n})));\nexport default SvgIconSharedWithNoOne;","\n \n\n","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 20,\n height: 20,\n fill: \"none\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#00A889\",\n fillRule: \"evenodd\",\n d: \"m6.661 16.081.358.143a.032.032 0 0 0 .042-.04 5.13 5.13 0 0 0-3.245-3.245.032.032 0 0 0-.04.042l.143.358c.36.901-.112 1.92-1.033 2.227l-.16.053a1.85 1.85 0 0 1-1.27-.037l-.104-.041A2.15 2.15 0 0 1 0 13.544V4a4 4 0 0 1 4-4h12a4 4 0 0 1 4 4v12a4 4 0 0 1-4 4H6.456a2.15 2.15 0 0 1-1.997-1.352l-.041-.103a1.85 1.85 0 0 1-.037-1.27l.053-.161a1.687 1.687 0 0 1 2.227-1.033m-3.328-4.414S3.75 10 5 9.167c1.25-.834 1.666 0 1.666 0s1.667-5.834 10-5.834c0 8.333-5.833 10-5.833 10s.833.417 0 1.667-2.5 1.666-2.5 1.666a5 5 0 0 0-5-5M11.25 10a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5\",\n clipRule: \"evenodd\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n fillOpacity: 0.2,\n fillRule: \"evenodd\",\n d: \"m6.661 16.081.358.143a.032.032 0 0 0 .042-.04 5.13 5.13 0 0 0-3.245-3.245.032.032 0 0 0-.04.042l.143.358c.36.901-.112 1.92-1.033 2.227l-.16.053a1.85 1.85 0 0 1-1.27-.037l-.104-.041A2.15 2.15 0 0 1 0 13.544V4a4 4 0 0 1 4-4h12a4 4 0 0 1 4 4v12a4 4 0 0 1-4 4H6.456a2.15 2.15 0 0 1-1.997-1.352l-.041-.103a1.85 1.85 0 0 1-.037-1.27l.053-.161a1.687 1.687 0 0 1 2.227-1.033m-3.328-4.414S3.75 10 5 9.167c1.25-.834 1.666 0 1.666 0s1.667-5.834 10-5.834c0 8.333-5.833 10-5.833 10s.833.417 0 1.667-2.5 1.666-2.5 1.666a5 5 0 0 0-5-5M11.25 10a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5\",\n clipRule: \"evenodd\"\n})));\nexport default SvgIcon;","\n \n\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgFaq = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 16 16\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.46,\n d: \"M8 0C3.6 0 0 3.6 0 8C0 12.4 3.6 16 8 16C12.4 16 16 12.4 16 8C16 3.6 12.4 0 8 0ZM8 13C7.4 13 7 12.6 7 12C7 11.4 7.4 11 8 11C8.6 11 9 11.4 9 12C9 12.6 8.6 13 8 13ZM9.5 8.4C9 8.7 9 8.8 9 9V10H7V9C7 7.7 7.8 7.1 8.4 6.7C8.9 6.4 9 6.3 9 6C9 5.4 8.6 5 8 5C7.6 5 7.3 5.2 7.1 5.5L6.6 6.4L4.9 5.4L5.4 4.5C5.9 3.6 6.9 3 8 3C9.7 3 11 4.3 11 6C11 7.4 10.1 8 9.5 8.4Z\",\n fill: \"#8583A9\"\n})));\nexport default SvgFaq;","\n \n\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconCalendar = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 15 14\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.7185 8.86687V7H9.84327V8.86687H11.7185ZM8.437 8.86687V7H6.56177V8.86687H8.437ZM5.15612 8.86687V7H3.28089V8.86687H5.15612ZM11.7185 11.6669V9.8H9.84327V11.6669H11.7185ZM8.437 11.6669V9.8H6.56177V11.6669H8.437ZM13.5937 0.93313V4.2H9.37492V1.93313C9.37492 1.38085 8.92721 0.93313 8.37492 0.93313H6.62508C6.07279 0.93313 5.62508 1.38085 5.62508 1.93313V4.2H1.40627V0.93313H1C0.447715 0.93313 0 1.38085 0 1.93313V12C0 13.1046 0.895431 14 2 14H13C14.1046 14 15 13.1046 15 12V1.93313C15 1.38085 14.5523 0.93313 14 0.93313H13.5937ZM13.1248 6.06687V12.6H1.87462V6.06687H13.1248ZM5.15612 11.6669V9.8H3.28089V11.6669H5.15612ZM12.6558 2.26687C12.6558 2.81915 12.2081 3.26687 11.6558 3.26687H11.3122C10.7599 3.26687 10.3122 2.81915 10.3122 2.26687V1C10.3122 0.447716 10.7599 0 11.3122 0H11.6558C12.2081 0 12.6558 0.447715 12.6558 1V2.26687ZM2.34358 1C2.34358 0.447716 2.79129 0 3.34358 0H3.68716C4.23944 0 4.68716 0.447715 4.68716 1V2.26687C4.68716 2.81915 4.23944 3.26687 3.68716 3.26687H3.34358C2.79129 3.26687 2.34358 2.81915 2.34358 2.26687V1Z\",\n fill: \"#6A6E8F\",\n fillOpacity: 0.4\n})));\nexport default SvgIconCalendar;","\n \n\n","var _circle, _path, _path2, _path3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconSignTrackAvatar = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 44 44\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 22,\n cy: 22,\n r: 22,\n fill: \"#5E74E6\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.0538 16.6894C17.6831 16.0601 18.4199 15.563 19.221 15.216C20.0911 14.8391 21.037 14.6392 22.0036 14.6392C22.9714 14.6392 23.9185 14.8396 24.7895 15.2174C25.5893 15.5644 26.3249 16.061 26.9533 16.6894C28.1167 17.8528 28.8283 19.3834 28.9752 21.0089C28.9789 21.05 28.9801 21.0907 28.9788 21.131C28.979 21.133 28.9792 21.1351 28.9794 21.1373C28.9853 21.2013 28.9986 21.3175 29.0282 21.4957C29.0875 21.8527 29.2109 22.4524 29.4667 23.37C29.7564 24.4094 30.3225 25.7009 30.8052 26.7072C31.4371 28.0245 30.5086 29.6385 28.9813 29.6385H15.0247C13.4969 29.6385 12.5686 28.0237 13.2011 26.7063C13.6842 25.7001 14.2505 24.4091 14.5401 23.37C14.7957 22.4533 14.9172 21.855 14.9748 21.4996C15.0035 21.3222 15.016 21.2069 15.0214 21.1439C15.0241 21.1125 15.025 21.0944 15.0252 21.0884C15.0254 21.0854 15.0253 21.0854 15.0252 21.0884L15.0252 21.0951L15.0252 21.1001L15.0252 21.1029L15.0252 21.1045C15.0248 21.043 15.0299 20.9837 15.0401 20.9252C15.2035 19.331 15.9104 17.8328 17.0538 16.6894ZM17.0215 21.2124C17.0224 21.2046 17.0232 21.1968 17.0239 21.1889C17.1288 20.0279 17.6371 18.9346 18.4681 18.1036C19.4057 17.1659 20.6775 16.6392 22.0036 16.6392C23.3297 16.6392 24.6014 17.1659 25.5391 18.1036C26.3506 18.9151 26.8543 19.9767 26.9752 21.1072L26.9753 21.1144L26.9757 21.1323C26.976 21.1454 26.9766 21.161 26.9775 21.1793C26.9793 21.2157 26.9825 21.2626 26.9879 21.3212C26.9987 21.4382 27.0186 21.6026 27.0552 21.8232C27.1283 22.2638 27.269 22.9344 27.5401 23.907C27.8795 25.1246 28.5104 26.5475 29.0019 27.5721C29.0067 27.5822 29.0071 27.5881 29.0067 27.5936C29.0062 27.6016 29.0032 27.6128 28.9964 27.624C28.9912 27.6324 28.9863 27.6368 28.9842 27.6384L28.9813 27.6385H15.0247L15.0218 27.6384C15.0196 27.6368 15.0148 27.6324 15.0096 27.6239C15.0028 27.6128 14.9998 27.6015 14.9992 27.5935C14.9988 27.5879 14.9992 27.582 15.0041 27.572C15.496 26.5473 16.1273 25.1246 16.4667 23.907C16.7381 22.9334 16.8774 22.2615 16.949 21.8193C16.9849 21.5979 17.004 21.4326 17.0141 21.3146C17.0175 21.2756 17.0198 21.2416 17.0215 21.2124Z\",\n fill: \"white\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.8706 29.6385H26.1373C26.1373 29.6385 26.1462 29.7512 25.9325 30.2672C25.7188 30.7831 25.4056 31.2518 25.0108 31.6467C24.6159 32.0416 24.1471 32.3548 23.6312 32.5685C23.1153 32.7822 22.5623 32.8922 22.0039 32.8922C21.4455 32.8922 20.8926 32.7822 20.3766 32.5685C19.8607 32.3548 19.392 32.0416 18.9971 31.6467C18.6022 31.2518 18.289 30.7831 18.0753 30.2672C17.8616 29.7512 17.8706 29.6385 17.8706 29.6385ZM19.9858 29.6399C20.0943 29.8589 20.238 30.0591 20.4113 30.2325C20.6205 30.4416 20.8688 30.6075 21.142 30.7207C21.4153 30.8339 21.7082 30.8922 22.0039 30.8922C22.2997 30.8922 22.5926 30.8339 22.8658 30.7207C23.1391 30.6075 23.3874 30.4416 23.5965 30.2325C23.7699 30.0591 23.9135 29.8589 24.0221 29.6399H19.9858Z\",\n fill: \"white\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M20.3388 11.6052C20.8322 11.2756 21.4122 11.0996 22.0055 11.0996C22.5989 11.0996 23.1789 11.2756 23.6723 11.6052C24.1656 11.9348 24.5501 12.4034 24.7772 12.9516C25.0042 13.4997 25.0637 14.1029 24.9479 14.6849C24.9115 14.8678 24.8583 15.046 24.7895 15.2174L22.8164 14.6849C22.9 14.569 22.9582 14.4361 22.9863 14.2947C23.0249 14.1007 23.0051 13.8997 22.9294 13.7169C22.8537 13.5342 22.7256 13.378 22.5611 13.2681C22.3967 13.1583 22.2033 13.0996 22.0055 13.0996C21.8078 13.0996 21.6144 13.1583 21.45 13.2681C21.2855 13.378 21.1573 13.5342 21.0817 13.7169C21.006 13.8997 20.9862 14.1007 21.0248 14.2947C21.0529 14.4361 21.1111 14.569 21.1947 14.6849C21.2258 14.728 21.1568 14.6469 21.1947 14.6849L19.221 15.216C19.1524 15.045 19.0995 14.8673 19.0632 14.6849C18.9474 14.1029 19.0068 13.4997 19.2339 12.9516C19.461 12.4034 19.8455 11.9348 20.3388 11.6052Z\",\n fill: \"white\"\n})));\nexport default SvgIconSignTrackAvatar;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconWorkflowApproval = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 26 29\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.826.106c4.477.35 8.209 3.77 8.972 8.16.78 4.479-1.52 8.837-5.678 10.74-.22.1-.283.214-.283.444l.006 4.312v4.774H0V2.961h.397c2.722 0 5.443.004 8.165-.01a.902.902 0 00.553-.212C11.307.763 13.886-.124 16.826.106zM7.32 4.952H1.986v21.555H17.78v-6.735c-.119.01-.213.01-.306.025-2.139.331-4.166-.014-6.097-.972a1.326 1.326 0 00-.574-.123l-2.722-.007-3.125.001V16.69h3.537c-.404-.577-.803-1.126-1.174-1.693-.118-.18-.237-.25-.45-.245-.634.014-1.267.005-1.919.005v-1.98h1.387c-.377-1.35-.498-2.678-.322-4.027.175-1.348.62-2.611 1.305-3.797zm7.499 15.717v1.95H4.94v-1.95h9.878zm1.21-18.622c-4.476-.014-8.054 3.494-8.077 7.917-.021 4.396 3.548 7.953 7.992 7.963 4.391.01 8.002-3.538 8.015-7.875.013-4.382-3.564-7.992-7.93-8.005zm4.247 3.998l1.355 1.368-7.208 7.152-4.707-4.668 1.379-1.363 3.343 3.305 5.838-5.794z\",\n fill: \"#464C52\",\n fillRule: \"evenodd\"\n})));\nexport default SvgIconWorkflowApproval;","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n \n\n","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgLogoGrey = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 91 16\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M63.4889 12.4421C62.9321 12.4421 62.4018 12.2392 62.0108 11.8463C61.621 11.4547 61.3578 10.8621 61.3578 10.061C61.3578 9.25016 61.6213 8.65797 62.0104 8.26906C62.4008 7.87888 62.931 7.67979 63.4889 7.67979C64.0469 7.67979 64.5771 7.87888 64.9675 8.26906C65.3566 8.65797 65.6201 9.25016 65.6201 10.061C65.6201 10.8718 65.3566 11.464 64.9675 11.8529C64.5771 12.243 64.0469 12.4421 63.4889 12.4421ZM63.4889 5.0913C60.6611 5.0913 58.5193 7.17191 58.5193 10.061C58.5193 12.9312 60.6606 15.0306 63.4889 15.0306C66.3173 15.0306 68.4586 12.9312 68.4586 10.061C68.4586 7.17191 66.3168 5.0913 63.4889 5.0913Z\",\n fill: \"#6F76A7\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M39.974 12.4421C39.4172 12.4421 38.8868 12.2392 38.4959 11.8463C38.1061 11.4547 37.8429 10.8621 37.8429 10.061C37.8429 9.25016 38.1064 8.65797 38.4955 8.26906C38.8859 7.87888 39.4161 7.67979 39.974 7.67979C40.5319 7.67979 41.0621 7.87888 41.4525 8.26906C41.8417 8.65797 42.1052 9.25016 42.1052 10.061C42.1052 10.8718 41.8417 11.464 41.4525 11.8529C41.0621 12.243 40.5319 12.4421 39.974 12.4421ZM39.974 5.0913C37.1462 5.0913 35.0044 7.17191 35.0044 10.061C35.0044 12.9312 37.1457 15.0306 39.974 15.0306C42.8024 15.0306 44.9437 12.9312 44.9437 10.061C44.9437 7.17191 42.8019 5.0913 39.974 5.0913Z\",\n fill: \"#6F76A7\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M76.1878 15.0297H79.0094V9.39641C79.0094 8.93354 79.1542 8.53006 79.4098 8.24469C79.6633 7.96171 80.0366 7.78222 80.5228 7.78222C81.0322 7.78222 81.3784 7.95095 81.6005 8.21122C81.8265 8.47613 81.9439 8.85957 81.9439 9.32226V15.0297H84.747V9.39641C84.747 8.94341 84.8915 8.5391 85.1461 8.25061C85.3984 7.96464 85.7673 7.78222 86.2419 7.78222C86.7615 7.78222 87.1069 7.95144 87.326 8.21061C87.5495 8.47488 87.6631 8.85805 87.6631 9.32226V15.0297H90.4108V8.82176C90.4108 7.55567 89.994 6.6366 89.3389 6.03543C88.6868 5.43712 87.818 5.17139 86.943 5.17139C86.3226 5.17139 85.7531 5.27691 85.2415 5.5339C84.8062 5.75263 84.4208 6.07708 84.0848 6.5252C83.5403 5.63965 82.5464 5.17139 81.3714 5.17139C80.5148 5.17139 79.5234 5.51112 78.8987 6.17171V5.43091H76.1878V15.0297Z\",\n fill: \"#6F76A7\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M75.1255 5.4082V8.28359L74.9053 8.23918C74.6425 8.18619 74.4156 8.16865 74.206 8.16865C73.6077 8.16865 73.0761 8.3151 72.6945 8.67083C72.3154 9.02421 72.0541 9.61254 72.0541 10.5618V15.0303H69.2402V5.42768H71.9806V6.32655C72.6583 5.5118 73.7108 5.35352 74.3715 5.35352C74.5831 5.35352 74.7747 5.37284 74.9567 5.39118L75.1255 5.4082Z\",\n fill: \"#6F76A7\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M24.4846 10.2972L27.2212 10.2972L27.2523 10.3276C27.2732 10.3479 27.2876 10.3769 27.2905 10.4092C27.3435 11.0073 27.579 11.4584 27.9313 11.759C28.282 12.058 28.7357 12.1972 29.2085 12.1972C29.7854 12.1972 30.2572 11.9851 30.5831 11.6164C30.9071 11.2499 31.0759 10.7414 31.0759 10.1652V2.18164H34.0347V10.2478C34.0347 12.83 32.0553 14.9895 29.2291 14.9895C27.8173 14.9895 26.6334 14.5213 25.8032 13.7088C24.9922 12.915 24.5078 11.7821 24.4863 10.4056L24.4846 10.2972Z\",\n fill: \"#6F76A7\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M58.1191 3.50347L58.2754 3.54813V1.37034L58.2035 1.33767C58.0935 1.28764 57.9164 1.24235 57.712 1.20938C57.5049 1.17599 57.2607 1.15379 57.0118 1.15379C56.0418 1.15379 54.9513 1.47476 54.3867 2.053C53.8223 2.63092 53.5111 3.45464 53.5111 4.44016V4.88942H52.0935V7.35076H53.5111V15.029H56.3564V7.35076H58.2754V4.88942H56.3564V4.47474C56.3564 4.03189 56.5113 3.77696 56.7093 3.62846C56.9135 3.47529 57.1819 3.42175 57.4267 3.42175C57.7948 3.42175 58.0082 3.47178 58.1191 3.50347Z\",\n fill: \"#6F76A7\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M51.0751 12.6715L51.2219 12.6266V14.813L51.1544 14.8458C51.051 14.896 50.8846 14.9415 50.6925 14.9746C50.4979 15.0081 50.2684 15.0304 50.0344 15.0304C49.1229 15.0304 48.1036 14.7082 47.573 14.1276C47.0427 13.5474 46.7502 12.7205 46.7502 11.7311V7.38836H45.418V4.92027L46.7502 4.92027V2.25196H49.4185V4.92027L51.2219 4.92027V7.38836L49.4185 7.38836V11.6964C49.4185 12.141 49.5641 12.3969 49.7502 12.546C49.9421 12.6998 50.1943 12.7535 50.4243 12.7535C50.7703 12.7535 50.9708 12.7033 51.0751 12.6715Z\",\n fill: \"#6F76A7\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.98543 15.2053C4.2875 15.4981 4.07404 15.9999 3.64508 15.9999H0.96061C0.430966 15.9999 0 15.5821 0 15.0686V12.4663C0 12.0504 0.517562 11.8435 0.81964 12.1363L3.98543 15.2053Z\",\n fill: \"#6F76A7\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.18184 15.4078C7.38722 14.6184 7.38722 13.3385 8.18184 12.549L11.0496 9.69999C11.8442 8.91055 13.1325 8.91055 13.9271 9.69999C14.7218 10.4894 14.7218 11.7693 13.9271 12.5588L11.0594 15.4078C10.2648 16.1973 8.97645 16.1973 8.18184 15.4078Z\",\n fill: \"#6F76A7\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0.609326 8.24892C-0.185287 7.45948 -0.185286 6.17956 0.609327 5.39012L5.43546 0.592077C6.23007 -0.197358 7.51839 -0.197359 8.31301 0.592076C9.10762 1.38151 9.10762 2.66144 8.31301 3.45087L3.48688 8.24892C2.69226 9.03835 1.40394 9.03835 0.609326 8.24892Z\",\n fill: \"#6F76A7\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.55104 11.6691C3.75642 10.8797 3.75643 9.59974 4.55104 8.81031L11.072 2.33182C11.8666 1.54239 13.155 1.54239 13.9496 2.33182C14.7442 3.12126 14.7442 4.40118 13.9496 5.19062L7.42859 11.6691C6.63397 12.4585 5.34565 12.4585 4.55104 11.6691Z\",\n fill: \"#6F76A7\"\n})));\nexport default SvgLogoGrey;","\n \n\n","\n \n\n","var _title, _desc, _defs, _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconValid = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"9px\",\n height: \"5px\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"check-small\")), _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null)), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Reply\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Sender-Email-From-Popup-Error\",\n transform: \"translate(-990.000000, -547.000000)\",\n stroke: \"#C9C9C9\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group-41\",\n transform: \"translate(410.000000, 281.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"tags-copy-7\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"search-bar\",\n transform: \"translate(20.000000, 124.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group-31\",\n transform: \"translate(0.000000, 126.000000)\"\n}, /*#__PURE__*/React.createElement(\"polyline\", {\n id: \"check-small\",\n points: \"561 18 563.5 20.5 568 16\"\n})))))))));\nexport default SvgIconValid;","var _title, _desc, _defs, _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconInvalid = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"9px\",\n height: \"9px\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"Shape\")), _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null)), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Reply\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Sender-Email-From-Popup-Error\",\n transform: \"translate(-990.000000, -419.000000)\",\n stroke: \"#F44C4C\",\n strokeWidth: 1.14285714\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group-41\",\n transform: \"translate(410.000000, 281.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"tags-copy-7\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M584.5,142.5 L581,139 L584.5,142.5 L588,139 L584.5,142.5 Z M584.5,142.5 L581,146 L584.5,142.5 L588,146 L584.5,142.5 Z\",\n id: \"Shape\"\n})))))));\nexport default SvgIconInvalid;","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","var _title, _desc, _defs, _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconSmile = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"22px\",\n height: \"22px\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"Group\")), _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null)), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Page-1\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Data-Table-1-Copy-309\",\n transform: \"translate(-850.000000, -852.000000)\",\n fill: \"#8488A9\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group\",\n transform: \"translate(850.000000, 852.000000)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.8275822,19.979924 C15.863291,19.9982594 19.8744716,16.0165118 19.8993209,10.9748521 C19.9240092,5.94002784 15.9492581,1.92667591 10.904462,1.89290026 C5.85805754,1.85904419 1.82492273,5.86274593 1.81294042,10.9181572 C1.80103852,15.9548311 5.78688742,19.9615887 10.8275822,19.979924 M10.894088,0.0804343085 C16.8915988,0.0900040772 21.728755,4.97018405 21.7121889,10.9946349 C21.6957836,16.9713174 16.8213133,21.8026835 10.817932,21.7927117 C4.82026035,21.7826594 -0.0164937779,16.9028011 7.23764023e-05,10.8782698 C0.0164776943,4.90078312 4.88950045,0.0707841215 10.894088,0.0804343085\",\n id: \"Fill-1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.6677374,13.528758 C15.1483167,13.8612873 15.6088718,14.1798239 16.1148633,14.5298844 C14.9842635,16.0869421 13.5102779,17.0111888 11.6276068,17.2127168 C9.14573954,17.4784991 7.15160882,16.5770912 5.59133442,14.5441185 C6.08663027,14.196953 6.55940901,13.8656299 7.03250943,13.5340656 C8.84963963,16.1064033 12.8280901,16.0837254 14.6677374,13.528758\",\n id: \"Fill-4\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.03983678,9.13327471 C9.03525294,10.1399501 8.22415472,10.9431673 7.22029402,10.9349646 C6.2202934,10.926762 5.41820202,10.1047269 5.4309081,9.10110742 C5.44337293,8.11429539 6.24305175,7.32563386 7.23259801,7.32426675 C8.24305301,7.32281922 9.04442062,8.12499101 9.03983678,9.13327471\",\n id: \"Fill-6\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.280364,9.11453727 C16.286315,10.1187196 15.4805244,10.9327129 14.478272,10.9348842 C13.4754568,10.9370555 12.6674949,10.1250727 12.6724004,9.11992529 C12.677145,8.12563436 13.4625898,7.33343442 14.4526186,7.32418633 C15.4626715,7.31477739 16.2744131,8.1099528 16.280364,9.11453727\",\n id: \"Fill-8\"\n}))))));\nexport default SvgIconSmile;","\n \n \n \n \n\n","\n \n \n\n","\n \n\n","\n \n \n \n \n \n \n\n","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoFormsFoundIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 108 121\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip0)\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 54.5,\n cy: 58.4492,\n r: 52.5,\n fill: \"#F3F3FE\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M61.1099 58.4224C61.1099 55.2404 63.6894 52.6609 66.8714 52.6609H94.2387C97.4207 52.6609 100 55.2404 100 58.4224V92.9916C100 96.1736 97.4207 98.7532 94.2387 98.7532H66.8714C63.6894 98.7532 61.1099 96.1736 61.1099 92.9916V58.4224Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M94.2387 54.1013H66.8714C64.4849 54.1013 62.5502 56.0359 62.5502 58.4224V92.9916C62.5502 95.3781 64.4849 97.3128 66.8714 97.3128H94.2387C96.6252 97.3128 98.5598 95.3781 98.5598 92.9916V58.4224C98.5598 56.0359 96.6252 54.1013 94.2387 54.1013ZM66.8714 52.6609C63.6894 52.6609 61.1099 55.2404 61.1099 58.4224V92.9916C61.1099 96.1736 63.6894 98.7532 66.8714 98.7532H94.2387C97.4207 98.7532 100 96.1736 100 92.9916V58.4224C100 55.2404 97.4207 52.6609 94.2387 52.6609H66.8714Z\",\n fill: \"#B1C3E9\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.3403 68.2993C69.3403 66.9356 70.4458 65.8301 71.8096 65.8301H89.9172C91.281 65.8301 92.3865 66.9356 92.3865 68.2993C92.3865 69.663 91.281 70.7685 89.9172 70.7685H71.8096C70.4458 70.7685 69.3403 69.663 69.3403 68.2993Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.3403 76.5298C69.3403 75.1661 70.4458 74.0605 71.8096 74.0605H89.9172C91.281 74.0605 92.3865 75.1661 92.3865 76.5298C92.3865 77.8935 91.281 78.999 89.9172 78.999H71.8096C70.4458 78.999 69.3403 77.8935 69.3403 76.5298Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.3403 84.7607C69.3403 83.397 70.4458 82.2915 71.8096 82.2915H89.9172C91.281 82.2915 92.3865 83.397 92.3865 84.7607C92.3865 86.1245 91.281 87.23 89.9172 87.23H71.8096C70.4458 87.23 69.3403 86.1245 69.3403 84.7607Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37.1431 8.13654C37.1431 4.95453 39.7226 2.375 42.9046 2.375H70.2719C73.4539 2.375 76.0334 4.95453 76.0334 8.13654V42.7057C76.0334 45.8878 73.4539 48.4673 70.2719 48.4673H42.9046C39.7226 48.4673 37.1431 45.8878 37.1431 42.7057V8.13654Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M70.2719 3.81538H42.9046C40.5181 3.81538 38.5835 5.75003 38.5835 8.13654V42.7057C38.5835 45.0923 40.5181 47.0269 42.9046 47.0269H70.2719C72.6584 47.0269 74.593 45.0923 74.593 42.7057V8.13654C74.593 5.75003 72.6584 3.81538 70.2719 3.81538ZM42.9046 2.375C39.7226 2.375 37.1431 4.95453 37.1431 8.13654V42.7057C37.1431 45.8878 39.7226 48.4673 42.9046 48.4673H70.2719C73.4539 48.4673 76.0334 45.8878 76.0334 42.7057V8.13654C76.0334 4.95453 73.4539 2.375 70.2719 2.375H42.9046Z\",\n fill: \"#B1C3E9\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M45.3735 18.0134C45.3735 16.6497 46.479 15.5442 47.8428 15.5442H65.9504C67.3142 15.5442 68.4197 16.6497 68.4197 18.0134C68.4197 19.3771 67.3142 20.4826 65.9504 20.4826H47.8428C46.479 20.4826 45.3735 19.3771 45.3735 18.0134Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M45.3735 26.2439C45.3735 24.8802 46.479 23.7747 47.8428 23.7747H65.9504C67.3142 23.7747 68.4197 24.8802 68.4197 26.2439C68.4197 27.6076 67.3142 28.7131 65.9504 28.7131H47.8428C46.479 28.7131 45.3735 27.6076 45.3735 26.2439Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M45.3735 34.4748C45.3735 33.1111 46.479 32.0056 47.8428 32.0056H65.9504C67.3142 32.0056 68.4197 33.1111 68.4197 34.4748C68.4197 35.8386 67.3142 36.9441 65.9504 36.9441H47.8428C46.479 36.9441 45.3735 35.8386 45.3735 34.4748Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 58.4224C12 55.2404 14.5795 52.6609 17.7615 52.6609H45.1288C48.3108 52.6609 50.8904 55.2404 50.8904 58.4224V92.9916C50.8904 96.1736 48.3108 98.7532 45.1288 98.7532H17.7615C14.5795 98.7532 12 96.1736 12 92.9916V58.4224Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M45.1288 54.1013H17.7615C15.375 54.1013 13.4404 56.0359 13.4404 58.4224V92.9916C13.4404 95.3781 15.375 97.3128 17.7615 97.3128H45.1288C47.5153 97.3128 49.45 95.3781 49.45 92.9916V58.4224C49.45 56.0359 47.5153 54.1013 45.1288 54.1013ZM17.7615 52.6609C14.5795 52.6609 12 55.2404 12 58.4224V92.9916C12 96.1736 14.5795 98.7532 17.7615 98.7532H45.1288C48.3108 98.7532 50.8904 96.1736 50.8904 92.9916V58.4224C50.8904 55.2404 48.3108 52.6609 45.1288 52.6609H17.7615Z\",\n fill: \"#B1C3E9\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.2305 68.2993C20.2305 66.9356 21.336 65.8301 22.6997 65.8301H40.8074C42.1711 65.8301 43.2766 66.9356 43.2766 68.2993C43.2766 69.663 42.1711 70.7685 40.8074 70.7685H22.6997C21.336 70.7685 20.2305 69.663 20.2305 68.2993Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.2305 76.5298C20.2305 75.1661 21.336 74.0605 22.6997 74.0605H40.8074C42.1711 74.0605 43.2766 75.1661 43.2766 76.5298C43.2766 77.8935 42.1711 78.999 40.8074 78.999H22.6997C21.336 78.999 20.2305 77.8935 20.2305 76.5298Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.2305 84.7607C20.2305 83.397 21.336 82.2915 22.6997 82.2915H40.8074C42.1711 82.2915 43.2766 83.397 43.2766 84.7607C43.2766 86.1245 42.1711 87.23 40.8074 87.23H22.6997C21.336 87.23 20.2305 86.1245 20.2305 84.7607Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.5,\n d: \"M53.4659 100.228C60.6527 99.0526 65.526 92.2739 64.3508 85.0871C63.1756 77.9003 56.3969 73.027 49.2101 74.2022C42.0233 75.3774 37.15 82.1561 38.3252 89.3429C39.5004 96.5297 46.2791 101.403 53.4659 100.228Z\",\n fill: \"url(#paint0_linear)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56.6883 100.626L59.2301 99.3097L64.5955 109.657L62.0567 110.975L56.6883 100.626Z\",\n fill: \"#0A1551\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.649 74.3221C42.1006 75.6452 40.0015 77.6942 38.6174 80.21C37.2334 82.7257 36.6265 85.5953 36.8732 88.456C37.1199 91.3168 38.2092 94.0401 40.0035 96.2818C41.7978 98.5235 44.2166 100.183 46.9539 101.05C49.6911 101.917 52.6239 101.954 55.3817 101.154C58.1395 100.355 60.5985 98.7553 62.4476 96.5585C64.2966 94.3617 65.4527 91.6659 65.7698 88.8121C66.0869 85.9583 65.5508 83.0746 64.2292 80.5255C62.4551 77.1072 59.396 74.5335 55.7247 73.3701C52.0534 72.2068 48.0705 72.549 44.6515 74.3217L44.649 74.3221ZM56.836 97.7931C54.7413 98.8817 52.371 99.3247 50.0246 99.0659C47.6782 98.807 45.461 97.8581 43.654 96.3391C41.8469 94.8201 40.531 92.7993 39.8726 90.5323C39.2142 88.2653 39.2429 85.854 39.9551 83.6033C40.6673 81.3527 42.0311 79.3638 43.8738 77.8883C45.7165 76.4128 47.9554 75.517 50.3073 75.3141C52.6593 75.1112 55.0186 75.6105 57.0867 76.7486C59.1549 77.8868 60.8391 79.6128 61.9262 81.7083C63.3813 84.516 63.6623 87.7866 62.7078 90.8016C61.7532 93.8165 59.6411 96.3293 56.8352 97.788L56.836 97.7931Z\",\n fill: \"#0A1551\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M67.435 118.328C67.1874 118.457 66.9168 118.536 66.6387 118.56C66.3605 118.585 66.0804 118.554 65.8142 118.469C65.548 118.385 65.301 118.249 65.0875 118.069C64.8739 117.889 64.6982 117.669 64.57 117.421L57.2159 103.261L60.9853 101.301L68.3419 115.461C68.4713 115.708 68.5506 115.979 68.5751 116.257C68.5995 116.536 68.5689 116.816 68.4846 117.083C68.4003 117.349 68.2641 117.597 68.084 117.81C67.9039 118.024 67.6833 118.2 67.435 118.328Z\",\n fill: \"#0A1551\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear\",\n x1: 49.2101,\n y1: 74.2022,\n x2: 53.4659,\n y2: 100.228,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#92B0EC\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#92B0EC\",\n stopOpacity: 0.51\n})), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip0\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 108,\n height: 120,\n fill: \"white\",\n transform: \"translate(0 0.375)\"\n})))));\nexport default SvgNoFormsFoundIcon;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoAppsFoundIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 108 120\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip0)\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 54.5,\n cy: 55.5,\n r: 52.5,\n fill: \"#F3F3FE\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 38.25,\n y: 3.67578,\n width: 37.5,\n height: 37.5,\n rx: 2.75,\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42 11.1758C42 9.10471 43.6789 7.42578 45.75 7.42578H68.25C70.3211 7.42578 72 9.10471 72 11.1758V33.6758C72 35.7468 70.3211 37.4258 68.25 37.4258H45.75C43.6789 37.4258 42 35.7468 42 33.6758V11.1758Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.2489 24.4626C62.9735 24.4626 62.7501 24.6861 62.7501 24.9615V27.892H59.8196C59.5442 27.892 59.3208 28.1154 59.3208 28.3908C59.3208 28.6662 59.5442 28.8896 59.8196 28.8896H62.7501V31.8201C62.7501 32.0955 62.9735 32.3189 63.2489 32.3189C63.5243 32.3189 63.7477 32.0955 63.7477 31.8201V28.8896H66.6782C66.9536 28.8896 67.177 28.6662 67.177 28.3908C67.177 28.1154 66.9536 27.892 66.6782 27.892H63.7477V24.9615C63.7477 24.6861 63.5243 24.4626 63.2489 24.4626Z\",\n fill: \"#97ACDA\",\n stroke: \"#97ACDA\",\n strokeWidth: 0.651698\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M58.3838 11.994C58.3838 11.5421 58.7502 11.1757 59.2021 11.1757H67.3857C67.8377 11.1757 68.2041 11.5421 68.2041 11.994V20.1776C68.2041 20.6296 67.8377 20.9959 67.3857 20.9959H59.2021C58.7502 20.9959 58.3838 20.6296 58.3838 20.1776V11.994Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M45.751 11.994C45.751 11.5421 46.1174 11.1757 46.5693 11.1757H54.7529C55.2049 11.1757 55.5713 11.5421 55.5713 11.994V20.1776C55.5713 20.6296 55.2049 20.9959 54.7529 20.9959H46.5693C46.1174 20.9959 45.751 20.6296 45.751 20.1776V11.994Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M45.751 24.6268C45.751 24.1749 46.1174 23.8085 46.5693 23.8085H54.7529C55.2049 23.8085 55.5713 24.1749 55.5713 24.6268V32.8104C55.5713 33.2624 55.2049 33.6288 54.7529 33.6288H46.5693C46.1174 33.6288 45.751 33.2624 45.751 32.8104V24.6268Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 13.25,\n y: 53.6758,\n width: 37.5,\n height: 37.5,\n rx: 2.75,\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17 61.1758C17 59.1047 18.6789 57.4258 20.75 57.4258H43.25C45.3211 57.4258 47 59.1047 47 61.1758V83.6758C47 85.7468 45.3211 87.4258 43.25 87.4258H20.75C18.6789 87.4258 17 85.7468 17 83.6758V61.1758Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M38.2489 74.4626C37.9735 74.4626 37.7501 74.6861 37.7501 74.9615V77.892H34.8196C34.5442 77.892 34.3208 78.1154 34.3208 78.3908C34.3208 78.6662 34.5442 78.8896 34.8196 78.8896H37.7501V81.8201C37.7501 82.0955 37.9735 82.3189 38.2489 82.3189C38.5243 82.3189 38.7477 82.0955 38.7477 81.8201V78.8896H41.6782C41.9536 78.8896 42.177 78.6662 42.177 78.3908C42.177 78.1154 41.9536 77.892 41.6782 77.892H38.7477V74.9615C38.7477 74.6861 38.5243 74.4626 38.2489 74.4626Z\",\n fill: \"#97ACDA\",\n stroke: \"#97ACDA\",\n strokeWidth: 0.651698\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M33.3838 61.994C33.3838 61.5421 33.7502 61.1757 34.2021 61.1757H42.3857C42.8377 61.1757 43.2041 61.5421 43.2041 61.994V70.1776C43.2041 70.6296 42.8377 70.9959 42.3857 70.9959H34.2021C33.7502 70.9959 33.3838 70.6296 33.3838 70.1776V61.994Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.751 61.994C20.751 61.5421 21.1174 61.1757 21.5693 61.1757H29.7529C30.2049 61.1757 30.5713 61.5421 30.5713 61.994V70.1776C30.5713 70.6296 30.2049 70.9959 29.7529 70.9959H21.5693C21.1174 70.9959 20.751 70.6296 20.751 70.1776V61.994Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.751 74.6267C20.751 74.1747 21.1174 73.8083 21.5693 73.8083H29.7529C30.2049 73.8083 30.5713 74.1747 30.5713 74.6267V82.8103C30.5713 83.2622 30.2049 83.6286 29.7529 83.6286H21.5693C21.1174 83.6286 20.751 83.2622 20.751 82.8103V74.6267Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 62.25,\n y: 53.6758,\n width: 37.5,\n height: 37.5,\n rx: 2.75,\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M66 61.1758C66 59.1047 67.6789 57.4258 69.75 57.4258H92.25C94.3211 57.4258 96 59.1047 96 61.1758V83.6758C96 85.7468 94.3211 87.4258 92.25 87.4258H69.75C67.6789 87.4258 66 85.7468 66 83.6758V61.1758Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M87.2489 74.4626C86.9735 74.4626 86.7501 74.6861 86.7501 74.9615V77.892H83.8196C83.5442 77.892 83.3208 78.1154 83.3208 78.3908C83.3208 78.6662 83.5442 78.8896 83.8196 78.8896H86.7501V81.8201C86.7501 82.0955 86.9735 82.3189 87.2489 82.3189C87.5243 82.3189 87.7477 82.0955 87.7477 81.8201V78.8896H90.6782C90.9536 78.8896 91.177 78.6662 91.177 78.3908C91.177 78.1154 90.9536 77.892 90.6782 77.892H87.7477V74.9615C87.7477 74.6861 87.5243 74.4626 87.2489 74.4626Z\",\n fill: \"#97ACDA\",\n stroke: \"#97ACDA\",\n strokeWidth: 0.651698\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M82.3838 61.994C82.3838 61.5421 82.7502 61.1757 83.2021 61.1757H91.3857C91.8377 61.1757 92.2041 61.5421 92.2041 61.994V70.1776C92.2041 70.6296 91.8377 70.9959 91.3857 70.9959H83.2021C82.7502 70.9959 82.3838 70.6296 82.3838 70.1776V61.994Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.751 61.994C69.751 61.5421 70.1174 61.1757 70.5693 61.1757H78.7529C79.2049 61.1757 79.5713 61.5421 79.5713 61.994V70.1776C79.5713 70.6296 79.2049 70.9959 78.7529 70.9959H70.5693C70.1174 70.9959 69.751 70.6296 69.751 70.1776V61.994Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.751 74.6267C69.751 74.1747 70.1174 73.8083 70.5693 73.8083H78.7529C79.2049 73.8083 79.5713 74.1747 79.5713 74.6267V82.8103C79.5713 83.2622 79.2049 83.6286 78.7529 83.6286H70.5693C70.1174 83.6286 69.751 83.2622 69.751 82.8103V74.6267Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.5,\n d: \"M53.4659 97.2786C60.6527 96.1034 65.526 89.3246 64.3508 82.1379C63.1756 74.9511 56.3969 70.0777 49.2101 71.2529C42.0233 72.4282 37.15 79.2069 38.3252 86.3937C39.5004 93.5805 46.2791 98.4538 53.4659 97.2786Z\",\n fill: \"url(#paint0_linear)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56.6883 97.6764L59.2301 96.3605L64.5955 106.708L62.0567 108.026L56.6883 97.6764Z\",\n fill: \"#0A1551\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.649 71.3729C42.1006 72.6959 40.0015 74.745 38.6174 77.2607C37.2334 79.7765 36.6265 82.6461 36.8732 85.5068C37.1199 88.3675 38.2092 91.0909 40.0035 93.3326C41.7978 95.5743 44.2166 97.2337 46.9539 98.1009C49.6911 98.9682 52.6239 99.0043 55.3817 98.2048C58.1395 97.4053 60.5985 95.8061 62.4476 93.6093C64.2966 91.4125 65.4527 88.7167 65.7698 85.8629C66.0869 83.0091 65.5508 80.1254 64.2292 77.5763C62.4551 74.158 59.396 71.5843 55.7247 70.4209C52.0534 69.2576 48.0705 69.5998 44.6515 71.3725L44.649 71.3729ZM56.836 94.8439C54.7413 95.9325 52.371 96.3755 50.0246 96.1166C47.6782 95.8578 45.461 94.9089 43.654 93.3899C41.8469 91.8709 40.531 89.8501 39.8726 87.5831C39.2142 85.3161 39.2429 82.9048 39.9551 80.6541C40.6673 78.4034 42.0311 76.4146 43.8738 74.9391C45.7165 73.4636 47.9554 72.5677 50.3073 72.3649C52.6593 72.162 55.0186 72.6612 57.0867 73.7994C59.1549 74.9376 60.8391 76.6636 61.9262 78.759C63.3813 81.5668 63.6623 84.8374 62.7078 87.8524C61.7532 90.8673 59.6411 93.3801 56.8352 94.8388L56.836 94.8439Z\",\n fill: \"#0A1551\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M67.435 115.379C67.1874 115.508 66.9168 115.587 66.6387 115.611C66.3605 115.635 66.0804 115.604 65.8142 115.52C65.548 115.436 65.301 115.3 65.0875 115.12C64.8739 114.94 64.6982 114.72 64.57 114.472L57.2159 100.312L60.9853 98.3516L68.3419 112.511C68.4713 112.759 68.5506 113.03 68.5751 113.308C68.5995 113.587 68.5689 113.867 68.4846 114.134C68.4003 114.4 68.2641 114.647 68.084 114.861C67.9039 115.075 67.6833 115.251 67.435 115.379Z\",\n fill: \"#0A1551\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear\",\n x1: 49.2101,\n y1: 71.2529,\n x2: 53.4659,\n y2: 97.2786,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#92B0EC\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#92B0EC\",\n stopOpacity: 0.51\n})), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip0\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 108,\n height: 120,\n fill: \"white\"\n})))));\nexport default SvgNoAppsFoundIcon;","var _circle, _path, _rect, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _rect2, _path11, _rect3, _path12, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _path20, _rect4, _path21, _rect5, _path22, _path23, _path24, _path25, _path26, _path27, _path28, _path29, _path30, _rect6, _path31, _path32, _path33, _path34, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoTablesFoundIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 105 118\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 52.5,\n cy: 52.875,\n r: 52.5,\n fill: \"#F3F3FE\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39.5867 37.8002C37.5562 37.8002 37.0021 37.2532 37.0019 35.2137C36.9993 16.9246 36.9995 22.6352 37.0017 4.34606C37.0019 2.39955 37.587 1.80482 39.5449 1.80438C57.8487 1.79958 52.1526 1.79958 70.4564 1.80438C72.3869 1.80482 72.997 2.42289 72.9974 4.36111C73.0009 22.6503 73.0007 16.9396 72.9979 35.2288C72.9974 37.2453 72.4258 37.7999 70.3892 37.8002C61.2374 37.8012 64.0854 37.8006 54.9336 37.8006C45.818 37.8006 48.7023 37.8012 39.5867 37.8002ZM69.7774 35.2294C70.137 35.2294 70.4286 34.9378 70.4286 34.5781V27.5652C70.4286 27.2055 70.137 26.914 69.7774 26.914H62.7644C62.4047 26.914 62.1132 27.2055 62.1132 27.5652V34.5781C62.1132 34.9378 62.4047 35.2294 62.7644 35.2294H69.7774ZM51.4935 35.2294H58.5065C58.8661 35.2294 59.1577 34.9378 59.1577 34.5781V27.5652C59.1577 27.2055 58.8661 26.914 58.5065 26.914H51.4935C51.1338 26.914 50.8423 27.2055 50.8423 27.5652V34.5781C50.8423 34.9378 51.1338 35.2294 51.4935 35.2294ZM40.2226 35.2294H47.2356C47.5953 35.2294 47.8868 34.9378 47.8868 34.5781V27.5652C47.8868 27.2055 47.5953 26.914 47.2356 26.914H40.2226C39.863 26.914 39.5714 27.2055 39.5714 27.5652V34.5781C39.5714 34.9378 39.863 35.2294 40.2226 35.2294ZM62.7644 23.9585H69.7774C70.137 23.9585 70.4286 23.6669 70.4286 23.3073V16.2943C70.4286 15.9346 70.137 15.6431 69.7774 15.6431H62.7644C62.4047 15.6431 62.1132 15.9346 62.1132 16.2943V23.3073C62.1132 23.6669 62.4047 23.9585 62.7644 23.9585ZM51.4935 23.9585H58.5065C58.8661 23.9585 59.1577 23.6669 59.1577 23.3073V16.2943C59.1577 15.9346 58.8661 15.6431 58.5065 15.6431H51.4935C51.1338 15.6431 50.8423 15.9346 50.8423 16.2943V23.3073C50.8423 23.6669 51.1338 23.9585 51.4935 23.9585ZM40.2226 23.9585H47.2356C47.5953 23.9585 47.8868 23.6669 47.8868 23.3073V16.2943C47.8868 15.9346 47.5953 15.6431 47.2356 15.6431H40.2226C39.863 15.6431 39.5714 15.9346 39.5714 16.2943V23.3073C39.5714 23.6669 39.863 23.9585 40.2226 23.9585ZM51.4935 12.6876H58.5065C58.8661 12.6876 59.1577 12.5115 59.1577 12.2943V8.05883C59.1577 7.84162 58.8661 7.66554 58.5065 7.66554H51.4935C51.1338 7.66554 50.8423 7.84162 50.8423 8.05883V12.2943C50.8423 12.5115 51.1338 12.6876 51.4935 12.6876ZM62.7435 12.6876H69.7565C70.1161 12.6876 70.4077 12.5115 70.4077 12.2943V8.05883C70.4077 7.84162 70.1161 7.66554 69.7565 7.66554H62.7435C62.3839 7.66554 62.0923 7.84162 62.0923 8.05883V12.2943C62.0923 12.5115 62.3839 12.6876 62.7435 12.6876ZM40.2226 12.6876H47.2356C47.5953 12.6876 47.8868 12.5115 47.8868 12.2943V8.05883C47.8868 7.84162 47.5953 7.66554 47.2356 7.66554H40.2226C39.863 7.66554 39.5714 7.84162 39.5714 8.05883V12.2943C39.5714 12.5115 39.863 12.6876 40.2226 12.6876Z\",\n fill: \"white\"\n})), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 39,\n y: 4.80078,\n width: 32,\n height: 31,\n fill: \"white\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M62 7.80078C62 7.2485 62.4477 6.80078 63 6.80078H69.4077C69.96 6.80078 70.4077 7.2485 70.4077 7.80078V11.8008C70.4077 12.3531 69.96 12.8008 69.4077 12.8008H63C62.4477 12.8008 62 12.3531 62 11.8008V7.80078Z\",\n fill: \"#0D953B\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M62 16.8008C62 16.2485 62.4477 15.8008 63 15.8008H69C69.5523 15.8008 70 16.2485 70 16.8008V22.8008C70 23.3531 69.5523 23.8008 69 23.8008H63C62.4477 23.8008 62 23.3531 62 22.8008V16.8008Z\",\n fill: \"#FFB629\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M62 27.8008C62 27.2485 62.4477 26.8008 63 26.8008H69C69.5523 26.8008 70 27.2485 70 27.8008V33.8008C70 34.3531 69.5523 34.8008 69 34.8008H63C62.4477 34.8008 62 34.3531 62 33.8008V27.8008Z\",\n fill: \"#FFB629\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M50.8437 7.80078C50.8437 7.2485 51.2914 6.80078 51.8437 6.80078H58.4085C58.9608 6.80078 59.4085 7.2485 59.4085 7.80078V11.8008C59.4085 12.3531 58.9608 12.8008 58.4085 12.8008H51.8437C51.2914 12.8008 50.8437 12.3531 50.8437 11.8008V7.80078Z\",\n fill: \"#0D953B\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M51 16.8008C51 16.2485 51.4477 15.8008 52 15.8008H58C58.5523 15.8008 59 16.2485 59 16.8008V22.8008C59 23.3531 58.5523 23.8008 58 23.8008H52C51.4477 23.8008 51 23.3531 51 22.8008V16.8008Z\",\n fill: \"#FF6100\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M51 27.8008C51 27.2485 51.4477 26.8008 52 26.8008H58C58.5523 26.8008 59 27.2485 59 27.8008V33.8008C59 34.3531 58.5523 34.8008 58 34.8008H52C51.4477 34.8008 51 34.3531 51 33.8008V27.8008Z\",\n fill: \"#FF6100\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39.5 7.80078C39.5 7.2485 39.9477 6.80078 40.5 6.80078H47C47.5523 6.80078 48 7.2485 48 7.80078V11.8008C48 12.3531 47.5523 12.8008 47 12.8008H40.5C39.9477 12.8008 39.5 12.3531 39.5 11.8008V7.80078Z\",\n fill: \"#0D953B\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39.5 16.8008C39.5 16.2485 39.9477 15.8008 40.5 15.8008H47C47.5523 15.8008 48 16.2485 48 16.8008V22.8008C48 23.3531 47.5523 23.8008 47 23.8008H40.5C39.9477 23.8008 39.5 23.3531 39.5 22.8008V19.8008V16.8008Z\",\n fill: \"#0099FF\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39.5 27.8008C39.5 27.2485 39.9477 26.8008 40.5 26.8008H47C47.5523 26.8008 48 27.2485 48 27.8008V33.8008C48 34.3531 47.5523 34.8008 47 34.8008H40.5C39.9477 34.8008 39.5 34.3531 39.5 33.8008V30.8008V27.8008Z\",\n fill: \"#0099FF\"\n})), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 36.25,\n y: 1.05078,\n width: 37.5,\n height: 37.5,\n rx: 2.75,\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.5867 87.8002C12.5562 87.8002 12.0021 87.2532 12.0019 85.2137C11.9993 66.9246 11.9995 72.6352 12.0017 54.3461C12.0019 52.3995 12.587 51.8048 14.5449 51.8044C32.8487 51.7996 27.1526 51.7996 45.4564 51.8044C47.3869 51.8048 47.997 52.4229 47.9974 54.3611C48.0009 72.6503 48.0007 66.9396 47.9979 85.2288C47.9974 87.2453 47.4258 87.7999 45.3892 87.8002C36.2374 87.8012 39.0854 87.8006 29.9336 87.8006C20.818 87.8006 23.7023 87.8012 14.5867 87.8002ZM44.7774 85.2294C45.137 85.2294 45.4286 84.9378 45.4286 84.5781V77.5652C45.4286 77.2055 45.137 76.914 44.7774 76.914H37.7644C37.4047 76.914 37.1132 77.2055 37.1132 77.5652V84.5781C37.1132 84.9378 37.4047 85.2294 37.7644 85.2294H44.7774ZM26.4935 85.2294H33.5065C33.8661 85.2294 34.1577 84.9378 34.1577 84.5781V77.5652C34.1577 77.2055 33.8661 76.914 33.5065 76.914H26.4935C26.1338 76.914 25.8423 77.2055 25.8423 77.5652V84.5781C25.8423 84.9378 26.1338 85.2294 26.4935 85.2294ZM15.2226 85.2294H22.2356C22.5953 85.2294 22.8868 84.9378 22.8868 84.5781V77.5652C22.8868 77.2055 22.5953 76.914 22.2356 76.914H15.2226C14.863 76.914 14.5714 77.2055 14.5714 77.5652V84.5781C14.5714 84.9378 14.863 85.2294 15.2226 85.2294ZM37.7644 73.9585H44.7774C45.137 73.9585 45.4286 73.6669 45.4286 73.3073V66.2943C45.4286 65.9346 45.137 65.6431 44.7774 65.6431H37.7644C37.4047 65.6431 37.1132 65.9346 37.1132 66.2943V73.3073C37.1132 73.6669 37.4047 73.9585 37.7644 73.9585ZM26.4935 73.9585H33.5065C33.8661 73.9585 34.1577 73.6669 34.1577 73.3073V66.2943C34.1577 65.9346 33.8661 65.6431 33.5065 65.6431H26.4935C26.1338 65.6431 25.8423 65.9346 25.8423 66.2943V73.3073C25.8423 73.6669 26.1338 73.9585 26.4935 73.9585ZM15.2226 73.9585H22.2356C22.5953 73.9585 22.8868 73.6669 22.8868 73.3073V66.2943C22.8868 65.9346 22.5953 65.6431 22.2356 65.6431H15.2226C14.863 65.6431 14.5714 65.9346 14.5714 66.2943V73.3073C14.5714 73.6669 14.863 73.9585 15.2226 73.9585ZM26.4935 62.6876H33.5065C33.8661 62.6876 34.1577 62.5115 34.1577 62.2943V58.0588C34.1577 57.8416 33.8661 57.6655 33.5065 57.6655H26.4935C26.1338 57.6655 25.8423 57.8416 25.8423 58.0588V62.2943C25.8423 62.5115 26.1338 62.6876 26.4935 62.6876ZM37.7435 62.6876H44.7565C45.1161 62.6876 45.4077 62.5115 45.4077 62.2943V58.0588C45.4077 57.8416 45.1161 57.6655 44.7565 57.6655H37.7435C37.3839 57.6655 37.0923 57.8416 37.0923 58.0588V62.2943C37.0923 62.5115 37.3839 62.6876 37.7435 62.6876ZM15.2226 62.6876H22.2356C22.5953 62.6876 22.8868 62.5115 22.8868 62.2943V58.0588C22.8868 57.8416 22.5953 57.6655 22.2356 57.6655H15.2226C14.863 57.6655 14.5714 57.8416 14.5714 58.0588V62.2943C14.5714 62.5115 14.863 62.6876 15.2226 62.6876Z\",\n fill: \"white\"\n})), _rect3 || (_rect3 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 14,\n y: 54.8008,\n width: 32,\n height: 31,\n fill: \"white\"\n})), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37 57.8008C37 57.2485 37.4477 56.8008 38 56.8008H44.4077C44.96 56.8008 45.4077 57.2485 45.4077 57.8008V61.8008C45.4077 62.3531 44.96 62.8008 44.4077 62.8008H38C37.4477 62.8008 37 62.3531 37 61.8008V57.8008Z\",\n fill: \"#0D953B\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37 66.8008C37 66.2485 37.4477 65.8008 38 65.8008H44C44.5523 65.8008 45 66.2485 45 66.8008V72.8008C45 73.3531 44.5523 73.8008 44 73.8008H38C37.4477 73.8008 37 73.3531 37 72.8008V66.8008Z\",\n fill: \"#FFB629\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37 77.8008C37 77.2485 37.4477 76.8008 38 76.8008H44C44.5523 76.8008 45 77.2485 45 77.8008V83.8008C45 84.3531 44.5523 84.8008 44 84.8008H38C37.4477 84.8008 37 84.3531 37 83.8008V77.8008Z\",\n fill: \"#FFB629\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25.8437 57.8008C25.8437 57.2485 26.2914 56.8008 26.8437 56.8008H33.4085C33.9608 56.8008 34.4085 57.2485 34.4085 57.8008V61.8008C34.4085 62.3531 33.9608 62.8008 33.4085 62.8008H26.8437C26.2914 62.8008 25.8437 62.3531 25.8437 61.8008V57.8008Z\",\n fill: \"#0D953B\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26 66.8008C26 66.2485 26.4477 65.8008 27 65.8008H33C33.5523 65.8008 34 66.2485 34 66.8008V72.8008C34 73.3531 33.5523 73.8008 33 73.8008H27C26.4477 73.8008 26 73.3531 26 72.8008V66.8008Z\",\n fill: \"#FF6100\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26 77.8008C26 77.2485 26.4477 76.8008 27 76.8008H33C33.5523 76.8008 34 77.2485 34 77.8008V83.8008C34 84.3531 33.5523 84.8008 33 84.8008H27C26.4477 84.8008 26 84.3531 26 83.8008V77.8008Z\",\n fill: \"#FF6100\"\n})), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.5 57.8008C14.5 57.2485 14.9477 56.8008 15.5 56.8008H22C22.5523 56.8008 23 57.2485 23 57.8008V61.8008C23 62.3531 22.5523 62.8008 22 62.8008H15.5C14.9477 62.8008 14.5 62.3531 14.5 61.8008V57.8008Z\",\n fill: \"#0D953B\"\n})), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.5 66.8008C14.5 66.2485 14.9477 65.8008 15.5 65.8008H22C22.5523 65.8008 23 66.2485 23 66.8008V72.8008C23 73.3531 22.5523 73.8008 22 73.8008H15.5C14.9477 73.8008 14.5 73.3531 14.5 72.8008V69.8008V66.8008Z\",\n fill: \"#0099FF\"\n})), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.5 77.8008C14.5 77.2485 14.9477 76.8008 15.5 76.8008H22C22.5523 76.8008 23 77.2485 23 77.8008V83.8008C23 84.3531 22.5523 84.8008 22 84.8008H15.5C14.9477 84.8008 14.5 84.3531 14.5 83.8008V80.8008V77.8008Z\",\n fill: \"#0099FF\"\n})), _rect4 || (_rect4 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 11.25,\n y: 51.0508,\n width: 37.5,\n height: 37.5,\n rx: 2.75,\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.5867 87.8002C61.5562 87.8002 61.0021 87.2532 61.0019 85.2137C60.9993 66.9246 60.9995 72.6352 61.0017 54.3461C61.0019 52.3995 61.587 51.8048 63.5449 51.8044C81.8487 51.7996 76.1526 51.7996 94.4564 51.8044C96.3869 51.8048 96.997 52.4229 96.9974 54.3611C97.0009 72.6503 97.0007 66.9396 96.9979 85.2288C96.9974 87.2453 96.4258 87.7999 94.3892 87.8002C85.2374 87.8012 88.0854 87.8006 78.9336 87.8006C69.818 87.8006 72.7023 87.8012 63.5867 87.8002ZM93.7774 85.2294C94.137 85.2294 94.4286 84.9378 94.4286 84.5781V77.5652C94.4286 77.2055 94.137 76.914 93.7774 76.914H86.7644C86.4047 76.914 86.1132 77.2055 86.1132 77.5652V84.5781C86.1132 84.9378 86.4047 85.2294 86.7644 85.2294H93.7774ZM75.4935 85.2294H82.5065C82.8661 85.2294 83.1577 84.9378 83.1577 84.5781V77.5652C83.1577 77.2055 82.8661 76.914 82.5065 76.914H75.4935C75.1338 76.914 74.8423 77.2055 74.8423 77.5652V84.5781C74.8423 84.9378 75.1338 85.2294 75.4935 85.2294ZM64.2226 85.2294H71.2356C71.5953 85.2294 71.8868 84.9378 71.8868 84.5781V77.5652C71.8868 77.2055 71.5953 76.914 71.2356 76.914H64.2226C63.863 76.914 63.5714 77.2055 63.5714 77.5652V84.5781C63.5714 84.9378 63.863 85.2294 64.2226 85.2294ZM86.7644 73.9585H93.7774C94.137 73.9585 94.4286 73.6669 94.4286 73.3073V66.2943C94.4286 65.9346 94.137 65.6431 93.7774 65.6431H86.7644C86.4047 65.6431 86.1132 65.9346 86.1132 66.2943V73.3073C86.1132 73.6669 86.4047 73.9585 86.7644 73.9585ZM75.4935 73.9585H82.5065C82.8661 73.9585 83.1577 73.6669 83.1577 73.3073V66.2943C83.1577 65.9346 82.8661 65.6431 82.5065 65.6431H75.4935C75.1338 65.6431 74.8423 65.9346 74.8423 66.2943V73.3073C74.8423 73.6669 75.1338 73.9585 75.4935 73.9585ZM64.2226 73.9585H71.2356C71.5953 73.9585 71.8868 73.6669 71.8868 73.3073V66.2943C71.8868 65.9346 71.5953 65.6431 71.2356 65.6431H64.2226C63.863 65.6431 63.5714 65.9346 63.5714 66.2943V73.3073C63.5714 73.6669 63.863 73.9585 64.2226 73.9585ZM75.4935 62.6876H82.5065C82.8661 62.6876 83.1577 62.5115 83.1577 62.2943V58.0588C83.1577 57.8416 82.8661 57.6655 82.5065 57.6655H75.4935C75.1338 57.6655 74.8423 57.8416 74.8423 58.0588V62.2943C74.8423 62.5115 75.1338 62.6876 75.4935 62.6876ZM86.7435 62.6876H93.7565C94.1161 62.6876 94.4077 62.5115 94.4077 62.2943V58.0588C94.4077 57.8416 94.1161 57.6655 93.7565 57.6655H86.7435C86.3839 57.6655 86.0923 57.8416 86.0923 58.0588V62.2943C86.0923 62.5115 86.3839 62.6876 86.7435 62.6876ZM64.2226 62.6876H71.2356C71.5953 62.6876 71.8868 62.5115 71.8868 62.2943V58.0588C71.8868 57.8416 71.5953 57.6655 71.2356 57.6655H64.2226C63.863 57.6655 63.5714 57.8416 63.5714 58.0588V62.2943C63.5714 62.5115 63.863 62.6876 64.2226 62.6876Z\",\n fill: \"white\"\n})), _rect5 || (_rect5 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 63,\n y: 54.8008,\n width: 32,\n height: 31,\n fill: \"white\"\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M86 57.8008C86 57.2485 86.4477 56.8008 87 56.8008H93.4077C93.96 56.8008 94.4077 57.2485 94.4077 57.8008V61.8008C94.4077 62.3531 93.96 62.8008 93.4077 62.8008H87C86.4477 62.8008 86 62.3531 86 61.8008V57.8008Z\",\n fill: \"#0D953B\"\n})), _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M86 66.8008C86 66.2485 86.4477 65.8008 87 65.8008H93C93.5523 65.8008 94 66.2485 94 66.8008V72.8008C94 73.3531 93.5523 73.8008 93 73.8008H87C86.4477 73.8008 86 73.3531 86 72.8008V66.8008Z\",\n fill: \"#FFB629\"\n})), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M86 77.8008C86 77.2485 86.4477 76.8008 87 76.8008H93C93.5523 76.8008 94 77.2485 94 77.8008V83.8008C94 84.3531 93.5523 84.8008 93 84.8008H87C86.4477 84.8008 86 84.3531 86 83.8008V77.8008Z\",\n fill: \"#FFB629\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M74.8437 57.8008C74.8437 57.2485 75.2914 56.8008 75.8437 56.8008H82.4085C82.9608 56.8008 83.4085 57.2485 83.4085 57.8008V61.8008C83.4085 62.3531 82.9608 62.8008 82.4085 62.8008H75.8437C75.2914 62.8008 74.8437 62.3531 74.8437 61.8008V57.8008Z\",\n fill: \"#0D953B\"\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M75 66.8008C75 66.2485 75.4477 65.8008 76 65.8008H82C82.5523 65.8008 83 66.2485 83 66.8008V72.8008C83 73.3531 82.5523 73.8008 82 73.8008H76C75.4477 73.8008 75 73.3531 75 72.8008V66.8008Z\",\n fill: \"#FF6100\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M75 77.8008C75 77.2485 75.4477 76.8008 76 76.8008H82C82.5523 76.8008 83 77.2485 83 77.8008V83.8008C83 84.3531 82.5523 84.8008 82 84.8008H76C75.4477 84.8008 75 84.3531 75 83.8008V77.8008Z\",\n fill: \"#FF6100\"\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.5 57.8008C63.5 57.2485 63.9477 56.8008 64.5 56.8008H71C71.5523 56.8008 72 57.2485 72 57.8008V61.8008C72 62.3531 71.5523 62.8008 71 62.8008H64.5C63.9477 62.8008 63.5 62.3531 63.5 61.8008V57.8008Z\",\n fill: \"#0D953B\"\n})), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.5 66.8008C63.5 66.2485 63.9477 65.8008 64.5 65.8008H71C71.5523 65.8008 72 66.2485 72 66.8008V72.8008C72 73.3531 71.5523 73.8008 71 73.8008H64.5C63.9477 73.8008 63.5 73.3531 63.5 72.8008V69.8008V66.8008Z\",\n fill: \"#0099FF\"\n})), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.5 77.8008C63.5 77.2485 63.9477 76.8008 64.5 76.8008H71C71.5523 76.8008 72 77.2485 72 77.8008V83.8008C72 84.3531 71.5523 84.8008 71 84.8008H64.5C63.9477 84.8008 63.5 84.3531 63.5 83.8008V80.8008V77.8008Z\",\n fill: \"#0099FF\"\n})), _rect6 || (_rect6 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 60.25,\n y: 51.0508,\n width: 37.5,\n height: 37.5,\n rx: 2.75,\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.5,\n d: \"M51.4659 94.6536C58.6527 93.4784 63.526 86.6996 62.3508 79.5129C61.1756 72.3261 54.3969 67.4527 47.2101 68.6279C40.0233 69.8032 35.15 76.5819 36.3252 83.7687C37.5004 90.9555 44.2791 95.8288 51.4659 94.6536Z\",\n fill: \"url(#paint0_linear_624:11312)\"\n})), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M54.6883 95.0506L57.2301 93.7347L62.5955 104.082L60.0567 105.4L54.6883 95.0506Z\",\n fill: \"#0A1551\"\n})), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42.648 68.7479C40.0996 70.0709 38.0005 72.12 36.6164 74.6357C35.2324 77.1515 34.6255 80.0211 34.8722 82.8818C35.1189 85.7425 36.2082 88.4659 38.0025 90.7076C39.7969 92.9493 42.2156 94.6087 44.9529 95.4759C47.6901 96.3432 50.6229 96.3793 53.3808 95.5798C56.1386 94.7803 58.5976 93.1811 60.4466 90.9843C62.2956 88.7875 63.4517 86.0917 63.7688 83.2379C64.086 80.3841 63.5499 77.5004 62.2282 74.9513C60.4542 71.533 57.395 68.9593 53.7237 67.7959C50.0524 66.6326 46.0695 66.9748 42.6505 68.7475L42.648 68.7479ZM54.835 92.2189C52.7403 93.3075 50.3701 93.7505 48.0236 93.4916C45.6772 93.2328 43.4601 92.2839 41.653 90.7649C39.846 89.2459 38.5301 87.2251 37.8717 84.9581C37.2132 82.6911 37.2419 80.2798 37.9541 78.0291C38.6664 75.7784 40.0301 73.7896 41.8728 72.3141C43.7156 70.8386 45.9544 69.9427 48.3064 69.7399C50.6583 69.537 53.0176 70.0362 55.0858 71.1744C57.1539 72.3126 58.8381 74.0386 59.9252 76.134C61.3804 78.9418 61.6614 82.2124 60.7068 85.2274C59.7523 88.2423 57.6401 90.7551 54.8342 92.2138L54.835 92.2189Z\",\n fill: \"#0A1551\"\n})), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M65.435 112.755C65.1874 112.884 64.9168 112.963 64.6387 112.987C64.3605 113.011 64.0804 112.98 63.8142 112.896C63.548 112.812 63.301 112.676 63.0875 112.496C62.8739 112.316 62.6982 112.096 62.57 111.848L55.2159 97.6875L58.9853 95.7275L66.3419 109.887C66.4713 110.135 66.5506 110.406 66.5751 110.684C66.5995 110.963 66.5689 111.243 66.4846 111.51C66.4003 111.776 66.2641 112.023 66.084 112.237C65.9039 112.451 65.6833 112.627 65.435 112.755Z\",\n fill: \"#0A1551\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear_624:11312\",\n x1: 47.2101,\n y1: 68.6279,\n x2: 51.4659,\n y2: 94.6536,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#92B0EC\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#92B0EC\",\n stopOpacity: 0.51\n})))));\nexport default SvgNoTablesFoundIcon;","var _circle, _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _path12, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoReportsFoundIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 105 119\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 52.5,\n cy: 56.4492,\n r: 52.5,\n fill: \"#F3F3FE\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M35.1426 6.13654C35.1426 2.95453 37.7221 0.375 40.9041 0.375H68.2714C71.4534 0.375 74.0329 2.95453 74.0329 6.13654V40.7057C74.0329 43.8878 71.4534 46.4673 68.2714 46.4673H40.9041C37.7221 46.4673 35.1426 43.8878 35.1426 40.7057V6.13654Z\",\n fill: \"white\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M68.2714 1.81538H40.9041C38.5176 1.81538 36.583 3.75003 36.583 6.13654V40.7057C36.583 43.0923 38.5176 45.0269 40.9041 45.0269H68.2714C70.6579 45.0269 72.5926 43.0923 72.5926 40.7057V6.13654C72.5926 3.75003 70.6579 1.81538 68.2714 1.81538ZM40.9041 0.375C37.7221 0.375 35.1426 2.95453 35.1426 6.13654V40.7057C35.1426 43.8878 37.7221 46.4673 40.9041 46.4673H68.2714C71.4534 46.4673 74.0329 43.8878 74.0329 40.7057V6.13654C74.0329 2.95453 71.4534 0.375 68.2714 0.375H40.9041Z\",\n fill: \"#B1C3E9\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.6875 12.4062C41.6875 11.5433 42.3871 10.8438 43.25 10.8438H46.375C47.2379 10.8438 47.9375 11.5433 47.9375 12.4062V35.8438H41.6875V12.4062Z\",\n fill: \"#0099FF\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M51.2812 19.4375C51.2812 18.5746 51.9808 17.875 52.8438 17.875H55.9688C56.8317 17.875 57.5312 18.5746 57.5312 19.4375V35.8438H51.2812V19.4375Z\",\n fill: \"#FF6100\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M60.875 13.1875C60.875 12.3246 61.5746 11.625 62.4375 11.625H65.5625C66.4254 11.625 67.125 12.3246 67.125 13.1875V35.8438H60.875V13.1875Z\",\n fill: \"#FFB629\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10 56.1365C10 52.9545 12.5795 50.375 15.7615 50.375H43.1288C46.3108 50.375 48.8904 52.9545 48.8904 56.1365V90.7057C48.8904 93.8878 46.3108 96.4673 43.1288 96.4673H15.7615C12.5795 96.4673 10 93.8878 10 90.7057V56.1365Z\",\n fill: \"white\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M43.1288 51.8154H15.7615C13.375 51.8154 11.4404 53.75 11.4404 56.1365V90.7057C11.4404 93.0923 13.375 95.0269 15.7615 95.0269H43.1288C45.5153 95.0269 47.45 93.0923 47.45 90.7057V56.1365C47.45 53.75 45.5153 51.8154 43.1288 51.8154ZM15.7615 50.375C12.5795 50.375 10 52.9545 10 56.1365V90.7057C10 93.8878 12.5795 96.4673 15.7615 96.4673H43.1288C46.3108 96.4673 48.8904 93.8878 48.8904 90.7057V56.1365C48.8904 52.9545 46.3108 50.375 43.1288 50.375H15.7615Z\",\n fill: \"#B1C3E9\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.5449 62.4062C16.5449 61.5433 17.2445 60.8438 18.1074 60.8438H21.2324C22.0954 60.8438 22.7949 61.5433 22.7949 62.4062V85.8438H16.5449V62.4062Z\",\n fill: \"#0099FF\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26.1387 69.4375C26.1387 68.5746 26.8382 67.875 27.7012 67.875H30.8262C31.6891 67.875 32.3887 68.5746 32.3887 69.4375V85.8438H26.1387V69.4375Z\",\n fill: \"#FF6100\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M35.7324 63.1875C35.7324 62.3246 36.432 61.625 37.2949 61.625H40.4199C41.2829 61.625 41.9824 62.3246 41.9824 63.1875V85.8438H35.7324V63.1875Z\",\n fill: \"#FFB629\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M59 56.1365C59 52.9545 61.5795 50.375 64.7615 50.375H92.1288C95.3108 50.375 97.8904 52.9545 97.8904 56.1365V90.7057C97.8904 93.8878 95.3108 96.4673 92.1288 96.4673H64.7615C61.5795 96.4673 59 93.8878 59 90.7057V56.1365Z\",\n fill: \"white\"\n})), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M92.1288 51.8154H64.7615C62.375 51.8154 60.4404 53.75 60.4404 56.1365V90.7057C60.4404 93.0923 62.375 95.0269 64.7615 95.0269H92.1288C94.5153 95.0269 96.45 93.0923 96.45 90.7057V56.1365C96.45 53.75 94.5153 51.8154 92.1288 51.8154ZM64.7615 50.375C61.5795 50.375 59 52.9545 59 56.1365V90.7057C59 93.8878 61.5795 96.4673 64.7615 96.4673H92.1288C95.3108 96.4673 97.8904 93.8878 97.8904 90.7057V56.1365C97.8904 52.9545 95.3108 50.375 92.1288 50.375H64.7615Z\",\n fill: \"#B1C3E9\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M65.5449 62.4062C65.5449 61.5433 66.2445 60.8438 67.1074 60.8438H70.2324C71.0954 60.8438 71.7949 61.5433 71.7949 62.4062V85.8438H65.5449V62.4062Z\",\n fill: \"#0099FF\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M75.1387 69.4375C75.1387 68.5746 75.8382 67.875 76.7012 67.875H79.8262C80.6891 67.875 81.3887 68.5746 81.3887 69.4375V85.8438H75.1387V69.4375Z\",\n fill: \"#FF6100\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M84.7324 63.1875C84.7324 62.3246 85.432 61.625 86.2949 61.625H89.4199C90.2829 61.625 90.9824 62.3246 90.9824 63.1875V85.8438H84.7324V63.1875Z\",\n fill: \"#FFB629\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.5,\n d: \"M51.4659 98.2278C58.6527 97.0526 63.526 90.2739 62.3508 83.0871C61.1756 75.9003 54.3969 71.027 47.2101 72.2022C40.0233 73.3774 35.15 80.1561 36.3252 87.3429C37.5004 94.5297 44.2791 99.403 51.4659 98.2278Z\",\n fill: \"url(#paint0_linear_624:15640)\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M54.6883 98.6248L57.2301 97.309L62.5955 107.656L60.0567 108.974L54.6883 98.6248Z\",\n fill: \"#0A1551\"\n})), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42.648 72.3221C40.0996 73.6452 38.0005 75.6942 36.6164 78.21C35.2324 80.7257 34.6255 83.5953 34.8722 86.456C35.1189 89.3168 36.2082 92.0401 38.0025 94.2818C39.7969 96.5235 42.2156 98.183 44.9529 99.0502C47.6901 99.9174 50.6229 99.9535 53.3808 99.154C56.1386 98.3545 58.5976 96.7553 60.4466 94.5585C62.2956 92.3617 63.4517 89.6659 63.7688 86.8121C64.086 83.9583 63.5499 81.0746 62.2282 78.5255C60.4542 75.1072 57.395 72.5335 53.7237 71.3701C50.0524 70.2068 46.0695 70.549 42.6505 72.3217L42.648 72.3221ZM54.835 95.7931C52.7403 96.8817 50.3701 97.3247 48.0236 97.0659C45.6772 96.807 43.4601 95.8581 41.653 94.3391C39.846 92.8201 38.5301 90.7993 37.8717 88.5323C37.2132 86.2653 37.2419 83.854 37.9541 81.6033C38.6664 79.3527 40.0301 77.3638 41.8728 75.8883C43.7156 74.4128 45.9544 73.517 48.3064 73.3141C50.6583 73.1112 53.0176 73.6105 55.0858 74.7486C57.1539 75.8868 58.8381 77.6128 59.9252 79.7083C61.3804 82.516 61.6614 85.7866 60.7068 88.8016C59.7523 91.8165 57.6401 94.3293 54.8342 95.788L54.835 95.7931Z\",\n fill: \"#0A1551\"\n})), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M65.435 116.329C65.1874 116.458 64.9168 116.537 64.6387 116.561C64.3605 116.586 64.0804 116.555 63.8142 116.47C63.548 116.386 63.301 116.25 63.0875 116.07C62.8739 115.89 62.6982 115.67 62.57 115.422L55.2159 101.262L58.9853 99.3018L66.3419 113.462C66.4713 113.709 66.5506 113.98 66.5751 114.258C66.5995 114.537 66.5689 114.817 66.4846 115.084C66.4003 115.35 66.2641 115.598 66.084 115.811C65.9039 116.025 65.6833 116.201 65.435 116.329Z\",\n fill: \"#0A1551\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear_624:15640\",\n x1: 47.2101,\n y1: 72.2022,\n x2: 51.4659,\n y2: 98.2278,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#92B0EC\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#92B0EC\",\n stopOpacity: 0.51\n})))));\nexport default SvgNoReportsFoundIcon;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoApprovalsFoundIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 108 120\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip0_2531_6757)\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 54.5,\n cy: 58.0742,\n r: 52.5,\n fill: \"#F3F3FE\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M61.1098 58.0474C61.1098 54.8654 63.6893 52.2859 66.8713 52.2859H94.2386C97.4206 52.2859 100 54.8654 100 58.0474V92.6166C100 95.7986 97.4206 98.3782 94.2386 98.3782H66.8713C63.6893 98.3782 61.1098 95.7986 61.1098 92.6166V58.0474Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M94.2386 53.7263H66.8713C64.4848 53.7263 62.5502 55.6609 62.5502 58.0474V92.6166C62.5502 95.0031 64.4848 96.9378 66.8713 96.9378H94.2386C96.6251 96.9378 98.5598 95.0031 98.5598 92.6166V58.0474C98.5598 55.6609 96.6251 53.7263 94.2386 53.7263ZM66.8713 52.2859C63.6893 52.2859 61.1098 54.8654 61.1098 58.0474V92.6166C61.1098 95.7986 63.6893 98.3782 66.8713 98.3782H94.2386C97.4206 98.3782 100 95.7986 100 92.6166V58.0474C100 54.8654 97.4206 52.2859 94.2386 52.2859H66.8713Z\",\n fill: \"#B1C3E9\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M80.505 65.802V69.573M80.505 69.573H72.7126C72.0498 69.573 71.5126 70.1102 71.5126 70.773V71.7485M80.505 69.573H88.0073C88.67 69.573 89.2073 70.1102 89.2073 70.773V71.7485\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M80.505 83.8884L80.505 79.581M80.505 79.581L72.7126 79.581C72.0498 79.581 71.5126 79.0437 71.5126 78.381L71.5126 77.4054M80.505 79.581L88.0073 79.581C88.67 79.581 89.2073 79.0437 89.2073 78.381L89.2073 77.4054\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M66.0005 74.5047C66.0005 72.9026 67.2992 71.6039 68.9012 71.6039H74.7028C76.3048 71.6039 77.6035 72.9026 77.6035 74.5047C77.6035 76.1067 76.3048 77.4054 74.7028 77.4054H68.9012C67.2992 77.4054 66.0005 76.1067 66.0005 74.5047Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M83.3989 74.5047C83.3989 72.9026 84.6976 71.6039 86.2997 71.6039H92.1012C93.7033 71.6039 95.002 72.9026 95.002 74.5047C95.002 76.1067 93.7033 77.4054 92.1012 77.4054H86.2997C84.6976 77.4054 83.3989 76.1067 83.3989 74.5047Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M74.6997 86.7891C74.6997 85.1871 75.9984 83.8883 77.6005 83.8883H83.4021C85.0041 83.8883 86.3028 85.1871 86.3028 86.7891C86.3028 88.3911 85.0041 89.6898 83.4021 89.6898H77.6005C75.9984 89.6898 74.6997 88.3911 74.6997 86.7891Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 74.6997,\n y: 60,\n width: 11.6031,\n height: 5.80154,\n rx: 2.90077,\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37.0004 7.76154C37.0004 4.57953 39.5799 2 42.7619 2H70.1292C73.3112 2 75.8907 4.57953 75.8907 7.76154V42.3307C75.8907 45.5128 73.3112 48.0923 70.1292 48.0923H42.7619C39.5799 48.0923 37.0004 45.5128 37.0004 42.3307V7.76154Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M70.2698 3.44038H42.9025C40.516 3.44038 38.5814 5.37503 38.5814 7.76154V42.3307C38.5814 44.7173 40.516 46.6519 42.9025 46.6519H70.2698C72.6563 46.6519 74.591 44.7173 74.591 42.3307V7.76154C74.591 5.37503 72.6563 3.44038 70.2698 3.44038ZM42.9025 2C39.7205 2 37.141 4.57953 37.141 7.76154V42.3307C37.141 45.5128 39.7205 48.0923 42.9025 48.0923H70.2698C73.4518 48.0923 76.0314 45.5128 76.0314 42.3307V7.76154C76.0314 4.57953 73.4518 2 70.2698 2H42.9025Z\",\n fill: \"#B1C3E9\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56.5047 15.802V19.573M56.5047 19.573H48.7123C48.0496 19.573 47.5123 20.1102 47.5123 20.773V21.7485M56.5047 19.573H64.007C64.6698 19.573 65.207 20.1102 65.207 20.773V21.7485\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56.5047 33.8883L56.5047 29.581M56.5047 29.581L48.7123 29.581C48.0496 29.581 47.5123 29.0437 47.5123 28.381L47.5123 27.4054M56.5047 29.581L64.007 29.581C64.6698 29.581 65.207 29.0437 65.207 28.381L65.207 27.4054\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42.0002 24.5047C42.0002 22.9026 43.2989 21.6039 44.9009 21.6039H50.7025C52.3046 21.6039 53.6033 22.9026 53.6033 24.5047C53.6033 26.1067 52.3046 27.4054 50.7025 27.4054H44.9009C43.2989 27.4054 42.0002 26.1067 42.0002 24.5047Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M59.3986 24.5047C59.3986 22.9026 60.6973 21.6039 62.2994 21.6039H68.101C69.703 21.6039 71.0017 22.9026 71.0017 24.5047C71.0017 26.1067 69.703 27.4054 68.101 27.4054H62.2994C60.6973 27.4054 59.3986 26.1067 59.3986 24.5047Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M50.6994 36.7891C50.6994 35.187 51.9981 33.8883 53.6002 33.8883H59.4018C61.0038 33.8883 62.3025 35.187 62.3025 36.7891C62.3025 38.3911 61.0038 39.6898 59.4018 39.6898H53.6002C51.9981 39.6898 50.6994 38.3911 50.6994 36.7891Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 50.6994,\n y: 9.99999,\n width: 11.6031,\n height: 5.80154,\n rx: 2.90077,\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 58.0474C12 54.8654 14.5795 52.2859 17.7615 52.2859H45.1288C48.3108 52.2859 50.8904 54.8654 50.8904 58.0474V92.6166C50.8904 95.7986 48.3108 98.3782 45.1288 98.3782H17.7615C14.5795 98.3782 12 95.7986 12 92.6166V58.0474Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M45.1288 53.7263H17.7615C15.375 53.7263 13.4404 55.6609 13.4404 58.0474V92.6166C13.4404 95.0031 15.375 96.9378 17.7615 96.9378H45.1288C47.5153 96.9378 49.45 95.0031 49.45 92.6166V58.0474C49.45 55.6609 47.5153 53.7263 45.1288 53.7263ZM17.7615 52.2859C14.5795 52.2859 12 54.8654 12 58.0474V92.6166C12 95.7986 14.5795 98.3782 17.7615 98.3782H45.1288C48.3108 98.3782 50.8904 95.7986 50.8904 92.6166V58.0474C50.8904 54.8654 48.3108 52.2859 45.1288 52.2859H17.7615Z\",\n fill: \"#B1C3E9\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31.505 65.802V69.573M31.505 69.573H23.7126C23.0498 69.573 22.5126 70.1102 22.5126 70.773V71.7485M31.505 69.573H39.0073C39.67 69.573 40.2073 70.1102 40.2073 70.773V71.7485\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31.505 83.8884L31.505 79.581M31.505 79.581L23.7126 79.581C23.0498 79.581 22.5126 79.0437 22.5126 78.381L22.5126 77.4054M31.505 79.581L39.0073 79.581C39.67 79.581 40.2073 79.0437 40.2073 78.381L40.2073 77.4054\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.0005 74.5047C17.0005 72.9026 18.2992 71.6039 19.9012 71.6039H25.7028C27.3048 71.6039 28.6035 72.9026 28.6035 74.5047C28.6035 76.1067 27.3048 77.4054 25.7028 77.4054H19.9012C18.2992 77.4054 17.0005 76.1067 17.0005 74.5047Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M34.3989 74.5047C34.3989 72.9026 35.6976 71.6039 37.2997 71.6039H43.1012C44.7033 71.6039 46.002 72.9026 46.002 74.5047C46.002 76.1067 44.7033 77.4054 43.1012 77.4054H37.2997C35.6976 77.4054 34.3989 76.1067 34.3989 74.5047Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25.6997 86.7891C25.6997 85.1871 26.9984 83.8883 28.6005 83.8883H34.4021C36.0041 83.8883 37.3028 85.1871 37.3028 86.7891C37.3028 88.3911 36.0041 89.6898 34.4021 89.6898H28.6005C26.9984 89.6898 25.6997 88.3911 25.6997 86.7891Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 25.6997,\n y: 60,\n width: 11.6031,\n height: 5.80154,\n rx: 2.90077,\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.5,\n d: \"M53.463 99.8529C60.6498 98.6777 65.5231 91.899 64.3479 84.7122C63.1727 77.5254 56.3939 72.6521 49.2072 73.8273C42.0204 75.0025 37.147 81.7812 38.3222 88.968C39.4975 96.1548 46.2762 101.028 53.463 99.8529Z\",\n fill: \"url(#paint0_linear_2531_6757)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56.6854 100.25L59.2272 98.9346L64.5926 109.282L62.0538 110.6L56.6854 100.25Z\",\n fill: \"#0A1551\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.646 73.9471C42.0976 75.2702 39.9985 77.3192 38.6145 79.835C37.2304 82.3507 36.6236 85.2203 36.8703 88.081C37.117 90.9418 38.2063 93.6651 40.0006 95.9068C41.7949 98.1485 44.2136 99.808 46.9509 100.675C49.6882 101.542 52.621 101.579 55.3788 100.779C58.1366 99.9795 60.5956 98.3803 62.4446 96.1835C64.2936 93.9867 65.4498 91.2909 65.7669 88.4371C66.084 85.5833 65.5479 82.6996 64.2263 80.1505C62.4522 76.7322 59.3931 74.1585 55.7218 72.9951C52.0505 71.8318 48.0676 72.174 44.6486 73.9467L44.646 73.9471ZM56.8331 97.4181C54.7384 98.5067 52.3681 98.9497 50.0217 98.6909C47.6752 98.432 45.4581 97.4831 43.6511 95.9641C41.844 94.4451 40.5281 92.4243 39.8697 90.1573C39.2113 87.8903 39.24 85.479 39.9522 83.2283C40.6644 80.9777 42.0282 78.9888 43.8709 77.5133C45.7136 76.0378 47.9525 75.142 50.3044 74.9391C52.6563 74.7362 55.0156 75.2355 57.0838 76.3736C59.152 77.5118 60.8362 79.2378 61.9233 81.3333C63.3784 84.141 63.6594 87.4116 62.7049 90.4266C61.7503 93.4415 59.6382 95.9543 56.8322 97.413L56.8331 97.4181Z\",\n fill: \"#0A1551\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M67.432 117.953C67.1844 118.082 66.9139 118.161 66.6357 118.185C66.3576 118.21 66.0775 118.179 65.8113 118.094C65.5451 118.01 65.298 117.874 65.0845 117.694C64.871 117.514 64.6952 117.294 64.5671 117.046L57.213 102.886L60.9824 100.926L68.339 115.086C68.4684 115.333 68.5477 115.604 68.5721 115.882C68.5966 116.161 68.566 116.441 68.4817 116.708C68.3974 116.974 68.2612 117.222 68.0811 117.435C67.901 117.649 67.6804 117.825 67.432 117.953Z\",\n fill: \"#0A1551\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear_2531_6757\",\n x1: 49.2072,\n y1: 73.8273,\n x2: 53.463,\n y2: 99.8529,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#92B0EC\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#92B0EC\",\n stopOpacity: 0.51\n})), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip0_2531_6757\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 108,\n height: 120,\n fill: \"white\"\n})))));\nexport default SvgNoApprovalsFoundIcon;","var _circle, _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _path12, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _path20, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoSignDocumentsFoundIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 104 120\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 52,\n cy: 63,\n r: 52,\n fill: \"#F3F3FE\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M32.5 46.334V11.666a6.5 6.5 0 0 1 6.5-6.5h21.218c.287 0 .563.114.766.317l5.1 5.1 5.099 5.099c.203.203.317.479.317.766v29.884a6.5 6.5 0 0 1-6.5 6.5H39a6.5 6.5 0 0 1-6.5-6.5Z\",\n fill: \"#fff\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M40.083 24.97a2.47 2.47 0 0 1 2.47-2.47h18.894a2.47 2.47 0 0 1 0 4.94H42.553a2.47 2.47 0 0 1-2.47-2.47Z\",\n fill: \"#09F\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M40.083 33.463a2.47 2.47 0 0 1 2.47-2.47h18.894a2.47 2.47 0 1 1 0 4.94H42.553a2.47 2.47 0 0 1-2.47-2.47Z\",\n fill: \"#FF6100\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M46.165 42.22c0-.16-.062-.127-.153-.125-.12.002-2.394 1.416-2.394 1.416s-.994.428-1.262.645c-1.554 1.5-2.075.216-2.167 0-.308-.731.103-1.393.613-1.937.265-.213 1.553-1.313 2.939-1.974.712-.34 1.325-.707 2.152-.726.325-.033 1.273-.128 1.88.303.449.32.491 1.492.582 1.705.169.394.297.484.297 1.243 0 .371-.696 1.592-.878 2.458.089-.05.74-.264 1.132-.392.567-.185.895-.155 1.467-.426l.446-.211c2.266-1.075 5.62-2.21 6.602-2.497.288-.084 1.54-.23 2.268.287.674.478 1.019 1.854 1.019 1.854s.064.313.919 0v1.98c-.472-.142-.832-.161-1.112-.367-.61-.641-.971-1.6-1.258-1.517-1.932.567-2.818 1.3-7.153 2.795-.864.298-1.49.778-2.165.888-.946.156-1.66.313-2.413.238-.534-.053-.749-.189-1.084-.517-.452-.44-.368-.915-.549-1.52-.192-.641-.418-1.007-.395-1.667.019-.553.395-1.386.395-1.386s.272-.392.272-.55Z\",\n fill: \"#FFB629\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M32.5 11.667a6.5 6.5 0 0 1 6.5-6.5h22.75c.287 0 .563.114.766.317l8.667 8.667c.203.203.317.479.317.766v31.416a6.5 6.5 0 0 1-6.5 6.5H39a6.5 6.5 0 0 1-6.5-6.5V11.668ZM39 7.333a4.333 4.333 0 0 0-4.333 4.334v34.666A4.333 4.333 0 0 0 39 50.668h26a4.333 4.333 0 0 0 4.333-4.334V16h-5.416a3.25 3.25 0 0 1-3.25-3.25V7.333H39Z\",\n fill: \"#C8CEED\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M75.504 30.215a1.809 1.809 0 0 0-2.559 0l-4.631 4.631-5.911 5.911-.972 3.887a.905.905 0 0 0 1.097 1.097l3.887-.972 5.91-5.91 4.632-4.633a1.81 1.81 0 0 0 0-2.558l-1.453-1.453Z\",\n fill: \"#0A1551\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.5 98.334V63.666a6.5 6.5 0 0 1 6.5-6.5h21.218c.287 0 .563.114.766.317l5.1 5.1 5.099 5.099c.203.203.317.479.317.766v29.885a6.5 6.5 0 0 1-6.5 6.499H13a6.5 6.5 0 0 1-6.5-6.5Z\",\n fill: \"#fff\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.083 76.97a2.47 2.47 0 0 1 2.47-2.47h18.894a2.47 2.47 0 0 1 0 4.94H16.553a2.47 2.47 0 0 1-2.47-2.47Z\",\n fill: \"#09F\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.083 85.463a2.47 2.47 0 0 1 2.47-2.47h18.894a2.47 2.47 0 1 1 0 4.94H16.553a2.47 2.47 0 0 1-2.47-2.47Z\",\n fill: \"#FF6100\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.165 94.22c0-.16-.062-.127-.153-.125-.12.002-2.394 1.416-2.394 1.416s-.994.428-1.262.645c-1.554 1.5-2.075.216-2.167 0-.308-.731.103-1.393.613-1.937.265-.213 1.553-1.313 2.939-1.974.712-.34 1.325-.707 2.152-.726.325-.033 1.273-.128 1.88.303.449.32.491 1.492.582 1.705.168.394.297.484.297 1.243 0 .371-.696 1.592-.878 2.458.089-.05.74-.264 1.132-.392.567-.185.895-.155 1.467-.426l.446-.211c2.266-1.075 5.62-2.21 6.602-2.497.288-.084 1.54-.23 2.268.287.674.478 1.019 1.854 1.019 1.854s.064.313.919 0v1.98c-.472-.142-.832-.161-1.112-.367-.61-.641-.971-1.6-1.258-1.517-1.932.567-2.818 1.3-7.153 2.795-.864.298-1.49.778-2.165.888-.946.156-1.66.313-2.413.238-.534-.053-.749-.189-1.084-.517-.451-.44-.368-.915-.549-1.52-.192-.641-.418-1.007-.395-1.667.018-.553.395-1.386.395-1.386s.272-.392.272-.55Z\",\n fill: \"#FFB629\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M6.5 63.667a6.5 6.5 0 0 1 6.5-6.5h22.75c.287 0 .563.114.766.317l8.667 8.667c.203.203.317.478.317.766v31.416a6.5 6.5 0 0 1-6.5 6.5H13a6.5 6.5 0 0 1-6.5-6.5V63.668Zm6.5-4.334a4.333 4.333 0 0 0-4.333 4.334v34.666A4.333 4.333 0 0 0 13 102.668h26a4.333 4.333 0 0 0 4.333-4.334V68h-5.416a3.25 3.25 0 0 1-3.25-3.25v-5.416H13Z\",\n fill: \"#C8CEED\"\n})), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M49.504 82.215a1.809 1.809 0 0 0-2.559 0l-4.632 4.631-5.91 5.911-.972 3.887a.905.905 0 0 0 1.097 1.097l3.886-.972 5.911-5.91 4.632-4.632a1.81 1.81 0 0 0 0-2.559l-1.453-1.454Z\",\n fill: \"#0A1551\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M58.5 98.334V63.666a6.5 6.5 0 0 1 6.5-6.5h21.218c.287 0 .563.114.766.317l5.1 5.1 5.099 5.099c.203.203.317.479.317.766v29.885a6.5 6.5 0 0 1-6.5 6.499H65a6.5 6.5 0 0 1-6.5-6.5Z\",\n fill: \"#fff\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M66.083 76.97a2.47 2.47 0 0 1 2.47-2.47h18.894a2.47 2.47 0 0 1 0 4.94H68.553a2.47 2.47 0 0 1-2.47-2.47Z\",\n fill: \"#09F\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M66.083 85.463a2.47 2.47 0 0 1 2.47-2.47h18.894a2.47 2.47 0 1 1 0 4.94H68.553a2.47 2.47 0 0 1-2.47-2.47Z\",\n fill: \"#FF6100\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M72.165 94.22c0-.16-.062-.127-.153-.125-.12.002-2.394 1.416-2.394 1.416s-.994.428-1.262.645c-1.554 1.5-2.075.216-2.167 0-.308-.731.103-1.393.613-1.937.265-.213 1.553-1.313 2.939-1.974.712-.34 1.325-.707 2.152-.726.325-.033 1.273-.128 1.88.303.449.32.491 1.492.582 1.705.168.394.297.484.297 1.243 0 .371-.696 1.592-.878 2.458.089-.05.74-.264 1.132-.392.567-.185.895-.155 1.467-.426l.446-.211c2.266-1.075 5.62-2.21 6.602-2.497.288-.084 1.54-.23 2.268.287.674.478 1.019 1.854 1.019 1.854s.064.313.919 0v1.98c-.472-.142-.832-.161-1.112-.367-.61-.641-.972-1.6-1.258-1.517-1.932.567-2.818 1.3-7.153 2.795-.864.298-1.49.778-2.165.888-.946.156-1.66.313-2.413.238-.534-.053-.749-.189-1.084-.517-.451-.44-.368-.915-.549-1.52-.192-.641-.418-1.007-.395-1.667.018-.553.395-1.386.395-1.386s.272-.392.272-.55Z\",\n fill: \"#FFB629\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M58.5 63.667a6.5 6.5 0 0 1 6.5-6.5h22.75c.287 0 .563.114.766.317l8.667 8.667c.203.203.317.478.317.766v31.416a6.5 6.5 0 0 1-6.5 6.5H65a6.5 6.5 0 0 1-6.5-6.5V63.668Zm6.5-4.334a4.333 4.333 0 0 0-4.333 4.334v34.666A4.333 4.333 0 0 0 65 102.668h26a4.333 4.333 0 0 0 4.333-4.334V68h-5.416a3.25 3.25 0 0 1-3.25-3.25v-5.416H65Z\",\n fill: \"#C8CEED\"\n})), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M101.504 82.215a1.81 1.81 0 0 0-2.559 0l-4.631 4.631-5.911 5.911-.972 3.887a.905.905 0 0 0 1.097 1.097l3.886-.972 5.911-5.91 4.632-4.632a1.808 1.808 0 0 0 0-2.559l-1.453-1.454Z\",\n fill: \"#0A1551\"\n})), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.5,\n d: \"M44.518 99.71c7.283 0 13.186-5.904 13.186-13.186 0-7.283-5.903-13.186-13.186-13.186-7.282 0-13.185 5.903-13.185 13.186 0 7.282 5.903 13.185 13.185 13.185Z\",\n fill: \"url(#a)\"\n})), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M37.83 73.63a14.52 14.52 0 0 0 12.074 26.372l1.153 2.224-.66.343 7.354 14.16a2.114 2.114 0 0 0 2.068 1.14c.278-.024.549-.103.796-.232a2.115 2.115 0 0 0 1.05-1.246 2.12 2.12 0 0 0-.143-1.622l-7.356-14.16-.57.296-1.152-2.222a14.518 14.518 0 0 0-3.539-26.004 14.524 14.524 0 0 0-11.073.951h-.002Zm12.187 23.472a11.933 11.933 0 0 1-12.963-19.905 11.933 11.933 0 0 1 18.053 3.82 11.934 11.934 0 0 1-5.091 16.08v.005Z\",\n fill: \"#0A1551\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"a\",\n x1: 44.518,\n y1: 73.338,\n x2: 44.518,\n y2: 99.709,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#92B0EC\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#92B0EC\",\n stopOpacity: 0.51\n})))));\nexport default SvgNoSignDocumentsFoundIcon;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoBoardsFoundIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 108 121\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip0_754_127867)\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 54.5,\n cy: 56,\n r: 52.5,\n fill: \"#F3F3FE\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 36.25,\n y: 4.17578,\n width: 37.5,\n height: 37.5,\n rx: 2.75,\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56.5 19.1799C56.5 18.7657 56.8358 18.4299 57.25 18.4299H66.25C66.6642 18.4299 67 18.7657 67 19.1799V33.4299C67 34.2584 66.3284 34.9299 65.5 34.9299H58C57.1716 34.9299 56.5 34.2584 56.5 33.4299V19.1799Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M43 19.1799C43 18.7657 43.3358 18.4299 43.75 18.4299H52.75C53.1642 18.4299 53.5 18.7657 53.5 19.1799V27.4299C53.5 28.2584 52.8284 28.9299 52 28.9299H44.5C43.6716 28.9299 43 28.2584 43 27.4299V19.1799Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M43 12.4299C43 11.6015 43.6716 10.9299 44.5 10.9299H52C52.8284 10.9299 53.5 11.6015 53.5 12.4299V14.6799C53.5 15.0941 53.1642 15.4299 52.75 15.4299H43.75C43.3358 15.4299 43 15.0941 43 14.6799V12.4299Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56.5 12.4299C56.5 11.6015 57.1716 10.9299 58 10.9299H65.5C66.3284 10.9299 67 11.6015 67 12.4299V14.6799C67 15.0941 66.6642 15.4299 66.25 15.4299H57.25C56.8358 15.4299 56.5 15.0941 56.5 14.6799V12.4299Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 11.25,\n y: 54.1799,\n width: 37.5,\n height: 37.5,\n rx: 2.75,\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31.5 69.1841C31.5 68.7699 31.8358 68.4341 32.25 68.4341H41.25C41.6642 68.4341 42 68.7699 42 69.1841V83.4341C42 84.2625 41.3284 84.9341 40.5 84.9341H33C32.1716 84.9341 31.5 84.2625 31.5 83.4341V69.1841Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18 69.1841C18 68.7699 18.3358 68.4341 18.75 68.4341H27.75C28.1642 68.4341 28.5 68.7699 28.5 69.1841V77.4341C28.5 78.2625 27.8284 78.9341 27 78.9341H19.5C18.6716 78.9341 18 78.2625 18 77.4341V69.1841Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18 62.4341C18 61.6057 18.6716 60.9341 19.5 60.9341H27C27.8284 60.9341 28.5 61.6057 28.5 62.4341V64.6841C28.5 65.0983 28.1642 65.4341 27.75 65.4341H18.75C18.3358 65.4341 18 65.0983 18 64.6841V62.4341Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31.5 62.4341C31.5 61.6057 32.1716 60.9341 33 60.9341H40.5C41.3284 60.9341 42 61.6057 42 62.4341V64.6841C42 65.0983 41.6642 65.4341 41.25 65.4341H32.25C31.8358 65.4341 31.5 65.0983 31.5 64.6841V62.4341Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 60.25,\n y: 54.1799,\n width: 37.5,\n height: 37.5,\n rx: 2.75,\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M80.5 69.1841C80.5 68.7699 80.8358 68.4341 81.25 68.4341H90.25C90.6642 68.4341 91 68.7699 91 69.1841V83.4341C91 84.2625 90.3284 84.9341 89.5 84.9341H82C81.1716 84.9341 80.5 84.2625 80.5 83.4341V69.1841Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M67 69.1841C67 68.7699 67.3358 68.4341 67.75 68.4341H76.75C77.1642 68.4341 77.5 68.7699 77.5 69.1841V77.4341C77.5 78.2625 76.8284 78.9341 76 78.9341H68.5C67.6716 78.9341 67 78.2625 67 77.4341V69.1841Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M67 62.4341C67 61.6057 67.6716 60.9341 68.5 60.9341H76C76.8284 60.9341 77.5 61.6057 77.5 62.4341V64.6841C77.5 65.0983 77.1642 65.4341 76.75 65.4341H67.75C67.3358 65.4341 67 65.0983 67 64.6841V62.4341Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M80.5 62.4341C80.5 61.6057 81.1716 60.9341 82 60.9341H89.5C90.3284 60.9341 91 61.6057 91 62.4341V64.6841C91 65.0983 90.6642 65.4341 90.25 65.4341H81.25C80.8358 65.4341 80.5 65.0983 80.5 64.6841V62.4341Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.5,\n d: \"M53.4633 100.352C60.6501 99.1766 65.5235 92.3979 64.3482 85.2111C63.173 78.0243 56.3943 73.151 49.2075 74.3262C42.0207 75.5014 37.1474 82.2801 38.3226 89.4669C39.4978 96.6537 46.2766 101.527 53.4633 100.352Z\",\n fill: \"url(#paint0_linear_754_127867)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56.6857 100.75L59.2276 99.4337L64.593 109.781L62.0541 111.099L56.6857 100.75Z\",\n fill: \"#0A1551\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.6464 74.4462C42.098 75.7692 39.9989 77.8182 38.6149 80.334C37.2308 82.8498 36.6239 85.7193 36.8706 88.58C37.1173 91.4408 38.2066 94.1642 40.0009 96.4058C41.7953 98.6475 44.214 100.307 46.9513 101.174C49.6886 102.041 52.6214 102.078 55.3792 101.278C58.137 100.479 60.596 98.8793 62.445 96.6825C64.294 94.4857 65.4501 91.79 65.7673 88.9362C66.0844 86.0824 65.5483 83.1986 64.2267 80.6495C62.4526 77.2313 59.3934 74.6575 55.7221 73.4942C52.0508 72.3308 48.0679 72.6731 44.649 74.4457L44.6464 74.4462ZM56.8334 97.9172C54.7387 99.0058 52.3685 99.4487 50.022 99.1899C47.6756 98.9311 45.4585 97.9821 43.6514 96.4631C41.8444 94.9441 40.5285 92.9233 39.8701 90.6563C39.2117 88.3893 39.2403 85.978 39.9526 83.7273C40.6648 81.4767 42.0285 79.4878 43.8713 78.0123C45.714 76.5368 47.9528 75.641 50.3048 75.4381C52.6567 75.2353 55.016 75.7345 57.0842 76.8727C59.1523 78.0108 60.8365 79.7368 61.9236 81.8323C63.3788 84.6401 63.6598 87.9107 62.7052 90.9256C61.7507 93.9405 59.6385 96.4533 56.8326 97.9121L56.8334 97.9172Z\",\n fill: \"#0A1551\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M67.4324 118.452C67.1848 118.581 66.9142 118.66 66.6361 118.684C66.3579 118.709 66.0778 118.678 65.8116 118.593C65.5455 118.509 65.2984 118.373 65.0849 118.193C64.8714 118.013 64.6956 117.793 64.5674 117.545L57.2134 103.385L60.9827 101.425L68.3393 115.585C68.4688 115.832 68.548 116.103 68.5725 116.381C68.597 116.66 68.5663 116.94 68.4821 117.207C68.3978 117.473 68.2615 117.721 68.0814 117.934C67.9013 118.148 67.6807 118.324 67.4324 118.452Z\",\n fill: \"#0A1551\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear_754_127867\",\n x1: 49.2075,\n y1: 74.3262,\n x2: 53.4633,\n y2: 100.352,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#92B0EC\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#92B0EC\",\n stopOpacity: 0.51\n})), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip0_754_127867\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 108,\n height: 120,\n fill: \"white\",\n transform: \"translate(0 0.5)\"\n})))));\nexport default SvgNoBoardsFoundIcon;","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _g, _path9, _path10, _path11, _path12, _g2, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _g3, _path20, _path21, _path22, _path23, _g4, _path24, _path25, _path26, _path27, _path28, _path29, _path30, _path31, _path32, _path33, _path34, _path35, _path36, _path37, _path38, _path39, _path40, _path41, _path42, _path43, _path44, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoFormsIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 198 141\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 97.4367C0 73.8043 19.1578 54.6465 42.7902 54.6465H155.115C178.747 54.6465 197.905 73.8043 197.905 97.4367C197.905 121.069 178.747 140.227 155.115 140.227H42.7902C19.1578 140.227 0 121.069 0 97.4367Z\",\n fill: \"#E6E6F5\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask0_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 0,\n y: 54,\n width: 198,\n height: 87\n}, _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 97.4367C0 73.8043 19.1578 54.6465 42.7902 54.6465H155.115C178.747 54.6465 197.905 73.8043 197.905 97.4367C197.905 121.069 178.747 140.227 155.115 140.227H42.7902C19.1578 140.227 0 121.069 0 97.4367Z\",\n fill: \"#E6E6F5\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask0_624:16012)\"\n}, _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M115.336 77.9239C106.901 88.5617 99.9998 95.4214 94.6306 98.5029C86.5769 103.125 85.9877 98.2682 56.4901 77.7583C54.439 76.8969 52.7754 76.6674 49.9956 79.7585C48.3335 81.6069 44.7598 82.0931 39.2746 81.2173L39.2746 81.2173C38.7245 81.1295 38.2053 81.504 38.115 82.0539C38.0701 82.3274 38.1397 82.6067 38.3074 82.8265C39.6577 84.5955 41.994 85.5598 45.3164 85.7196C51.9089 86.0364 52.6163 83.5632 56.326 86.4774C60.0356 89.3916 79.9102 112.691 91.8962 113.269C103.882 113.848 119.63 96.0418 124.085 94.6697C127.055 93.7549 129.477 86.5287 131.353 72.9909L115.336 77.9239Z\",\n fill: \"#CD7448\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M58.9543 90.0563C62.224 86.9336 64.2069 84.21 64.903 81.8853C79.5311 92.8149 87.8103 97.9805 89.7407 97.382C92.3874 96.5614 113.744 77.3633 121.165 72.8215C121.839 72.149 121.886 77.8987 122.422 77.2795L120.015 99.5943C111.348 105.796 105.826 109.617 103.45 111.057C99.8843 113.217 90.5281 117.172 82.0782 110.302C76.4449 105.722 68.7369 98.9735 58.9543 90.0563Z\",\n fill: \"#F4F5FE\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.638 114.549C111.986 119.246 111.986 125.139 110.638 135.875L160.179 128.641L157.146 88.3777C155.124 81.6671 152.765 76.9698 150.069 74.2855C146.025 70.2592 124.793 72.2724 119.737 74.2855C114.682 76.2987 113.671 85.3579 108.616 93.4106C103.561 101.463 108.616 107.503 110.638 114.549Z\",\n fill: \"white\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M141.981 72.1544C139.959 88.6243 134.277 96.8593 124.934 96.8593C110.92 96.8593 114.206 89.4872 115.961 86.0305C117.131 83.726 118.417 79.6245 119.82 73.7258C124.641 72.1872 128.321 71.3278 130.86 71.1478C133.398 70.9679 137.105 71.3034 141.981 72.1544Z\",\n fill: \"#CD7448\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask1_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 51,\n y: -1,\n width: 110,\n height: 94\n}, _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M51.2891 -0.625H160.642V92.0872H51.2891V-0.625Z\",\n fill: \"#C4C4C4\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask1_624:16012)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask2_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 106,\n y: 71,\n width: 59,\n height: 93\n}, _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.638 138.541C111.986 127.804 111.986 119.246 110.638 114.549C108.616 107.503 103.561 101.463 108.616 93.4106C113.671 85.3579 114.682 76.2987 119.737 74.2855C124.793 72.2724 146.025 70.2592 150.069 74.2855C152.765 76.9698 155.124 81.6671 157.146 88.3777L160.179 128.641C164.898 146.759 165.572 157.832 162.201 161.858C157.146 167.898 155.124 151.792 132.881 142.733C128.163 140.72 120.748 139.883 110.638 138.541Z\",\n fill: \"white\"\n}))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask2_624:16012)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.638 138.539C111.986 127.803 111.986 120.085 110.638 115.388C108.616 108.342 103.561 102.302 108.616 94.2498C113.671 86.1972 114.398 76.4272 119.454 74.414C124.509 72.4008 145.286 69.4997 149.33 73.526C152.026 76.2102 155.124 82.5064 157.146 89.2169V102.827L160.179 129.48C164.898 147.599 165.572 158.671 162.201 162.697C157.146 168.737 155.124 152.632 132.881 143.572C128.163 141.559 120.748 139.882 110.638 138.539Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M141.981 72.1544C139.959 88.6243 134.277 96.8593 124.934 96.8593C110.92 96.8593 114.206 89.4872 115.961 86.0305C117.131 83.726 118.417 79.6245 119.82 73.7258C124.641 72.1872 128.321 71.3278 130.86 71.1478C133.398 70.9679 137.105 71.3034 141.981 72.1544Z\",\n fill: \"#CD7448\"\n}))), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M113.82 33.3166C110.43 47.7514 109.279 49.4479 108.018 52.6186C107.705 53.4047 107.867 54.3038 108.456 54.912C113.256 59.8667 119.676 61.4146 127.717 59.5556C136.283 57.5753 136.242 54.5995 130.934 30.4186L113.82 33.3166Z\",\n fill: \"#0A1551\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M136.285 53.9991C134.625 66.972 140.19 71.5228 142.1 71.5552C144.009 71.5876 136.698 79.5784 123.067 92.3643C118.606 83.7663 118.107 76.0982 119.5 73.8743C121.59 70.5386 123.529 73.3922 122.813 61.7133C122.343 54.0415 132.544 54.7707 139.81 53.5254C136.285 53.9991 130.529 54.1174 136.285 53.9991Z\",\n fill: \"#CD7448\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.677232,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M122.313 56.5259C123.105 63.7532 123.082 67.7391 123 68.3752C122.878 69.3293 140.282 68.5234 135.312 53.2024C130.342 37.8815 128.68 55.0076 122.313 56.5259Z\",\n fill: \"#BD5826\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask3_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 113,\n y: 24,\n width: 38,\n height: 44\n}, _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M145.092 57.0491C140.516 63.1625 134.135 66.5174 125.949 67.1136C117.636 67.7191 112.086 56.8794 113.156 45.7503C113.667 40.4403 114.843 35.7532 119.518 30.9235C129.169 20.9553 138.236 22.2718 146.718 34.8728L150.38 44.6449L145.092 57.0491Z\",\n fill: \"white\"\n}))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask3_624:16012)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M143.966 56.1764C138.857 61.8531 132.197 64.6207 123.988 64.4795C115.652 64.336 111.101 53.0441 113.171 42.0585C114.159 36.8169 115.753 32.2554 120.847 27.866C131.36 18.8066 140.273 20.9315 147.587 34.2405L150.353 44.2998L143.966 56.1764Z\",\n fill: \"#CD7448\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.422879,\n d: \"M131.771 56.3898C129.076 55.9732 127.129 54.1378 127.423 52.2901C127.718 50.4425 130.141 49.2824 132.836 49.6989C135.532 50.1155 137.478 51.9509 137.184 53.7985C136.89 55.6462 134.466 56.8063 131.771 56.3898Z\",\n fill: \"#A44616\"\n}))), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M125.579 55.9777C123.46 56.8827 120.96 56.4158 118.079 54.5768C119.435 58.4286 120.976 60.1813 122.702 59.8349C124.428 59.4886 125.387 58.2028 125.579 55.9777Z\",\n fill: \"#A5330A\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M126.938 38.462C119.116 37.1633 115.933 36.5576 113.227 34.4149C113.384 24.3556 121.661 18.4345 125.497 17.5383C134.368 15.3748 143.999 18.0813 149.91 25.865C150.496 26.6367 150.986 27.4266 151.389 28.2296C151.621 28.6034 151.85 29.0216 152.077 29.4864C155.776 40.1435 157.722 55.6928 156.667 61.4529C153.71 65.2542 129.978 66.0739 132.95 61.3098C133.116 61.0439 133.301 60.7682 133.498 60.4748C134.894 58.3952 136.885 55.4288 136.866 48.7651C136.862 47.1514 136.396 45.2638 135.87 43.1353C135.692 42.4157 135.507 41.6685 135.332 40.8951C134.913 40.7489 134.514 40.6101 134.135 40.4782C132.443 39.8904 131.149 39.4404 130.345 39.0921C129.465 38.7109 130.304 36.1681 130.907 34.3427C131.433 32.7486 131.778 31.7015 130.641 33.1186C129.176 34.9439 128.616 36.3723 128.341 37.492C128.184 38.1288 127.585 38.5694 126.938 38.462Z\",\n fill: \"#0A1551\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M115.165 138.735C120.494 135.738 144.433 142.471 162.674 135.789C172.674 132.126 165.022 110.79 160.852 92.8997C158.213 82.9975 153.845 76.4349 149.863 74.0075L141.201 80.3815L143.406 92.2543C143.406 92.2543 142.036 96.5649 144.923 104.397C147.811 112.229 152.298 122.076 152.298 122.076L109.373 131.081C109.528 134.632 110.902 141.133 115.165 138.735Z\",\n fill: \"white\"\n}))), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M120.877 137.279C118.784 138.945 117.779 138.998 115.278 140.92C113.265 141.884 111.779 142.298 107.412 140.994C104.792 140.212 101.091 140.012 96.3082 140.393L96.3082 140.393C95.7516 140.438 95.2652 140.024 95.2217 139.47C95.2055 139.263 95.2538 139.057 95.3599 138.878C96.5754 136.833 98.9431 135.637 102.463 135.287C109.043 134.635 109.862 137.065 113.441 133.969C115.827 131.905 118.306 133.008 120.877 137.279Z\",\n fill: \"#CD7448\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M116.883 140.747C127.5 139.876 146.152 144.482 164.392 137.801C174.393 134.137 166.74 112.802 162.57 94.9114C159.932 85.0092 155.564 78.4466 151.582 76.0192L142.92 82.3932L145.125 94.266C145.125 94.266 143.755 98.5766 146.642 106.408C149.529 114.24 154.017 124.088 154.017 124.088L111.092 133.093C111.246 136.643 110 140.376 116.883 140.747Z\",\n fill: \"url(#paint0_linear_624:16012)\"\n}))), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask4_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 96,\n y: 14,\n width: 64,\n height: 79\n}, _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M96 14.375H160V92.375H96V14.375Z\",\n fill: \"#C4C4C4\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask4_624:16012)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask5_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 106,\n y: 71,\n width: 59,\n height: 93\n}, _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.349 138.541C111.697 127.804 111.697 119.246 110.349 114.549C108.327 107.503 103.272 101.463 108.327 93.4106C113.382 85.3579 114.393 76.2987 119.448 74.2855C124.504 72.2724 145.736 70.2592 149.78 74.2855C152.476 76.9698 154.835 81.6671 156.857 88.3777L159.89 128.641C164.609 146.759 165.283 157.832 161.912 161.858C156.857 167.898 154.835 151.792 132.592 142.733C127.874 140.72 120.459 139.883 110.349 138.541Z\",\n fill: \"white\"\n}))), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask5_624:16012)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.349 138.539C111.697 127.803 111.697 120.085 110.349 115.388C108.327 108.342 103.272 102.302 108.327 94.2498C113.382 86.1972 114.109 76.4272 119.165 74.414C124.22 72.4008 144.997 69.4997 149.041 73.526C151.737 76.2102 154.835 82.5064 156.857 89.2169V102.827L159.89 129.48C164.609 147.599 165.283 158.671 161.912 162.697C156.857 168.737 154.835 152.632 132.592 143.572C127.874 141.559 120.459 139.882 110.349 138.539Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M141.692 72.1544C139.67 88.6243 133.988 96.8593 124.645 96.8593C110.631 96.8593 113.917 89.4872 115.672 86.0305C116.842 83.726 118.128 79.6245 119.531 73.7258C124.352 72.1872 128.032 71.3278 130.571 71.1478C133.109 70.9679 136.816 71.3034 141.692 72.1544Z\",\n fill: \"#CD7448\"\n}))), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M113.531 33.3166C110.141 47.7514 108.989 49.4479 107.729 52.6186C107.416 53.4047 107.578 54.3038 108.167 54.912C112.967 59.8667 119.387 61.4146 127.428 59.5556C135.994 57.5753 135.953 54.5995 130.645 30.4186L113.531 33.3166Z\",\n fill: \"#0A1551\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M135.996 53.9991C134.335 66.972 139.901 71.5228 141.811 71.5552C143.72 71.5876 136.409 79.5784 122.778 92.3643C118.317 83.7663 117.818 76.0982 119.211 73.8743C121.301 70.5386 123.24 73.3922 122.524 61.7133C122.054 54.0415 132.255 54.7707 139.521 53.5254C135.996 53.9991 130.24 54.1174 135.996 53.9991Z\",\n fill: \"#CD7448\"\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.677232,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M122.024 56.5259C122.816 63.7532 122.793 67.7391 122.711 68.3752C122.589 69.3293 139.993 68.5234 135.023 53.2024C130.053 37.8815 128.391 55.0076 122.024 56.5259Z\",\n fill: \"#BD5826\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask6_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 112,\n y: 24,\n width: 39,\n height: 44\n}, _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M144.803 57.0491C140.227 63.1625 133.846 66.5174 125.66 67.1136C117.347 67.7191 111.797 56.8794 112.867 45.7503C113.377 40.4403 114.553 35.7532 119.229 30.9235C128.88 20.9553 137.947 22.2718 146.429 34.8728L150.091 44.6449L144.803 57.0491Z\",\n fill: \"white\"\n}))), _g4 || (_g4 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask6_624:16012)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M143.677 56.1764C138.567 61.8531 131.908 64.6207 123.699 64.4795C115.363 64.336 110.812 53.0441 112.882 42.0585C113.87 36.8169 115.464 32.2554 120.558 27.866C131.071 18.8066 139.984 20.9315 147.298 34.2405L150.064 44.2998L143.677 56.1764Z\",\n fill: \"#CD7448\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M128.904 40.8301C130.107 41.4177 130.959 42.3601 131.387 43.0696C131.557 43.3507 131.466 43.716 131.185 43.8855C130.905 44.0549 130.539 43.9644 130.37 43.6833C130.041 43.1393 129.35 42.3705 128.383 41.8981C127.438 41.4364 126.218 41.2495 124.756 41.8547C124.453 41.9803 124.106 41.8362 123.98 41.5329C123.854 41.2296 123.998 40.882 124.301 40.7564C126.103 40.01 127.679 40.2318 128.904 40.8301Z\",\n fill: \"#37120C\",\n fillOpacity: 0.25\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M117.443 38.8566C116.482 38.8034 115.689 39.1609 115.177 39.5723C114.922 39.778 114.882 40.152 115.088 40.4078C115.294 40.6636 115.668 40.7042 115.923 40.4985C116.242 40.2424 116.753 40.0088 117.379 40.0434C117.994 40.0774 118.794 40.3744 119.692 41.3119C119.919 41.5491 120.295 41.5576 120.532 41.3308C120.769 41.104 120.777 40.7278 120.55 40.4905C119.487 39.38 118.416 38.9104 117.443 38.8566Z\",\n fill: \"#37120C\",\n fillOpacity: 0.25\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.422879,\n d: \"M131.482 56.3898C128.787 55.9732 126.84 54.1378 127.134 52.2901C127.428 50.4425 129.852 49.2824 132.547 49.6989C135.243 50.1155 137.189 51.9509 136.895 53.7985C136.601 55.6462 134.177 56.8063 131.482 56.3898Z\",\n fill: \"#A44616\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.422879,\n d: \"M109.964 51.9299C107.316 51.2573 105.484 49.2294 105.872 47.4007C106.26 45.5719 108.72 44.6347 111.368 45.3074C114.016 45.9801 115.848 48.0079 115.46 49.8367C115.072 51.6654 112.612 52.6026 109.964 51.9299Z\",\n fill: \"#A44616\"\n}))), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M125.29 55.9777C123.171 56.8827 120.671 56.4158 117.79 54.5768C119.146 58.4286 120.687 60.1813 122.413 59.8349C124.139 59.4886 125.098 58.2028 125.29 55.9777Z\",\n fill: \"#A5330A\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M126.298 46.5747C125.74 46.5652 125.298 45.8942 125.311 45.0761C125.324 44.2579 125.787 43.6023 126.345 43.6118C126.903 43.6212 127.345 44.2922 127.332 45.1104C127.319 45.9285 126.856 46.5841 126.298 46.5747Z\",\n fill: \"#321907\"\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M117.699 45.0239C117.141 45.0144 116.699 44.3435 116.712 43.5253C116.725 42.7071 117.187 42.0515 117.745 42.061C118.303 42.0704 118.745 42.7414 118.732 43.5596C118.72 44.3778 118.257 45.0334 117.699 45.0239Z\",\n fill: \"#321907\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M122.715 43.9712C122.557 43.8531 122.333 43.8846 122.215 44.0417C121.233 45.3458 120.594 45.9805 119.993 46.4194C119.691 46.6402 119.392 46.8164 119.05 47.0061C118.957 47.0578 118.86 47.1107 118.759 47.1659C118.492 47.3116 118.197 47.473 117.868 47.667C116.711 48.3477 116.542 49.9158 117.066 51.0793C117.337 51.6792 117.802 52.2141 118.46 52.5212C119.121 52.8298 119.943 52.8927 120.894 52.6054C121.082 52.5484 121.189 52.3497 121.131 52.1616C121.073 51.9735 120.874 51.8672 120.685 51.9242C119.876 52.1686 119.239 52.0996 118.762 51.8768C118.281 51.6523 117.929 51.2561 117.718 50.789C117.281 49.8185 117.503 48.7093 118.232 48.28C118.551 48.0922 118.831 47.9392 119.095 47.7951C119.198 47.7386 119.299 47.6835 119.399 47.6282C119.749 47.4336 120.079 47.2406 120.417 46.9937C121.096 46.4969 121.784 45.8014 122.787 44.4696C122.905 44.3125 122.873 44.0894 122.715 43.9712Z\",\n fill: \"#8A3110\"\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M126.649 38.462C118.827 37.1633 115.644 36.5576 112.938 34.4149C113.095 24.3556 121.372 18.4345 125.208 17.5383C134.079 15.3748 143.71 18.0813 149.621 25.865C150.207 26.6367 150.697 27.4266 151.1 28.2296C151.332 28.6034 151.561 29.0216 151.788 29.4864C155.487 40.1435 157.433 55.6928 156.378 61.4529C153.421 65.2542 129.689 66.0739 132.661 61.3098C132.827 61.0439 133.012 60.7682 133.209 60.4748C134.605 58.3952 136.596 55.4288 136.577 48.7651C136.573 47.1514 136.106 45.2638 135.581 43.1353C135.403 42.4157 135.218 41.6685 135.043 40.8951C134.624 40.7489 134.225 40.6101 133.846 40.4782C132.154 39.8904 130.859 39.4404 130.056 39.0921C129.176 38.7109 130.015 36.1681 130.618 34.3427C131.144 32.7486 131.489 31.7015 130.352 33.1186C128.887 34.9439 128.327 36.3723 128.052 37.492C127.895 38.1288 127.296 38.5694 126.649 38.462Z\",\n fill: \"#0A1551\"\n})), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M114.876 138.735C120.204 135.738 144.144 142.471 162.384 135.789C172.385 132.126 164.732 110.79 160.563 92.8997C157.924 82.9975 153.556 76.4349 149.574 74.0075L140.912 80.3815L143.117 92.2543C143.117 92.2543 141.747 96.5649 144.634 104.397C147.522 112.229 152.009 122.076 152.009 122.076L109.084 131.081C109.239 134.632 110.612 141.133 114.876 138.735Z\",\n fill: \"white\"\n}))), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M38 4.95802C38 2.42689 40.0519 0.375 42.583 0.375H64.3524C66.8835 0.375 68.9354 2.42689 68.9354 4.95802V32.4562C68.9354 34.9873 66.8835 37.0392 64.3524 37.0392H42.583C40.0519 37.0392 38 34.9873 38 32.4562V4.95802Z\",\n fill: \"white\"\n})), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M64.3524 1.52076H42.583C40.6847 1.52076 39.1458 3.05967 39.1458 4.95802V32.4562C39.1458 34.3545 40.6847 35.8934 42.583 35.8934H64.3524C66.2507 35.8934 67.7897 34.3545 67.7897 32.4562V4.95802C67.7897 3.05967 66.2507 1.52076 64.3524 1.52076ZM42.583 0.375C40.0519 0.375 38 2.42689 38 4.95802V32.4562C38 34.9873 40.0519 37.0392 42.583 37.0392H64.3524C66.8835 37.0392 68.9354 34.9873 68.9354 32.4562V4.95802C68.9354 2.42689 66.8835 0.375 64.3524 0.375H42.583Z\",\n fill: \"#C8CEED\"\n})), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.5469 12.8157C44.5469 11.7309 45.4263 10.8516 46.511 10.8516H60.9148C61.9996 10.8516 62.879 11.7309 62.879 12.8157C62.879 13.9005 61.9996 14.7799 60.9148 14.7799H46.511C45.4263 14.7799 44.5469 13.9005 44.5469 12.8157Z\",\n fill: \"#0099FF\"\n})), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.5469 19.3626C44.5469 18.2778 45.4263 17.3984 46.511 17.3984H60.9148C61.9996 17.3984 62.879 18.2778 62.879 19.3626C62.879 20.4474 61.9996 21.3267 60.9148 21.3267H46.511C45.4263 21.3267 44.5469 20.4474 44.5469 19.3626Z\",\n fill: \"#FF6100\"\n})), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.5469 25.9095C44.5469 24.8247 45.4263 23.9453 46.511 23.9453H60.9148C61.9996 23.9453 62.879 24.8247 62.879 25.9095C62.879 26.9942 61.9996 27.8736 60.9148 27.8736H46.511C45.4263 27.8736 44.5469 26.9942 44.5469 25.9095Z\",\n fill: \"#FFB629\"\n})), _path35 || (_path35 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M57.0645 44.958C57.0645 42.4269 59.1163 40.375 61.6475 40.375H83.4168C85.948 40.375 87.9999 42.4269 87.9999 44.958V72.4562C87.9999 74.9873 85.948 77.0392 83.4168 77.0392H61.6475C59.1163 77.0392 57.0645 74.9873 57.0645 72.4562V44.958Z\",\n fill: \"white\"\n})), _path36 || (_path36 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M83.4168 41.5208H61.6475C59.7491 41.5208 58.2102 43.0597 58.2102 44.958V72.4562C58.2102 74.3545 59.7491 75.8934 61.6475 75.8934H83.4168C85.3152 75.8934 86.8541 74.3545 86.8541 72.4562V44.958C86.8541 43.0597 85.3152 41.5208 83.4168 41.5208ZM61.6475 40.375C59.1163 40.375 57.0645 42.4269 57.0645 44.958V72.4562C57.0645 74.9873 59.1163 77.0392 61.6475 77.0392H83.4168C85.948 77.0392 87.9999 74.9873 87.9999 72.4562V44.958C87.9999 42.4269 85.948 40.375 83.4168 40.375H61.6475Z\",\n fill: \"#C8CEED\"\n})), _path37 || (_path37 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.6113 52.8157C63.6113 51.7309 64.4907 50.8516 65.5755 50.8516H79.9793C81.064 50.8516 81.9434 51.7309 81.9434 52.8157C81.9434 53.9005 81.064 54.7799 79.9793 54.7799H65.5755C64.4907 54.7799 63.6113 53.9005 63.6113 52.8157Z\",\n fill: \"#0099FF\"\n})), _path38 || (_path38 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.6113 59.3626C63.6113 58.2778 64.4907 57.3984 65.5755 57.3984H79.9793C81.064 57.3984 81.9434 58.2778 81.9434 59.3626C81.9434 60.4474 81.064 61.3267 79.9793 61.3267H65.5755C64.4907 61.3267 63.6113 60.4474 63.6113 59.3626Z\",\n fill: \"#FF6100\"\n})), _path39 || (_path39 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.6113 65.9095C63.6113 64.8247 64.4907 63.9453 65.5755 63.9453H79.9793C81.064 63.9453 81.9434 64.8247 81.9434 65.9095C81.9434 66.9942 81.064 67.8736 79.9793 67.8736H65.5755C64.4907 67.8736 63.6113 66.9942 63.6113 65.9095Z\",\n fill: \"#FFB629\"\n})), _path40 || (_path40 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18 44.958C18 42.4269 20.0519 40.375 22.583 40.375H44.3524C46.8835 40.375 48.9354 42.4269 48.9354 44.958V72.4562C48.9354 74.9873 46.8835 77.0392 44.3524 77.0392H22.583C20.0519 77.0392 18 74.9873 18 72.4562V44.958Z\",\n fill: \"white\"\n})), _path41 || (_path41 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M44.3524 41.5208H22.583C20.6847 41.5208 19.1458 43.0597 19.1458 44.958V72.4562C19.1458 74.3545 20.6847 75.8934 22.583 75.8934H44.3524C46.2507 75.8934 47.7897 74.3545 47.7897 72.4562V44.958C47.7897 43.0597 46.2507 41.5208 44.3524 41.5208ZM22.583 40.375C20.0519 40.375 18 42.4269 18 44.958V72.4562C18 74.9873 20.0519 77.0392 22.583 77.0392H44.3524C46.8835 77.0392 48.9354 74.9873 48.9354 72.4562V44.958C48.9354 42.4269 46.8835 40.375 44.3524 40.375H22.583Z\",\n fill: \"#C8CEED\"\n})), _path42 || (_path42 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.5469 52.8157C24.5469 51.7309 25.4263 50.8516 26.511 50.8516H40.9148C41.9996 50.8516 42.879 51.7309 42.879 52.8157C42.879 53.9005 41.9996 54.7799 40.9148 54.7799H26.511C25.4263 54.7799 24.5469 53.9005 24.5469 52.8157Z\",\n fill: \"#0099FF\"\n})), _path43 || (_path43 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.5469 59.3626C24.5469 58.2778 25.4263 57.3984 26.511 57.3984H40.9148C41.9996 57.3984 42.879 58.2778 42.879 59.3626C42.879 60.4474 41.9996 61.3267 40.9148 61.3267H26.511C25.4263 61.3267 24.5469 60.4474 24.5469 59.3626Z\",\n fill: \"#FF6100\"\n})), _path44 || (_path44 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.5469 65.9095C24.5469 64.8247 25.4263 63.9453 26.511 63.9453H40.9148C41.9996 63.9453 42.879 64.8247 42.879 65.9095C42.879 66.9942 41.9996 67.8736 40.9148 67.8736H26.511C25.4263 67.8736 24.5469 66.9942 24.5469 65.9095Z\",\n fill: \"#FFB629\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear_624:16012\",\n x1: 152.19,\n y1: 93.8799,\n x2: 149.764,\n y2: 110.89,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"white\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#F3F5FE\"\n})))));\nexport default SvgNoFormsIcon;","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _g, _path12, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _circle, _path20, _path21, _path22, _path23, _path24, _path25, _rect, _path26, _path27, _path28, _path29, _path30, _rect2, _path31, _path32, _path33, _path34, _path35, _rect3, _path36, _path37, _path38, _path39, _path40, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoAppsIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 198 138\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 94.4357C0 70.8034 19.1578 51.6455 42.7902 51.6455H155.115C178.747 51.6455 197.905 70.8034 197.905 94.4357C197.905 118.068 178.747 137.226 155.115 137.226H42.7902C19.1578 137.226 0 118.068 0 94.4357Z\",\n fill: \"#E6E6F5\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M65.8372 81.9592C64.5361 80.8456 63.0223 80.0079 61.3877 79.4968C59.7531 78.9858 58.032 78.8122 56.3283 78.9865L51.2601 76.694C50.8846 76.5178 50.4599 76.4753 50.0569 76.5736C49.654 76.6718 49.297 76.9049 49.0446 77.234C48.924 77.4075 48.8398 77.6037 48.7972 77.8106C48.7546 78.0176 48.7542 78.231 48.7965 78.438C48.8389 78.645 48.9228 78.8413 49.0432 79.015C49.1637 79.1886 49.3181 79.336 49.4971 79.4482L52.2518 81.2906L51.0775 81.1933C49.2316 81.0459 47.4791 80.3203 46.0693 79.1196L42.156 75.7349C41.9289 75.5451 41.6577 75.4154 41.3673 75.3579C41.0769 75.3004 40.7768 75.317 40.4945 75.4059C40.2447 75.4669 40.0149 75.5918 39.8279 75.7684C39.6409 75.945 39.5035 76.1672 39.4283 76.4131C39.3531 76.6591 39.3431 76.9203 39.3994 77.1712C39.4557 77.4222 39.5761 77.6541 39.7491 77.8444L44.3206 82.8871C45.2215 83.8663 46.3102 84.6544 47.5217 85.2045C48.7332 85.7547 50.043 86.0557 51.3731 86.0897L66.0281 86.5405L65.8372 81.9592Z\",\n fill: \"#EFBB9D\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M114.82 31.3173C111.43 45.7521 107.561 80.2678 106.301 83.4385C105.988 84.2245 106.15 85.1237 106.739 85.7319C111.539 90.6866 117.959 92.2345 126 90.3755C134.566 88.3952 137.243 52.6002 131.935 28.4193L114.82 31.3173Z\",\n fill: \"#091141\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M59.9552 88.0553C63.225 84.9327 65.2079 82.209 65.9039 79.8843C80.5321 90.814 88.8113 95.9795 90.7416 95.381C93.3884 94.5604 114.745 75.3623 122.166 70.8205C122.84 70.148 122.887 75.8977 123.423 75.2786L121.016 97.5933C112.349 103.795 106.827 107.616 104.451 109.056C100.885 111.216 91.5291 115.171 83.0792 108.301C77.4459 103.721 69.7379 96.9725 59.9552 88.0553Z\",\n fill: \"#F4F5FE\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.591 112.816C111.714 117.571 113.857 121.714 112 132.375C122.035 134.192 128.883 131.142 133.5 133.375L151 125.375L163.5 119.875L157.644 102.462L158.292 88.8673C156.591 82.0689 153.796 75.6337 151.23 72.8253C147.382 68.6128 126.49 70.5307 121.345 72.3032C116.2 74.0757 115.009 83.8004 109.576 91.6056C104.144 99.4108 108.906 105.682 110.591 112.816Z\",\n fill: \"white\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M142.981 70.1537C140.959 86.6236 135.276 94.8586 125.934 94.8586C111.92 94.8586 115.206 87.4865 116.961 84.0298C118.131 81.7253 119.417 77.6237 120.82 71.7251C125.641 70.1864 129.321 69.3271 131.859 69.1471C134.398 68.9671 138.105 69.3026 142.981 70.1537Z\",\n fill: \"#EFBB9D\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M122.003 47.5342C121.451 47.6155 120.906 47.0251 120.785 46.2156C120.664 45.4061 121.013 44.6839 121.565 44.6026C122.117 44.5212 122.662 45.1116 122.783 45.9211C122.904 46.7307 122.555 47.4528 122.003 47.5342Z\",\n fill: \"#321907\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M114.454 47.4026C113.902 47.4839 113.356 46.8935 113.235 46.084C113.114 45.2745 113.464 44.5523 114.015 44.471C114.567 44.3897 115.113 44.98 115.234 45.7895C115.355 46.5991 115.006 47.3212 114.454 47.4026Z\",\n fill: \"#321907\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M137.286 51.9998C135.625 64.9726 141.591 69.8426 143.5 69.875C145.409 69.9074 137.698 77.5791 124.067 90.365C119.607 81.7669 119.107 74.0988 120.501 71.875C122.59 68.5393 124.53 71.3929 123.813 59.714C123.343 52.0421 133.544 52.7714 140.811 51.5261C137.286 51.9998 131.529 52.1181 137.286 51.9998Z\",\n fill: \"#EFBB9D\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.677232,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M123.313 54.5259C124.105 61.7532 124.082 65.7391 124 66.3752C123.878 67.3293 141.282 66.5234 136.312 51.2024C131.342 35.8815 129.68 53.0076 123.313 54.5259Z\",\n fill: \"#DC9F7E\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask0\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 114,\n y: 22,\n width: 38,\n height: 44\n}, _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M146.092 55.0486C141.517 61.1621 135.136 64.5169 126.949 65.1132C118.636 65.7186 113.086 54.8789 114.156 43.7498C114.667 38.4398 115.843 33.7527 120.519 28.923C130.169 18.9548 139.236 20.2713 147.719 32.8723L151.381 42.6444L146.092 55.0486Z\",\n fill: \"white\"\n}))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M144.967 54.1757C139.857 59.8523 133.198 62.62 124.989 62.4787C116.653 62.3353 112.102 51.0434 114.172 40.0578C115.16 34.8162 116.754 30.2546 121.848 25.8652C132.361 16.8059 141.274 18.9308 148.588 32.2398L151.354 42.2991L144.967 54.1757Z\",\n fill: \"#EFBB9D\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M132.771 54.3902C130.075 53.9737 128.129 52.1383 128.423 50.2906C128.717 48.443 131.141 47.2829 133.836 47.6994C136.531 48.1159 138.478 49.9514 138.184 51.799C137.89 53.6467 135.466 54.8068 132.771 54.3902Z\",\n fill: \"#EFA77F\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M111.252 49.9304C108.605 49.2578 106.773 47.2299 107.16 45.4012C107.548 43.5724 110.009 42.6352 112.657 43.3079C115.304 43.9806 117.136 46.0084 116.749 47.8372C116.361 49.6659 113.9 50.6031 111.252 49.9304Z\",\n fill: \"#EFA77F\"\n}))), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M126.024 53.9409C123.905 54.8459 121.405 54.3789 118.523 52.5399C119.88 56.3917 121.421 58.1444 123.147 57.798C124.873 57.4517 125.832 56.166 126.024 53.9409Z\",\n fill: \"#A5330A\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M127.588 44.5756C127.03 44.5662 126.588 43.8952 126.601 43.077C126.613 42.2588 127.076 41.6033 127.634 41.6127C128.192 41.6222 128.634 42.2932 128.621 43.1113C128.609 43.9295 128.146 44.5851 127.588 44.5756Z\",\n fill: \"#0A1551\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M118.988 43.0239C118.43 43.0144 117.988 42.3435 118.001 41.5253C118.014 40.7071 118.477 40.0515 119.035 40.061C119.593 40.0704 120.035 40.7414 120.022 41.5596C120.009 42.3778 119.546 43.0334 118.988 43.0239Z\",\n fill: \"#0A1551\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M142.981 70.1542C140.959 86.6241 135.276 94.8591 125.934 94.8591C111.92 94.8591 115.206 87.487 116.961 84.0303C118.131 81.7258 119.417 77.6242 120.82 71.7256C125.641 70.1869 129.321 69.3276 131.859 69.1476C134.398 68.9676 138.105 69.3031 142.981 70.1542Z\",\n fill: \"#EFBB9D\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M142.201 78.3815L144.407 90.2543C144.407 90.2543 143.036 94.5649 145.923 102.397C148.811 110.229 153.298 120.076 153.298 120.076L163.674 133.789C173.674 130.126 166.022 108.79 161.852 90.8997C159.213 80.9975 154.846 74.4349 150.863 72.0075L142.201 78.3815Z\",\n fill: \"white\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M144.231 81.3883L146.436 93.2611C146.436 93.2611 145.066 97.5717 147.953 105.404C150.841 113.235 155.328 123.083 155.328 123.083L164.5 135.375C174.5 131.712 168.051 111.797 163.881 93.9065C161.243 84.0043 156.875 77.4416 152.893 75.0142L144.231 81.3883Z\",\n fill: \"url(#paint0_linear)\"\n})), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M142.501 69.375C131.301 71.775 125.168 70.0417 123.501 68.875C122.702 69.275 120.834 71.375 120 72.375C118.5 76.0417 115.201 84.075 114.001 86.875C112.501 90.375 115.001 92.375 118.501 96.375C122.001 100.375 133.001 96.875 137.001 95.875C140.201 95.075 144.001 78.5417 145.501 70.375C143.501 69.975 142.668 69.5417 142.501 69.375Z\",\n fill: \"white\"\n})), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M127.938 36.4629C120.117 35.1642 116.934 34.5586 114.228 32.4159C114.384 22.3566 122.661 16.4355 126.497 15.5393C135.368 13.3758 144.999 16.0823 150.91 23.866C151.496 24.6377 151.986 25.4275 152.389 26.2306C152.622 26.6044 152.851 27.0226 153.078 27.4874C156.776 38.1445 156.679 78.258 155.624 84.0181C152.667 87.8194 128.935 88.6391 131.907 83.875C132.073 83.609 132.258 83.3333 132.455 83.04C133.851 80.9604 137.885 53.4298 137.866 46.7661C137.862 45.1523 137.396 43.2648 136.87 41.1363C136.692 40.4167 136.508 39.6695 136.332 38.896C135.914 38.7499 135.514 38.6111 135.135 38.4792C133.444 37.8914 132.149 37.4414 131.345 37.0931C130.465 36.7119 131.304 34.1691 131.907 32.3436C132.433 30.7495 132.779 29.7024 131.641 31.1196C130.176 32.9449 129.616 34.3733 129.341 35.493C129.184 36.1298 128.586 36.5704 127.938 36.4629Z\",\n fill: \"#091141\"\n})), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 145.5,\n cy: 16.875,\n r: 9.5,\n fill: \"#091141\"\n})), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M129.897 38.4106C129.897 38.4106 126.839 37.5691 126.481 38.8687C126.481 38.8687 126.241 39.7406 129.026 40.4412C131.81 41.1417 132.489 41.0654 132.889 40.2708C133.288 39.4761 131.379 38.7034 129.897 38.4106Z\",\n fill: \"#091141\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M118.797 36.4607C118.797 36.4607 121.443 36.6167 121.438 37.909C121.438 37.909 121.429 38.7744 119.107 38.5708C116.785 38.3672 116.107 37.9472 116.011 37.235C115.916 36.5228 117.553 36.2718 118.797 36.4607Z\",\n fill: \"#091141\"\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M121.942 45.389L121 48.2849L122.873 48.7786\",\n stroke: \"#D97D4A\",\n strokeWidth: 0.919783,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n})), _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M124.604 130.031L132.63 129.412L132.384 137.438H125.435L124.604 130.031Z\",\n fill: \"#EFBB9D\"\n})), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M126.861 129.813L127.262 131.418L128.065 137.438H108C108.402 133.425 114.02 129.412 118.033 129.412C121.243 129.412 126.058 129.679 126.861 129.813Z\",\n fill: \"#EFBB9D\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M161.399 122.431L130 123.372L132 137.375L162 136.875C163.085 136.729 164.344 136.671 165.256 136.065C166.256 135.4 167.941 134.131 168.495 133.187C169.05 132.242 169.382 131.184 169.467 130.092C169.551 129.001 169.387 127.904 168.985 126.886C168.388 125.411 167.321 124.174 165.949 123.369C164.578 122.563 162.978 122.233 161.399 122.431Z\",\n fill: \"#F4F6FF\"\n})), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 38.3032,\n y: 1.625,\n width: 30.3839,\n height: 30.3839,\n rx: 2.75,\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.4697 7.79267C41.4697 6.13099 42.8168 4.78394 44.4785 4.78394H62.5309C64.1926 4.78394 65.5396 6.13099 65.5396 7.79267V25.8451C65.5396 27.5068 64.1926 28.8538 62.5309 28.8538H44.4785C42.8168 28.8538 41.4697 27.5068 41.4697 25.8451V7.79267Z\",\n fill: \"white\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M58.5096 18.4526C58.2886 18.4526 58.1093 18.6319 58.1093 18.8528V21.2041H55.7581C55.5372 21.2041 55.3579 21.3833 55.3579 21.6043C55.3579 21.8252 55.5372 22.0045 55.7581 22.0045H58.1093V24.3557C58.1093 24.5767 58.2886 24.7559 58.5096 24.7559C58.7305 24.7559 58.9098 24.5767 58.9098 24.3557V22.0045H61.261C61.482 22.0045 61.6612 21.8252 61.6612 21.6043C61.6612 21.3833 61.482 21.2041 61.261 21.2041H58.9098V18.8528C58.9098 18.6319 58.7305 18.4526 58.5096 18.4526Z\",\n fill: \"#97ACDA\",\n stroke: \"#97ACDA\",\n strokeWidth: 0.651698\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M54.6129 8.44541C54.6129 8.08278 54.9068 7.78882 55.2694 7.78882H61.8354C62.198 7.78882 62.492 8.08279 62.492 8.44541V15.0113C62.492 15.374 62.198 15.6679 61.8354 15.6679H55.2694C54.9068 15.6679 54.6129 15.374 54.6129 15.0113V8.44541Z\",\n fill: \"#FF6100\"\n})), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.4761 8.44517C44.4761 8.08254 44.7701 7.78857 45.1327 7.78857H51.6987C52.0613 7.78857 52.3553 8.08254 52.3553 8.44517V15.0111C52.3553 15.3737 52.0613 15.6677 51.6987 15.6677H45.1327C44.7701 15.6677 44.4761 15.3737 44.4761 15.0111V8.44517Z\",\n fill: \"#0099FF\"\n})), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.4756 18.5816C44.4756 18.219 44.7696 17.925 45.1322 17.925H51.6981C52.0607 17.925 52.3547 18.219 52.3547 18.5816V25.1476C52.3547 25.5102 52.0607 25.8042 51.6981 25.8042H45.1322C44.7696 25.8042 44.4756 25.5102 44.4756 25.1476V18.5816Z\",\n fill: \"#FFB629\"\n})), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 18.25,\n y: 41.741,\n width: 30.3839,\n height: 30.3839,\n rx: 2.75,\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.4027 47.9084C21.4027 46.2467 22.7498 44.8997 24.4114 44.8997H42.4639C44.1256 44.8997 45.4726 46.2467 45.4726 47.9084V65.9608C45.4726 67.6225 44.1256 68.9696 42.4639 68.9696H24.4114C22.7498 68.9696 21.4027 67.6225 21.4027 65.9608V47.9084Z\",\n fill: \"white\"\n})), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M38.4411 58.5681C38.2202 58.5681 38.0409 58.7474 38.0409 58.9683V61.3196H35.6897C35.4687 61.3196 35.2895 61.4988 35.2895 61.7198C35.2895 61.9407 35.4687 62.12 35.6897 62.12H38.0409V64.4712C38.0409 64.6922 38.2202 64.8714 38.4411 64.8714C38.6621 64.8714 38.8413 64.6922 38.8413 64.4712V62.12H41.1926C41.4135 62.12 41.5928 61.9407 41.5928 61.7198C41.5928 61.4988 41.4135 61.3196 41.1926 61.3196H38.8413V58.9683C38.8413 58.7474 38.6621 58.5681 38.4411 58.5681Z\",\n fill: \"#97ACDA\",\n stroke: \"#97ACDA\",\n strokeWidth: 0.651698\n})), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M34.5474 48.5628C34.5474 48.2002 34.8413 47.9062 35.204 47.9062H41.7699C42.1325 47.9062 42.4265 48.2002 42.4265 48.5628V55.1288C42.4265 55.4914 42.1325 55.7854 41.7699 55.7854H35.204C34.8413 55.7854 34.5474 55.4914 34.5474 55.1288V48.5628Z\",\n fill: \"#FF6100\"\n})), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.4124 48.5643C24.4124 48.2017 24.7064 47.9077 25.069 47.9077H31.6349C31.9976 47.9077 32.2915 48.2017 32.2915 48.5643V55.1302C32.2915 55.4929 31.9976 55.7868 31.6349 55.7868H25.069C24.7064 55.7868 24.4124 55.4929 24.4124 55.1302V48.5643Z\",\n fill: \"#0099FF\"\n})), _path35 || (_path35 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.4072 58.6971C24.4072 58.3345 24.7011 58.0405 25.0638 58.0405H31.6297C31.9923 58.0405 32.2863 58.3345 32.2863 58.6971V65.2631C32.2863 65.6257 31.9923 65.9196 31.6297 65.9196H25.0638C24.7011 65.9196 24.4072 65.6257 24.4072 65.2631V58.6971Z\",\n fill: \"#FFB629\"\n})), _rect3 || (_rect3 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 57.567,\n y: 41.741,\n width: 30.3839,\n height: 30.3839,\n rx: 2.75,\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path36 || (_path36 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M60.7231 47.9084C60.7231 46.2467 62.0702 44.8997 63.7319 44.8997H81.7843C83.446 44.8997 84.793 46.2467 84.793 47.9084V65.9608C84.793 67.6225 83.446 68.9696 81.7843 68.9696H63.7319C62.0702 68.9696 60.7231 67.6225 60.7231 65.9608V47.9084Z\",\n fill: \"white\"\n})), _path37 || (_path37 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M77.7713 58.5681C77.5503 58.5681 77.3711 58.7474 77.3711 58.9683V61.3196H75.0198C74.7989 61.3196 74.6196 61.4988 74.6196 61.7198C74.6196 61.9407 74.7989 62.12 75.0198 62.12H77.3711V64.4712C77.3711 64.6922 77.5503 64.8714 77.7713 64.8714C77.9922 64.8714 78.1715 64.6922 78.1715 64.4712V62.12H80.5227C80.7437 62.12 80.9229 61.9407 80.9229 61.7198C80.9229 61.4988 80.7437 61.3196 80.5227 61.3196H78.1715V58.9683C78.1715 58.7474 77.9922 58.5681 77.7713 58.5681Z\",\n fill: \"#97ACDA\",\n stroke: \"#97ACDA\",\n strokeWidth: 0.651698\n})), _path38 || (_path38 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M73.8698 48.5628C73.8698 48.2002 74.1637 47.9062 74.5263 47.9062H81.0923C81.4549 47.9062 81.7489 48.2002 81.7489 48.5628V55.1288C81.7489 55.4914 81.4549 55.7854 81.0923 55.7854H74.5263C74.1637 55.7854 73.8698 55.4914 73.8698 55.1288V48.5628Z\",\n fill: \"#FF6100\"\n})), _path39 || (_path39 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.7274 48.5641C63.7274 48.2014 64.0213 47.9075 64.3839 47.9075H70.9499C71.3125 47.9075 71.6065 48.2014 71.6065 48.5641V55.13C71.6065 55.4926 71.3125 55.7866 70.9499 55.7866H64.3839C64.0213 55.7866 63.7274 55.4926 63.7274 55.13V48.5641Z\",\n fill: \"#0099FF\"\n})), _path40 || (_path40 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.7277 58.6971C63.7277 58.3345 64.0216 58.0405 64.3843 58.0405H70.9502C71.3128 58.0405 71.6068 58.3345 71.6068 58.6971V65.2631C71.6068 65.6257 71.3128 65.9196 70.9502 65.9196H64.3843C64.0216 65.9196 63.7277 65.6257 63.7277 65.2631V58.6971Z\",\n fill: \"#FFB629\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear\",\n x1: 160,\n y1: 122.375,\n x2: 148.271,\n y2: 68.4249,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#F4F5FE\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"white\"\n})))));\nexport default SvgNoAppsIcon;","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _g, _path9, _path10, _path11, _path12, _g2, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _g3, _path20, _path21, _path22, _path23, _g4, _path24, _path25, _path26, _path27, _path28, _path29, _path30, _path31, _path32, _path33, _path34, _path35, _path36, _path37, _path38, _path39, _path40, _g5, _path41, _path42, _path43, _path44, _path45, _path46, _path47, _path48, _circle, _path49, _path50, _path51, _path52, _path53, _path54, _path55, _rect, _path56, _path57, _path58, _path59, _path60, _path61, _path62, _path63, _path64, _rect2, _path65, _rect3, _path66, _path67, _path68, _path69, _path70, _path71, _path72, _path73, _path74, _rect4, _path75, _rect5, _path76, _path77, _path78, _path79, _path80, _path81, _path82, _path83, _path84, _rect6, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoTablesIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 201 138\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3 93.8117C3 70.1793 22.1578 51.0215 45.7902 51.0215H158.115C181.747 51.0215 200.905 70.1793 200.905 93.8117C200.905 117.444 181.747 136.602 158.115 136.602H45.7902C22.1578 136.602 3 117.444 3 93.8117Z\",\n fill: \"#E6E6F5\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask0_614:19850\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 3,\n y: 51,\n width: 198,\n height: 86\n}, _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3 93.8117C3 70.1793 22.1578 51.0215 45.7902 51.0215H158.115C181.747 51.0215 200.905 70.1793 200.905 93.8117C200.905 117.444 181.747 136.602 158.115 136.602H45.7902C22.1578 136.602 3 117.444 3 93.8117Z\",\n fill: \"#E6E6F5\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask0_614:19850)\"\n}, _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M118.336 74.2989C109.901 84.9367 103 91.7964 97.6306 94.8779C89.5769 99.5003 88.9877 94.6432 59.4901 74.1333C57.439 73.2719 55.7754 73.0424 52.9956 76.1335C51.3335 77.9819 47.7598 78.4681 42.2746 77.5923L42.2746 77.5923C41.7245 77.5045 41.2053 77.879 41.115 78.4289C41.0701 78.7024 41.1397 78.9817 41.3074 79.2015C42.6577 80.9705 44.994 81.9348 48.3164 82.0946C54.9089 82.4114 55.6163 79.9382 59.326 82.8524C63.0356 85.7666 82.9102 109.066 94.8962 109.644C106.882 110.223 122.63 92.4168 127.085 91.0447C130.055 90.1299 132.477 82.9037 134.353 69.3659L118.336 74.2989Z\",\n fill: \"#CD7448\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M61.9543 86.4313C65.224 83.3086 67.2069 80.585 67.903 78.2603C82.5311 89.1899 90.8103 94.3555 92.7407 93.757C95.3874 92.9364 116.744 73.7383 124.165 69.1965C124.839 68.524 124.886 74.2737 125.422 73.6545L123.015 95.9693C114.348 102.171 108.826 105.992 106.45 107.432C102.884 109.592 93.5281 113.547 85.0782 106.677C79.4449 102.097 71.7369 95.3485 61.9543 86.4313Z\",\n fill: \"#F4F5FE\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M113.638 110.924C114.986 115.621 114.986 121.514 113.638 132.25L163.179 125.016L160.146 84.7527C158.124 78.0421 155.765 73.3448 153.069 70.6605C149.025 66.6342 127.793 68.6474 122.737 70.6605C117.682 72.6737 116.671 81.7329 111.616 89.7856C106.561 97.8382 111.616 103.878 113.638 110.924Z\",\n fill: \"white\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M144.981 68.5294C142.959 84.9993 137.277 93.2343 127.934 93.2343C113.92 93.2343 117.206 85.8622 118.961 82.4055C120.131 80.101 121.417 75.9995 122.82 70.1008C127.641 68.5622 131.321 67.7028 133.86 67.5228C136.398 67.3429 140.105 67.6784 144.981 68.5294Z\",\n fill: \"#CD7448\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask1_614:19850\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 54,\n y: -5,\n width: 110,\n height: 94\n}, _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M54.2891 -4.25H163.642V88.4622H54.2891V-4.25Z\",\n fill: \"#C4C4C4\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask1_614:19850)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask2_614:19850\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 109,\n y: 68,\n width: 59,\n height: 92\n}, _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M113.638 134.916C114.986 124.179 114.986 115.621 113.638 110.924C111.616 103.878 106.561 97.8382 111.616 89.7856C116.671 81.7329 117.682 72.6737 122.737 70.6605C127.793 68.6474 149.025 66.6342 153.069 70.6605C155.765 73.3448 158.124 78.0421 160.146 84.7527L163.179 125.016C167.898 143.134 168.572 154.207 165.201 158.233C160.146 164.273 158.124 148.167 135.881 139.108C131.163 137.095 123.748 136.258 113.638 134.916Z\",\n fill: \"white\"\n}))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask2_614:19850)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M113.638 134.914C114.986 124.178 114.986 116.46 113.638 111.763C111.616 104.717 106.561 98.6775 111.616 90.6248C116.671 82.5722 117.398 72.8022 122.454 70.789C127.509 68.7758 148.286 65.8747 152.33 69.901C155.026 72.5852 158.124 78.8814 160.146 85.5919V99.2016L163.179 125.855C167.898 143.974 168.572 155.046 165.201 159.072C160.146 165.112 158.124 149.007 135.881 139.947C131.163 137.934 123.748 136.257 113.638 134.914Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M144.981 68.5294C142.959 84.9993 137.277 93.2343 127.934 93.2343C113.92 93.2343 117.206 85.8622 118.961 82.4055C120.131 80.101 121.417 75.9995 122.82 70.1008C127.641 68.5622 131.321 67.7028 133.86 67.5228C136.398 67.3429 140.105 67.6784 144.981 68.5294Z\",\n fill: \"#CD7448\"\n}))), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M116.82 29.6916C113.43 44.1264 112.279 45.8229 111.018 48.9936C110.705 49.7797 110.867 50.6788 111.456 51.287C116.256 56.2417 122.676 57.7896 130.717 55.9306C139.283 53.9503 139.242 50.9745 133.934 26.7936L116.82 29.6916Z\",\n fill: \"#0A1551\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M139.285 50.3741C137.625 63.347 143.19 67.8978 145.1 67.9302C147.009 67.9626 139.698 75.9534 126.067 88.7393C121.606 80.1413 121.107 72.4732 122.5 70.2493C124.59 66.9136 126.529 69.7672 125.813 58.0883C125.343 50.4165 135.544 51.1457 142.81 49.9004C139.285 50.3741 133.529 50.4924 139.285 50.3741Z\",\n fill: \"#CD7448\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.677232,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M125.313 52.9009C126.105 60.1282 126.082 64.1141 126 64.7502C125.878 65.7043 143.282 64.8984 138.312 49.5774C133.342 34.2565 131.68 51.3826 125.313 52.9009Z\",\n fill: \"#BD5826\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask3_614:19850\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 116,\n y: 20,\n width: 38,\n height: 44\n}, _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M148.092 53.4241C143.516 59.5375 137.135 62.8924 128.949 63.4886C120.636 64.0941 115.086 53.2544 116.156 42.1253C116.667 36.8153 117.843 32.1282 122.518 27.2985C132.169 17.3303 141.236 18.6468 149.718 31.2478L153.38 41.0199L148.092 53.4241Z\",\n fill: \"white\"\n}))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask3_614:19850)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M146.966 52.5514C141.857 58.2281 135.197 60.9957 126.988 60.8545C118.652 60.711 114.101 49.4191 116.171 38.4335C117.159 33.1919 118.753 28.6304 123.847 24.241C134.36 15.1816 143.273 17.3065 150.587 30.6155L153.353 40.6748L146.966 52.5514Z\",\n fill: \"#CD7448\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.422879,\n d: \"M134.771 52.7648C132.076 52.3482 130.129 50.5128 130.423 48.6651C130.718 46.8175 133.141 45.6574 135.836 46.0739C138.532 46.4905 140.478 48.3259 140.184 50.1735C139.89 52.0212 137.466 53.1813 134.771 52.7648Z\",\n fill: \"#A44616\"\n}))), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M128.579 52.3527C126.46 53.2577 123.96 52.7908 121.079 50.9518C122.435 54.8036 123.976 56.5563 125.702 56.2099C127.428 55.8636 128.387 54.5778 128.579 52.3527Z\",\n fill: \"#A5330A\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M129.938 34.837C122.116 33.5383 118.933 32.9326 116.227 30.7899C116.384 20.7306 124.661 14.8095 128.497 13.9133C137.368 11.7498 146.999 14.4563 152.91 22.24C153.496 23.0117 153.986 23.8016 154.389 24.6046C154.621 24.9784 154.85 25.3966 155.077 25.8614C158.776 36.5185 160.722 52.0678 159.667 57.8279C156.71 61.6292 132.978 62.4489 135.95 57.6848C136.116 57.4189 136.301 57.1432 136.498 56.8498C137.894 54.7702 139.885 51.8038 139.866 45.1401C139.862 43.5264 139.396 41.6388 138.87 39.5103C138.692 38.7907 138.507 38.0435 138.332 37.2701C137.913 37.1239 137.514 36.9851 137.135 36.8532C135.443 36.2654 134.149 35.8154 133.345 35.4671C132.465 35.0859 133.304 32.5431 133.907 30.7177C134.433 29.1236 134.778 28.0765 133.641 29.4936C132.176 31.3189 131.616 32.7473 131.341 33.867C131.184 34.5038 130.585 34.9444 129.938 34.837Z\",\n fill: \"#0A1551\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M118.165 135.11C123.494 132.113 147.433 138.846 165.674 132.164C175.674 128.501 168.022 107.165 163.852 89.2747C161.213 79.3725 156.845 72.8099 152.863 70.3825L144.201 76.7565L146.406 88.6293C146.406 88.6293 145.036 92.9399 147.923 100.772C150.811 108.604 155.298 118.451 155.298 118.451L112.373 127.456C112.528 131.007 113.902 137.508 118.165 135.11Z\",\n fill: \"white\"\n}))), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M123.877 133.654C121.784 135.32 120.779 135.373 118.278 137.295C116.265 138.259 114.779 138.673 110.412 137.369C107.792 136.587 104.091 136.387 99.3082 136.768L99.3082 136.768C98.7516 136.813 98.2652 136.399 98.2217 135.845C98.2055 135.638 98.2538 135.432 98.3599 135.253C99.5754 133.208 101.943 132.012 105.463 131.662C112.043 131.01 112.862 133.44 116.441 130.344C118.827 128.28 121.306 129.383 123.877 133.654Z\",\n fill: \"#CD7448\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M119.883 137.122C130.5 136.251 149.152 140.857 167.392 134.176C177.393 130.512 169.74 109.177 165.57 91.2864C162.932 81.3842 158.564 74.8216 154.582 72.3942L145.92 78.7682L148.125 90.641C148.125 90.641 146.755 94.9516 149.642 102.783C152.529 110.615 157.017 120.463 157.017 120.463L114.092 129.468C114.246 133.018 113 136.751 119.883 137.122Z\",\n fill: \"url(#paint0_linear_614:19850)\"\n}))), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask4_614:19850\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 99,\n y: 10,\n width: 64,\n height: 79\n}, _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M99 10.75H163V88.75H99V10.75Z\",\n fill: \"#C4C4C4\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask4_614:19850)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask5_614:19850\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 109,\n y: 68,\n width: 59,\n height: 92\n}, _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M113.349 134.916C114.697 124.179 114.697 115.621 113.349 110.924C111.327 103.878 106.272 97.8382 111.327 89.7856C116.382 81.7329 117.393 72.6737 122.448 70.6605C127.504 68.6474 148.736 66.6342 152.78 70.6605C155.476 73.3448 157.835 78.0421 159.857 84.7527L162.89 125.016C167.609 143.134 168.283 154.207 164.912 158.233C159.857 164.273 157.835 148.167 135.592 139.108C130.874 137.095 123.459 136.258 113.349 134.916Z\",\n fill: \"white\"\n}))), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask5_614:19850)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M113.349 134.914C114.697 124.178 114.697 116.46 113.349 111.763C111.327 104.717 106.272 98.6775 111.327 90.6248C116.382 82.5722 117.109 72.8022 122.165 70.789C127.22 68.7758 147.997 65.8747 152.041 69.901C154.737 72.5852 157.835 78.8814 159.857 85.5919V99.2016L162.89 125.855C167.609 143.974 168.283 155.046 164.912 159.072C159.857 165.112 157.835 149.007 135.592 139.947C130.874 137.934 123.459 136.257 113.349 134.914Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M144.692 68.5294C142.67 84.9993 136.988 93.2343 127.645 93.2343C113.631 93.2343 116.917 85.8622 118.672 82.4055C119.842 80.101 121.128 75.9995 122.531 70.1008C127.352 68.5622 131.032 67.7028 133.571 67.5228C136.109 67.3429 139.816 67.6784 144.692 68.5294Z\",\n fill: \"#CD7448\"\n}))), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M116.531 29.6916C113.141 44.1264 111.989 45.8229 110.729 48.9936C110.416 49.7797 110.578 50.6788 111.167 51.287C115.967 56.2417 122.387 57.7896 130.428 55.9306C138.994 53.9503 138.953 50.9745 133.645 26.7936L116.531 29.6916Z\",\n fill: \"#0A1551\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M138.996 50.3741C137.335 63.347 142.901 67.8978 144.811 67.9302C146.72 67.9626 139.409 75.9534 125.778 88.7393C121.317 80.1413 120.818 72.4732 122.211 70.2493C124.301 66.9136 126.24 69.7672 125.524 58.0883C125.054 50.4165 135.255 51.1457 142.521 49.9004C138.996 50.3741 133.24 50.4924 138.996 50.3741Z\",\n fill: \"#CD7448\"\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.677232,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M125.024 52.9009C125.816 60.1282 125.793 64.1141 125.711 64.7502C125.589 65.7043 142.993 64.8984 138.023 49.5774C133.053 34.2565 131.391 51.3826 125.024 52.9009Z\",\n fill: \"#BD5826\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask6_614:19850\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 115,\n y: 20,\n width: 39,\n height: 44\n}, _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M147.803 53.4241C143.227 59.5375 136.846 62.8924 128.66 63.4886C120.347 64.0941 114.797 53.2544 115.867 42.1253C116.377 36.8153 117.553 32.1282 122.229 27.2985C131.88 17.3303 140.947 18.6468 149.429 31.2478L153.091 41.0199L147.803 53.4241Z\",\n fill: \"white\"\n}))), _g4 || (_g4 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask6_614:19850)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M146.677 52.5514C141.567 58.2281 134.908 60.9957 126.699 60.8545C118.363 60.711 113.812 49.4191 115.882 38.4335C116.87 33.1919 118.464 28.6304 123.558 24.241C134.071 15.1816 142.984 17.3065 150.298 30.6155L153.064 40.6748L146.677 52.5514Z\",\n fill: \"#CD7448\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M131.904 37.2051C133.107 37.7927 133.959 38.7351 134.387 39.4446C134.557 39.7257 134.466 40.091 134.185 40.2605C133.905 40.4299 133.539 40.3394 133.37 40.0583C133.041 39.5143 132.35 38.7455 131.383 38.2731C130.438 37.8114 129.218 37.6245 127.756 38.2297C127.453 38.3553 127.106 38.2112 126.98 37.9079C126.854 37.6046 126.998 37.257 127.301 37.1314C129.103 36.385 130.679 36.6068 131.904 37.2051Z\",\n fill: \"#37120C\",\n fillOpacity: 0.25\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M120.443 35.2316C119.482 35.1784 118.689 35.5359 118.177 35.9473C117.922 36.153 117.882 36.527 118.088 36.7828C118.294 37.0386 118.668 37.0792 118.923 36.8735C119.242 36.6174 119.753 36.3838 120.379 36.4184C120.994 36.4524 121.794 36.7494 122.692 37.6869C122.919 37.9241 123.295 37.9326 123.532 37.7058C123.769 37.479 123.777 37.1028 123.55 36.8655C122.487 35.755 121.416 35.2854 120.443 35.2316Z\",\n fill: \"#37120C\",\n fillOpacity: 0.25\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.422879,\n d: \"M134.482 52.7648C131.787 52.3482 129.84 50.5128 130.134 48.6651C130.428 46.8175 132.852 45.6574 135.547 46.0739C138.243 46.4905 140.189 48.3259 139.895 50.1735C139.601 52.0212 137.177 53.1813 134.482 52.7648Z\",\n fill: \"#A44616\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.422879,\n d: \"M112.964 48.3049C110.316 47.6323 108.484 45.6044 108.872 43.7757C109.26 41.9469 111.72 41.0097 114.368 41.6824C117.016 42.3551 118.848 44.3829 118.46 46.2117C118.072 48.0404 115.612 48.9776 112.964 48.3049Z\",\n fill: \"#A44616\"\n}))), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M128.29 52.3527C126.171 53.2577 123.671 52.7908 120.79 50.9518C122.146 54.8036 123.687 56.5563 125.413 56.2099C127.139 55.8636 128.098 54.5778 128.29 52.3527Z\",\n fill: \"#A5330A\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M129.298 42.9497C128.74 42.9402 128.298 42.2692 128.311 41.4511C128.324 40.6329 128.787 39.9773 129.345 39.9868C129.903 39.9962 130.345 40.6672 130.332 41.4854C130.319 42.3035 129.856 42.9591 129.298 42.9497Z\",\n fill: \"#321907\"\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M120.699 41.3989C120.141 41.3894 119.699 40.7185 119.712 39.9003C119.725 39.0821 120.187 38.4265 120.745 38.436C121.303 38.4454 121.745 39.1164 121.732 39.9346C121.72 40.7528 121.257 41.4084 120.699 41.3989Z\",\n fill: \"#321907\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M125.715 40.3462C125.557 40.2281 125.333 40.2596 125.215 40.4167C124.233 41.7208 123.594 42.3555 122.993 42.7944C122.691 43.0152 122.392 43.1914 122.05 43.3811C121.957 43.4328 121.86 43.4857 121.759 43.5409C121.492 43.6866 121.197 43.848 120.868 44.042C119.711 44.7227 119.542 46.2908 120.066 47.4543C120.337 48.0542 120.802 48.5891 121.46 48.8962C122.121 49.2048 122.943 49.2677 123.894 48.9804C124.082 48.9234 124.189 48.7247 124.131 48.5366C124.073 48.3485 123.874 48.2422 123.685 48.2992C122.876 48.5436 122.239 48.4746 121.762 48.2518C121.281 48.0273 120.929 47.6311 120.718 47.164C120.281 46.1935 120.503 45.0843 121.232 44.655C121.551 44.4672 121.831 44.3142 122.095 44.1701C122.198 44.1136 122.299 44.0585 122.399 44.0032C122.749 43.8086 123.079 43.6156 123.417 43.3687C124.096 42.8719 124.784 42.1764 125.787 40.8446C125.905 40.6875 125.873 40.4644 125.715 40.3462Z\",\n fill: \"#8A3110\"\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M129.649 34.837C121.827 33.5383 118.644 32.9326 115.938 30.7899C116.095 20.7306 124.372 14.8095 128.208 13.9133C137.079 11.7498 146.71 14.4563 152.621 22.24C153.207 23.0117 153.697 23.8016 154.1 24.6046C154.332 24.9784 154.561 25.3966 154.788 25.8614C158.487 36.5185 160.433 52.0678 159.378 57.8279C156.421 61.6292 132.689 62.4489 135.661 57.6848C135.827 57.4189 136.012 57.1432 136.209 56.8498C137.605 54.7702 139.596 51.8038 139.577 45.1401C139.573 43.5264 139.106 41.6388 138.581 39.5103C138.403 38.7907 138.218 38.0435 138.043 37.2701C137.624 37.1239 137.225 36.9851 136.846 36.8532C135.154 36.2654 133.859 35.8154 133.056 35.4671C132.176 35.0859 133.015 32.5431 133.618 30.7177C134.144 29.1236 134.489 28.0765 133.352 29.4936C131.887 31.3189 131.327 32.7473 131.052 33.867C130.895 34.5038 130.296 34.9444 129.649 34.837Z\",\n fill: \"#0A1551\"\n})), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M117.876 135.11C123.204 132.113 147.144 138.846 165.384 132.164C175.385 128.501 167.732 107.165 163.563 89.2747C160.924 79.3725 156.556 72.8099 152.574 70.3825L143.912 76.7565L146.117 88.6293C146.117 88.6293 144.747 92.9399 147.634 100.772C150.522 108.604 155.009 118.451 155.009 118.451L112.084 127.456C112.239 131.007 113.612 137.508 117.876 135.11Z\",\n fill: \"white\"\n}))), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 94.4348C0 70.8024 19.1578 51.6445 42.7902 51.6445H155.115C178.747 51.6445 197.905 70.8024 197.905 94.4348C197.905 118.067 178.747 137.225 155.115 137.225H42.7902C19.1578 137.225 0 118.067 0 94.4348Z\",\n fill: \"#E6E6F5\"\n})), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M65.837 81.9592C64.5359 80.8456 63.022 80.0079 61.3875 79.4968C59.7529 78.9858 58.0318 78.8122 56.3281 78.9865L51.2598 76.694C50.8843 76.5178 50.4597 76.4753 50.0567 76.5736C49.6537 76.6718 49.2967 76.9049 49.0444 77.234C48.9237 77.4075 48.8395 77.6037 48.7969 77.8106C48.7543 78.0176 48.7539 78.231 48.7963 78.438C48.8386 78.645 48.9226 78.8413 49.043 79.015C49.1634 79.1886 49.3178 79.336 49.4969 79.4482L52.2516 81.2906L51.0773 81.1933C49.2314 81.0459 47.4788 80.3203 46.0691 79.1196L42.1557 75.7349C41.9286 75.5451 41.6574 75.4154 41.3671 75.3579C41.0767 75.3004 40.7766 75.317 40.4943 75.4059C40.2444 75.4669 40.0146 75.5918 39.8277 75.7684C39.6407 75.945 39.5032 76.1672 39.428 76.4131C39.3529 76.6591 39.3429 76.9203 39.3992 77.1712C39.4554 77.4222 39.5758 77.6541 39.7488 77.8444L44.3203 82.8871C45.2213 83.8663 46.3099 84.6544 47.5215 85.2045C48.733 85.7547 50.0428 86.0557 51.3729 86.0897L66.0279 86.5405L65.837 81.9592Z\",\n fill: \"#EFBB9D\"\n})), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M114.82 31.3168C111.43 45.7517 107.561 80.2673 106.301 83.438C105.988 84.2241 106.15 85.1232 106.739 85.7314C111.538 90.6861 117.959 92.234 126 90.375C134.565 88.3947 137.243 52.5997 131.934 28.4188L114.82 31.3168Z\",\n fill: \"#091141\"\n})), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M59.9562 88.0544C63.226 84.9317 65.2089 82.208 65.9049 79.8834C80.533 90.813 88.8123 95.9785 90.7426 95.38C93.3894 94.5594 114.746 75.3614 122.167 70.8196C122.841 70.147 122.888 75.8967 123.424 75.2776L121.017 97.5923C112.35 103.794 106.828 107.615 104.451 109.055C100.886 111.215 91.53 115.17 83.0801 108.3C77.4469 103.72 69.7389 96.9715 59.9562 88.0544Z\",\n fill: \"#F4F5FE\"\n})), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.592 112.816C111.715 117.572 113.858 121.714 112 132.376C122.036 134.193 128.883 131.142 133.5 133.376L151 125.376L163.5 119.876L157.645 102.462L158.292 88.868C156.591 82.0696 153.796 75.6344 151.231 72.8261C147.382 68.6135 126.491 70.5315 121.346 72.3039C116.2 74.0764 115.009 83.8012 109.577 91.6064C104.144 99.4116 108.907 105.683 110.592 112.816Z\",\n fill: \"white\"\n})), _path35 || (_path35 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M142.981 70.1544C140.959 86.6243 135.277 94.8593 125.934 94.8593C111.92 94.8593 115.206 87.4872 116.961 84.0305C118.131 81.726 119.417 77.6245 120.82 71.7258C125.641 70.1872 129.321 69.3278 131.86 69.1478C134.398 68.9679 138.105 69.3034 142.981 70.1544Z\",\n fill: \"#EFBB9D\"\n})), _path36 || (_path36 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M122.004 47.5359C121.452 47.6172 120.906 47.0268 120.785 46.2173C120.664 45.4078 121.013 44.6856 121.565 44.6043C122.117 44.523 122.663 45.1133 122.784 45.9228C122.905 46.7324 122.556 47.4546 122.004 47.5359Z\",\n fill: \"#321907\"\n})), _path37 || (_path37 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M114.453 47.403C113.901 47.4844 113.355 46.894 113.234 46.0845C113.113 45.275 113.462 44.5528 114.014 44.4715C114.566 44.3901 115.112 44.9805 115.233 45.79C115.354 46.5995 115.005 47.3217 114.453 47.403Z\",\n fill: \"#321907\"\n})), _path38 || (_path38 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M137.285 52.0003C135.625 64.9731 141.59 69.8431 143.5 69.8755C145.409 69.9079 137.698 77.5795 124.067 90.3655C119.606 81.7674 119.107 74.0993 120.5 71.8755C122.59 68.5397 124.529 71.3934 123.813 59.7145C123.343 52.0426 133.544 52.7719 140.811 51.5265C137.285 52.0003 131.529 52.1186 137.285 52.0003Z\",\n fill: \"#EFBB9D\"\n})), _path39 || (_path39 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.677232,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M123.313 54.5259C124.105 61.7532 124.082 65.7391 124 66.3752C123.878 67.3293 141.282 66.5234 136.312 51.2024C131.342 35.8815 129.68 53.0076 123.313 54.5259Z\",\n fill: \"#DC9F7E\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask7_614:19850\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 114,\n y: 22,\n width: 38,\n height: 44\n}, _path40 || (_path40 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M146.092 55.0491C141.516 61.1625 135.135 64.5174 126.949 65.1136C118.636 65.7191 113.086 54.8794 114.156 43.7503C114.667 38.4403 115.843 33.7532 120.518 28.9235C130.169 18.9553 139.236 20.2718 147.718 32.8728L151.38 42.6449L146.092 55.0491Z\",\n fill: \"white\"\n}))), _g5 || (_g5 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask7_614:19850)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M144.966 54.1764C139.857 59.8531 133.197 62.6207 124.988 62.4795C116.652 62.336 112.101 51.0441 114.171 40.0585C115.159 34.8169 116.753 30.2554 121.847 25.866C132.36 16.8066 141.273 18.9315 148.587 32.2405L151.353 42.2998L144.966 54.1764Z\",\n fill: \"#EFBB9D\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M132.771 54.3898C130.076 53.9732 128.129 52.1378 128.423 50.2901C128.718 48.4425 131.141 47.2824 133.836 47.6989C136.532 48.1155 138.478 49.9509 138.184 51.7985C137.89 53.6462 135.466 54.8063 132.771 54.3898Z\",\n fill: \"#EFA77F\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M111.253 49.9299C108.605 49.2573 106.773 47.2294 107.161 45.4007C107.549 43.5719 110.009 42.6347 112.657 43.3074C115.305 43.9801 117.137 46.0079 116.749 47.8367C116.361 49.6654 113.901 50.6026 111.253 49.9299Z\",\n fill: \"#EFA77F\"\n}))), _path41 || (_path41 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M126.024 53.9406C123.906 54.8456 121.406 54.3786 118.524 52.5397C119.88 56.3915 121.422 58.1442 123.148 57.7978C124.874 57.4515 125.833 56.1657 126.024 53.9406Z\",\n fill: \"#A5330A\"\n})), _path42 || (_path42 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M127.587 44.5747C127.029 44.5652 126.587 43.8942 126.6 43.0761C126.613 42.2579 127.076 41.6023 127.634 41.6118C128.192 41.6212 128.634 42.2922 128.621 43.1104C128.608 43.9285 128.145 44.5841 127.587 44.5747Z\",\n fill: \"#0A1551\"\n})), _path43 || (_path43 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M118.988 43.0239C118.43 43.0144 117.988 42.3435 118.001 41.5253C118.014 40.7071 118.476 40.0515 119.035 40.061C119.593 40.0704 120.034 40.7414 120.022 41.5596C120.009 42.3778 119.546 43.0334 118.988 43.0239Z\",\n fill: \"#0A1551\"\n})), _path44 || (_path44 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M142.981 70.1544C140.959 86.6243 135.277 94.8593 125.934 94.8593C111.92 94.8593 115.206 87.4872 116.961 84.0305C118.131 81.726 119.417 77.6245 120.82 71.7258C125.641 70.1872 129.321 69.3278 131.86 69.1478C134.398 68.9679 138.105 69.3034 142.981 70.1544Z\",\n fill: \"#EFBB9D\"\n})), _path45 || (_path45 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M142.201 78.3815L144.406 90.2543C144.406 90.2543 143.036 94.5649 145.923 102.397C148.811 110.229 153.298 120.076 153.298 120.076L163.674 133.789C173.674 130.126 166.022 108.79 161.852 90.8997C159.213 80.9975 154.845 74.4349 150.863 72.0075L142.201 78.3815Z\",\n fill: \"white\"\n})), _path46 || (_path46 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M144.23 81.3875L146.435 93.2604C146.435 93.2604 145.065 97.571 147.952 105.403C150.84 113.235 155.327 123.082 155.327 123.082L164.499 135.374C174.499 131.711 168.05 111.797 163.881 93.9058C161.242 84.0035 156.874 77.4409 152.892 75.0135L144.23 81.3875Z\",\n fill: \"url(#paint1_linear_614:19850)\"\n})), _path47 || (_path47 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M142.501 69.375C131.301 71.775 125.167 70.0417 123.501 68.875C122.701 69.275 120.834 71.375 120 72.375C118.5 76.0417 115.201 84.075 114.001 86.875C112.501 90.375 115.001 92.375 118.501 96.375C122.001 100.375 133.001 96.875 137.001 95.875C140.201 95.075 144.001 78.5417 145.501 70.375C143.501 69.975 142.667 69.5417 142.501 69.375Z\",\n fill: \"white\"\n})), _path48 || (_path48 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M127.938 36.462C120.116 35.1633 116.933 34.5576 114.227 32.4149C114.384 22.3556 122.661 16.4345 126.497 15.5383C135.368 13.3748 144.999 16.0813 150.91 23.865C151.496 24.6367 151.986 25.4266 152.389 26.2296C152.621 26.6034 152.85 27.0216 153.077 27.4864C156.776 38.1435 156.679 78.257 155.623 84.0171C152.666 87.8184 128.935 88.6381 131.907 83.874C132.073 83.6081 132.258 83.3324 132.455 83.039C133.85 80.9594 137.885 53.4288 137.866 46.7651C137.862 45.1514 137.396 43.2638 136.87 41.1353C136.692 40.4157 136.507 39.6685 136.332 38.8951C135.913 38.7489 135.514 38.6101 135.135 38.4782C133.443 37.8904 132.149 37.4404 131.345 37.0921C130.465 36.7109 131.304 34.1681 131.907 32.3427C132.433 30.7486 132.778 29.7015 131.641 31.1186C130.176 32.9439 129.616 34.3723 129.341 35.492C129.184 36.1288 128.585 36.5694 127.938 36.462Z\",\n fill: \"#091141\"\n})), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 145.5,\n cy: 16.875,\n r: 9.5,\n fill: \"#091141\"\n})), _path49 || (_path49 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M129.897 38.4111C129.897 38.4111 126.839 37.5696 126.481 38.8692C126.481 38.8692 126.241 39.7411 129.025 40.4416C131.81 41.1422 132.489 41.0659 132.888 40.2713C133.288 39.4766 131.379 38.7038 129.897 38.4111Z\",\n fill: \"#091141\"\n})), _path50 || (_path50 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M118.797 36.4602C118.797 36.4602 121.442 36.6162 121.438 37.9085C121.438 37.9085 121.428 38.7739 119.107 38.5703C116.785 38.3667 116.107 37.9467 116.011 37.2345C115.916 36.5223 117.552 36.2713 118.797 36.4602Z\",\n fill: \"#091141\"\n})), _path51 || (_path51 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M121.942 45.389L121 48.2849L122.873 48.7786\",\n stroke: \"#D97D4A\",\n strokeWidth: 0.919783,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n})), _path52 || (_path52 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M124.604 130.031L132.629 129.412L132.384 137.438H125.434L124.604 130.031Z\",\n fill: \"#EFBB9D\"\n})), _path53 || (_path53 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M126.861 129.813L127.262 131.419L128.065 137.438H108C108.401 133.425 114.019 129.412 118.032 129.412C121.243 129.412 126.058 129.68 126.861 129.813Z\",\n fill: \"#EFBB9D\"\n})), _path54 || (_path54 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M161.399 122.431L130 123.372L132 137.375L162 136.875C163.085 136.729 164.344 136.671 165.256 136.065C166.256 135.4 167.941 134.131 168.495 133.187C169.05 132.242 169.382 131.184 169.467 130.092C169.551 129.001 169.387 127.904 168.985 126.886C168.388 125.411 167.321 124.174 165.949 123.369C164.578 122.563 162.978 122.233 161.399 122.431Z\",\n fill: \"#F4F6FF\"\n})), _path55 || (_path55 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.134 31.2582C39.5049 31.2582 39.0603 30.8194 39.0601 29.1831C39.058 14.5092 39.0582 19.091 39.06 4.41714C39.0601 2.85541 39.5295 2.37824 41.1004 2.37789C55.7861 2.37404 51.2159 2.37404 65.9015 2.37789C67.4504 2.37824 67.9399 2.87413 67.9402 4.42922C67.943 19.1031 67.9429 14.5213 67.9406 29.1952C67.9403 30.8131 67.4816 31.258 65.8476 31.2582C58.5049 31.2591 60.7899 31.2586 53.4472 31.2586C46.1335 31.2586 48.4477 31.2591 41.134 31.2582ZM65.3567 29.1956C65.6453 29.1956 65.8792 28.9617 65.8792 28.6731V23.0464C65.8792 22.7579 65.6453 22.5239 65.3567 22.5239H59.73C59.4415 22.5239 59.2075 22.7579 59.2075 23.0464V28.6731C59.2075 28.9617 59.4415 29.1956 59.73 29.1956H65.3567ZM50.6871 29.1956H56.3138C56.6024 29.1956 56.8363 28.9617 56.8363 28.6731V23.0464C56.8363 22.7579 56.6024 22.5239 56.3138 22.5239H50.6871C50.3985 22.5239 50.1646 22.7579 50.1646 23.0464V28.6731C50.1646 28.9617 50.3985 29.1956 50.6871 29.1956ZM41.6442 29.1956H47.2709C47.5594 29.1956 47.7934 28.9617 47.7934 28.6731V23.0464C47.7934 22.7579 47.5594 22.5239 47.2709 22.5239H41.6442C41.3556 22.5239 41.1217 22.7579 41.1217 23.0464V28.6731C41.1217 28.9617 41.3556 29.1956 41.6442 29.1956ZM59.73 20.1527H65.3567C65.6453 20.1527 65.8792 19.9188 65.8792 19.6302V14.0035C65.8792 13.715 65.6453 13.481 65.3567 13.481H59.73C59.4415 13.481 59.2075 13.715 59.2075 14.0035V19.6302C59.2075 19.9188 59.4415 20.1527 59.73 20.1527ZM50.6871 20.1527H56.3138C56.6024 20.1527 56.8363 19.9188 56.8363 19.6302V14.0035C56.8363 13.715 56.6024 13.481 56.3138 13.481H50.6871C50.3985 13.481 50.1646 13.715 50.1646 14.0035V19.6302C50.1646 19.9188 50.3985 20.1527 50.6871 20.1527ZM41.6442 20.1527H47.2709C47.5594 20.1527 47.7934 19.9188 47.7934 19.6302V14.0035C47.7934 13.715 47.5594 13.481 47.2709 13.481H41.6442C41.3556 13.481 41.1217 13.715 41.1217 14.0035V19.6302C41.1217 19.9188 41.3556 20.1527 41.6442 20.1527ZM50.6871 11.1098H56.3138C56.6024 11.1098 56.8363 10.9685 56.8363 10.7942V7.396C56.8363 7.22172 56.6024 7.08045 56.3138 7.08045H50.6871C50.3985 7.08045 50.1646 7.22172 50.1646 7.396V10.7942C50.1646 10.9685 50.3985 11.1098 50.6871 11.1098ZM59.7133 11.1098H65.34C65.6285 11.1098 65.8625 10.9685 65.8625 10.7942V7.396C65.8625 7.22172 65.6285 7.08045 65.34 7.08045H59.7133C59.4247 7.08045 59.1908 7.22172 59.1908 7.396V10.7942C59.1908 10.9685 59.4247 11.1098 59.7133 11.1098ZM41.6442 11.1098H47.2709C47.5594 11.1098 47.7934 10.9685 47.7934 10.7942V7.396C47.7934 7.22172 47.5594 7.08045 47.2709 7.08045H41.6442C41.3556 7.08045 41.1217 7.22172 41.1217 7.396V10.7942C41.1217 10.9685 41.3556 11.1098 41.6442 11.1098Z\",\n fill: \"white\"\n})), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 40.6641,\n y: 4.78125,\n width: 25.6744,\n height: 24.8721,\n fill: \"white\"\n})), _path56 || (_path56 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M59.1172 7.38672C59.1172 6.83443 59.5649 6.38672 60.1172 6.38672H64.8629C65.4152 6.38672 65.8629 6.83443 65.8629 7.38672V10.2007C65.8629 10.753 65.4152 11.2007 64.8629 11.2007H60.1172C59.5649 11.2007 59.1172 10.753 59.1172 10.2007V7.38672Z\",\n fill: \"#0D953B\"\n})), _path57 || (_path57 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M59.1172 14.6074C59.1172 14.0551 59.5649 13.6074 60.1172 13.6074H64.5358C65.0881 13.6074 65.5358 14.0551 65.5358 14.6074V19.026C65.5358 19.5783 65.0881 20.026 64.5358 20.026H60.1172C59.5649 20.026 59.1172 19.5783 59.1172 19.026V14.6074Z\",\n fill: \"#FFB629\"\n})), _path58 || (_path58 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M59.1172 23.4336C59.1172 22.8813 59.5649 22.4336 60.1172 22.4336H64.5358C65.0881 22.4336 65.5358 22.8813 65.5358 23.4336V27.8522C65.5358 28.4045 65.0881 28.8522 64.5358 28.8522H60.1172C59.5649 28.8522 59.1172 28.4045 59.1172 27.8522V23.4336Z\",\n fill: \"#FFB629\"\n})), _path59 || (_path59 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M50.166 7.38672C50.166 6.83443 50.6137 6.38672 51.166 6.38672H56.0378C56.59 6.38672 57.0378 6.83443 57.0378 7.38672V10.2007C57.0378 10.753 56.59 11.2007 56.0378 11.2007H51.166C50.6137 11.2007 50.166 10.753 50.166 10.2007V7.38672Z\",\n fill: \"#0D953B\"\n})), _path60 || (_path60 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M50.2929 14.6074C50.2929 14.0551 50.7407 13.6074 51.2929 13.6074H55.7116C56.2639 13.6074 56.7116 14.0551 56.7116 14.6074V19.026C56.7116 19.5783 56.2639 20.026 55.7116 20.026H51.2929C50.7407 20.026 50.2929 19.5783 50.2929 19.026V14.6074Z\",\n fill: \"#FF6100\"\n})), _path61 || (_path61 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M50.2929 23.4336C50.2929 22.8813 50.7407 22.4336 51.2929 22.4336H55.7116C56.2639 22.4336 56.7116 22.8813 56.7116 23.4336V27.8522C56.7116 28.4045 56.2639 28.8522 55.7116 28.8522H51.2929C50.7407 28.8522 50.2929 28.4045 50.2929 27.8522V23.4336Z\",\n fill: \"#FF6100\"\n})), _path62 || (_path62 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.0645 7.38672C41.0645 6.83443 41.5122 6.38672 42.0645 6.38672H46.8842C47.4365 6.38672 47.8842 6.83443 47.8842 7.38672V10.2007C47.8842 10.753 47.4365 11.2007 46.8842 11.2007H42.0645C41.5122 11.2007 41.0645 10.753 41.0645 10.2007V7.38672Z\",\n fill: \"#0D953B\"\n})), _path63 || (_path63 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.0645 14.6074C41.0645 14.0551 41.5122 13.6074 42.0645 13.6074H46.8842C47.4365 13.6074 47.8842 14.0551 47.8842 14.6074V19.026C47.8842 19.5783 47.4365 20.026 46.8842 20.026H42.0645C41.5122 20.026 41.0645 19.5783 41.0645 19.026V16.8167V14.6074Z\",\n fill: \"#0099FF\"\n})), _path64 || (_path64 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.0645 23.4336C41.0645 22.8813 41.5122 22.4336 42.0645 22.4336H46.8842C47.4365 22.4336 47.8842 22.8813 47.8842 23.4336V27.8522C47.8842 28.4045 47.4365 28.8522 46.8842 28.8522H42.0645C41.5122 28.8522 41.0645 28.4045 41.0645 27.8522V25.6429V23.4336Z\",\n fill: \"#0099FF\"\n})), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 38.3086,\n y: 1.625,\n width: 30.3837,\n height: 30.3837,\n rx: 2.75,\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path65 || (_path65 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.0754 71.3754C19.4463 71.3754 19.0017 70.9366 19.0015 69.3003C18.9994 54.6264 18.9996 59.2082 19.0014 44.5343C19.0015 42.9726 19.4709 42.4954 21.0418 42.4951C35.7275 42.4912 31.1573 42.4912 45.8429 42.4951C47.3918 42.4954 47.8813 42.9913 47.8816 44.5464C47.8844 59.2203 47.8843 54.6385 47.882 69.3124C47.8817 70.9303 47.4231 71.3752 45.789 71.3754C38.4463 71.3763 40.7313 71.3758 33.3886 71.3758C26.0749 71.3758 28.3891 71.3763 21.0754 71.3754ZM45.2981 69.3128C45.5867 69.3128 45.8206 69.0789 45.8206 68.7903V63.1636C45.8206 62.8751 45.5867 62.6411 45.2981 62.6411H39.6714C39.3829 62.6411 39.1489 62.8751 39.1489 63.1636V68.7903C39.1489 69.0789 39.3829 69.3128 39.6714 69.3128H45.2981ZM30.6285 69.3128H36.2552C36.5438 69.3128 36.7777 69.0789 36.7777 68.7903V63.1636C36.7777 62.8751 36.5438 62.6411 36.2552 62.6411H30.6285C30.3399 62.6411 30.106 62.8751 30.106 63.1636V68.7903C30.106 69.0789 30.3399 69.3128 30.6285 69.3128ZM21.5856 69.3128H27.2123C27.5008 69.3128 27.7348 69.0789 27.7348 68.7903V63.1636C27.7348 62.8751 27.5008 62.6411 27.2123 62.6411H21.5856C21.297 62.6411 21.0631 62.8751 21.0631 63.1636V68.7903C21.0631 69.0789 21.297 69.3128 21.5856 69.3128ZM39.6714 60.2699H45.2981C45.5867 60.2699 45.8206 60.036 45.8206 59.7474V54.1207C45.8206 53.8321 45.5867 53.5982 45.2981 53.5982H39.6714C39.3829 53.5982 39.1489 53.8321 39.1489 54.1207V59.7474C39.1489 60.036 39.3829 60.2699 39.6714 60.2699ZM30.6285 60.2699H36.2552C36.5438 60.2699 36.7777 60.036 36.7777 59.7474V54.1207C36.7777 53.8321 36.5438 53.5982 36.2552 53.5982H30.6285C30.3399 53.5982 30.106 53.8321 30.106 54.1207V59.7474C30.106 60.036 30.3399 60.2699 30.6285 60.2699ZM21.5856 60.2699H27.2123C27.5008 60.2699 27.7348 60.036 27.7348 59.7474V54.1207C27.7348 53.8321 27.5008 53.5982 27.2123 53.5982H21.5856C21.297 53.5982 21.0631 53.8321 21.0631 54.1207V59.7474C21.0631 60.036 21.297 60.2699 21.5856 60.2699ZM30.6285 51.227H36.2552C36.5438 51.227 36.7777 51.0857 36.7777 50.9114V47.5132C36.7777 47.3389 36.5438 47.1976 36.2552 47.1976H30.6285C30.3399 47.1976 30.106 47.3389 30.106 47.5132V50.9114C30.106 51.0857 30.3399 51.227 30.6285 51.227ZM39.6547 51.227H45.2814C45.5699 51.227 45.8039 51.0857 45.8039 50.9114V47.5132C45.8039 47.3389 45.5699 47.1976 45.2814 47.1976H39.6547C39.3661 47.1976 39.1322 47.3389 39.1322 47.5132V50.9114C39.1322 51.0857 39.3661 51.227 39.6547 51.227ZM21.5856 51.227H27.2123C27.5008 51.227 27.7348 51.0857 27.7348 50.9114V47.5132C27.7348 47.3389 27.5008 47.1976 27.2123 47.1976H21.5856C21.297 47.1976 21.0631 47.3389 21.0631 47.5132V50.9114C21.0631 51.0857 21.297 51.227 21.5856 51.227Z\",\n fill: \"white\"\n})), _rect3 || (_rect3 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 20.6055,\n y: 44.8984,\n width: 25.6744,\n height: 24.8721,\n fill: \"white\"\n})), _path66 || (_path66 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39.0586 47.5039C39.0586 46.9516 39.5063 46.5039 40.0586 46.5039H44.8043C45.3566 46.5039 45.8043 46.9516 45.8043 47.5039V50.3179C45.8043 50.8701 45.3566 51.3179 44.8043 51.3179H40.0586C39.5063 51.3179 39.0586 50.8701 39.0586 50.3179V47.5039Z\",\n fill: \"#0D953B\"\n})), _path67 || (_path67 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39.0586 54.7246C39.0586 54.1723 39.5063 53.7246 40.0586 53.7246H44.4772C45.0295 53.7246 45.4772 54.1723 45.4772 54.7246V59.1432C45.4772 59.6955 45.0295 60.1432 44.4772 60.1432H40.0586C39.5063 60.1432 39.0586 59.6955 39.0586 59.1432V54.7246Z\",\n fill: \"#FFB629\"\n})), _path68 || (_path68 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39.0586 63.5508C39.0586 62.9985 39.5063 62.5508 40.0586 62.5508H44.4772C45.0295 62.5508 45.4772 62.9985 45.4772 63.5508V67.9694C45.4772 68.5217 45.0295 68.9694 44.4772 68.9694H40.0586C39.5063 68.9694 39.0586 68.5217 39.0586 67.9694V63.5508Z\",\n fill: \"#FFB629\"\n})), _path69 || (_path69 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M30.1074 47.5039C30.1074 46.9516 30.5551 46.5039 31.1074 46.5039H35.9792C36.5314 46.5039 36.9792 46.9516 36.9792 47.5039V50.3179C36.9792 50.8701 36.5315 51.3179 35.9792 51.3179H31.1074C30.5551 51.3179 30.1074 50.8701 30.1074 50.3179V47.5039Z\",\n fill: \"#0D953B\"\n})), _path70 || (_path70 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M30.2324 54.7246C30.2324 54.1723 30.6801 53.7246 31.2324 53.7246H35.651C36.2033 53.7246 36.651 54.1723 36.651 54.7246V59.1432C36.651 59.6955 36.2033 60.1432 35.651 60.1432H31.2324C30.6801 60.1432 30.2324 59.6955 30.2324 59.1432V54.7246Z\",\n fill: \"#FF6100\"\n})), _path71 || (_path71 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M30.2324 63.5508C30.2324 62.9985 30.6801 62.5508 31.2324 62.5508H35.651C36.2033 62.5508 36.651 62.9985 36.651 63.5508V67.9694C36.651 68.5217 36.2033 68.9694 35.651 68.9694H31.2324C30.6801 68.9694 30.2324 68.5217 30.2324 67.9694V63.5508Z\",\n fill: \"#FF6100\"\n})), _path72 || (_path72 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.0059 47.5039C21.0059 46.9516 21.4536 46.5039 22.0059 46.5039H26.8256C27.3779 46.5039 27.8256 46.9516 27.8256 47.5039V50.3179C27.8256 50.8701 27.3779 51.3179 26.8256 51.3179H22.0059C21.4536 51.3179 21.0059 50.8701 21.0059 50.3179V47.5039Z\",\n fill: \"#0D953B\"\n})), _path73 || (_path73 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.0059 54.7246C21.0059 54.1723 21.4536 53.7246 22.0059 53.7246H26.8256C27.3779 53.7246 27.8256 54.1723 27.8256 54.7246V59.1432C27.8256 59.6955 27.3779 60.1432 26.8256 60.1432H22.0059C21.4536 60.1432 21.0059 59.6955 21.0059 59.1432V56.9339V54.7246Z\",\n fill: \"#0099FF\"\n})), _path74 || (_path74 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.0059 63.5508C21.0059 62.9985 21.4536 62.5508 22.0059 62.5508H26.8256C27.3779 62.5508 27.8256 62.9985 27.8256 63.5508V67.9694C27.8256 68.5217 27.3779 68.9694 26.8256 68.9694H22.0059C21.4536 68.9694 21.0059 68.5217 21.0059 67.9694V65.7601V63.5508Z\",\n fill: \"#0099FF\"\n})), _rect4 || (_rect4 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 18.25,\n y: 41.7422,\n width: 30.3837,\n height: 30.3837,\n rx: 2.75,\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path75 || (_path75 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M60.3898 71.3754C58.7607 71.3754 58.3162 70.9366 58.316 69.3003C58.3139 54.6264 58.3141 59.2082 58.3158 44.5343C58.316 42.9726 58.7854 42.4954 60.3563 42.4951C75.0419 42.4912 70.4717 42.4912 85.1574 42.4951C86.7062 42.4954 87.1957 42.9913 87.1961 44.5464C87.1989 59.2203 87.1987 54.6385 87.1965 69.3124C87.1961 70.9303 86.7375 71.3752 85.1035 71.3754C77.7608 71.3763 80.0458 71.3758 72.703 71.3758C65.3893 71.3758 67.7035 71.3763 60.3898 71.3754ZM84.6126 69.3128C84.9011 69.3128 85.1351 69.0789 85.1351 68.7903V63.1636C85.1351 62.8751 84.9011 62.6411 84.6126 62.6411H78.9859C78.6973 62.6411 78.4634 62.8751 78.4634 63.1636V68.7903C78.4634 69.0789 78.6973 69.3128 78.9859 69.3128H84.6126ZM69.943 69.3128H75.5697C75.8582 69.3128 76.0921 69.0789 76.0921 68.7903V63.1636C76.0921 62.8751 75.8582 62.6411 75.5697 62.6411H69.943C69.6544 62.6411 69.4205 62.8751 69.4205 63.1636V68.7903C69.4205 69.0789 69.6544 69.3128 69.943 69.3128ZM60.9 69.3128H66.5267C66.8153 69.3128 67.0492 69.0789 67.0492 68.7903V63.1636C67.0492 62.8751 66.8153 62.6411 66.5267 62.6411H60.9C60.6115 62.6411 60.3776 62.8751 60.3776 63.1636V68.7903C60.3776 69.0789 60.6115 69.3128 60.9 69.3128ZM78.9859 60.2699H84.6126C84.9011 60.2699 85.1351 60.036 85.1351 59.7474V54.1207C85.1351 53.8321 84.9011 53.5982 84.6126 53.5982H78.9859C78.6973 53.5982 78.4634 53.8321 78.4634 54.1207V59.7474C78.4634 60.036 78.6973 60.2699 78.9859 60.2699ZM69.943 60.2699H75.5697C75.8582 60.2699 76.0921 60.036 76.0921 59.7474V54.1207C76.0921 53.8321 75.8582 53.5982 75.5697 53.5982H69.943C69.6544 53.5982 69.4205 53.8321 69.4205 54.1207V59.7474C69.4205 60.036 69.6544 60.2699 69.943 60.2699ZM60.9 60.2699H66.5267C66.8153 60.2699 67.0492 60.036 67.0492 59.7474V54.1207C67.0492 53.8321 66.8153 53.5982 66.5267 53.5982H60.9C60.6115 53.5982 60.3776 53.8321 60.3776 54.1207V59.7474C60.3776 60.036 60.6115 60.2699 60.9 60.2699ZM69.943 51.227H75.5697C75.8582 51.227 76.0921 51.0857 76.0921 50.9114V47.5132C76.0921 47.3389 75.8582 47.1976 75.5697 47.1976H69.943C69.6544 47.1976 69.4205 47.3389 69.4205 47.5132V50.9114C69.4205 51.0857 69.6544 51.227 69.943 51.227ZM78.9691 51.227H84.5958C84.8844 51.227 85.1183 51.0857 85.1183 50.9114V47.5132C85.1183 47.3389 84.8844 47.1976 84.5958 47.1976H78.9691C78.6806 47.1976 78.4466 47.3389 78.4466 47.5132V50.9114C78.4466 51.0857 78.6806 51.227 78.9691 51.227ZM60.9 51.227H66.5267C66.8153 51.227 67.0492 51.0857 67.0492 50.9114V47.5132C67.0492 47.3389 66.8153 47.1976 66.5267 47.1976H60.9C60.6115 47.1976 60.3776 47.3389 60.3776 47.5132V50.9114C60.3776 51.0857 60.6115 51.227 60.9 51.227Z\",\n fill: \"white\"\n})), _rect5 || (_rect5 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 59.9199,\n y: 44.8984,\n width: 25.6744,\n height: 24.8721,\n fill: \"white\"\n})), _path76 || (_path76 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M78.373 47.5039C78.373 46.9516 78.8208 46.5039 79.373 46.5039H84.1188C84.6711 46.5039 85.1188 46.9516 85.1188 47.5039V50.3179C85.1188 50.8701 84.6711 51.3179 84.1188 51.3179H79.373C78.8208 51.3179 78.373 50.8701 78.373 50.3179V47.5039Z\",\n fill: \"#0D953B\"\n})), _path77 || (_path77 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M78.373 54.7246C78.373 54.1723 78.8208 53.7246 79.373 53.7246H83.7917C84.3439 53.7246 84.7917 54.1723 84.7917 54.7246V59.1432C84.7917 59.6955 84.3439 60.1432 83.7917 60.1432H79.373C78.8208 60.1432 78.373 59.6955 78.373 59.1432V54.7246Z\",\n fill: \"#FFB629\"\n})), _path78 || (_path78 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M78.373 63.5508C78.373 62.9985 78.8208 62.5508 79.373 62.5508H83.7917C84.3439 62.5508 84.7917 62.9985 84.7917 63.5508V67.9694C84.7917 68.5217 84.3439 68.9694 83.7917 68.9694H79.373C78.8208 68.9694 78.373 68.5217 78.373 67.9694V63.5508Z\",\n fill: \"#FFB629\"\n})), _path79 || (_path79 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.4218 47.5039C69.4218 46.9516 69.8696 46.5039 70.4218 46.5039H75.2936C75.8459 46.5039 76.2936 46.9516 76.2936 47.5039V50.3179C76.2936 50.8701 75.8459 51.3179 75.2936 51.3179H70.4218C69.8696 51.3179 69.4218 50.8701 69.4218 50.3179V47.5039Z\",\n fill: \"#0D953B\"\n})), _path80 || (_path80 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.5469 54.7246C69.5469 54.1723 69.9946 53.7246 70.5469 53.7246H74.9655C75.5178 53.7246 75.9655 54.1723 75.9655 54.7246V59.1432C75.9655 59.6955 75.5178 60.1432 74.9655 60.1432H70.5469C69.9946 60.1432 69.5469 59.6955 69.5469 59.1432V54.7246Z\",\n fill: \"#FF6100\"\n})), _path81 || (_path81 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.5469 63.5508C69.5469 62.9985 69.9946 62.5508 70.5469 62.5508H74.9655C75.5178 62.5508 75.9655 62.9985 75.9655 63.5508V67.9694C75.9655 68.5217 75.5178 68.9694 74.9655 68.9694H70.5469C69.9946 68.9694 69.5469 68.5217 69.5469 67.9694V63.5508Z\",\n fill: \"#FF6100\"\n})), _path82 || (_path82 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M60.3203 47.5039C60.3203 46.9516 60.768 46.5039 61.3203 46.5039H66.1401C66.6924 46.5039 67.1401 46.9516 67.1401 47.5039V50.3179C67.1401 50.8701 66.6924 51.3179 66.1401 51.3179H61.3203C60.768 51.3179 60.3203 50.8701 60.3203 50.3179V47.5039Z\",\n fill: \"#0D953B\"\n})), _path83 || (_path83 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M60.3203 54.7246C60.3203 54.1723 60.768 53.7246 61.3203 53.7246H66.1401C66.6924 53.7246 67.1401 54.1723 67.1401 54.7246V59.1432C67.1401 59.6955 66.6924 60.1432 66.1401 60.1432H61.3203C60.768 60.1432 60.3203 59.6955 60.3203 59.1432V56.9339V54.7246Z\",\n fill: \"#0099FF\"\n})), _path84 || (_path84 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M60.3203 63.5508C60.3203 62.9985 60.768 62.5508 61.3203 62.5508H66.1401C66.6924 62.5508 67.1401 62.9985 67.1401 63.5508V67.9694C67.1401 68.5217 66.6924 68.9694 66.1401 68.9694H61.3203C60.768 68.9694 60.3203 68.5217 60.3203 67.9694V65.7601V63.5508Z\",\n fill: \"#0099FF\"\n})), _rect6 || (_rect6 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 57.5645,\n y: 41.7422,\n width: 30.3837,\n height: 30.3837,\n rx: 2.75,\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear_614:19850\",\n x1: 155.19,\n y1: 90.2549,\n x2: 152.764,\n y2: 107.265,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"white\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#F3F5FE\"\n})), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint1_linear_614:19850\",\n x1: 159.999,\n y1: 122.374,\n x2: 148.27,\n y2: 68.4241,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#F4F5FE\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"white\"\n})))));\nexport default SvgNoTablesIcon;","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _path12, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _path20, _path21, _path22, _path23, _path24, _path25, _circle, _path26, _path27, _path28, _path29, _path30, _path31, _path32, _path33, _path34, _path35, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoReportsIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 198 145\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 101.437C0 77.8043 19.1578 58.6465 42.7902 58.6465H155.115C178.747 58.6465 197.905 77.8043 197.905 101.437C197.905 125.069 178.747 144.227 155.115 144.227H42.7902C19.1578 144.227 0 125.069 0 101.437Z\",\n fill: \"#E6E6F5\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M36.9316 5.17167C36.9316 2.52254 39.0792 0.375 41.7283 0.375H64.5125C67.1616 0.375 69.3092 2.52254 69.3092 5.17167V33.9517C69.3092 36.6008 67.1616 38.7483 64.5125 38.7483H41.7283C39.0792 38.7483 36.9316 36.6008 36.9316 33.9517V5.17167Z\",\n fill: \"white\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M64.5125 1.57417H41.7283C39.7415 1.57417 38.1308 3.18482 38.1308 5.17167V33.9517C38.1308 35.9385 39.7415 37.5492 41.7283 37.5492H64.5125C66.4993 37.5492 68.11 35.9385 68.11 33.9517V5.17167C68.11 3.18482 66.4993 1.57417 64.5125 1.57417ZM41.7283 0.375C39.0792 0.375 36.9316 2.52254 36.9316 5.17167V33.9517C36.9316 36.6008 39.0792 38.7483 41.7283 38.7483H64.5125C67.1616 38.7483 69.3092 36.6008 69.3092 33.9517V5.17167C69.3092 2.52254 67.1616 0.375 64.5125 0.375H41.7283Z\",\n fill: \"#D3DCEF\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42.3809 10.3907C42.3809 9.67225 42.9633 9.08984 43.6817 9.08984H46.2834C47.0018 9.08984 47.5842 9.67225 47.5842 10.3907V29.9032H42.3809V10.3907Z\",\n fill: \"#0099FF\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M50.3672 16.2442C50.3672 15.5258 50.9496 14.9434 51.668 14.9434H54.2697C54.9881 14.9434 55.5705 15.5258 55.5705 16.2442V29.9029H50.3672V16.2442Z\",\n fill: \"#FF6100\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M58.3555 11.0411C58.3555 10.3226 58.9379 9.74023 59.6563 9.74023H62.258C62.9764 9.74023 63.5588 10.3226 63.5588 11.0411V29.9031H58.3555V11.0411Z\",\n fill: \"#FFB629\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 46.7986C16 44.1495 18.1475 42.002 20.7967 42.002H43.5808C46.23 42.002 48.3775 44.1495 48.3775 46.7986V75.5786C48.3775 78.2278 46.23 80.3753 43.5808 80.3753H20.7967C18.1475 80.3753 16 78.2278 16 75.5786V46.7986Z\",\n fill: \"white\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M43.5808 43.2011H20.7967C18.8098 43.2011 17.1992 44.8118 17.1992 46.7986V75.5786C17.1992 77.5655 18.8098 79.1761 20.7967 79.1761H43.5808C45.5677 79.1761 47.1783 77.5655 47.1783 75.5786V46.7986C47.1783 44.8118 45.5677 43.2011 43.5808 43.2011ZM20.7967 42.002C18.1475 42.002 16 44.1495 16 46.7986V75.5786C16 78.2278 18.1475 80.3753 20.7967 80.3753H43.5808C46.23 80.3753 48.3775 78.2278 48.3775 75.5786V46.7986C48.3775 44.1495 46.23 42.002 43.5808 42.002H20.7967Z\",\n fill: \"#D3DCEF\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.4492 52.0176C21.4492 51.2992 22.0316 50.7168 22.7501 50.7168H25.3517C26.0701 50.7168 26.6526 51.2992 26.6526 52.0176V71.5301H21.4492V52.0176Z\",\n fill: \"#0099FF\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M29.4375 57.8711C29.4375 57.1527 30.0199 56.5703 30.7383 56.5703H33.34C34.0584 56.5703 34.6408 57.1527 34.6408 57.8711V71.5299H29.4375V57.8711Z\",\n fill: \"#FF6100\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37.4238 52.668C37.4238 51.9496 38.0062 51.3672 38.7247 51.3672H41.3263C42.0448 51.3672 42.6272 51.9496 42.6272 52.668V71.5301H37.4238V52.668Z\",\n fill: \"#FFB629\"\n})), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56.7949 46.7986C56.7949 44.1495 58.9425 42.002 61.5916 42.002H84.3758C87.0249 42.002 89.1724 44.1495 89.1724 46.7986V75.5786C89.1724 78.2278 87.0249 80.3753 84.3758 80.3753H61.5916C58.9425 80.3753 56.7949 78.2278 56.7949 75.5786V46.7986Z\",\n fill: \"white\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M84.3758 43.2011H61.5916C59.6047 43.2011 57.9941 44.8118 57.9941 46.7986V75.5786C57.9941 77.5655 59.6047 79.1761 61.5916 79.1761H84.3758C86.3626 79.1761 87.9733 77.5655 87.9733 75.5786V46.7986C87.9733 44.8118 86.3626 43.2011 84.3758 43.2011ZM61.5916 42.002C58.9425 42.002 56.7949 44.1495 56.7949 46.7986V75.5786C56.7949 78.2278 58.9425 80.3753 61.5916 80.3753H84.3758C87.0249 80.3753 89.1724 78.2278 89.1724 75.5786V46.7986C89.1724 44.1495 87.0249 42.002 84.3758 42.002H61.5916Z\",\n fill: \"#D3DCEF\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M62.2441 52.0176C62.2441 51.2992 62.8265 50.7168 63.545 50.7168H66.1466C66.8651 50.7168 67.4475 51.2992 67.4475 52.0176V71.5301H62.2441V52.0176Z\",\n fill: \"#0099FF\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M70.2305 57.8711C70.2305 57.1527 70.8129 56.5703 71.5313 56.5703H74.133C74.8514 56.5703 75.4338 57.1527 75.4338 57.8711V71.5299H70.2305V57.8711Z\",\n fill: \"#FF6100\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M78.2188 52.668C78.2188 51.9496 78.8012 51.3672 79.5196 51.3672H82.1212C82.8397 51.3672 83.4221 51.9496 83.4221 52.668V71.5301H78.2188V52.668Z\",\n fill: \"#FFB629\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.0707 103.549C67.3802 102.288 65.451 101.383 63.4004 100.89C61.3498 100.397 59.2207 100.326 57.1416 100.68L50.725 98.2814C50.2491 98.096 49.7238 98.0788 49.2368 98.2327C48.7497 98.3867 48.3303 98.7025 48.0473 99.1277C47.9134 99.3508 47.8261 99.5988 47.7908 99.8566C47.7556 100.114 47.7727 100.377 47.8418 100.628C47.9108 100.878 48.0302 101.113 48.1925 101.316C48.3548 101.52 48.5566 101.688 48.7859 101.811L52.3227 103.848L50.8717 103.825C48.5914 103.796 46.3782 103.049 44.5469 101.69L39.4594 97.8537C39.1647 97.6392 38.8207 97.5022 38.4592 97.4556C38.0977 97.4089 37.7303 97.4539 37.3907 97.5865C37.0888 97.6821 36.8167 97.8545 36.6015 98.0868C36.3863 98.3192 36.2357 98.6036 36.1636 98.912C36.0916 99.2204 36.1008 99.5422 36.1907 99.8459C36.2805 100.15 36.4476 100.425 36.6758 100.644L42.7089 106.463C43.8966 107.592 45.2993 108.471 46.8333 109.047C48.3673 109.623 50.0015 109.885 51.6387 109.817L69.6831 109.163L69.0707 103.549Z\",\n fill: \"#B46458\"\n})), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M104.657 85.0995C96.9777 98.6859 90.622 112.979 85.6775 127.782C85.2695 129.045 85.1818 130.391 85.4228 131.696C85.6638 133.002 86.2256 134.227 87.0578 135.262C90.8717 139.967 99.4037 137.94 102.284 132.921C102.284 132.921 124.25 95.1214 123.021 93.8093C122.734 93.4872 104.657 85.0995 104.657 85.0995Z\",\n fill: \"url(#paint0_linear_614:20297)\"\n})), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M130.469 80.6016L107.252 83.599C106.12 83.7385 105.086 84.3132 104.37 85.2011C103.654 86.089 103.311 87.2204 103.415 88.3565L117 144.376L166.5 143.876L163.202 88.5152C163.271 87.9372 163.225 87.351 163.066 86.7908C162.908 86.2306 162.641 85.7073 162.28 85.2507C161.919 84.794 161.471 84.4129 160.963 84.1294C160.455 83.846 159.895 83.6659 159.317 83.599L130.469 80.6016Z\",\n fill: \"white\"\n})), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M141.807 92.865C146.99 108.7 153.141 124.174 160.225 139.195C161.363 141.548 164.678 143.119 167.236 143.372C172.995 143.957 176.35 137.968 174.947 132.473C174.947 132.473 163.026 86.1336 160.589 85.0574C160.2 84.8781 141.807 92.865 141.807 92.865Z\",\n fill: \"url(#paint1_linear_614:20297)\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M121.352 68.0419L122.509 81.6648C122.906 86.4223 125.982 88.753 130.534 88.3248C134.419 87.9442 138.463 85.6922 138.003 81.4898L135.196 60.1445L121.352 68.0419Z\",\n fill: \"#B46458\"\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M124.615 72.338C116.829 73.004 109.883 67.2163 109.105 60.6827L107.52 46.9964C106.994 43.1192 107.993 39.1899 110.306 36.0342C112.619 32.8784 116.065 30.7423 119.921 30.0757C128.009 28.807 137.016 34.3257 138.285 42.7623L139.379 53.435C139.866 57.8884 138.596 62.3563 135.839 65.887C133.081 69.4177 129.054 71.7322 124.615 72.338Z\",\n fill: \"#B46458\"\n})), _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M134.067 46.2851C126.788 40.6554 130.451 35.8978 130.451 35.8978L135.637 33.8203C152.986 33.8203 141.885 50.6934 141.885 50.6934L139.744 57.8777C139.744 57.8777 138.048 74.2592 121.936 73.609C109.82 73.1174 109.582 62.8411 109.582 62.8411C116.496 58.0202 131.244 61.0493 131.244 61.0493C132.83 58.0521 134.067 46.2851 134.067 46.2851Z\",\n fill: \"#091141\"\n})), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M131.103 36.6104C123.912 37.0574 116.702 37.1154 109.504 36.7846C109.504 36.7846 101.464 33.7715 104.747 28.8555C107.379 25.0019 113.754 28.1419 113.754 28.1419C113.754 28.1419 113.643 24.1774 116.45 23.0991C119.796 21.7987 129.597 20.7519 137.938 34.0412L131.103 36.6104Z\",\n fill: \"#091141\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M122.381 81.6482L118.068 82.2034C118.068 82.2034 116.149 89.3872 126.124 90.1325C136.527 90.8779 140.634 86.961 142.633 81.9021L131.183 79.6504L122.381 81.6482Z\",\n fill: \"#B46458\"\n})), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 140,\n cy: 51.375,\n r: 4,\n fill: \"#B46458\"\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M116.782 53.5938L116.734 56.6386L118.669 56.5593\",\n stroke: \"#893B2F\",\n strokeWidth: 0.919783,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M112.752 51.5131C112.164 51.5031 111.698 50.7964 111.712 49.9345C111.726 49.0727 112.213 48.3821 112.801 48.3921C113.389 48.4021 113.854 49.1088 113.841 49.9707C113.827 50.8325 113.339 51.5231 112.752 51.5131Z\",\n fill: \"#0A1551\"\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M123.752 51.5131C123.164 51.5031 122.698 50.7964 122.712 49.9345C122.726 49.0727 123.213 48.3821 123.801 48.3921C124.389 48.4021 124.854 49.1088 124.841 49.9707C124.827 50.8325 124.339 51.5231 123.752 51.5131Z\",\n fill: \"#0A1551\"\n})), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M124.601 44.4004C124.601 44.4004 121.43 44.4006 121.43 45.7485C121.43 45.7485 121.43 46.6529 124.3 46.5894C127.17 46.526 127.805 46.2723 127.979 45.4001C128.154 44.5279 126.108 44.2894 124.601 44.4004Z\",\n fill: \"#091141\"\n})), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M112.816 44.8345C112.816 44.8345 115.462 44.7005 115.599 45.9856C115.599 45.9856 115.684 46.8468 113.354 46.8982C111.023 46.9496 110.303 46.6062 110.131 45.9088C109.958 45.2113 111.557 44.7828 112.816 44.8345Z\",\n fill: \"#091141\"\n})), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M117 64.584L122.555 64.1706C122.555 64.1706 122.799 66.2381 119.921 66.3721C117.043 66.5061 117 64.584 117 64.584Z\",\n fill: \"white\"\n})), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M93.8821 119.624L67.5011 99.3745L57.7583 113.229L86.5332 135.082C87.561 135.89 88.806 136.372 90.1094 136.467C92.3382 136.604 94.5348 135.882 96.248 134.45C97.9613 133.018 99.0615 130.984 99.3224 128.766C99.5536 126.855 99.145 124.922 98.1607 123.268C97.1764 121.614 95.6719 120.332 93.8821 119.624Z\",\n fill: \"white\"\n})), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M117.688 135.146L127.688 134.375L127.381 144.375H118.723L117.688 135.146Z\",\n fill: \"#B46458\"\n})), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M120.5 134.875L121 136.875L122 144.375H97C97.5 139.375 104.5 134.375 109.5 134.375C113.5 134.375 119.5 134.708 120.5 134.875Z\",\n fill: \"#B46458\"\n})), _path35 || (_path35 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M164.171 126.923L125.049 128.096L124.5 144.375L168.5 143.875C169.852 143.693 169.1 144.016 170.236 143.261C171.372 142.505 172.322 141.501 173.012 140.324C173.703 139.148 174.117 137.829 174.223 136.469C174.328 135.109 174.123 133.743 173.623 132.473C172.879 130.636 171.55 129.095 169.84 128.092C168.131 127.088 166.138 126.677 164.171 126.923Z\",\n fill: \"#F4F6FF\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear_614:20297\",\n x1: 96.5,\n y1: 120.875,\n x2: 156.139,\n y2: 53.9192,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"white\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#A1A9EE\"\n})), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint1_linear_614:20297\",\n x1: 173.499,\n y1: 142.771,\n x2: 153.836,\n y2: 84.7064,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.307292,\n stopColor: \"#F4F6FF\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"white\"\n})))));\nexport default SvgNoReportsIcon;","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _circle, _path11, _path12, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _path20, _rect, _path21, _path22, _path23, _path24, _path25, _rect2, _rect3, _path26, _path27, _path28, _path29, _path30, _rect4, _rect5, _path31, _path32, _path33, _path34, _path35, _rect6, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoApprovalsIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 198 140\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 97.0607C0 73.4284 19.1578 54.2705 42.7902 54.2705H155.115C178.747 54.2705 197.905 73.4284 197.905 97.0607C197.905 120.693 178.747 139.851 155.115 139.851H42.7902C19.1578 139.851 0 120.693 0 97.0607Z\",\n fill: \"#E6E6F5\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M66.0704 99.1741C64.3799 97.9131 62.4507 97.0085 60.4001 96.5154C58.3495 96.0222 56.2203 95.9509 54.1413 96.3054L47.7247 93.9064C47.2488 93.721 46.7235 93.7038 46.2364 93.8577C45.7494 94.0117 45.33 94.3275 45.047 94.7527C44.9131 94.9758 44.8258 95.2238 44.7905 95.4816C44.7553 95.7395 44.7724 96.0017 44.8414 96.2526C44.9105 96.5035 45.0299 96.7377 45.1922 96.9411C45.3545 97.1446 45.5563 97.3129 45.7856 97.436L49.3224 99.4727L47.8714 99.4501C45.5911 99.4212 43.3779 98.6741 41.5466 97.3149L36.4591 93.4787C36.1643 93.2642 35.8204 93.1272 35.4589 93.0806C35.0974 93.0339 34.73 93.0789 34.3904 93.2115C34.0885 93.3071 33.8164 93.4795 33.6012 93.7118C33.386 93.9442 33.2354 94.2286 33.1633 94.537C33.0913 94.8454 33.1005 95.1672 33.1904 95.4709C33.2802 95.7746 33.4472 96.0497 33.6755 96.2692L39.7086 102.088C40.8963 103.217 42.299 104.096 43.833 104.672C45.367 105.248 47.0012 105.51 48.6384 105.442L66.6828 104.788L66.0704 99.1741Z\",\n fill: \"#B46458\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M101.657 80.7244C93.9774 94.3108 87.6216 108.604 82.6772 123.407C82.2691 124.67 82.1815 126.015 82.4225 127.321C82.6635 128.627 83.2253 129.852 84.0575 130.887C87.8714 135.592 96.4034 133.565 99.2834 128.546C99.2834 128.546 121.25 90.7463 120.02 89.4342C119.733 89.1121 101.657 80.7244 101.657 80.7244Z\",\n fill: \"url(#paint0_linear_2531_7001)\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M127.468 76.2256L104.252 79.223C103.12 79.3625 102.086 79.9372 101.37 80.8251C100.654 81.713 100.311 82.8444 100.414 83.9805L114 140L163.843 139.873L160.202 84.1393C160.27 83.5612 160.224 82.975 160.066 82.4148C159.908 81.8547 159.64 81.3314 159.279 80.8747C158.919 80.418 158.471 80.0369 157.963 79.7534C157.454 79.47 156.895 79.2899 156.317 79.223L127.468 76.2256Z\",\n fill: \"white\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M138.807 88.491C143.99 104.326 150.141 119.8 157.225 134.821C158.363 137.174 161.677 138.745 164.236 138.998C169.994 139.583 173.35 133.594 171.946 128.099C171.946 128.099 160.026 81.7595 157.588 80.6834C157.199 80.5041 138.807 88.491 138.807 88.491Z\",\n fill: \"url(#paint1_linear_2531_7001)\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M118.351 63.666L119.509 77.2888C119.905 82.0463 122.982 84.377 127.533 83.9488C131.419 83.5682 135.462 81.3163 135.002 77.1138L132.196 55.7686L118.351 63.666Z\",\n fill: \"#B46458\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M121.615 67.9639C113.828 68.63 106.882 62.8423 106.105 56.3087L104.519 42.6224C103.994 38.7452 104.993 34.8159 107.306 31.6601C109.619 28.5044 113.065 26.3683 116.92 25.7017C125.008 24.433 134.016 29.9517 135.285 38.3883L136.379 49.0609C136.866 53.5144 135.596 57.9822 132.838 61.513C130.081 65.0437 126.054 67.3582 121.615 67.9639Z\",\n fill: \"#B46458\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M131.067 41.9091C123.788 36.2794 127.451 31.5219 127.451 31.5219L132.637 29.4443C149.986 29.4443 138.885 46.3174 138.885 46.3174L136.744 53.5017C136.744 53.5017 135.047 69.8832 118.935 69.233C106.819 68.7414 106.582 58.4651 106.582 58.4651C113.496 53.6442 128.244 56.6733 128.244 56.6733C129.83 53.6761 131.067 41.9091 131.067 41.9091Z\",\n fill: \"#091141\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M128.103 32.2354C120.912 32.6824 113.701 32.7404 106.504 32.4096C106.504 32.4096 98.4636 29.3965 101.746 24.4805C104.379 20.6269 110.754 23.7669 110.754 23.7669C110.754 23.7669 110.643 19.8024 113.45 18.7241C116.796 17.4237 126.596 16.3769 134.938 29.6662L128.103 32.2354Z\",\n fill: \"#091141\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M119.381 77.2732L115.068 77.8284C115.068 77.8284 113.149 85.0122 123.124 85.7575C133.527 86.5029 137.634 82.586 139.632 77.5271L128.183 75.2754L119.381 77.2732Z\",\n fill: \"#B46458\"\n})), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 137,\n cy: 47,\n r: 4,\n fill: \"#B46458\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M113.782 49.2178L113.734 52.2626L115.669 52.1833\",\n stroke: \"#893B2F\",\n strokeWidth: 0.919783,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n})), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M109.751 47.1391C109.164 47.1291 108.698 46.4224 108.712 45.5605C108.725 44.6987 109.213 44.0081 109.801 44.0181C110.388 44.028 110.854 44.7348 110.84 45.5966C110.827 46.4585 110.339 47.1491 109.751 47.1391Z\",\n fill: \"#0A1551\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M120.751 47.1391C120.164 47.1291 119.698 46.4224 119.712 45.5605C119.725 44.6987 120.213 44.0081 120.801 44.0181C121.388 44.028 121.854 44.7348 121.84 45.5966C121.827 46.4585 121.339 47.1491 120.751 47.1391Z\",\n fill: \"#0A1551\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M121.601 40.0254C121.601 40.0254 118.429 40.0256 118.429 41.3735C118.429 41.3735 118.429 42.2779 121.3 42.2144C124.17 42.151 124.804 41.8973 124.979 41.0251C125.153 40.1529 123.108 39.9144 121.601 40.0254Z\",\n fill: \"#091141\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M109.815 40.4595C109.815 40.4595 112.462 40.3255 112.598 41.6106C112.598 41.6106 112.683 42.4718 110.353 42.5232C108.023 42.5746 107.303 42.2312 107.13 41.5338C106.958 40.8363 108.557 40.4078 109.815 40.4595Z\",\n fill: \"#091141\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M114 60.2094L119.555 59.796C119.555 59.796 119.799 61.8636 116.921 61.9976C114.043 62.1316 114 60.2094 114 60.2094Z\",\n fill: \"white\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M90.8818 115.25L64.5008 95L54.758 108.855L83.5329 130.708C84.5607 131.515 85.8057 131.997 87.1091 132.093C89.3379 132.229 91.5345 131.507 93.2477 130.075C94.961 128.643 96.0612 126.609 96.3221 124.391C96.5533 122.481 96.1447 120.547 95.1604 118.893C94.1761 117.239 92.6716 115.958 90.8818 115.25Z\",\n fill: \"white\"\n})), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M114.687 130.771L124.687 130L124.381 140H115.722L114.687 130.771Z\",\n fill: \"#B46458\"\n})), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M117.5 130.5L118 132.5L119 140H93.9998C94.4998 135 101.5 130 106.5 130C110.5 130 116.5 130.333 117.5 130.5Z\",\n fill: \"#B46458\"\n})), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M161.171 122.548L122.049 123.721L121.5 140L165.5 139.5C166.852 139.318 166.1 139.641 167.236 138.886C168.372 138.13 169.322 137.126 170.012 135.949C170.703 134.773 171.117 133.454 171.223 132.094C171.328 130.734 171.123 129.368 170.623 128.098C169.879 126.261 168.55 124.72 166.84 123.717C165.131 122.713 163.138 122.302 161.171 122.548Z\",\n fill: \"#F4F6FF\"\n})), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 34.5,\n y: 0.5,\n width: 29.0625,\n height: 36,\n rx: 5.28125,\n fill: \"white\",\n stroke: \"#C8CEED\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M49.0309 11.1233V14.4454M49.0309 14.4454H42.4965C41.7302 14.4454 41.109 15.0666 41.109 15.8329V16.3619M49.0309 14.4454H55.3097C56.076 14.4454 56.6972 15.0666 56.6972 15.8329V16.3619\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.73438\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M49.0309 27.0568L49.0309 23.2622M49.0309 23.2622L42.4965 23.2622C41.7302 23.2622 41.109 22.641 41.109 21.8747L41.109 21.3456M49.0309 23.2622L55.3097 23.2622C56.076 23.2622 56.6972 22.641 56.6972 21.8747L56.6972 21.3456\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.73438\n})), _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M36.2537 18.7898C36.2537 17.3785 37.3978 16.2344 38.8091 16.2344H43.92C45.3313 16.2344 46.4754 17.3785 46.4754 18.7898C46.4754 20.2011 45.3313 21.3452 43.92 21.3452H38.8091C37.3978 21.3452 36.2537 20.2011 36.2537 18.7898Z\",\n fill: \"#FFB629\"\n})), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M51.5851 18.7898C51.5851 17.3785 52.7292 16.2344 54.1406 16.2344H59.2515C60.6628 16.2344 61.8069 17.3785 61.8069 18.7898C61.8069 20.2011 60.6628 21.3452 59.2515 21.3452H54.1406C52.7292 21.3452 51.5851 20.2011 51.5851 18.7898Z\",\n fill: \"#FFB629\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M43.9205 29.6121C43.9205 28.2008 45.0646 27.0567 46.4759 27.0567H51.5868C52.9981 27.0567 54.1422 28.2008 54.1422 29.6121C54.1422 31.0234 52.9981 32.1675 51.5868 32.1675H46.4759C45.0646 32.1675 43.9205 31.0234 43.9205 29.6121Z\",\n fill: \"#0099FF\"\n})), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 43.9206,\n y: 6.01276,\n width: 10.2218,\n height: 5.11088,\n rx: 2.55544,\n fill: \"#FF6100\"\n})), _rect3 || (_rect3 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 15.5,\n y: 40.5,\n width: 29.0625,\n height: 36,\n rx: 5.28125,\n fill: \"white\",\n stroke: \"#C8CEED\"\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M30.0309 51.1233V54.4454M30.0309 54.4454H23.4965C22.7302 54.4454 22.109 55.0666 22.109 55.8329V56.3619M30.0309 54.4454H36.3097C37.076 54.4454 37.6972 55.0666 37.6972 55.8329V56.3619\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.73438\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M30.0309 67.0568L30.0309 63.2622M30.0309 63.2622L23.4965 63.2622C22.7302 63.2622 22.109 62.641 22.109 61.8747L22.109 61.3456M30.0309 63.2622L36.3097 63.2622C37.076 63.2622 37.6972 62.641 37.6972 61.8747L37.6972 61.3456\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.73438\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.2537 58.7898C17.2537 57.3785 18.3978 56.2344 19.8091 56.2344H24.92C26.3313 56.2344 27.4754 57.3785 27.4754 58.7898C27.4754 60.2011 26.3313 61.3452 24.92 61.3452H19.8091C18.3978 61.3452 17.2537 60.2011 17.2537 58.7898Z\",\n fill: \"#FFB629\"\n})), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M32.5851 58.7898C32.5851 57.3785 33.7292 56.2344 35.1406 56.2344H40.2515C41.6628 56.2344 42.8069 57.3785 42.8069 58.7898C42.8069 60.2011 41.6628 61.3452 40.2515 61.3452H35.1406C33.7292 61.3452 32.5851 60.2011 32.5851 58.7898Z\",\n fill: \"#FFB629\"\n})), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.9205 69.6121C24.9205 68.2008 26.0646 67.0567 27.4759 67.0567H32.5868C33.9981 67.0567 35.1422 68.2008 35.1422 69.6121C35.1422 71.0234 33.9981 72.1675 32.5868 72.1675H27.4759C26.0646 72.1675 24.9205 71.0234 24.9205 69.6121Z\",\n fill: \"#0099FF\"\n})), _rect4 || (_rect4 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 24.9206,\n y: 46.0128,\n width: 10.2218,\n height: 5.11088,\n rx: 2.55544,\n fill: \"#FF6100\"\n})), _rect5 || (_rect5 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 54.5,\n y: 40.5,\n width: 29.0625,\n height: 36,\n rx: 5.28125,\n fill: \"white\",\n stroke: \"#C8CEED\"\n})), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.0309 51.1233V54.4454M69.0309 54.4454H62.4965C61.7302 54.4454 61.109 55.0666 61.109 55.8329V56.3619M69.0309 54.4454H75.3097C76.076 54.4454 76.6972 55.0666 76.6972 55.8329V56.3619\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.73438\n})), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.0309 67.0568L69.0309 63.2622M69.0309 63.2622L62.4965 63.2622C61.7302 63.2622 61.109 62.641 61.109 61.8747L61.109 61.3456M69.0309 63.2622L75.3097 63.2622C76.076 63.2622 76.6972 62.641 76.6972 61.8747L76.6972 61.3456\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.73438\n})), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56.2537 58.7898C56.2537 57.3785 57.3978 56.2344 58.8091 56.2344H63.92C65.3313 56.2344 66.4754 57.3785 66.4754 58.7898C66.4754 60.2011 65.3313 61.3452 63.92 61.3452H58.8091C57.3978 61.3452 56.2537 60.2011 56.2537 58.7898Z\",\n fill: \"#FFB629\"\n})), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M71.5851 58.7898C71.5851 57.3785 72.7292 56.2344 74.1406 56.2344H79.2515C80.6628 56.2344 81.8069 57.3785 81.8069 58.7898C81.8069 60.2011 80.6628 61.3452 79.2515 61.3452H74.1406C72.7292 61.3452 71.5851 60.2011 71.5851 58.7898Z\",\n fill: \"#FFB629\"\n})), _path35 || (_path35 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.9205 69.6121C63.9205 68.2008 65.0646 67.0567 66.4759 67.0567H71.5868C72.9981 67.0567 74.1422 68.2008 74.1422 69.6121C74.1422 71.0234 72.9981 72.1675 71.5868 72.1675H66.4759C65.0646 72.1675 63.9205 71.0234 63.9205 69.6121Z\",\n fill: \"#0099FF\"\n})), _rect6 || (_rect6 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 63.9206,\n y: 46.0128,\n width: 10.2218,\n height: 5.11088,\n rx: 2.55544,\n fill: \"#FF6100\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear_2531_7001\",\n x1: 93.4997,\n y1: 116.5,\n x2: 153.138,\n y2: 49.5441,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"white\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#A1A9EE\"\n})), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint1_linear_2531_7001\",\n x1: 170.498,\n y1: 138.397,\n x2: 150.836,\n y2: 80.3324,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.307292,\n stopColor: \"#F4F6FF\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"white\"\n})))));\nexport default SvgNoApprovalsIcon;","var _path, _g, _g2, _g3, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _g4, _path9, _path10, _path11, _path12, _g5, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _g6, _path20, _path21, _path22, _path23, _g7, _path24, _path25, _path26, _path27, _path28, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoSignDocumentsIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 199 145\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.284 102.074c0-23.195 19.167-42 42.81-42h112.379c23.644 0 42.811 18.805 42.811 42 0 23.196-19.167 42-42.811 42H43.095c-23.644 0-42.811-18.804-42.811-42Z\",\n fill: \"#E6E6F5\"\n})), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M38.964 35.597V9.019a4.983 4.983 0 0 1 4.984-4.983h16.267a.83.83 0 0 1 .587.243l3.91 3.91 3.909 3.909a.83.83 0 0 1 .243.587v22.912a4.983 4.983 0 0 1-4.983 4.983H43.948a4.983 4.983 0 0 1-4.984-4.983Z\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.778 19.218c0-1.046.848-1.893 1.894-1.893h14.485a1.894 1.894 0 0 1 0 3.787H46.672a1.894 1.894 0 0 1-1.894-1.894Z\",\n fill: \"#09F\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.778 25.73c0-1.046.848-1.894 1.894-1.894h14.485a1.894 1.894 0 0 1 0 3.787H46.672a1.894 1.894 0 0 1-1.894-1.893Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M49.44 32.443c0-.122-.047-.098-.116-.096-.093.002-1.836 1.086-1.836 1.086s-.762.328-.967.494c-1.192 1.15-1.592.166-1.662 0-.236-.56.079-1.068.47-1.484.203-.164 1.191-1.008 2.253-1.514.547-.26 1.016-.543 1.65-.557.25-.025.977-.098 1.44.233.346.245.378 1.144.448 1.306.129.303.228.372.228.954 0 .284-.534 1.22-.673 1.884.067-.038.567-.202.867-.3.435-.142.687-.12 1.125-.327l.342-.162c1.737-.824 4.308-1.694 5.061-1.914.22-.064 1.18-.176 1.74.22.516.366.78 1.422.78 1.422s.05.239.705 0v1.517c-.362-.109-.638-.123-.853-.281-.467-.492-.744-1.227-.964-1.163-1.481.434-2.16.996-5.484 2.143-.662.228-1.142.596-1.66.68-.725.12-1.273.24-1.85.183-.41-.041-.574-.145-.831-.396-.346-.339-.282-.702-.42-1.166-.148-.491-.32-.772-.304-1.278.015-.423.303-1.062.303-1.062s.209-.3.209-.422Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M38.964 9.019a4.983 4.983 0 0 1 4.984-4.983h17.441a.83.83 0 0 1 .588.243l6.644 6.644a.83.83 0 0 1 .243.588v24.086a4.983 4.983 0 0 1-4.983 4.983H43.948a4.983 4.983 0 0 1-4.984-4.983V9.019Zm4.984-3.322a3.322 3.322 0 0 0-3.322 3.322v26.578a3.322 3.322 0 0 0 3.322 3.322H63.88a3.322 3.322 0 0 0 3.322-3.322V12.34H63.05A2.492 2.492 0 0 1 60.56 9.85V5.697H43.948Z\",\n fill: \"#C8CEED\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M71.934 23.239a1.387 1.387 0 0 0-1.962 0l-3.55 3.55-4.532 4.532-.745 2.98a.694.694 0 0 0 .84.841l2.98-.745 4.532-4.531 3.551-3.551a1.387 1.387 0 0 0 0-1.962l-1.114-1.114Z\",\n fill: \"#0A1551\"\n}))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#b)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.03 75.463V48.886a4.983 4.983 0 0 1 4.984-4.984h16.267a.83.83 0 0 1 .588.244l3.91 3.91 3.909 3.909a.83.83 0 0 1 .243.587v22.911a4.983 4.983 0 0 1-4.983 4.984H24.014a4.983 4.983 0 0 1-4.983-4.984Z\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.845 59.085c0-1.046.848-1.894 1.893-1.894h14.485a1.894 1.894 0 1 1 0 3.787H26.738a1.894 1.894 0 0 1-1.893-1.893Z\",\n fill: \"#09F\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.845 65.596c0-1.046.848-1.893 1.893-1.893h14.485a1.894 1.894 0 1 1 0 3.787H26.738a1.894 1.894 0 0 1-1.893-1.894Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M29.507 72.31c0-.123-.047-.098-.117-.096-.093.002-1.835 1.086-1.835 1.086s-.762.328-.968.494c-1.191 1.15-1.59.166-1.66 0-.237-.56.078-1.068.469-1.485.203-.164 1.19-1.007 2.253-1.513.546-.26 1.016-.543 1.65-.557.249-.025.976-.098 1.44.232.345.245.378 1.144.447 1.307.13.302.228.372.228.954 0 .284-.534 1.22-.673 1.884.068-.038.567-.202.868-.3.435-.142.686-.12 1.125-.327l.341-.162c1.738-.825 4.309-1.694 5.062-1.914.22-.065 1.18-.176 1.739.22.517.366.781 1.421.781 1.421s.05.24.705 0v1.518c-.362-.109-.638-.124-.853-.282-.467-.491-.745-1.227-.964-1.162-1.481.434-2.16.996-5.484 2.142-.663.229-1.143.597-1.66.681-.726.12-1.274.24-1.85.183-.41-.041-.574-.145-.831-.397-.346-.338-.282-.701-.421-1.165-.147-.492-.32-.772-.303-1.278.014-.424.303-1.062.303-1.062s.208-.3.208-.423Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M19.031 48.886a4.983 4.983 0 0 1 4.983-4.984h17.442a.83.83 0 0 1 .587.244l6.645 6.644a.83.83 0 0 1 .243.587v24.086a4.983 4.983 0 0 1-4.983 4.984H24.014a4.983 4.983 0 0 1-4.983-4.984V48.886Zm4.983-3.323a3.322 3.322 0 0 0-3.322 3.323v26.577a3.322 3.322 0 0 0 3.322 3.323h19.934a3.322 3.322 0 0 0 3.322-3.323V52.209h-4.153a2.492 2.492 0 0 1-2.492-2.492v-4.153h-16.61Z\",\n fill: \"#C8CEED\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M52 63.105a1.387 1.387 0 0 0-1.961 0l-3.551 3.551-4.532 4.532-.745 2.98a.693.693 0 0 0 .841.84l2.98-.744 4.532-4.532 3.55-3.55a1.387 1.387 0 0 0 0-1.962L52 63.106Z\",\n fill: \"#0A1551\"\n}))), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#c)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M58.898 75.463V48.886a4.983 4.983 0 0 1 4.983-4.984h16.267a.83.83 0 0 1 .587.244l3.91 3.91 3.91 3.909a.83.83 0 0 1 .243.587v22.911a4.983 4.983 0 0 1-4.984 4.984H63.881a4.983 4.983 0 0 1-4.983-4.984Z\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M64.711 59.085c0-1.046.848-1.894 1.894-1.894H81.09a1.894 1.894 0 1 1 0 3.787H66.605a1.894 1.894 0 0 1-1.894-1.893Z\",\n fill: \"#09F\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M64.711 65.596c0-1.046.848-1.893 1.894-1.893H81.09a1.894 1.894 0 1 1 0 3.787H66.605a1.894 1.894 0 0 1-1.894-1.894Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.374 72.31c0-.123-.047-.098-.117-.096-.093.002-1.836 1.086-1.836 1.086s-.762.328-.967.494c-1.191 1.15-1.591.166-1.661 0-.236-.56.078-1.068.47-1.485.203-.164 1.19-1.007 2.252-1.513.547-.26 1.017-.543 1.65-.557.25-.025.977-.098 1.441.232.345.245.378 1.144.447 1.307.13.302.228.372.228.954 0 .284-.534 1.22-.673 1.884.068-.038.567-.202.868-.3.435-.142.686-.12 1.124-.327l.342-.162c1.737-.825 4.309-1.694 5.061-1.914.221-.065 1.181-.176 1.74.22.516.366.78 1.421.78 1.421s.05.24.705 0v1.518c-.361-.109-.637-.124-.852-.282-.467-.491-.745-1.227-.964-1.162-1.482.434-2.161.996-5.484 2.142-.663.229-1.143.597-1.66.681-.726.12-1.274.24-1.85.183-.41-.041-.575-.145-.832-.397-.346-.338-.281-.701-.42-1.165-.148-.492-.32-.772-.303-1.278.014-.424.303-1.062.303-1.062s.208-.3.208-.423Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M58.898 48.886a4.983 4.983 0 0 1 4.983-4.984h17.442a.83.83 0 0 1 .587.244l6.644 6.644a.83.83 0 0 1 .244.587v24.086a4.983 4.983 0 0 1-4.984 4.984H63.881a4.983 4.983 0 0 1-4.983-4.984V48.886Zm4.983-3.323a3.322 3.322 0 0 0-3.322 3.323v26.577a3.322 3.322 0 0 0 3.322 3.323h19.933a3.322 3.322 0 0 0 3.323-3.323V52.209h-4.153a2.492 2.492 0 0 1-2.492-2.492v-4.153H63.881Z\",\n fill: \"#C8CEED\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M91.867 63.105a1.387 1.387 0 0 0-1.961 0l-3.551 3.551-4.532 4.532-.745 2.98a.693.693 0 0 0 .841.84l2.98-.744 4.531-4.532 3.551-3.55a1.387 1.387 0 0 0 0-1.962l-1.114-1.114Z\",\n fill: \"#0A1551\"\n}))), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"d\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 0,\n y: 58,\n width: 199,\n height: 86\n}, _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.284 101.135c0-23.632 19.158-42.79 42.79-42.79H155.4c23.632 0 42.79 19.158 42.79 42.79 0 23.633-19.158 42.791-42.79 42.791H43.074c-23.632 0-42.79-19.158-42.79-42.791Z\",\n fill: \"#F3F3FE\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#d)\"\n}, _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M115.62 81.621C107.186 92.26 100.284 99.12 94.915 102.2c-8.054 4.623-8.643-.235-38.14-20.744-2.052-.862-3.715-1.091-6.495 2-1.662 1.848-5.236 2.334-10.721 1.459a1.014 1.014 0 0 0-1.16.836c-.045.274.025.553.193.773 1.35 1.769 3.686 2.733 7.009 2.893 6.592.317 7.3-2.157 11.01.758 3.709 2.914 23.583 26.213 35.57 26.791 11.985.579 27.733-17.227 32.188-18.599 2.97-.915 5.393-8.141 7.268-21.679l-16.017 4.933Z\",\n fill: \"#CD7448\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M59.239 93.755c3.27-3.123 5.253-5.846 5.949-8.171 14.628 10.93 22.907 16.095 24.837 15.496 2.647-.82 24.004-20.018 31.425-24.56.673-.672.721 5.077 1.257 4.458l-2.407 22.315c-8.667 6.202-14.189 10.023-16.566 11.462-3.565 2.16-12.921 6.116-21.371-.754-5.633-4.58-13.341-11.329-23.124-20.246Z\",\n fill: \"#F4F5FE\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.922 118.248c1.348 4.697 1.348 10.59 0 21.326l49.541-7.234-3.033-40.263c-2.022-6.71-4.381-11.408-7.077-14.093-4.045-4.026-25.277-2.013-30.332 0-5.055 2.014-6.066 11.073-11.121 19.126-5.056 8.052 0 14.092 2.022 21.138Z\",\n fill: \"#fff\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M142.265 75.853c-2.023 16.47-7.705 24.705-17.047 24.705-14.014 0-10.728-7.372-8.973-10.829 1.169-2.304 2.456-6.406 3.859-12.304 4.821-1.539 8.501-2.398 11.039-2.578 2.538-.18 6.245.155 11.122 1.006Z\",\n fill: \"#CD7448\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"e\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 51,\n y: 3,\n width: 110,\n height: 93\n}, _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M51.572 3.074h109.353v92.713H51.572V3.074Z\",\n fill: \"#C4C4C4\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#e)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"f\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 106,\n y: 75,\n width: 59,\n height: 92\n}, _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.921 142.24c1.348-10.737 1.348-19.295 0-23.992-2.022-7.046-7.077-13.086-2.022-21.138 5.055-8.053 6.066-17.112 11.122-19.125 5.055-2.013 26.287-4.027 30.331 0 2.696 2.684 5.055 7.381 7.077 14.092l3.034 40.263c4.718 18.119 5.392 29.191 2.022 33.217-5.056 6.04-7.078-10.065-29.321-19.125-4.718-2.013-12.132-2.85-22.243-4.192Z\",\n fill: \"#fff\"\n}))), _g4 || (_g4 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#f)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.921 142.238c1.349-10.736 1.349-18.454 0-23.151-2.022-7.046-7.077-13.086-2.022-21.138 5.056-8.053 5.783-17.823 10.838-19.836 5.055-2.013 25.832-4.914 29.876-.888 2.697 2.684 5.795 8.98 7.817 15.69v13.611l3.033 26.653c4.718 18.119 5.392 29.191 2.022 33.217-5.055 6.04-7.077-10.065-29.32-19.125-4.719-2.013-12.133-3.691-22.244-5.033Z\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M142.264 75.853c-2.022 16.47-7.705 24.705-17.047 24.705-14.014 0-10.728-7.372-8.973-10.829 1.17-2.304 2.456-6.406 3.859-12.304 4.821-1.539 8.501-2.398 11.039-2.578 2.539-.18 6.246.155 11.122 1.006Z\",\n fill: \"#CD7448\"\n}))), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M114.104 37.017c-3.39 14.435-4.542 16.131-5.802 19.302a2.149 2.149 0 0 0 .438 2.293c4.8 4.955 11.22 6.503 19.261 4.644 8.566-1.98 8.525-4.956 3.217-29.137l-17.114 2.898Z\",\n fill: \"#0A1551\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M136.569 57.7c-1.661 12.972 3.905 17.523 5.814 17.555 1.91.033-5.401 8.024-19.033 20.81-4.46-8.599-4.959-16.267-3.566-18.49 2.09-3.336 4.029-.483 3.313-12.162-.471-7.671 9.73-6.942 16.997-8.187-3.525.473-9.282.592-3.525.473Z\",\n fill: \"#CD7448\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.677,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M122.596 60.225c.792 7.227.769 11.213.688 11.85-.122.953 17.282.148 12.312-15.173-4.971-15.321-6.633 1.805-13 3.323Z\",\n fill: \"#BD5826\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"g\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 113,\n y: 28,\n width: 38,\n height: 43\n}, _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M145.376 60.748c-4.575 6.114-10.956 9.468-19.143 10.065-8.313.605-13.862-10.235-12.793-21.364.511-5.31 1.687-9.997 6.363-14.826 9.65-9.969 18.717-8.652 27.2 3.949l3.662 9.772-5.289 12.404Z\",\n fill: \"#fff\"\n}))), _g5 || (_g5 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#g)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M144.251 59.875c-5.109 5.677-11.769 8.445-19.978 8.303-8.336-.143-12.887-11.435-10.817-22.42.988-5.242 2.582-9.804 7.676-14.193 10.513-9.06 19.426-6.935 26.74 6.374L150.639 48l-6.388 11.876Z\",\n fill: \"#CD7448\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.423,\n d: \"M132.055 60.09c-2.695-.417-4.642-2.252-4.348-4.1.294-1.848 2.718-3.008 5.413-2.591 2.696.416 4.642 2.252 4.348 4.1-.294 1.847-2.718 3.007-5.413 2.59Z\",\n fill: \"#A44616\"\n}))), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M125.862 59.677c-2.118.905-4.618.438-7.5-1.4 1.356 3.851 2.898 5.604 4.624 5.258 1.726-.347 2.685-1.632 2.876-3.858Z\",\n fill: \"#A5330A\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M127.222 42.163c-7.822-1.3-11.005-1.905-13.711-4.047.156-10.06 8.433-15.98 12.27-16.877 8.871-2.163 18.502.543 24.413 8.327a15.038 15.038 0 0 1 1.478 2.364c.233.374.462.792.689 1.257 3.699 10.657 5.645 26.207 4.589 31.967-2.957 3.8-26.689 4.62-23.717-.144.166-.266.351-.541.548-.835 1.396-2.08 3.387-5.045 3.369-11.71-.005-1.613-.471-3.5-.997-5.629-.177-.72-.362-1.467-.538-2.24a585.3 585.3 0 0 0-1.197-.417c-1.691-.588-2.986-1.038-3.79-1.386-.88-.381-.04-2.924.562-4.75.527-1.594.872-2.64-.265-1.224-1.466 1.826-2.026 3.254-2.301 4.374-.156.637-.755 1.077-1.402.97Z\",\n fill: \"#0A1551\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M115.449 142.435c5.328-2.997 29.268 3.735 47.508-2.946 10.001-3.664 2.348-24.999-1.821-42.89-2.639-9.902-7.007-16.464-10.989-18.892l-8.662 6.374 2.205 11.873s-1.37 4.311 1.517 12.142c2.888 7.832 7.375 17.68 7.375 17.68l-42.925 9.005c.155 3.55 1.528 10.051 5.792 7.654Z\",\n fill: \"#fff\"\n}))), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M121.161 140.978c-2.093 1.666-3.098 1.719-5.599 3.641-2.013.964-3.499 1.378-7.866.074-2.619-.782-6.321-.982-11.104-.601a1.007 1.007 0 0 1-.948-1.515c1.216-2.045 3.583-3.241 7.103-3.591 6.58-.652 7.399 1.778 10.978-1.318 2.386-2.064 4.865-.961 7.436 3.31Z\",\n fill: \"#CD7448\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M117.167 144.445c10.617-.871 29.269 3.735 47.509-2.946 10.001-3.664 2.348-24.999-1.822-42.89-2.638-9.902-7.006-16.464-10.989-18.892l-8.662 6.374 2.206 11.873s-1.371 4.311 1.517 12.142c2.887 7.832 7.374 17.68 7.374 17.68l-42.924 9.005c.154 3.55-1.092 7.283 5.791 7.654Z\",\n fill: \"url(#h)\"\n}))), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"i\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 96,\n y: 18,\n width: 65,\n height: 79\n}, _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M96.284 18.075h64v78h-64v-78Z\",\n fill: \"#C4C4C4\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#i)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"j\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 106,\n y: 75,\n width: 59,\n height: 92\n}, _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.633 142.24c1.348-10.737 1.348-19.295 0-23.992-2.022-7.046-7.078-13.086-2.022-21.138 5.055-8.053 6.066-17.112 11.121-19.125 5.055-2.013 26.287-4.027 30.332 0 2.696 2.684 5.055 7.381 7.077 14.092l3.033 40.263c4.718 18.119 5.392 29.191 2.022 33.217-5.055 6.04-7.077-10.065-29.32-19.125-4.719-2.013-12.133-2.85-22.243-4.192Z\",\n fill: \"#fff\"\n}))), _g6 || (_g6 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#j)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.633 142.238c1.348-10.736 1.348-18.454 0-23.151-2.022-7.046-7.077-13.086-2.022-21.138 5.055-8.053 5.782-17.823 10.837-19.836 5.056-2.013 25.833-4.914 29.877-.888 2.696 2.684 5.794 8.98 7.816 15.69v13.611l3.033 26.653c4.718 18.119 5.393 29.191 2.022 33.217-5.055 6.04-7.077-10.065-29.32-19.125-4.718-2.013-12.133-3.691-22.243-5.033Z\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M141.975 75.853c-2.022 16.47-7.704 24.705-17.047 24.705-14.013 0-10.728-7.372-8.973-10.829 1.17-2.304 2.456-6.406 3.859-12.304 4.822-1.539 8.501-2.398 11.04-2.578 2.538-.18 6.245.155 11.121 1.006Z\",\n fill: \"#CD7448\"\n}))), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M113.815 37.017c-3.39 14.435-4.541 16.131-5.802 19.302a2.15 2.15 0 0 0 .438 2.293c4.8 4.955 11.221 6.503 19.262 4.644 8.565-1.98 8.525-4.956 3.216-29.137l-17.114 2.898Z\",\n fill: \"#0A1551\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M136.28 57.7c-1.66 12.972 3.905 17.523 5.815 17.555 1.909.033-5.402 8.024-19.033 20.81-4.461-8.599-4.96-16.267-3.567-18.49 2.09-3.336 4.029-.483 3.313-12.162-.47-7.671 9.731-6.942 16.998-8.187-3.526.473-9.282.592-3.526.473Z\",\n fill: \"#CD7448\"\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.677,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M122.308 60.225c.792 7.227.769 11.213.687 11.85-.122.953 17.282.148 12.312-15.173-4.97-15.321-6.632 1.805-12.999 3.323Z\",\n fill: \"#BD5826\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"k\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 113,\n y: 28,\n width: 38,\n height: 43\n}, _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M145.088 60.748c-4.576 6.114-10.957 9.468-19.143 10.065-8.314.605-13.863-10.235-12.793-21.364.51-5.31 1.686-9.997 6.362-14.826 9.651-9.969 18.717-8.652 27.2 3.949l3.662 9.772-5.288 12.404Z\",\n fill: \"#fff\"\n}))), _g7 || (_g7 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#k)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M143.963 59.875c-5.11 5.677-11.769 8.445-19.978 8.303-8.337-.143-12.887-11.435-10.817-22.42.987-5.242 2.582-9.804 7.675-14.193 10.513-9.06 19.427-6.935 26.74 6.374L150.35 48l-6.387 11.876Z\",\n fill: \"#CD7448\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M129.189 44.53c1.203.587 2.055 1.53 2.483 2.24a.594.594 0 1 1-1.017.613c-.329-.544-1.02-1.313-1.987-1.785-.945-.462-2.165-.649-3.626-.044a.595.595 0 0 1-.456-1.098c1.802-.746 3.379-.525 4.603.074ZM117.728 42.555a3.335 3.335 0 0 0-2.266.715.594.594 0 1 0 .746.927c.318-.256.829-.49 1.455-.455.615.034 1.415.33 2.313 1.268a.594.594 0 1 0 .858-.821c-1.063-1.11-2.133-1.58-3.106-1.634Z\",\n fill: \"#37120C\",\n fillOpacity: 0.25\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.423,\n d: \"M131.766 60.09c-2.695-.417-4.641-2.252-4.347-4.1.294-1.848 2.717-3.008 5.413-2.591 2.695.416 4.642 2.252 4.347 4.1-.294 1.847-2.717 3.007-5.413 2.59ZM110.248 55.63c-2.648-.673-4.48-2.7-4.092-4.53.388-1.828 2.848-2.765 5.496-2.093 2.648.673 4.48 2.7 4.092 4.53-.388 1.828-2.848 2.766-5.496 2.093Z\",\n fill: \"#A44616\"\n}))), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M125.574 59.677c-2.119.905-4.619.438-7.501-1.4 1.357 3.851 2.898 5.604 4.624 5.258 1.726-.347 2.685-1.632 2.877-3.858Z\",\n fill: \"#A5330A\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M126.583 50.275c-.558-.01-1-.68-.987-1.499.013-.818.476-1.474 1.034-1.464.558.01 1 .68.987 1.499-.013.818-.475 1.473-1.034 1.464ZM117.984 48.723c-.558-.01-1-.68-.987-1.498.013-.818.475-1.474 1.033-1.465.558.01 1 .68.987 1.499-.013.818-.475 1.474-1.033 1.464Z\",\n fill: \"#321907\"\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M122.999 47.67a.358.358 0 0 0-.5.071c-.982 1.304-1.621 1.939-2.222 2.378-.302.22-.601.397-.943.587l-.291.16c-.267.145-.562.306-.891.5-1.157.681-1.326 2.25-.802 3.413.271.6.736 1.135 1.394 1.442.661.308 1.483.371 2.434.084a.356.356 0 1 0-.209-.681c-.809.244-1.446.175-1.923-.048a2.156 2.156 0 0 1-1.044-1.087c-.437-.971-.215-2.08.514-2.51.319-.187.599-.34.863-.484l.304-.167c.35-.195.68-.388 1.018-.635.679-.497 1.367-1.192 2.37-2.524a.356.356 0 0 0-.072-.498Z\",\n fill: \"#8A3110\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M126.933 42.163c-7.821-1.3-11.005-1.905-13.71-4.047.156-10.06 8.433-15.98 12.269-16.877 8.871-2.163 18.502.543 24.413 8.327a15.12 15.12 0 0 1 1.479 2.364c.232.374.462.792.689 1.257 3.698 10.657 5.644 26.207 4.589 31.967-2.957 3.8-26.689 4.62-23.717-.144.166-.266.351-.541.548-.835 1.396-2.08 3.387-5.045 3.368-11.71-.004-1.613-.47-3.5-.996-5.629-.178-.72-.362-1.467-.538-2.24l-1.197-.417c-1.692-.588-2.986-1.038-3.79-1.386-.88-.381-.041-2.924.562-4.75.526-1.594.872-2.64-.266-1.224-1.465 1.826-2.025 3.254-2.3 4.374-.157.637-.756 1.077-1.403.97Z\",\n fill: \"#0A1551\"\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M115.16 142.435c5.329-2.997 29.269 3.735 47.509-2.946 10-3.664 2.348-24.999-1.822-42.89-2.638-9.902-7.006-16.464-10.989-18.892l-8.662 6.374 2.206 11.873s-1.371 4.311 1.517 12.142c2.887 7.832 7.374 17.68 7.374 17.68l-42.924 9.005c.154 3.55 1.528 10.051 5.791 7.654Z\",\n fill: \"#fff\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"a\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M33.981 2.375h39.867v39.867H33.981z\"\n})), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"b\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M14.048 42.241h39.867v39.867H14.048z\"\n})), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"c\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M53.914 42.241h39.867v39.867H53.914z\"\n})), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"h\",\n x1: 152.474,\n y1: 97.578,\n x2: 150.048,\n y2: 114.588,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#F3F5FE\"\n})))));\nexport default SvgNoSignDocumentsIcon;","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _g, _path12, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _circle, _path20, _path21, _path22, _path23, _path24, _path25, _rect, _path26, _path27, _path28, _path29, _rect2, _path30, _path31, _path32, _path33, _rect3, _path34, _path35, _path36, _path37, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoBoardsIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 198 138\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0.0476074 94.5293C0.0476074 70.8969 19.2055 51.739 42.8378 51.739H155.162C178.795 51.739 197.952 70.8969 197.952 94.5293C197.952 118.162 178.795 137.319 155.162 137.319H42.8378C19.2055 137.319 0.0476074 118.162 0.0476074 94.5293Z\",\n fill: \"#E6E6F5\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M65.8865 82.0527C64.5855 80.9391 63.0716 80.1014 61.437 79.5904C59.8025 79.0793 58.0813 78.9057 56.3776 79.08L51.3094 76.7875C50.9339 76.6114 50.5092 76.5689 50.1063 76.6671C49.7033 76.7653 49.3463 76.9984 49.0939 77.3275C48.9733 77.501 48.8891 77.6972 48.8465 77.9041C48.8039 78.1111 48.8035 78.3245 48.8458 78.5315C48.8882 78.7386 48.9721 78.9348 49.0925 79.1085C49.213 79.2821 49.3674 79.4295 49.5464 79.5417L52.3012 81.3841L51.1269 81.2868C49.2809 81.1394 47.5284 80.4138 46.1186 79.2131L42.2053 75.8284C41.9782 75.6386 41.707 75.5089 41.4166 75.4514C41.1263 75.394 40.8261 75.4105 40.5438 75.4994C40.294 75.5604 40.0642 75.6853 39.8772 75.8619C39.6903 76.0385 39.5528 76.2607 39.4776 76.5066C39.4024 76.7526 39.3924 77.0138 39.4487 77.2647C39.505 77.5157 39.6254 77.7476 39.7984 77.9379L44.3699 82.9807C45.2709 83.9598 46.3595 84.7479 47.571 85.298C48.7825 85.8482 50.0923 86.1492 51.4225 86.1833L66.0775 86.634L65.8865 82.0527Z\",\n fill: \"#EFBB9D\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M114.868 31.4103C111.478 45.8452 107.609 80.3608 106.348 83.5315C106.036 84.3176 106.197 85.2167 106.786 85.8249C111.586 90.7796 118.006 92.3275 126.047 90.4685C134.613 88.4883 137.29 52.6933 131.982 28.5124L114.868 31.4103Z\",\n fill: \"#091141\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M60.0038 88.1488C63.2736 85.0262 65.2565 82.3025 65.9525 79.9778C80.5807 90.9075 88.8599 96.073 90.7902 95.4745C93.437 94.6539 114.794 75.4558 122.215 70.914C122.888 70.2415 122.935 75.9912 123.472 75.3721L121.065 97.6868C112.398 103.889 106.876 107.71 104.499 109.149C100.934 111.309 91.5777 115.265 83.1278 108.395C77.4945 103.815 69.7865 97.066 60.0038 88.1488Z\",\n fill: \"#F4F5FE\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.637 112.909C111.76 117.664 113.903 121.807 112.046 132.468C122.081 134.286 128.929 131.235 133.546 133.468L151.046 125.468L163.546 119.968L157.69 102.555L158.338 88.9606C156.637 82.1622 153.842 75.727 151.276 72.9186C147.428 68.706 126.537 70.624 121.391 72.3965C116.246 74.169 115.055 83.8937 109.623 91.6989C104.19 99.5041 108.952 105.775 110.637 112.909Z\",\n fill: \"white\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M143.029 70.2469C141.007 86.7169 135.324 94.9518 125.982 94.9518C111.968 94.9518 115.254 87.5798 117.009 84.123C118.179 81.8186 119.465 77.717 120.868 71.8184C125.689 70.2797 129.369 69.4204 131.907 69.2404C134.445 69.0604 138.153 69.3959 143.029 70.2469Z\",\n fill: \"#EFBB9D\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M122.049 47.6274C121.497 47.7087 120.952 47.1184 120.831 46.3089C120.71 45.4993 121.059 44.7771 121.611 44.6958C122.163 44.6145 122.708 45.2048 122.829 46.0144C122.95 46.8239 122.601 47.5461 122.049 47.6274Z\",\n fill: \"#321907\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M114.502 47.4956C113.95 47.5769 113.405 46.9865 113.284 46.177C113.163 45.3675 113.512 44.6453 114.064 44.564C114.616 44.4827 115.161 45.073 115.282 45.8825C115.404 46.6921 115.054 47.4143 114.502 47.4956Z\",\n fill: \"#321907\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M137.335 52.0938C135.674 65.0666 141.64 69.9366 143.549 69.969C145.459 70.0014 137.748 77.6731 124.116 90.459C119.656 81.8609 119.157 74.1928 120.55 71.969C122.64 68.6332 124.579 71.4869 123.863 59.808C123.392 52.1361 133.593 52.8654 140.86 51.62C137.335 52.0938 131.578 52.2121 137.335 52.0938Z\",\n fill: \"#EFBB9D\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.677232,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M123.36 54.6194C124.152 61.8467 124.129 65.8326 124.048 66.4687C123.926 67.4228 141.33 66.6169 136.359 51.2959C131.389 35.975 129.727 53.1011 123.36 54.6194Z\",\n fill: \"#DC9F7E\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask0_1461_13663\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 114,\n y: 22,\n width: 38,\n height: 44\n}, _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M146.142 55.1426C141.566 61.2561 135.185 64.6109 126.998 65.2072C118.685 65.8126 113.136 54.9729 114.206 43.8438C114.716 38.5338 115.892 33.8467 120.568 29.017C130.219 19.0488 139.285 20.3653 147.768 32.9663L151.43 42.7384L146.142 55.1426Z\",\n fill: \"white\"\n}))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask0_1461_13663)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M145.016 54.2699C139.906 59.9466 133.247 62.7143 125.038 62.573C116.701 62.4295 112.151 51.1376 114.221 40.152C115.208 34.9104 116.803 30.3489 121.896 25.9595C132.409 16.9001 141.323 19.025 148.636 32.334L151.403 42.3933L145.016 54.2699Z\",\n fill: \"#EFBB9D\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M132.817 54.4842C130.121 54.0677 128.175 52.2323 128.469 50.3846C128.763 48.537 131.187 47.3769 133.882 47.7934C136.577 48.2099 138.524 50.0454 138.23 51.893C137.936 53.7407 135.512 54.9008 132.817 54.4842Z\",\n fill: \"#EFA77F\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M111.299 50.0244C108.651 49.3517 106.819 47.3239 107.207 45.4951C107.594 43.6664 110.055 42.7292 112.703 43.4019C115.35 44.0746 117.183 46.1024 116.795 47.9312C116.407 49.7599 113.946 50.6971 111.299 50.0244Z\",\n fill: \"#EFA77F\"\n}))), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M126.074 54.0341C123.955 54.9391 121.455 54.4722 118.573 52.6332C119.93 56.485 121.471 58.2377 123.197 57.8913C124.923 57.545 125.882 56.2592 126.074 54.0341Z\",\n fill: \"#A5330A\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M127.635 44.6691C127.077 44.6597 126.635 43.9887 126.648 43.1705C126.661 42.3524 127.124 41.6968 127.682 41.7062C128.24 41.7157 128.682 42.3867 128.669 43.2048C128.656 44.023 128.193 44.6786 127.635 44.6691Z\",\n fill: \"#0A1551\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M119.037 43.1174C118.479 43.1079 118.037 42.437 118.05 41.6188C118.063 40.8006 118.526 40.145 119.084 40.1545C119.642 40.164 120.084 40.8349 120.071 41.6531C120.058 42.4713 119.595 43.1269 119.037 43.1174Z\",\n fill: \"#0A1551\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M143.029 70.2479C141.007 86.7178 135.324 94.9528 125.982 94.9528C111.968 94.9528 115.254 87.5807 117.009 84.124C118.179 81.8195 119.465 77.718 120.868 71.8193C125.689 70.2807 129.369 69.4213 131.907 69.2413C134.445 69.0614 138.153 69.3969 143.029 70.2479Z\",\n fill: \"#EFBB9D\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M142.248 78.475L144.454 90.3478C144.454 90.3478 143.083 94.6584 145.971 102.49C148.858 110.322 153.345 120.17 153.345 120.17L163.721 133.883C173.722 130.219 166.069 108.884 161.899 90.9932C159.261 81.091 154.893 74.5284 150.91 72.101L142.248 78.475Z\",\n fill: \"white\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M144.277 81.482L146.483 93.3548C146.483 93.3548 145.112 97.6655 148 105.497C150.887 113.329 155.374 123.177 155.374 123.177L164.547 135.469C174.547 131.805 168.098 111.891 163.928 94.0002C161.29 84.098 156.922 77.5354 152.939 75.108L144.277 81.482Z\",\n fill: \"url(#paint0_linear_1461_13663)\"\n})), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M142.55 69.4685C131.35 71.8685 125.217 70.1352 123.55 68.9685C122.751 69.3685 120.883 71.4685 120.05 72.4685C118.55 76.1352 115.25 84.1685 114.05 86.9685C112.55 90.4685 115.05 92.4685 118.55 96.4685C122.05 100.469 133.05 96.9685 137.05 95.9685C140.25 95.1685 144.05 78.6352 145.55 70.4685C143.55 70.0685 142.717 69.6352 142.55 69.4685Z\",\n fill: \"white\"\n})), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M127.988 36.5564C120.166 35.2577 116.983 34.6521 114.277 32.5094C114.433 22.4501 122.71 16.529 126.547 15.6328C135.418 13.4693 145.049 16.1758 150.96 23.9595C151.546 24.7312 152.036 25.521 152.438 26.3241C152.671 26.6979 152.9 27.1161 153.127 27.5809C156.825 38.238 156.729 78.3515 155.673 84.1116C152.716 87.9129 128.984 88.7326 131.956 83.9685C132.122 83.7026 132.307 83.4268 132.504 83.1335C133.9 81.0539 137.934 53.5233 137.916 46.8596C137.911 45.2458 137.445 43.3583 136.919 41.2298C136.742 40.5102 136.557 39.763 136.381 38.9895C135.963 38.8434 135.564 38.7046 135.184 38.5727C133.493 37.9849 132.198 37.5349 131.394 37.1866C130.514 36.8054 131.354 34.2626 131.956 32.4372C132.482 30.843 132.828 29.796 131.69 31.2131C130.225 33.0384 129.665 34.4668 129.39 35.5865C129.234 36.2233 128.635 36.6639 127.988 36.5564Z\",\n fill: \"#091141\"\n})), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 145.548,\n cy: 16.9685,\n r: 9.5,\n fill: \"#091141\"\n})), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M129.946 38.5046C129.946 38.5046 126.888 37.6631 126.531 38.9627C126.531 38.9627 126.291 39.8346 129.075 40.5352C131.859 41.2357 132.538 41.1594 132.938 40.3648C133.338 39.5701 131.428 38.7973 129.946 38.5046Z\",\n fill: \"#091141\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M118.847 36.5537C118.847 36.5537 121.492 36.7097 121.487 38.002C121.487 38.002 121.478 38.8674 119.156 38.6638C116.834 38.4602 116.156 38.0402 116.061 37.328C115.965 36.6158 117.602 36.3648 118.847 36.5537Z\",\n fill: \"#091141\"\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M121.991 45.4825L121.05 48.3784L122.922 48.8721\",\n stroke: \"#D97D4A\",\n strokeWidth: 0.919783,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n})), _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M124.653 130.125L132.679 129.506L132.433 137.532H125.484L124.653 130.125Z\",\n fill: \"#EFBB9D\"\n})), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M126.908 129.907L127.31 131.512L128.112 137.532H108.048C108.449 133.519 114.067 129.506 118.08 129.506C121.29 129.506 126.106 129.773 126.908 129.907Z\",\n fill: \"#EFBB9D\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M161.447 122.524L130.048 123.466L132.048 137.469L162.048 136.969C163.133 136.823 164.392 136.764 165.304 136.158C166.304 135.493 167.989 134.224 168.543 133.28C169.097 132.336 169.429 131.278 169.514 130.186C169.599 129.094 169.434 127.998 169.033 126.979C168.436 125.504 167.369 124.268 165.997 123.462C164.625 122.657 163.026 122.327 161.447 122.524Z\",\n fill: \"#F4F6FF\"\n})), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 38.3523,\n y: 1.71851,\n width: 30.3839,\n height: 30.3839,\n rx: 2.75,\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M54.6726 14.156C54.6726 13.8453 54.9244 13.5935 55.2351 13.5935H61.9851C62.2958 13.5935 62.5476 13.8453 62.5476 14.156V24.8435C62.5476 25.4648 62.0439 25.9685 61.4226 25.9685H55.7976C55.1763 25.9685 54.6726 25.4648 54.6726 24.8435V14.156Z\",\n fill: \"#FFB629\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.5476 14.156C44.5476 13.8453 44.7994 13.5935 45.1101 13.5935H51.8601C52.1708 13.5935 52.4226 13.8453 52.4226 14.156V20.3435C52.4226 20.9648 51.9189 21.4685 51.2976 21.4685H45.6726C45.0513 21.4685 44.5476 20.9648 44.5476 20.3435V14.156Z\",\n fill: \"#FFB629\"\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.5476 9.09351C44.5476 8.47219 45.0513 7.96851 45.6726 7.96851H51.2976C51.9189 7.96851 52.4226 8.47219 52.4226 9.09351V10.781C52.4226 11.0917 52.1708 11.3435 51.8601 11.3435H45.1101C44.7994 11.3435 44.5476 11.0917 44.5476 10.781V9.09351Z\",\n fill: \"#FF6100\"\n})), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M54.6726 9.09351C54.6726 8.47219 55.1763 7.96851 55.7976 7.96851H61.4226C62.0439 7.96851 62.5476 8.47219 62.5476 9.09351V10.781C62.5476 11.0917 62.2958 11.3435 61.9851 11.3435H55.2351C54.9244 11.3435 54.6726 11.0917 54.6726 10.781V9.09351Z\",\n fill: \"#0099FF\"\n})), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 57.6179,\n y: 41.8386,\n width: 30.3839,\n height: 30.3839,\n rx: 2.75,\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M73.9382 54.2761C73.9382 53.9655 74.1901 53.7136 74.5007 53.7136H81.2507C81.5614 53.7136 81.8132 53.9655 81.8132 54.2761V64.9636C81.8132 65.5849 81.3096 66.0886 80.6882 66.0886H75.0632C74.4419 66.0886 73.9382 65.5849 73.9382 64.9636V54.2761Z\",\n fill: \"#FFB629\"\n})), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.8132 54.2761C63.8132 53.9655 64.0651 53.7136 64.3757 53.7136H71.1257C71.4364 53.7136 71.6882 53.9655 71.6882 54.2761V60.4636C71.6882 61.0849 71.1846 61.5886 70.5632 61.5886H64.9382C64.3169 61.5886 63.8132 61.0849 63.8132 60.4636V54.2761Z\",\n fill: \"#FFB629\"\n})), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.8132 49.2136C63.8132 48.5923 64.3169 48.0886 64.9382 48.0886H70.5632C71.1846 48.0886 71.6882 48.5923 71.6882 49.2136V50.9011C71.6882 51.2118 71.4364 51.4636 71.1257 51.4636H64.3757C64.0651 51.4636 63.8132 51.2118 63.8132 50.9011V49.2136Z\",\n fill: \"#FF6100\"\n})), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M73.9382 49.2136C73.9382 48.5923 74.4419 48.0886 75.0632 48.0886H80.6882C81.3096 48.0886 81.8132 48.5923 81.8132 49.2136V50.9011C81.8132 51.2118 81.5614 51.4636 81.2507 51.4636H74.5007C74.1901 51.4636 73.9382 51.2118 73.9382 50.9011V49.2136Z\",\n fill: \"#0099FF\"\n})), _rect3 || (_rect3 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 18.2976,\n y: 41.8386,\n width: 30.3839,\n height: 30.3839,\n rx: 2.75,\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M34.6179 54.2761C34.6179 53.9655 34.8698 53.7136 35.1804 53.7136H41.9304C42.2411 53.7136 42.4929 53.9655 42.4929 54.2761V64.9636C42.4929 65.5849 41.9892 66.0886 41.3679 66.0886H35.7429C35.1216 66.0886 34.6179 65.5849 34.6179 64.9636V54.2761Z\",\n fill: \"#FFB629\"\n})), _path35 || (_path35 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.4929 54.2761C24.4929 53.9655 24.7448 53.7136 25.0554 53.7136H31.8054C32.1161 53.7136 32.3679 53.9655 32.3679 54.2761V60.4636C32.3679 61.0849 31.8642 61.5886 31.2429 61.5886H25.6179C24.9966 61.5886 24.4929 61.0849 24.4929 60.4636V54.2761Z\",\n fill: \"#FFB629\"\n})), _path36 || (_path36 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.4929 49.2136C24.4929 48.5923 24.9966 48.0886 25.6179 48.0886H31.2429C31.8642 48.0886 32.3679 48.5923 32.3679 49.2136V50.9011C32.3679 51.2118 32.1161 51.4636 31.8054 51.4636H25.0554C24.7448 51.4636 24.4929 51.2118 24.4929 50.9011V49.2136Z\",\n fill: \"#FF6100\"\n})), _path37 || (_path37 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M34.6179 49.2136C34.6179 48.5923 35.1216 48.0886 35.7429 48.0886H41.3679C41.9892 48.0886 42.4929 48.5923 42.4929 49.2136V50.9011C42.4929 51.2118 42.2411 51.4636 41.9304 51.4636H35.1804C34.8698 51.4636 34.6179 51.2118 34.6179 50.9011V49.2136Z\",\n fill: \"#0099FF\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear_1461_13663\",\n x1: 160.047,\n y1: 122.469,\n x2: 148.317,\n y2: 68.5186,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#F4F5FE\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"white\"\n})))));\nexport default SvgNoBoardsIcon;","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAppAnalytics = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 14 18\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#FFF\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 2,\n height: 6,\n y: 12,\n opacity: 0.2,\n rx: 1\n}), /*#__PURE__*/React.createElement(\"rect\", {\n width: 2,\n height: 14,\n x: 4,\n y: 4,\n opacity: 0.45,\n rx: 1\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9,7 L9,7 C9.55228475,7 10,7.44771525 10,8 L10,17 C10,17.5522847 9.55228475,18 9,18 L9,18 C8.44771525,18 8,17.5522847 8,17 L8,8 C8,7.44771525 8.44771525,7 9,7 Z\",\n opacity: 0.7\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13,0 L13,0 C13.5522847,-1.01453063e-16 14,0.44771525 14,1 L14,17 C14,17.5522847 13.5522847,18 13,18 L13,18 C12.4477153,18 12,17.5522847 12,17 L12,1 C12,0.44771525 12.4477153,1.01453063e-16 13,0 Z\"\n}))));\nexport default SvgIconAppAnalytics;","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAppBuilder = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 16 16\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#FFF\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.42465964,13.6190476 L10.5913141,13.6190476 C10.6397095,13.0324257 11.1311487,12.5714286 11.7302595,12.5714286 L12.8731166,12.5714286 C13.5042992,12.5714286 14.0159738,13.0831031 14.0159738,13.7142857 L14.0159738,14.8571429 C14.0159738,15.4883254 13.5042992,16 12.8731166,16 L11.7302595,16 C11.1311487,16 10.6397095,15.5390029 10.5913141,14.952381 L3.42465964,14.952381 C3.37626432,15.5390029 2.88482512,16 2.28571429,16 L1.14285714,16 C0.511674572,16 6.34413157e-17,15.4883254 0,14.8571429 L0,13.7142857 C-1.20435454e-16,13.1151749 0.460997093,12.6237357 1.04761905,12.5753404 L1.04761905,5.42465964 C0.460997093,5.37626432 1.55925743e-12,4.88482512 1.55919722e-12,4.28571429 L1.55919722e-12,3.14285714 C1.55907033e-12,2.51167457 0.511674572,2 1.14285714,2 L2.28571429,2 C2.91689686,2 3.42857143,2.51167457 3.42857143,3.14285714 L3.42857143,4.28571429 C3.42857143,4.88482512 2.96757434,5.37626432 2.38095238,5.42465964 L2.38095238,12.5753404 C2.93617116,12.621145 3.37885503,13.0638288 3.42465964,13.6190476 Z M1.14285714,3.14285714 L1.14285714,4.28571429 L2.28571429,4.28571429 L2.28571429,3.14285714 L1.14285714,3.14285714 Z M11.7302595,13.7142857 L11.7302595,14.8571429 L12.8731166,14.8571429 L12.8731166,13.7142857 L11.7302595,13.7142857 Z M1.14285714,13.7142857 L1.14285714,14.8571429 L2.28571429,14.8571429 L2.28571429,13.7142857 L1.14285714,13.7142857 Z\",\n opacity: 0.6\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.6477844,0.177793826 L15.8222062,2.35221565 C16.0592646,2.58927408 16.0592646,2.97362175 15.8222062,3.21068018 L9.2989407,9.73394565 C9.2323045,9.80058186 9.15106879,9.85078828 9.06166694,9.8805889 L5.80003421,10.9677998 C5.32548669,11.1259823 4.87401768,10.6745133 5.03220019,10.1999658 L6.1194111,6.93833306 C6.14921172,6.84893121 6.19941814,6.7676955 6.26605435,6.7010593 L12.7893198,0.177793826 C13.0263783,-0.0592646087 13.4107259,-0.0592646087 13.6477844,0.177793826 Z M7.22584687,7.45819584 L6.56771558,9.43258972 L8.53121766,8.78473963 L14.5345094,2.78144792 L13.2185521,1.46549062 L7.22584687,7.45819584 Z\"\n}))));\nexport default SvgIconAppBuilder;","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAppCards = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 16 16\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#94BEFF\",\n d: \"M.5-1.73194792e-13L3.5-1.73305814e-13C3.77614237-1.73847068e-13 4 .223857625 4 .5L4 9.5C4 9.77614237 3.77614237 10 3.5 10L.5 10C.223857625 10-1.81895559e-12 9.77614237-1.8189894e-12 9.5L-1.8189894e-12.5C-1.81902322e-12.223857625.223857625-1.73144065e-13.5-1.73194792e-13zM6.5-4.4408921e-16L9.5-4.4408921e-16C9.77614237-4.94815741e-16 10 .223857625 10 .5L10 3.5C10 3.77614237 9.77614237 4 9.5 4L6.5 4C6.22385763 4 6 3.77614237 6 3.5L6 .5C6 .223857625 6.22385763-6.15407283e-16 6.5-6.66133815e-16z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n d: \"M12.5,10 L15.5,10 C15.7761424,10 16,10.2238576 16,10.5 L16,15.5 C16,15.7761424 15.7761424,16 15.5,16 L12.5,16 C12.2238576,16 12,15.7761424 12,15.5 L12,10.5 C12,10.2238576 12.2238576,10 12.5,10 Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#94BEFF\",\n d: \"M12.5,-9.09494702e-13 L15.5,-9.09494702e-13 C15.7761424,-9.09545428e-13 16,0.223857625 16,0.5 L16,7.5 C16,7.77614237 15.7761424,8 15.5,8 L12.5,8 C12.2238576,8 12,7.77614237 12,7.5 L12,0.5 C12,0.223857625 12.2238576,-9.09443975e-13 12.5,-9.09494702e-13 Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n d: \"M6.5 6L9.5 6C9.77614237 6 10 6.22385763 10 6.5L10 15.5C10 15.7761424 9.77614237 16 9.5 16L6.5 16C6.22385763 16 6 15.7761424 6 15.5L6 6.5C6 6.22385763 6.22385763 6 6.5 6zM.5 12L3.5 12C3.77614237 12 4 12.2238576 4 12.5L4 15.5C4 15.7761424 3.77614237 16 3.5 16L.5 16C.223857625 16 2.79081386e-16 15.7761424 0 15.5L0 12.5C-3.38176876e-17 12.2238576.223857625 12 .5 12z\"\n}))));\nexport default SvgIconAppCards;","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAppForm = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 16 18\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#FFF\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.9010982,4.93150685 L10.0819672,2.1046522 L10.0819672,4.93150685 L12.9010982,4.93150685 Z M8.85245902,1.23287671 L1.2295082,1.23287671 L1.2295082,15.7671233 L6.38356164,15.7671233 C6.72401115,15.7671233 7,16.0431121 7,16.3835616 C7,16.7240111 6.72401115,17 6.38356164,17 L0.614754098,17 C0.275234785,17 8.8817842e-16,16.7240111 8.8817842e-16,16.3835616 L8.8817842e-16,0.616438356 C8.8817842e-16,0.275988853 0.275234785,0 0.614754098,0 L9.46721311,0 C9.63025604,0 9.78662115,0.0649459975 9.90190991,0.180550614 L14.8199427,5.11205746 C14.9352315,5.22766208 15,5.38445559 15,5.54794521 L15,8.3852459 C15,8.72476522 14.7247652,9 14.3852459,9 C14.0457266,9 13.7704918,8.72476522 13.7704918,8.3852459 L13.7704918,6.16438356 L9.46721311,6.16438356 C9.1276938,6.16438356 8.85245902,5.88839471 8.85245902,5.54794521 L8.85245902,1.23287671 Z\",\n opacity: 0.6\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.5070948,15.4508357 L15.7812416,16.7249825 C16.0729195,17.0166604 16.0729195,17.4895637 15.7812416,17.7812416 C15.4895637,18.0729195 15.0166604,18.0729195 14.7249825,17.7812416 L13.4508357,16.5070948 C12.8988752,16.8636094 12.241238,17.0705394 11.5352697,17.0705394 C9.58279417,17.0705394 8,15.4877453 8,13.5352697 C8,11.5827941 9.58279417,10 11.5352697,10 C13.4877453,10 15.0705394,11.5827941 15.0705394,13.5352697 C15.0705394,14.241238 14.8636094,14.8988752 14.5070948,15.4508357 Z M12.9940382,14.9634484 C13.3545249,14.5952892 13.5767635,14.0912328 13.5767635,13.5352697 C13.5767635,12.4077839 12.6627556,11.4937759 11.5352697,11.4937759 C10.4077839,11.4937759 9.49377594,12.4077839 9.49377594,13.5352697 C9.49377594,14.6627556 10.4077839,15.5767635 11.5352697,15.5767635 C12.0912328,15.5767635 12.5952892,15.3545249 12.9634484,14.9940382 C12.9683845,14.9888131 12.9734105,14.9836417 12.9785261,14.9785261 C12.9836417,14.9734105 12.9888131,14.9683845 12.9940382,14.9634484 Z\"\n}))));\nexport default SvgIconAppForm;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAppInbox = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 18 14\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n d: \"M0,7.35 C0,6.9357864 0.3357864,6.6 0.75,6.6 C1.1642136,6.6 1.5,6.9357864 1.5,7.35 L1.5,11.75 C1.5,12.1642136 1.8357864,12.5 2.25,12.5 L15.75,12.5 C16.1642136,12.5 16.5,12.1642136 16.5,11.75 L16.5,7.35 C16.5,6.9357864 16.8357864,6.6 17.25,6.6 C17.6642136,6.6 18,6.9357864 18,7.35 L18,11.75 C18,12.9926407 16.9926407,14 15.75,14 L2.25,14 C1.0073593,14 0,12.9926407 0,11.75 L0,7.35 Z M18,3.6 C18,3.8744582 17.8500847,4.1269968 17.6091391,4.2584217 L9.3591391,8.7584217 C9.135281,8.8805261 8.864719,8.8805261 8.6408609,8.7584217 L0.3908609,4.2584217 C0.1499153,4.1269968 0,3.8744582 0,3.6 L0,2.25 C0,1.0073593 1.0073593,0 2.25,0 L15.75,0 C16.9926407,0 18,1.0073593 18,2.25 L18,3.6 Z M16.5,3.1547752 L16.5,2.25 C16.5,1.8357864 16.1642136,1.5 15.75,1.5 L2.25,1.5 C1.8357864,1.5 1.5,1.8357864 1.5,2.25 L1.5,3.1547752 L9,7.2456843 L16.5,3.1547752 Z\"\n})));\nexport default SvgIconAppInbox;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAppPdfEditor = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 14 18\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n d: \"M14,3.6 L14,17.1 C14,17.5970563 13.6240563,18 13.127,18 L0.9,18 C0.402943725,18 4.0844654e-13,17.5970563 4.08384437e-13,17.1 L2.66453526e-15,0.9 C2.7254071e-15,0.402943725 0.402943725,2.69979351e-14 0.9,2.70283606e-14 L10.418,-7.36194959e-15 C10.5286597,-0.00226949012 10.6356203,0.0398665218 10.715,0.117 L13.883,3.312 C13.9579293,3.38915773 13.9998904,3.49244677 14,3.6 Z M10.832,1.413 L10.877,1.413 L10.877,3.168 L12.587,3.168 L10.832,1.413 Z M13.172,17.064 L13.172,4.023 L10.931,4.023 C10.4339437,4.023 10.031,3.62005627 10.031,3.123 L10.031,0.9 L0.9,0.9 L0.9,17.064 L13.172,17.064 Z M11.039,8.75266667 C11.2676459,8.75266667 11.453,8.93802078 11.453,9.16666667 C11.453,9.39531255 11.2676459,9.58066667 11.039,9.58066667 L2.961,9.58066667 C2.73235411,9.58066667 2.547,9.39531255 2.547,9.16666667 C2.547,8.93802078 2.73235411,8.75266667 2.961,8.75266667 L11.039,8.75266667 Z M11.039,6.086 C11.2676459,6.086 11.453,6.27135411 11.453,6.5 C11.453,6.72864589 11.2676459,6.914 11.039,6.914 L2.961,6.914 C2.73235411,6.914 2.547,6.72864589 2.547,6.5 C2.547,6.27135411 2.73235411,6.086 2.961,6.086 L11.039,6.086 Z M11.039,11.4193333 C11.2676459,11.4193333 11.453,11.6046874 11.453,11.8333333 C11.453,12.0619792 11.2676459,12.2473333 11.039,12.2473333 L2.961,12.2473333 C2.73235411,12.2473333 2.547,12.0619792 2.547,11.8333333 C2.547,11.6046874 2.73235411,11.4193333 2.961,11.4193333 L11.039,11.4193333 Z M2.961,14.086 L7.624,14.086 C7.85264589,14.086 8.038,14.2713541 8.038,14.5 C8.038,14.7286459 7.85264589,14.914 7.624,14.914 L2.961,14.914 C2.73235411,14.914 2.547,14.7286459 2.547,14.5 C2.547,14.2713541 2.73235411,14.086 2.961,14.086 Z\"\n})));\nexport default SvgIconAppPdfEditor;","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAppReports = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 18 18\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#FFF\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.4024708,10 L17.9450712,10 C17.4476269,14.4999505 13.6325537,18 9,18 C6.75238541,18 4.69720406,17.1760953 3.11999794,15.813828 L7.14265808,12.0206055 C7.68280333,12.3534438 8.31897841,12.5454545 9,12.5454545 C10.6108451,12.5454545 11.9707821,11.4711896 12.4024708,10 Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10,5.5975292 L10,0.0549287778 C14.1716166,0.5160776 17.4839224,3.82838339 17.9450712,8 L12.4024708,8 C12.0638427,6.8459598 11.1540402,5.93615726 10,5.5975292 Z\",\n opacity: 0.4\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8,5.5975292 C6.52881042,6.02921787 5.45454545,7.38915492 5.45454545,9 C5.45454545,9.54984279 5.57970988,10.0704519 5.803101,10.5348895 L1.76007055,14.3473204 C0.654003941,12.8522586 0,11.0025047 0,9 C0,4.36744635 3.50004954,0.552373066 8,0.0549287778 L8,5.5975292 L8,5.5975292 Z\",\n opacity: 0.7\n}))));\nexport default SvgIconAppReports;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAppSheets = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 16 16\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n d: \"M12.1496706,26.9997195 C11.2472314,26.9997195 11.0009443,26.7566301 11.0008474,25.8502081 C10.9996852,17.7216934 10.9997821,20.2597484 11.0007506,12.1312337 C11.0008474,11.2661184 11.2608871,11.0017938 12.1310756,11.0015999 C20.2661037,10.9994667 17.734465,10.9994667 25.8694931,11.0015999 C26.7274786,11.0017938 26.9986559,11.2764936 26.9988496,12.1379242 C27.0003992,20.2664389 27.0003023,17.7283839 26.9990433,25.8568986 C26.9988496,26.7531394 26.7448146,26.9996226 25.8396636,26.9997195 C21.772198,27.0002043 23.0379689,26.9999135 18.9705033,26.9999135 C14.9191146,26.9999135 16.2010593,27.0002043 12.1496706,26.9997195 Z M25.567718,25.8571429 C25.7275629,25.8571429 25.8571429,25.7275629 25.8571429,25.567718 L25.8571429,22.4508349 C25.8571429,22.2909899 25.7275629,22.16141 25.567718,22.16141 L22.4508349,22.16141 C22.2909899,22.16141 22.16141,22.2909899 22.16141,22.4508349 L22.16141,25.567718 C22.16141,25.7275629 22.2909899,25.8571429 22.4508349,25.8571429 L25.567718,25.8571429 Z M17.4415584,25.8571429 L20.5584416,25.8571429 C20.7182865,25.8571429 20.8478664,25.7275629 20.8478664,25.567718 L20.8478664,22.4508349 C20.8478664,22.2909899 20.7182865,22.16141 20.5584416,22.16141 L17.4415584,22.16141 C17.2817135,22.16141 17.1521336,22.2909899 17.1521336,22.4508349 L17.1521336,25.567718 C17.1521336,25.7275629 17.2817135,25.8571429 17.4415584,25.8571429 Z M12.432282,25.8571429 L15.5491651,25.8571429 C15.7090101,25.8571429 15.83859,25.7275629 15.83859,25.567718 L15.83859,22.4508349 C15.83859,22.2909899 15.7090101,22.16141 15.5491651,22.16141 L12.432282,22.16141 C12.2724371,22.16141 12.1428571,22.2909899 12.1428571,22.4508349 L12.1428571,25.567718 C12.1428571,25.7275629 12.2724371,25.8571429 12.432282,25.8571429 Z M22.4508349,20.8478664 L25.567718,20.8478664 C25.7275629,20.8478664 25.8571429,20.7182865 25.8571429,20.5584416 L25.8571429,17.4415584 C25.8571429,17.2817135 25.7275629,17.1521336 25.567718,17.1521336 L22.4508349,17.1521336 C22.2909899,17.1521336 22.16141,17.2817135 22.16141,17.4415584 L22.16141,20.5584416 C22.16141,20.7182865 22.2909899,20.8478664 22.4508349,20.8478664 Z M17.4415584,20.8478664 L20.5584416,20.8478664 C20.7182865,20.8478664 20.8478664,20.7182865 20.8478664,20.5584416 L20.8478664,17.4415584 C20.8478664,17.2817135 20.7182865,17.1521336 20.5584416,17.1521336 L17.4415584,17.1521336 C17.2817135,17.1521336 17.1521336,17.2817135 17.1521336,17.4415584 L17.1521336,20.5584416 C17.1521336,20.7182865 17.2817135,20.8478664 17.4415584,20.8478664 Z M12.432282,20.8478664 L15.5491651,20.8478664 C15.7090101,20.8478664 15.83859,20.7182865 15.83859,20.5584416 L15.83859,17.4415584 C15.83859,17.2817135 15.7090101,17.1521336 15.5491651,17.1521336 L12.432282,17.1521336 C12.2724371,17.1521336 12.1428571,17.2817135 12.1428571,17.4415584 L12.1428571,20.5584416 C12.1428571,20.7182865 12.2724371,20.8478664 12.432282,20.8478664 Z M22.4508349,15.83859 L25.567718,15.83859 C25.7275629,15.83859 25.8571429,15.7090101 25.8571429,15.5491651 L25.8571429,12.432282 C25.8571429,12.2724371 25.7275629,12.1428571 25.567718,12.1428571 L22.4508349,12.1428571 C22.2909899,12.1428571 22.16141,12.2724371 22.16141,12.432282 L22.16141,15.5491651 C22.16141,15.7090101 22.2909899,15.83859 22.4508349,15.83859 Z M17.4415584,15.83859 L20.5584416,15.83859 C20.7182865,15.83859 20.8478664,15.7090101 20.8478664,15.5491651 L20.8478664,12.432282 C20.8478664,12.2724371 20.7182865,12.1428571 20.5584416,12.1428571 L17.4415584,12.1428571 C17.2817135,12.1428571 17.1521336,12.2724371 17.1521336,12.432282 L17.1521336,15.5491651 C17.1521336,15.7090101 17.2817135,15.83859 17.4415584,15.83859 Z M12.432282,15.83859 L15.5491651,15.83859 C15.7090101,15.83859 15.83859,15.7090101 15.83859,15.5491651 L15.83859,12.432282 C15.83859,12.2724371 15.7090101,12.1428571 15.5491651,12.1428571 L12.432282,12.1428571 C12.2724371,12.1428571 12.1428571,12.2724371 12.1428571,12.432282 L12.1428571,15.5491651 C12.1428571,15.7090101 12.2724371,15.83859 12.432282,15.83859 Z\",\n transform: \"translate(-11 -11)\"\n})));\nexport default SvgIconAppSheets;","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAppUploads = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 16 16\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n d: \"M13.2,6.65148926 L7.61211411,6.65148926 C7.46190063,6.65148926 7.31964624,6.58395502 7.22468941,6.46756219 L6.1250094,5.11963533 C5.65022525,4.53767121 4.93895328,4.2 4.18788589,4.2 L-1.31109978e-09,4.2 L-1.31615252e-09,1 C-1.31615259e-09,0.44771525 0.447715249,-2.72848309e-10 0.999999999,-2.72848411e-10 L8.6,-1.36424205e-10 C9.15228475,-1.28574887e-10 9.6,0.44771525 9.6,1 L9.6,2.6 C9.6,3.15228475 10.0477152,3.6 10.6,3.6 L12.2,3.6 C12.7522847,3.6 13.2,4.04771525 13.2,4.6 L13.2,6.65148926 Z\",\n transform: \"translate(1.6)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n d: \"M12.8535534,0.924122051 L13.8758779,1.94644661 C14.0711401,2.14170876 14.0711401,2.45829124 13.8758779,2.65355339 C13.7821098,2.74732158 13.6549328,2.8 13.5223246,2.8 L12.5,2.8 C12.2238576,2.8 12,2.57614237 12,2.3 L12,1.27767544 C12,1.00153307 12.2238576,0.777675442 12.5,0.777675442 C12.6326082,0.777675442 12.7597852,0.830353862 12.8535534,0.924122051 Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F89E92\",\n d: \"M1,5.2 L5.78788589,5.2 C6.23852632,5.2 6.66528951,5.40260273 6.95015999,5.7517812 L8.04984001,7.09970806 C8.33471049,7.44888653 8.76147368,7.65148926 9.21211411,7.65148926 L15,7.65148926 C15.5522847,7.65148926 16,8.09920451 16,8.65148926 L16,15 C16,15.5522847 15.5522847,16 15,16 L1,16 C0.44771525,16 6.76353751e-17,15.5522847 0,15 L5.10702591e-15,6.2 C5.03939054e-15,5.64771525 0.44771525,5.2 1,5.2 Z\"\n}))));\nexport default SvgIconAppUploads;","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAppMyApps = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 16 17\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#FFF\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.667 0H2C.897 0 0 .897 0 2v2.667c0 1.102.897 2 2 2h2.667c1.102 0 2-.898 2-2V2c0-1.103-.898-2-2-2zM14 0h-2.667c-1.102 0-2 .897-2 2v2.667c0 1.102.898 2 2 2H14c1.103 0 2-.898 2-2V2c0-1.103-.897-2-2-2zM4.667 9.333H2c-1.103 0-2 .898-2 2V14c0 1.103.897 2 2 2h2.667c1.102 0 2-.897 2-2v-2.667c0-1.102-.898-2-2-2zM15.333 12h-2v-2c0-.368-.298-.667-.666-.667-.369 0-.667.299-.667.667v2h-2c-.369 0-.667.299-.667.667 0 .368.298.666.667.666h2v2c0 .368.298.667.667.667.368 0 .666-.299.666-.667v-2h2c.369 0 .667-.298.667-.666 0-.368-.298-.667-.667-.667z\",\n transform: \"translate(0 .243)\"\n}))));\nexport default SvgIconAppMyApps;","var _path, _path2, _path3, _path4;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAppAiAgentBuilder1 = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 205 205\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M153.723 8.54016H51.2411C37.0913 8.54016 25.6206 20.0109 25.6206 34.1607V170.803C25.6206 184.953 37.0913 196.424 51.2411 196.424H153.723C167.873 196.424 179.344 184.953 179.344 170.803V34.1607C179.344 20.0109 167.873 8.54016 153.723 8.54016Z\",\n fill: \"white\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M95.0957 53.5491C82.3481 53.5491 72.0142 63.8831 72.0142 76.6307C72.0142 89.3782 82.3481 99.7122 95.0957 99.7122C107.843 99.7122 118.177 89.3782 118.177 76.6307C118.177 63.8831 107.843 53.5491 95.0957 53.5491ZM95.0957 104.329C72.7484 104.329 53.549 120.303 53.549 141.259C53.549 143.808 55.6157 145.875 58.1653 145.875H96.7307C98.6503 145.875 100.37 144.687 101.049 142.892C101.728 141.096 101.225 139.068 99.7855 137.798C96.9027 135.254 95.0957 131.546 95.0957 127.41C95.0957 121.203 99.1826 115.938 104.823 114.183C106.837 113.557 108.17 111.646 108.062 109.54C107.955 107.435 106.434 105.669 104.368 105.251C101.381 104.647 98.2775 104.329 95.0957 104.329Z\",\n fill: \"#0099FF\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M146.659 131.02C149.307 132 149.307 135.746 146.659 136.725L142.762 138.168C137.212 140.221 132.836 144.597 130.782 150.148L129.34 154.045C128.36 156.693 124.614 156.693 123.635 154.045L122.192 150.148C120.139 144.597 115.763 140.221 110.212 138.168L106.315 136.725C103.667 135.746 103.667 132 106.315 131.02L110.212 129.578C115.763 127.524 120.139 123.148 122.192 117.598L123.635 113.701C124.614 111.053 128.36 111.053 129.34 113.701L130.782 117.598C132.836 123.148 137.212 127.524 142.762 129.578L146.659 131.02Z\",\n fill: \"#FF6100\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M153.867 97.9294C155.522 98.5418 155.522 100.883 153.867 101.495L151.431 102.396C147.962 103.68 145.227 106.415 143.943 109.884L143.042 112.32C142.429 113.975 140.089 113.975 139.476 112.32L138.575 109.884C137.291 106.415 134.556 103.68 131.087 102.396L128.651 101.495C126.996 100.883 126.996 98.5418 128.651 97.9294L131.087 97.0281C134.556 95.7444 137.291 93.0094 138.575 89.5405L139.476 87.1046C140.089 85.4496 142.429 85.4496 143.042 87.1046L143.943 89.5405C145.227 93.0094 147.962 95.7444 151.431 97.0281L153.867 97.9294Z\",\n fill: \"#FFB629\"\n})));\nexport default SvgIconAppAiAgentBuilder1;","var _path, _path2, _path3, _path4;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAppAiAgentBuilder2 = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 205 205\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M153.723 8.54016H51.2411C37.0913 8.54016 25.6206 20.0109 25.6206 34.1607V170.803C25.6206 184.953 37.0913 196.424 51.2411 196.424H153.723C167.873 196.424 179.344 184.953 179.344 170.803V34.1607C179.344 20.0109 167.873 8.54016 153.723 8.54016Z\",\n fill: \"#0099FF\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M95.0957 53.5491C82.3481 53.5491 72.0142 63.8831 72.0142 76.6307C72.0142 89.3783 82.3481 99.7122 95.0957 99.7122C107.843 99.7122 118.177 89.3783 118.177 76.6307C118.177 63.8831 107.843 53.5491 95.0957 53.5491ZM95.0957 104.329C72.7484 104.329 53.549 120.303 53.549 141.259C53.549 143.809 55.6157 145.875 58.1653 145.875H96.7307C98.6503 145.875 100.37 144.687 101.049 142.892C101.728 141.096 101.225 139.068 99.7855 137.798C96.9027 135.254 95.0957 131.546 95.0957 127.41C95.0957 121.203 99.1826 115.938 104.823 114.183C106.837 113.557 108.17 111.646 108.062 109.54C107.955 107.435 106.434 105.669 104.368 105.251C101.381 104.647 98.2775 104.329 95.0957 104.329Z\",\n fill: \"white\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M146.659 131.02C149.307 132 149.307 135.746 146.659 136.725L142.762 138.168C137.212 140.221 132.836 144.597 130.782 150.148L129.34 154.045C128.36 156.693 124.614 156.693 123.635 154.045L122.192 150.148C120.139 144.597 115.763 140.221 110.212 138.168L106.315 136.725C103.667 135.746 103.667 132 106.315 131.02L110.212 129.578C115.763 127.524 120.139 123.148 122.192 117.598L123.635 113.701C124.614 111.053 128.36 111.053 129.34 113.701L130.782 117.598C132.836 123.148 137.212 127.524 142.762 129.578L146.659 131.02Z\",\n fill: \"white\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M153.867 97.9294C155.522 98.5418 155.522 100.883 153.867 101.495L151.431 102.396C147.962 103.68 145.227 106.415 143.943 109.884L143.042 112.32C142.429 113.975 140.089 113.975 139.476 112.32L138.575 109.884C137.291 106.415 134.556 103.68 131.087 102.396L128.651 101.495C126.996 100.883 126.996 98.5418 128.651 97.9294L131.087 97.0281C134.556 95.7444 137.291 93.0094 138.575 89.5405L139.476 87.1046C140.089 85.4496 142.429 85.4496 143.042 87.1046L143.943 89.5405C145.227 93.0094 147.962 95.7444 151.431 97.0281L153.867 97.9294Z\",\n fill: \"white\"\n})));\nexport default SvgIconAppAiAgentBuilder2;","var _path, _path2, _path3, _path4;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconConversationsv1 = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 32 32\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M5 3H27C29.2091 3 31 4.79086 31 7V21C31 23.2091 29.2091 25 27 25H26V27.6638C26 28.7161 24.8382 29.3537 23.9506 28.7885L18.6553 25.4172C18.2273 25.1447 17.7305 25 17.2232 25H5C2.79086 25 1 23.2091 1 21V7C1 4.79086 2.79086 3 5 3Z\",\n fill: \"#0099FF\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.5847 10.4909C12.8715 10.5971 12.8715 11.0027 12.5847 11.1089L12.1626 11.2651C11.5614 11.4875 11.0874 11.9615 10.865 12.5627L10.7088 12.9848C10.6026 13.2716 10.197 13.2716 10.0908 12.9848L9.93464 12.5627C9.71219 11.9615 9.23821 11.4875 8.63706 11.2651L8.21492 11.1089C7.92811 11.0027 7.92811 10.5971 8.21492 10.4909L8.63706 10.3347C9.23821 10.1123 9.71219 9.63831 9.93464 9.03715L10.0908 8.61501C10.197 8.3282 10.6026 8.3282 10.7088 8.61501L10.865 9.03715C11.0874 9.63831 11.5614 10.1123 12.1626 10.3347L12.5847 10.4909Z\",\n fill: \"white\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.3696 16.582C20.9432 16.7942 20.9432 17.6056 20.3696 17.8178L19.5253 18.1302C18.323 18.5751 17.375 19.5231 16.9301 20.7254L16.6177 21.5697C16.4055 22.1433 15.5941 22.1433 15.3819 21.5697L15.0695 20.7254C14.6246 19.5231 13.6766 18.5751 12.4743 18.1302L11.63 17.8178C11.0564 17.6056 11.0564 16.7942 11.63 16.582L12.4743 16.2696C13.6766 15.8247 14.6246 14.8767 15.0695 13.6744L15.3819 12.8301C15.5941 12.2565 16.4055 12.2565 16.6177 12.8301L16.9301 13.6744C17.375 14.8767 18.323 15.8247 19.5253 16.2696L20.3696 16.582Z\",\n fill: \"white\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.3881 6.28682C20.5297 5.9044 21.0705 5.90439 21.212 6.28681L21.4203 6.84966C21.7169 7.65121 22.3489 8.28317 23.1504 8.57977L23.7133 8.78805C24.0957 8.92955 24.0957 9.47044 23.7133 9.61195L23.1504 9.82022C22.3489 10.1168 21.7169 10.7488 21.4203 11.5503L21.212 12.1132C21.0705 12.4956 20.5297 12.4956 20.3881 12.1132L20.1799 11.5503C19.8833 10.7488 19.2513 10.1168 18.4498 9.82022L17.8869 9.61195C17.5045 9.47044 17.5045 8.92955 17.8869 8.78805L18.4498 8.57977C19.2513 8.28317 19.8833 7.65121 20.1799 6.84966L20.3881 6.28682Z\",\n fill: \"white\"\n})));\nexport default SvgIconConversationsv1;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAppMyKiosks = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 31 28\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M25.7676 2.96726H4.91591C3.89633 2.96726 3.0698 3.79379 3.0698 4.81338V17.7142C3.0698 18.7338 3.89633 19.5603 4.91591 19.5603H25.7676C26.7872 19.5603 27.6137 18.7338 27.6137 17.7142V4.81338C27.6137 3.79379 26.7872 2.96726 25.7676 2.96726ZM4.91591 0C2.25756 0 0.102539 2.15503 0.102539 4.81338V17.7142C0.102539 20.3725 2.25756 22.5275 4.91591 22.5275H13.8587V25.0327H10.7031C9.88375 25.0327 9.2195 25.697 9.2195 26.5164C9.2195 27.3358 9.88375 28 10.7031 28L20.6418 28C21.4611 28 22.1254 27.3358 22.1254 26.5164C22.1254 25.697 21.4611 25.0327 20.6418 25.0327H16.8259V22.5275H25.7676C28.426 22.5275 30.581 20.3725 30.581 17.7142V4.81338C30.581 2.15502 28.426 0 25.7676 0H4.91591Z\",\n fill: \"#F9F9F9\"\n})));\nexport default SvgIconAppMyKiosks;","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAppMyForms = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 15 18\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 14,\n height: 17,\n x: 0.5,\n y: 0.5,\n stroke: \"#FFF\",\n rx: 1\n}), /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#FFF\",\n transform: \"translate(3 2.5)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.5 0h4c.276 0 .5.224.5.5s-.224.5-.5.5h-4C.224 1 0 .776 0 .5S.224 0 .5 0zM.5 5h4c.276 0 .5.224.5.5s-.224.5-.5.5h-4C.224 6 0 5.776 0 5.5S.224 5 .5 5z\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n width: 9,\n height: 1,\n y: 2,\n rx: 0.5\n}), /*#__PURE__*/React.createElement(\"rect\", {\n width: 9,\n height: 1,\n y: 7,\n rx: 0.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.5 10h4c.276 0 .5.224.5.5s-.224.5-.5.5h-4c-.276 0-.5-.224-.5-.5s.224-.5.5-.5z\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n width: 9,\n height: 1,\n y: 12,\n rx: 0.5\n})))));\nexport default SvgIconAppMyForms;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAppMyTasks = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 18 21\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M1.37506 19.2668H12.3093V14.5634C12.2818 14.5656 12.2562 14.5672 12.2318 14.5687H12.2318C12.1834 14.5718 12.14 14.5745 12.0973 14.5812C10.6166 14.8124 9.2134 14.5711 7.87635 13.9021C7.75834 13.8431 7.61204 13.8168 7.47868 13.8162C6.50284 13.8113 5.52697 13.8117 4.5511 13.8122L3.70991 13.8124H3.43098V12.4111H5.87982C5.80104 12.2974 5.72252 12.1854 5.64462 12.0742C5.44604 11.7907 5.25149 11.5131 5.06683 11.2289C4.98502 11.103 4.90321 11.0544 4.75504 11.0576C4.44075 11.0644 4.12629 11.0632 3.80708 11.0619H3.80706H3.80704C3.68116 11.0615 3.55455 11.061 3.42691 11.061V9.67841H4.38729C4.12597 8.73588 4.04264 7.80827 4.16388 6.86678C4.28513 5.92499 4.59407 5.04328 5.06746 4.21509H1.37506V19.2668ZM11.0378 13.2751C14.0784 13.2819 16.5778 10.805 16.5866 7.77624C16.5957 4.71668 14.1199 2.19585 11.097 2.18643C7.99803 2.17687 5.52085 4.62614 5.50555 7.71483C5.49034 10.7846 7.96154 13.2683 11.0378 13.2751ZM13.7371 20.6836H0V2.82506H0.27461L1.36179 2.82528C2.88376 2.82574 4.40572 2.8262 5.92769 2.81859C6.05683 2.81795 6.21461 2.75684 6.3101 2.66998C7.82765 1.28982 9.61337 0.670458 11.649 0.831281C14.7482 1.07607 17.3316 3.46423 17.8601 6.52909C18.3995 9.65687 16.8077 12.6999 13.9293 14.0287C13.7774 14.0989 13.7331 14.1784 13.7335 14.3391C13.7378 15.9384 13.7375 17.5377 13.7372 19.1371L13.7371 20.3605V20.6836ZM9.98485 10.9275L6.72611 7.66804L7.68085 6.71669L9.99525 9.02451L14.037 4.97868L14.9752 5.93342L9.98485 10.9275ZM10.2591 16.5515H3.42052V15.1898H10.2591V16.5515Z\",\n fill: \"white\"\n})));\nexport default SvgIconAppMyTasks;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAppSign = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 28 19\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M18.35 16.36l.08-.13c.54-.9 2-.08 1.45.83-.7 1.16-1.82 2.33-3.35 1.81a3.53 3.53 0 01-1.7-1.35c-.16-.21-.3-.44-.43-.67l-.1-.17-.01-.01-.3-.47-.04-.05-.02-.03a2.4 2.4 0 00-.47.53l-.13.17c-.3.38-.6.75-1.03 1-.9.56-2.07.53-2.73-.34-.2-.28-.32-.61-.44-.93l-.06-.17-.04-.13-.01-.02-.04-.06-.15.1c-.05.01-.09.04-.1.05a12.77 12.77 0 01-.53.46l-1.17 1.03-.24.22c-.62.58-1.42 1.32-2.27.78-.47-.3-.54-.82-.6-1.32l-.01-.13a36.57 36.57 0 01-.14-1.26 14.7 14.7 0 00-.38-2.49l-.03-.12c-.07-.27-.17-.64-.4-.8-.25-.15-.57.01-.78.16-.37.27-.48.72-.5 1.17-.01.61.12 1.17.32 1.77.33 1-1.3 1.43-1.63.44a5.7 5.7 0 01-.26-3.07A2.82 2.82 0 012.67 11c1.65-.07 2.25 1.56 2.5 2.86a23.3 23.3 0 01.3 2.37l.07.72.05-.05.19-.19.97-.86.27-.24c.53-.5 1.1-1.02 1.85-1.09.68-.07 1.27.3 1.59.86.11.2.2.44.27.66l.04.12.03.08c.04.12.09.28.16.33.23.12.68-.3.83-.48l.35-.42c.3-.37.58-.73 1-1 1.32-.86 2.06.34 2.7 1.36l.44.67c.25.33.73.8 1.2.62.4-.15.66-.6.87-.96zM13.83 16h-.04c-.04-.1-.03-.1.04 0zm-4.82.15c.13-.01.01-.04 0 0zm-.07-.06v0zM27.78 4.4l-1.6 1.35-1.7 4.25a.62.62 0 01-.4.36l-8.27 2.61a.62.62 0 01-.78-.78l2.61-8.27a.62.62 0 01.36-.4l4.23-1.7 1.38-1.6a.62.62 0 01.9-.04l3.3 3.3a.62.62 0 01-.03.91zm-10.8 5.75l4.17-4.17a.62.62 0 01.87.88l-4.17 4.16 5.58-1.76 1.5-3.71-2.47-2.48-3.72 1.5-1.76 5.58zm6.47-7.84l.66-.78 2.36 2.35-.78.67-2.24-2.24z\",\n fill: \"#fff\"\n})));\nexport default SvgIconAppSign;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAppApprovals = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 18 21\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M1.37506 18.7522H12.3093V14.0487C12.2818 14.051 12.2562 14.0526 12.2318 14.0541H12.2318C12.1834 14.0571 12.14 14.0598 12.0973 14.0665C10.6166 14.2978 9.2134 14.0564 7.87635 13.3875C7.75834 13.3285 7.61204 13.3022 7.47868 13.3015C6.50281 13.2966 5.5269 13.2971 4.55099 13.2975L3.70991 13.2978H3.43099V11.8965H5.87982C5.80104 11.7828 5.72252 11.6707 5.64463 11.5595C5.44605 11.2761 5.25149 10.9984 5.06683 10.7143C4.98502 10.5884 4.90321 10.5398 4.75504 10.5429C4.44075 10.5497 4.12629 10.5485 3.80708 10.5473H3.80706H3.80704C3.68117 10.5468 3.55455 10.5463 3.42692 10.5463V9.16376H4.38729C4.12597 8.22123 4.04264 7.29362 4.16389 6.35213C4.28513 5.41034 4.59407 4.52863 5.06747 3.70044H1.37506V18.7522ZM11.0378 12.7605C14.0784 12.7673 16.5778 10.2903 16.5866 7.26159C16.5957 4.20203 14.1199 1.6812 11.097 1.67178C7.99803 1.66222 5.52085 4.11149 5.50555 7.20019C5.49034 10.2699 7.96154 12.7537 11.0378 12.7605ZM13.7371 20.169H0V2.31041H0.27461L1.36175 2.31063C2.88373 2.31109 4.40571 2.31155 5.92769 2.30394C6.05683 2.3033 6.21461 2.24219 6.3101 2.15533C7.82765 0.775167 9.61337 0.15581 11.649 0.316633C14.7482 0.561423 17.3316 2.94959 17.8601 6.01444C18.3995 9.14222 16.8077 12.1853 13.9293 13.5141C13.7774 13.5843 13.7331 13.6638 13.7335 13.8244C13.7378 15.4237 13.7375 17.0231 13.7372 18.6224L13.7371 19.8459V20.169ZM9.98485 10.4128L6.72611 7.15339L7.68085 6.20203L9.99524 8.50986L14.037 4.46403L14.9752 5.41876L9.98485 10.4128ZM10.2591 16.0368H3.42052V14.6751H10.2591V16.0368Z\",\n fill: \"white\"\n})));\nexport default SvgIconAppApprovals;","var _path, _path2, _path3, _path4, _path5, _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAppMyContacts = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 32 32\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22 6C22 5.44772 22.4477 5 23 5H29C29.5523 5 30 5.44772 30 6V9C30 9.55228 29.5523 10 29 10H23C22.4477 10 22 9.55228 22 9V6Z\",\n fill: \"#0099FF\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22 13C22 12.4477 22.4477 12 23 12H29C29.5523 12 30 12.4477 30 13V16C30 16.5523 29.5523 17 29 17H23C22.4477 17 22 16.5523 22 16V13Z\",\n fill: \"#FF6100\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22 20C22 19.4477 22.4477 19 23 19H29C29.5523 19 30 19.4477 30 20V23C30 23.5523 29.5523 24 29 24H23C22.4477 24 22 23.5523 22 23V20Z\",\n fill: \"#FFB629\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1 4C1 1.79086 2.79086 0 5 0H23C25.2091 0 27 1.79086 27 4V28C27 30.2091 25.2091 32 23 32H5C2.79086 32 1 30.2091 1 28V4Z\",\n fill: \"white\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M23 1H5C3.34315 1 2 2.34315 2 4V28C2 29.6569 3.34315 31 5 31H23C24.6569 31 26 29.6569 26 28V4C26 2.34315 24.6569 1 23 1ZM5 0C2.79086 0 1 1.79086 1 4V28C1 30.2091 2.79086 32 5 32H23C25.2091 32 27 30.2091 27 28V4C27 1.79086 25.2091 0 23 0H5Z\",\n fill: \"white\"\n})), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip0_9_14183)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.9999 16C15.7672 16 17.1999 14.5673 17.1999 12.8C17.1999 11.0327 15.7672 9.59998 13.9999 9.59998C12.2326 9.59998 10.7999 11.0327 10.7999 12.8C10.7999 14.5673 12.2326 16 13.9999 16Z\",\n fill: \"#8099CF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.9998 17.0667C10.3998 17.0667 8.6665 19.3131 8.6665 20.6219V21.3333C8.6665 21.6162 8.77888 21.8875 8.97892 22.0876C9.17896 22.2876 9.45027 22.4 9.73317 22.4H18.2665C18.5494 22.4 18.8207 22.2876 19.0208 22.0876C19.2208 21.8875 19.3332 21.6162 19.3332 21.3333V20.6219C19.3332 19.3131 17.5998 17.0667 13.9998 17.0667Z\",\n fill: \"#8099CF\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip0_9_14183\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 12.8,\n height: 12.8,\n fill: \"white\",\n transform: \"translate(7.59998 9.59998)\"\n})))));\nexport default SvgIconAppMyContacts;","var _rect, _path, _path2, _path3, _path4;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgBoardsSelected = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 30 30\"\n}, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n width: 30,\n height: 30,\n rx: 3.75,\n fill: \"white\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.125 12.1875C16.125 11.8768 16.3768 11.625 16.6875 11.625H23.4375C23.7482 11.625 24 11.8768 24 12.1875V22.875C24 23.4963 23.4963 24 22.875 24H17.25C16.6287 24 16.125 23.4963 16.125 22.875V12.1875Z\",\n fill: \"#FFB629\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 12.1875C6 11.8768 6.25184 11.625 6.5625 11.625H13.3125C13.6232 11.625 13.875 11.8768 13.875 12.1875V18.375C13.875 18.9963 13.3713 19.5 12.75 19.5H7.125C6.50368 19.5 6 18.9963 6 18.375V12.1875Z\",\n fill: \"#FFB629\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 7.125C6 6.50368 6.50368 6 7.125 6H12.75C13.3713 6 13.875 6.50368 13.875 7.125V8.8125C13.875 9.12316 13.6232 9.375 13.3125 9.375H6.5625C6.25184 9.375 6 9.12316 6 8.8125V7.125Z\",\n fill: \"#FF6100\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.125 7.125C16.125 6.50368 16.6287 6 17.25 6H22.875C23.4963 6 24 6.50368 24 7.125V8.8125C24 9.12316 23.7482 9.375 23.4375 9.375H16.6875C16.3768 9.375 16.125 9.12316 16.125 8.8125V7.125Z\",\n fill: \"#0099FF\"\n})));\nexport default SvgBoardsSelected;","\n \n \n\n","\n \n \n \n \n \n\n","\n \n \n \n \n\n","\n \n\n","\n \n \n \n \n \n\n","\n \n\n","\n \n \n \n \n\n","\n \n \n\n","\n \n \n \n \n \n\n","\n \n\n","\n \n \n \n \n\n","\n \n \n \n \n \n \n\n","\n \n \n \n \n \n\n","\n \n\n","\n \n \n \n \n \n\n","\n \n\n","\n \n \n \n \n \n\n","var _path, _path2, _path3, _path4, _path5;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgContactsDefault = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 36 36\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.6875 8.1875C24.6875 7.61796 25.1492 7.15625 25.7188 7.15625H31.9062C32.4758 7.15625 32.9375 7.61796 32.9375 8.1875V11.2812C32.9375 11.8508 32.4758 12.3125 31.9062 12.3125H25.7188C25.1492 12.3125 24.6875 11.8508 24.6875 11.2812V8.1875Z\",\n fill: \"#8099CF\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.6875 15.4062C24.6875 14.8367 25.1492 14.375 25.7188 14.375H31.9062C32.4758 14.375 32.9375 14.8367 32.9375 15.4062V18.5C32.9375 19.0696 32.4758 19.5312 31.9062 19.5312H25.7188C25.1492 19.5312 24.6875 19.0696 24.6875 18.5V15.4062Z\",\n fill: \"#8099CF\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.6875 22.625C24.6875 22.0554 25.1492 21.5938 25.7188 21.5938H31.9062C32.4758 21.5938 32.9375 22.0554 32.9375 22.625V25.7188C32.9375 26.2883 32.4758 26.75 31.9062 26.75H25.7188C25.1492 26.75 24.6875 26.2883 24.6875 25.7188V22.625Z\",\n fill: \"#8099CF\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M3.03125 6.125C3.03125 3.84682 4.87807 2 7.15625 2H25.7188C27.9969 2 29.8438 3.84682 29.8438 6.125V30.875C29.8438 33.1531 27.9969 35 25.7188 35H7.15625C4.87807 35 3.03125 33.1531 3.03125 30.875V6.125ZM16.4409 18.5C18.2635 18.5 19.7409 17.0225 19.7409 15.2C19.7409 13.3775 18.2635 11.9 16.4409 11.9C14.6184 11.9 13.1409 13.3775 13.1409 15.2C13.1409 17.0225 14.6184 18.5 16.4409 18.5ZM10.9409 23.2663C10.9409 21.9166 12.7284 19.6 16.4409 19.6C20.1534 19.6 21.941 21.9166 21.941 23.2663V24.0001C21.941 24.2918 21.8251 24.5716 21.6187 24.7778C21.4125 24.9842 21.1327 25.1 20.8409 25.1H12.0409C11.7492 25.1 11.4694 24.9842 11.2631 24.7778C11.0568 24.5716 10.9409 24.2918 10.9409 24.0001V23.2663Z\",\n fill: \"#895FFF\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M25.7188 3.03125H7.15625C5.44762 3.03125 4.0625 4.41637 4.0625 6.125V30.875C4.0625 32.5837 5.44762 33.9688 7.15625 33.9688H25.7188C27.4274 33.9688 28.8125 32.5837 28.8125 30.875V6.125C28.8125 4.41637 27.4274 3.03125 25.7188 3.03125ZM7.15625 2C4.87807 2 3.03125 3.84682 3.03125 6.125V30.875C3.03125 33.1531 4.87807 35 7.15625 35H25.7188C27.9969 35 29.8438 33.1531 29.8438 30.875V6.125C29.8438 3.84682 27.9969 2 25.7188 2H7.15625Z\",\n fill: \"#895FFF\"\n})));\nexport default SvgContactsDefault;","var _path, _path2, _path3, _path4, _path5, _path6, _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgContactsSelected = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 36 36\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.6875 8.1875C24.6875 7.61796 25.1492 7.15625 25.7188 7.15625H31.9062C32.4758 7.15625 32.9375 7.61796 32.9375 8.1875V11.2812C32.9375 11.8508 32.4758 12.3125 31.9062 12.3125H25.7188C25.1492 12.3125 24.6875 11.8508 24.6875 11.2812V8.1875Z\",\n fill: \"#0099FF\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.6875 15.4062C24.6875 14.8367 25.1492 14.375 25.7188 14.375H31.9062C32.4758 14.375 32.9375 14.8367 32.9375 15.4062V18.5C32.9375 19.0696 32.4758 19.5312 31.9062 19.5312H25.7188C25.1492 19.5312 24.6875 19.0696 24.6875 18.5V15.4062Z\",\n fill: \"#FF6100\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.6875 22.625C24.6875 22.0554 25.1492 21.5938 25.7188 21.5938H31.9062C32.4758 21.5938 32.9375 22.0554 32.9375 22.625V25.7188C32.9375 26.2883 32.4758 26.75 31.9062 26.75H25.7188C25.1492 26.75 24.6875 26.2883 24.6875 25.7188V22.625Z\",\n fill: \"#FFB629\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.03125 6.125C3.03125 3.84682 4.87807 2 7.15625 2H25.7188C27.9969 2 29.8438 3.84682 29.8438 6.125V30.875C29.8438 33.1531 27.9969 35 25.7188 35H7.15625C4.87807 35 3.03125 33.1531 3.03125 30.875V6.125Z\",\n fill: \"white\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M25.7188 3.03125H7.15625C5.44762 3.03125 4.0625 4.41637 4.0625 6.125V30.875C4.0625 32.5837 5.44762 33.9688 7.15625 33.9688H25.7188C27.4274 33.9688 28.8125 32.5837 28.8125 30.875V6.125C28.8125 4.41637 27.4274 3.03125 25.7188 3.03125ZM7.15625 2C4.87807 2 3.03125 3.84682 3.03125 6.125V30.875C3.03125 33.1531 4.87807 35 7.15625 35H25.7188C27.9969 35 29.8438 33.1531 29.8438 30.875V6.125C29.8438 3.84682 27.9969 2 25.7188 2H7.15625Z\",\n fill: \"white\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask0_325_1161\",\n style: {\n maskType: \"luminance\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 9,\n y: 11,\n width: 15,\n height: 15\n}, _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.0375 11.9H9.83746V25.1H23.0375V11.9Z\",\n fill: \"white\"\n}))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask0_325_1161)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.4374 18.5C18.2599 18.5 19.7374 17.0225 19.7374 15.2C19.7374 13.3775 18.2599 11.9 16.4374 11.9C14.6149 11.9 13.1374 13.3775 13.1374 15.2C13.1374 17.0225 14.6149 18.5 16.4374 18.5Z\",\n fill: \"#8099CF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.4373 19.6C12.7248 19.6 10.9373 21.9166 10.9373 23.2663V24C10.9373 24.2917 11.0532 24.5715 11.2595 24.7778C11.4658 24.9841 11.7456 25.1 12.0373 25.1H20.8373C21.1291 25.1 21.4088 24.9841 21.6152 24.7778C21.8214 24.5715 21.9374 24.2917 21.9374 24V23.2663C21.9374 21.9166 20.1498 19.6 16.4373 19.6Z\",\n fill: \"#8099CF\"\n}))));\nexport default SvgContactsSelected;","var _rect, _path, _path2, _path3, _path4;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgBoardsDefault = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 30 30\"\n}, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n width: 30,\n height: 30,\n rx: 3.75,\n fill: \"#504ECC\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.125 12.1875C16.125 11.8768 16.3768 11.625 16.6875 11.625H23.4375C23.7482 11.625 24 11.8768 24 12.1875V22.875C24 23.4963 23.4963 24 22.875 24H17.25C16.6287 24 16.125 23.4963 16.125 22.875V12.1875Z\",\n fill: \"white\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 12.1875C6 11.8768 6.25184 11.625 6.5625 11.625H13.3125C13.6232 11.625 13.875 11.8768 13.875 12.1875V18.375C13.875 18.9963 13.3713 19.5 12.75 19.5H7.125C6.50368 19.5 6 18.9963 6 18.375V12.1875Z\",\n fill: \"white\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 7.125C6 6.50368 6.50368 6 7.125 6H12.75C13.3713 6 13.875 6.50368 13.875 7.125V8.8125C13.875 9.12316 13.6232 9.375 13.3125 9.375H6.5625C6.25184 9.375 6 9.12316 6 8.8125V7.125Z\",\n fill: \"#ABAAF4\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.125 7.125C16.125 6.50368 16.6287 6 17.25 6H22.875C23.4963 6 24 6.50368 24 7.125V8.8125C24 9.12316 23.7482 9.375 23.4375 9.375H16.6875C16.3768 9.375 16.125 9.12316 16.125 8.8125V7.125Z\",\n fill: \"#ABAAF4\"\n})));\nexport default SvgBoardsDefault;","var _path, _path2, _path3, _path4;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconConversationsv2 = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 32 32\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M5 3H27C29.2091 3 31 4.79086 31 7V21C31 23.2091 29.2091 25 27 25H26V27.6638C26 28.7161 24.8382 29.3537 23.9506 28.7885L18.6553 25.4172C18.2273 25.1447 17.7305 25 17.2232 25H5C2.79086 25 1 23.2091 1 21V7C1 4.79086 2.79086 3 5 3Z\",\n fill: \"white\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.5847 10.4909C12.8715 10.5971 12.8715 11.0027 12.5847 11.1089L12.1626 11.2651C11.5614 11.4875 11.0874 11.9615 10.865 12.5627L10.7088 12.9848C10.6026 13.2716 10.197 13.2716 10.0908 12.9848L9.93464 12.5627C9.71219 11.9615 9.23821 11.4875 8.63706 11.2651L8.21492 11.1089C7.92811 11.0027 7.92811 10.5971 8.21492 10.4909L8.63706 10.3347C9.23821 10.1123 9.71219 9.63831 9.93464 9.03715L10.0908 8.61501C10.197 8.3282 10.6026 8.3282 10.7088 8.61501L10.865 9.03715C11.0874 9.63831 11.5614 10.1123 12.1626 10.3347L12.5847 10.4909Z\",\n fill: \"#0099FF\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.3696 16.582C20.9432 16.7942 20.9432 17.6056 20.3696 17.8178L19.5253 18.1302C18.323 18.5751 17.375 19.5231 16.9301 20.7254L16.6177 21.5697C16.4055 22.1433 15.5941 22.1433 15.3819 21.5697L15.0695 20.7254C14.6246 19.5231 13.6766 18.5751 12.4743 18.1302L11.63 17.8178C11.0564 17.6056 11.0564 16.7942 11.63 16.582L12.4743 16.2696C13.6766 15.8247 14.6246 14.8767 15.0695 13.6744L15.3819 12.8301C15.5941 12.2565 16.4055 12.2565 16.6177 12.8301L16.9301 13.6744C17.375 14.8767 18.323 15.8247 19.5253 16.2696L20.3696 16.582Z\",\n fill: \"#FF6100\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.3877 6.28682C20.5292 5.9044 21.0701 5.90439 21.2116 6.28681L21.4198 6.84966C21.7164 7.65121 22.3484 8.28317 23.1499 8.57977L23.7128 8.78805C24.0952 8.92955 24.0952 9.47044 23.7128 9.61195L23.1499 9.82022C22.3484 10.1168 21.7164 10.7488 21.4198 11.5503L21.2116 12.1132C21.0701 12.4956 20.5292 12.4956 20.3877 12.1132L20.1794 11.5503C19.8828 10.7488 19.2508 10.1168 18.4493 9.82022L17.8864 9.61195C17.504 9.47044 17.504 8.92955 17.8864 8.78805L18.4493 8.57977C19.2508 8.28317 19.8828 7.65121 20.1794 6.84966L20.3877 6.28682Z\",\n fill: \"#FFB629\"\n})));\nexport default SvgIconConversationsv2;","/* eslint-disable max-lines */\nimport React from 'react';\n\nimport { IconProductPagesMono, IconProductPagesColor } from '@jotforminc/svg-icons';\n\nimport PropTypes, { oneOfType } from 'prop-types';\nimport { RESOURCE_TYPES } from '@jotforminc/resource-picker';\nimport IconAppAnalytics from '../../assets/svg/iconAppAnalytics.svg';\nimport IconAppBuilder from '../../assets/svg/iconAppBuilder.svg';\nimport IconAppCards from '../../assets/svg/iconAppCards.svg';\nimport IconAppForm from '../../assets/svg/iconAppForm.svg';\nimport IconAppInbox from '../../assets/svg/iconAppInbox.svg';\nimport IconAppPdfEditor from '../../assets/svg/iconAppPdfEditor.svg';\nimport IconAppReports from '../../assets/svg/iconAppReports.svg';\nimport IconAppSheets from '../../assets/svg/iconAppSheets.svg';\nimport IconAppUploads from '../../assets/svg/iconAppUploads.svg';\nimport IconAppMyApps from '../../assets/svg/iconAppMyApps.svg';\nimport IconAppAiAgentBuilder1 from '../../assets/svg/iconAppAiAgentBuilder1.svg';\nimport IconAppAiAgentBuilder2 from '../../assets/svg/iconAppAiAgentBuilder2.svg';\nimport IconConversations1 from '../../assets/svg/iconConversationsv1.svg';\nimport IconAppMyKiosks from '../../assets/svg/iconAppMyKiosks.svg';\nimport IconAppMyForms from '../../assets/svg/iconAppMyForms.svg';\nimport IconAppMyTasks from '../../assets/svg/iconAppMyTasks.svg';\nimport IconAppSign from '../../assets/svg/iconAppSign.svg';\nimport IconAppApprovals from '../../assets/svg/iconAppApprovals.svg';\nimport IconAppMyTeams from '../../assets/svg/iconAppMyTeams.svg';\nimport IconAppMyWorkspace from '../../assets/svg/iconAppMyWorkspace.svg';\nimport IconAppMyContacts from '../../assets/svg/iconAppMyContacts.svg';\nimport IconAppBoards from '../../assets/svg/appIcons/boards_selected.svg';\n\nimport AppIcons from './appIcons';\nimport { getDefaultLogoSrc } from '../../utils/utils';\n\n// TEMPORARY. WILL BE DELETED AFTER ACTUAL RELEASE :) SORRY AND THANKS.\nconst isWorkflowReleased = window?.isWorkflowReleased;\nconst MY_TASKS_TEXT = {\n appLink: isWorkflowReleased ? '/myworkflows/' : '/myapprovals/',\n title: isWorkflowReleased ? 'My Workflows' : 'My Approvals',\n titleForTeamContext: isWorkflowReleased ? 'Workflow' : 'Approvals'\n};\n\nconst APPROVALS_TEXT = {\n title: isWorkflowReleased ? 'Workflow Builder' : 'Approvals',\n explanation: `Build ${isWorkflowReleased ? 'workflows' : 'approval flows'} from your forms, create custom outcomes, and send email notifications to submitters.`\n};\n\n/** TODO::Branding\n * - Delete primary and secondary colors (we are using appColor prop)\n */\n\nexport const appToResourceType = app => {\n switch (app) {\n case 'portal':\n return RESOURCE_TYPES.APP;\n case 'approvals':\n return RESOURCE_TYPES.APPROVAL;\n case 'sign':\n return RESOURCE_TYPES.SIGN;\n case 'signInbox':\n return RESOURCE_TYPES.SIGN_INBOX;\n case 'boards':\n return RESOURCE_TYPES.BOARD;\n default:\n return RESOURCE_TYPES.FORM;\n }\n};\n\nexport const navigationItems = {\n viewForm: {\n 'data-icon': 'forForm',\n icon: ,\n appLink: formID => {\n const isProduction = 'JOTFORM_ENV' in window && window.JOTFORM_ENV === 'PRODUCTION';\n if (isProduction) {\n return `//form.jotform.com/${formID}`;\n }\n return `/${formID}`;\n },\n title: 'View Form',\n target: '_blank',\n primaryColor: '#5749C6',\n secondaryColor: '#4034B4',\n backgroundColor: '#FFFFFF'\n },\n formBuilder: {\n 'data-icon': 'forBuilder',\n icon: ,\n appLink: formID => `/build/${formID}`,\n title: 'Form Builder',\n className: 'isBuilder',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-orange@4x.png'\n },\n title: {\n visible: true,\n editable: true,\n isIconVisible: false\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#F38632',\n secondaryColor: '#D26612',\n backgroundColor: '#FFFFFF'\n },\n pdfEditor: {\n 'data-icon': 'forPdfEditor',\n icon: ,\n appLink: formID => `/pdf-editor/${formID}`,\n title: 'PDF Editor',\n logo: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png',\n className: 'isPdfEditor',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#3468E7',\n secondaryColor: '#1C4BBE',\n backgroundColor: '#3161CF'\n },\n tables: {\n 'data-icon': 'forSheets',\n icon: ,\n appLink: formID => `/tables/${formID}`,\n title: 'Tables',\n className: 'isSheets',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: true,\n editable: true,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#38BA71',\n secondaryColor: '#0D9549',\n backgroundColor: '#0D9549'\n },\n appTables: {\n 'data-icon': 'forSheets',\n icon: ,\n icons: AppIcons.tables,\n appLink: formID => `/tables/withApp/${formID}`,\n title: 'Tables',\n className: 'isSheets',\n target: '_self',\n components: {\n title: {\n visible: true,\n editable: true,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#FF6100',\n secondaryColor: '#FF6100',\n backgroundColor: '#FFFFFF',\n appColor: '#149F43'\n },\n cards: {\n 'data-icon': 'forCards',\n icon: ,\n appLink: formID => `/tables/${formID}`,\n title: 'Cards',\n className: 'isCards',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: false,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#2E5DFF',\n secondaryColor: '#4277FF',\n backgroundColor: '#4277FF'\n },\n uploads: {\n 'data-icon': 'forUploads',\n icon: ,\n appLink: formID => `/tables/${formID}`,\n title: 'Uploads',\n className: 'isUploads',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: false,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#EA6041',\n secondaryColor: '#F07A59',\n backgroundColor: '#F07A59'\n },\n inbox: {\n 'data-icon': 'forInbox',\n icon: ,\n appLink: formID => `/inbox/${formID}`,\n title: 'Inbox',\n className: 'isInbox',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#39B9C5',\n secondaryColor: '#228DB5',\n backgroundColor: '#0097a7'\n },\n signInbox: {\n 'data-icon': 'forInbox',\n icon: ,\n appLink: formID => `/inbox/${formID}`,\n title: 'Sign Inbox',\n className: 'isInbox',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#39B9C5',\n secondaryColor: '#228DB5',\n backgroundColor: '#0097a7'\n },\n portal: {\n 'data-icon': 'forPortal',\n icon: ,\n appLink: formID => `/app/buildWith/${formID}`,\n title: 'App Builder',\n className: 'isPortal',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#69519d',\n secondaryColor: '#42277d',\n backgroundColor: '#69519d'\n },\n aiAgentBuilder: {\n 'data-icon': 'forAiAgentBuilder',\n icon: ,\n appLink: agentID => `/agent/build/${agentID}`,\n title: 'AI Agent Builder',\n className: 'isPortal',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#69519d',\n secondaryColor: '#09f',\n appColor: '#09f',\n backgroundColor: '#69519d'\n },\n workflow: {\n 'data-icon': 'forWorkflow',\n icon: ,\n appLink: () => '/workflow',\n title: 'Workflow Builder',\n className: 'isWorkflow',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: '',\n isIconVisible: false\n }\n },\n primaryColor: '#37836F',\n secondaryColor: '#025F46',\n backgroundColor: '#37836F'\n },\n myForms: {\n 'data-icon': 'forMyForms',\n icon: ,\n appLink: () => '/myforms',\n title: 'My Forms',\n className: 'isMyForms',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: false,\n editable: false,\n isIconVisible: false\n },\n subTitle: {\n visible: false,\n isIconVisible: false\n }\n },\n primaryColor: '#FFB448',\n secondaryColor: '#e89010',\n backgroundColor: '#2D364C'\n },\n myApps: {\n 'data-icon': 'forMyApps',\n icon: ,\n appLink: '/myapps/',\n title: 'My Apps',\n className: 'isMyApps',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: false,\n editable: false,\n isIconVisible: false\n },\n subTitle: {\n visible: false,\n isIconVisible: false\n }\n },\n primaryColor: '#69519d',\n secondaryColor: '#42277d',\n backgroundColor: '#745CA9'\n },\n myKiosks: {\n 'data-icon': 'forMyKiosks',\n icon: ,\n appLink: '/mykiosks/',\n title: 'My Kiosks',\n className: 'isMyKiosks',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: false,\n editable: false,\n isIconVisible: false\n },\n subTitle: {\n visible: false,\n isIconVisible: false\n }\n },\n primaryColor: '#BDC1D7',\n secondaryColor: '#ADB2CD',\n backgroundColor: '#BDC1D7'\n },\n enterpriseAdmin: {\n 'data-icon': 'forEnterpriseAdmin',\n icon: ,\n appLink: () => '/enterprise-admin/',\n title: 'Admin',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#30336A',\n secondaryColor: '#3E417C',\n backgroundColor: '#30336A'\n },\n formAnalytics: {\n 'data-icon': 'forAnalytics',\n icon: ,\n appLink: formID => `/analytics/${formID}`,\n title: 'Form Analytics',\n target: '_self',\n primaryColor: '#AF4AE9',\n secondaryColor: '#8F2DD5',\n backgroundColor: '#5C268B'\n },\n reports: {\n 'data-icon': 'forReports',\n icon: ,\n appLink: formID => `/reports/${formID}`,\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: true,\n editable: true,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n title: 'Report Builder',\n target: '_self',\n primaryColor: '#4D5773',\n secondaryColor: '#2E354A',\n backgroundColor: '#2E354A'\n },\n boards: {\n 'data-icon': 'forBoards',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: true,\n editable: true,\n isIconVisible: false\n },\n subTitle: {\n visible: true,\n isIconVisible: false\n }\n },\n icon: ,\n icons: AppIcons.boards,\n appLink: formID => {\n return `/boards/new/${formID}?from=formBuilder-navigation`;\n },\n title: 'Boards',\n className: 'isBoards',\n target: '_self',\n primaryColor: '#FF6100',\n secondaryColor: '#5C59ED',\n backgroundColor: '#5C59ED'\n },\n conversations: {\n 'data-icon': 'forConversations',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: true,\n editable: false,\n isIconVisible: false\n },\n subTitle: {\n visible: true,\n isIconVisible: false\n }\n },\n icon: ,\n icons: AppIcons.conversations,\n appLink: formID => {\n return `/conversations/withForm/${formID}`;\n },\n title: 'Conversations',\n className: 'isConversations',\n target: '_self',\n primaryColor: '#FF6100',\n secondaryColor: '#5C59ED',\n backgroundColor: '#5C59ED'\n },\n myReports: {\n 'data-icon': 'forMyReports',\n icon: ,\n appLink: '/myreports/',\n title: 'My Reports',\n className: 'isMyReports',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: false,\n editable: false,\n isIconVisible: false\n },\n subTitle: {\n visible: false,\n isIconVisible: false\n }\n },\n primaryColor: '#4E5773',\n secondaryColor: '#323F62',\n backgroundColor: '#3c4253'\n },\n myTables: {\n 'data-icon': 'forSheets',\n icon: ,\n appLink: '/mytables/',\n title: 'My Tables',\n className: 'isMySheets',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: false,\n editable: false,\n isIconVisible: false\n },\n subTitle: {\n visible: false,\n isIconVisible: false\n }\n },\n primaryColor: '#38ba71',\n secondaryColor: '#0d9549',\n backgroundColor: '#0d9549'\n },\n myTasks: {\n 'data-icon': 'forTasks',\n icon: ,\n ...MY_TASKS_TEXT,\n className: 'isMyTasks',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: false,\n editable: false,\n isIconVisible: false\n },\n subTitle: {\n visible: false,\n isIconVisible: false\n }\n },\n primaryColor: '#37836F',\n secondaryColor: '#025F46',\n backgroundColor: '#025F46'\n },\n submissions: {\n 'data-icon': 'forSheets',\n icon: ,\n appLink: formID => `/submissions/${formID}`,\n title: 'Submissions',\n className: 'isSheets',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#037B38',\n secondaryColor: '#0D9549',\n backgroundColor: '#0D9549'\n },\n oldPdfEditor: {\n 'data-icon': 'forPdfEditor',\n icon: ,\n appLink: formID => `/page.php?p=pdfEditor&formID=${formID}`,\n title: 'PDF Editor',\n logo: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png',\n className: 'isPdfEditor',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#254DB3',\n secondaryColor: '#3161CF',\n backgroundColor: '#3161CF'\n },\n sign: {\n 'data-icon': 'forSign',\n icon: ,\n appLink: formID => `/sign/${formID}`,\n title: 'Sign Builder',\n className: 'isSign',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: true,\n editable: true,\n isIconVisible: true\n },\n subTitle: {\n visible: false,\n isIconVisible: false\n }\n },\n primaryColor: '#7BB60F',\n secondaryColor: '#6b9e0d',\n backgroundColor: '#7BB60F'\n },\n approvals: {\n 'data-icon': 'forApprovals',\n icon: ,\n appLink: formID => `/workflow/withForm/${formID}`,\n title: 'Approvals',\n className: 'isApprovals',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: true,\n editable: true,\n isIconVisible: true\n },\n subTitle: {\n visible: false,\n isIconVisible: false\n }\n },\n primaryColor: '#37836F',\n secondaryColor: '#025F46',\n backgroundColor: '#37836F'\n },\n myDocuments: {\n 'data-icon': 'forMyDocuments',\n icon: ,\n appLink: '/mysigndocuments/',\n title: 'My Sign Documents',\n className: 'isMyDocuments',\n target: '_self',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: false,\n editable: false,\n isIconVisible: false\n },\n subTitle: {\n visible: false,\n isIconVisible: false\n }\n },\n primaryColor: '#7BB60F',\n secondaryColor: '#6b9e0d',\n backgroundColor: '#7BB60F'\n },\n myTeams: {\n 'data-icon': 'forMyTeams',\n icon: ,\n appLink: '/myteams/',\n title: 'My Teams',\n target: '_self',\n primaryColor: '#18235C',\n secondaryColor: '#18235C',\n backgroundColor: '#18235C'\n },\n myWorkspace: {\n 'data-icon': 'forMyWorkspace',\n icon: ,\n appLink: '/myworkspace/',\n title: 'My Workspace',\n target: '_self',\n primaryColor: '#18235C',\n secondaryColor: '#18235C',\n backgroundColor: '#18235C'\n },\n myAgents: {\n 'data-icon': 'forMyAgents',\n icon: ,\n appLink: '/myagents/',\n title: 'My Agents',\n target: '_self',\n primaryColor: '#0099ff',\n secondaryColor: '#0099ff',\n backgroundColor: '#0099ff'\n },\n myContacts: {\n 'data-icon': 'forMyContacts',\n icon: ,\n appLink: '/mycontacts/',\n title: 'My Contacts',\n target: '_self',\n primaryColor: '#895FFF',\n secondaryColor: '#895FFF',\n backgroundColor: '#895FFF'\n },\n myPages: {\n 'data-icon': 'forMyPages',\n icon: ,\n appLink: '/mypages/',\n title: 'My Pages',\n className: 'isMyPages',\n target: '_self',\n primaryColor: '#034f96',\n secondaryColor: '#034f96',\n backgroundColor: '#034f96'\n },\n myBoards: {\n 'data-icon': 'forMyBoards',\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: false,\n isIconVisible: false\n }\n },\n icon: ,\n icons: AppIcons.boards,\n appLink: '/myboards/',\n title: 'My Boards',\n className: 'isBoards',\n target: '_self',\n primaryColor: '#FF6100',\n secondaryColor: '#5C59ED',\n backgroundColor: '#5C59ED'\n }\n};\n\nconst branding21sharedConfigs = {\n components: {\n logo: {\n visible: true,\n src: getDefaultLogoSrc()\n }\n },\n colors: {\n accountBoxBorderColor: '#FF6100'\n }\n};\n\nexport const navigationItemsForBranding21 = {\n viewForm: {\n 'data-icon': 'forForm',\n icon: ,\n icons: AppIcons.viewForm,\n appLink: formID => {\n const isProduction = 'JOTFORM_ENV' in window && window.JOTFORM_ENV === 'PRODUCTION';\n if (isProduction) {\n return `//form.jotform.com/${formID}`;\n }\n return `/${formID}`;\n },\n title: 'View Form',\n explanation: 'See your form in action.',\n target: '_blank',\n primaryColor: '#5749C6',\n secondaryColor: '#4034B4',\n backgroundColor: '#FFFFFF',\n appColor: '#343C6A',\n ...branding21sharedConfigs.colors\n },\n formBuilder: {\n 'data-icon': 'forBuilder',\n icon: ,\n icons: AppIcons.formBuilder,\n appLink: formID => `/build/${formID}`,\n title: 'Form Builder',\n explanation: 'Create forms and customize them with styling options to match your branding.',\n className: 'isBuilder',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: true,\n editable: true,\n isIconVisible: false\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#F38632',\n secondaryColor: '#D26612',\n backgroundColor: '#FFFFFF',\n appColor: '#FF6100',\n ...branding21sharedConfigs.colors\n },\n pdfEditor: {\n 'data-icon': 'forPdfEditor',\n icon: ,\n icons: AppIcons.pdfEditor,\n appLink: formID => `/pdf-editor/${formID}`,\n title: 'PDF Editor',\n explanation: 'Automatically convert your form responses into professional-looking PDF documents.',\n logo: getDefaultLogoSrc(),\n className: 'isPdfEditor',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#3468E7',\n secondaryColor: '#1C4BBE',\n backgroundColor: '#3161CF',\n appColor: '#3E62C8',\n ...branding21sharedConfigs.colors\n },\n tables: {\n 'data-icon': 'forSheets',\n icon: ,\n icons: AppIcons.tables,\n appLink: formID => `/tables/${formID}`,\n title: 'Tables',\n explanation: 'View and manage your form responses, collaborate with teammates, and more.',\n className: 'isSheets',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: true,\n editable: true,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#FF6100',\n secondaryColor: '#FF6100',\n backgroundColor: '#FFFFFF',\n appColor: '#149F43',\n ...branding21sharedConfigs.colors\n },\n appTables: {\n 'data-icon': 'forSheets',\n icon: ,\n icons: AppIcons.tables,\n appLink: formID => `/tables/withApp/${formID}`,\n title: 'Tables',\n className: 'isSheets',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: true,\n editable: true,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#FF6100',\n secondaryColor: '#FF6100',\n backgroundColor: '#FFFFFF',\n appColor: '#149F43',\n ...branding21sharedConfigs.colors\n },\n inbox: {\n 'data-icon': 'forInbox',\n icon: ,\n icons: AppIcons.inbox,\n appLink: formID => `/inbox/${formID}`,\n title: 'Inbox',\n explanation: 'Manage your communications — respond to messages, forward form responses, leave comments, and tag teammates.',\n className: 'isInbox',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#39B9C5',\n secondaryColor: '#228DB5',\n backgroundColor: '#0097a7',\n appColor: '#249BB4',\n ...branding21sharedConfigs.colors\n },\n signInbox: {\n 'data-icon': 'forInbox',\n icon: ,\n icons: AppIcons.inbox,\n appLink: formID => `/inbox/${formID}`,\n title: 'Sign Inbox',\n explanation: 'Manage your communications — respond to messages, forward form responses, leave comments, and tag teammates.',\n className: 'isInbox',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#39B9C5',\n secondaryColor: '#228DB5',\n backgroundColor: '#0097a7',\n appColor: '#249BB4',\n ...branding21sharedConfigs.colors\n },\n portal: {\n 'data-icon': 'forPortal',\n icon: ,\n icons: AppIcons.portal,\n appLink: (formID, oldNavigation) => `/app/${oldNavigation ? 'buildWith' : 'build'}/${formID}`,\n createLink: formIDs => {\n if (typeof formIDs === 'string') {\n return `/app/create/${formIDs}`;\n }\n if (formIDs.length === 0) {\n return '/app';\n }\n return `/app/create/${formIDs.join(',')}`;\n },\n title: 'App Builder',\n explanation: 'Make downloadable no-code apps for your business. Add forms, links, widgets, and your branding.',\n className: 'isPortal',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#69519d',\n secondaryColor: '#42277d',\n backgroundColor: '#69519d',\n appColor: '#8D4ECC',\n ...branding21sharedConfigs.colors\n },\n workflow: {\n 'data-icon': 'forWorkflow',\n icon: ,\n appLink: () => '/workflow',\n title: 'Workflow Builder',\n className: 'isWorkflow',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: '',\n isIconVisible: false\n }\n },\n primaryColor: '#37836F',\n secondaryColor: '#025F46',\n backgroundColor: '#37836F',\n ...branding21sharedConfigs.colors\n },\n myForms: {\n 'data-icon': 'forMyForms',\n icon: ,\n icons: AppIcons.formBuilder,\n appLink: () => '/myforms/',\n title: 'My Forms',\n titleForTeamContext: 'Forms',\n className: 'isMyForms',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: false,\n editable: false,\n isIconVisible: false\n },\n subTitle: {\n visible: false,\n isIconVisible: false\n }\n },\n primaryColor: '#FFB448',\n secondaryColor: '#e89010',\n backgroundColor: '#2D364C',\n appColor: '#FF6100',\n ...branding21sharedConfigs.colors\n },\n myApps: {\n 'data-icon': 'forMyApps',\n icon: ,\n icons: AppIcons.portal,\n appLink: '/myapps/',\n title: 'My Apps',\n titleForTeamContext: 'Apps',\n className: 'isMyApps',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: false,\n editable: false,\n isIconVisible: false\n },\n subTitle: {\n visible: false,\n isIconVisible: false\n }\n },\n primaryColor: '#69519d',\n secondaryColor: '#42277d',\n backgroundColor: '#745CA9',\n appColor: '#7B5FD4',\n ...branding21sharedConfigs.colors\n },\n enterpriseAdmin: {\n 'data-icon': 'forEnterpriseAdmin',\n icon: ,\n appLink: () => '/enterprise-admin/',\n title: 'Admin',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#30336A',\n secondaryColor: '#3E417C',\n backgroundColor: '#30336A',\n ...branding21sharedConfigs.color\n },\n enterpriseManagementPanel: {\n 'data-icon': 'forEnterpriseManagementPanel',\n icon: ,\n appLink: () => '/enterprise-admin/',\n title: 'Admin',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#30336A',\n secondaryColor: '#3E417C',\n backgroundColor: '#30336A',\n ...branding21sharedConfigs.color\n },\n formAnalytics: {\n 'data-icon': 'forAnalytics',\n icon: ,\n icons: AppIcons.formAnalytics,\n appLink: formID => `/analytics/${formID}`,\n title: 'Form Analytics',\n explanation: 'Get the inside scoop on your form’s performance, including its conversion rate and where traffic is coming from.',\n target: '_self',\n primaryColor: '#AF4AE9',\n secondaryColor: '#8F2DD5',\n backgroundColor: '#5C268B',\n appColor: '#8F96CC',\n ...branding21sharedConfigs.colors\n },\n reports: {\n 'data-icon': 'forReports',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n icon: ,\n icons: AppIcons.reports,\n appLink: formID => `/reports/${formID}`,\n title: 'Report Builder',\n explanation: 'Automatically turn form responses into eye-catching reports with bar graphs, pie charts, and data grids.',\n target: '_self',\n primaryColor: '#4D5773',\n secondaryColor: '#2E354A',\n backgroundColor: '#2E354A',\n appColor: '#344067',\n ...branding21sharedConfigs.colors\n },\n boards: {\n 'data-icon': 'forBoards',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: true,\n editable: true,\n isIconVisible: false\n },\n subTitle: {\n visible: true,\n isIconVisible: false\n }\n },\n icon: ,\n icons: AppIcons.boards,\n title: 'Boards',\n explanation: 'Whatever the task, Jotform Boards is here to help you manage.',\n appLink: (formID, oldNavigation) => {\n if (oldNavigation) {\n return `/boards/new/${formID}?from=formBuilder-navigation`;\n }\n\n return `/boards/${formID}`;\n },\n createLink: formID => {\n return `/boards/new/${formID}?from=formBuilder-navigation`;\n },\n className: 'isBoards',\n target: '_self',\n primaryColor: '#FF6100',\n secondaryColor: '#5C59ED',\n backgroundColor: '#5C59ED',\n appColor: '#504ECC',\n ...branding21sharedConfigs.colors\n },\n conversations: {\n 'data-icon': 'forConversations',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: true,\n editable: false,\n isIconVisible: false\n },\n subTitle: {\n visible: true,\n isIconVisible: false\n }\n },\n icon: ,\n icons: AppIcons.conversations,\n title: 'Conversations',\n explanation: 'Whatever the task, Jotform Boards is here to help you manage.',\n appLink: formID => {\n return `/conversations/withForm/${formID}`;\n },\n className: 'isConversations',\n target: '_self',\n primaryColor: '#FF6100',\n secondaryColor: '#5C59ED',\n backgroundColor: '#5C59ED',\n appColor: '#504ECC',\n ...branding21sharedConfigs.colors\n },\n aiAgentBuilder: {\n 'data-icon': 'forAiAgentBuilder',\n icon: ,\n appLink: agentID => `/agent/build/${agentID}`,\n title: 'AI Agent Builder',\n className: 'isPortal',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n isIconVisible: false\n }\n },\n primaryColor: '#69519d',\n secondaryColor: '#09f',\n appColor: '#09f',\n backgroundColor: '#69519d',\n ...branding21sharedConfigs.colors\n },\n myBoards: {\n 'data-icon': 'forMyBoards',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: false,\n isIconVisible: false\n }\n },\n icon: ,\n icons: AppIcons.boards,\n appLink: '/myboards/',\n titleForTeamContext: 'Boards',\n title: 'My Boards',\n className: 'isBoards',\n target: '_self',\n primaryColor: '#FF6100',\n secondaryColor: '#5C59ED',\n backgroundColor: '#5C59ED',\n appColor: '#504ECC',\n ...branding21sharedConfigs.colors\n },\n myReports: {\n 'data-icon': 'forMyReports',\n icon: ,\n icons: AppIcons.reports,\n appLink: '/myreports/',\n title: 'My Reports',\n titleForTeamContext: 'Reports',\n className: 'isMyReports',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: false,\n editable: false,\n isIconVisible: false\n },\n subTitle: {\n visible: false,\n isIconVisible: false\n }\n },\n primaryColor: '#4E5773',\n secondaryColor: '#323F62',\n backgroundColor: '#3c4253',\n appColor: '#344168',\n ...branding21sharedConfigs.colors\n },\n myTables: {\n 'data-icon': 'forSheets',\n icon: ,\n icons: AppIcons.tables,\n appLink: '/mytables/',\n title: 'My Tables',\n titleForTeamContext: 'Tables',\n className: 'isMySheets',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: false,\n editable: false,\n isIconVisible: false\n },\n subTitle: {\n visible: false,\n isIconVisible: false\n }\n },\n primaryColor: '#38ba71',\n secondaryColor: '#0d9549',\n backgroundColor: '#0d9549',\n appColor: '#0D953B',\n ...branding21sharedConfigs.colors\n },\n myTasks: {\n 'data-icon': 'forTasks',\n icon: ,\n icons: AppIcons.approvals,\n ...MY_TASKS_TEXT,\n className: 'isMyTasks',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: false,\n editable: false,\n isIconVisible: false\n },\n subTitle: {\n visible: false,\n isIconVisible: false\n }\n },\n primaryColor: '#37836F',\n secondaryColor: '#025F46',\n backgroundColor: '#025F46',\n appColor: '#308A69',\n ...branding21sharedConfigs.colors\n },\n submissions: {\n 'data-icon': 'forSheets',\n icon: ,\n appLink: formID => `/submissions/${formID}`,\n title: 'Submissions',\n className: 'isSheets',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#037B38',\n secondaryColor: '#0D9549',\n backgroundColor: '#0D9549',\n ...branding21sharedConfigs.colors\n },\n oldPdfEditor: {\n 'data-icon': 'forPdfEditor',\n icon: ,\n appLink: formID => `/page.php?p=pdfEditor&formID=${formID}`,\n title: 'PDF Editor',\n logo: getDefaultLogoSrc(),\n className: 'isPdfEditor',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: true,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#254DB3',\n secondaryColor: '#3161CF',\n backgroundColor: '#3161CF',\n ...branding21sharedConfigs.colors\n },\n sign: {\n 'data-icon': 'forSign',\n icon: ,\n icons: AppIcons.sign,\n appLink: formID => `/sign/${formID}`,\n title: 'Sign Builder',\n explanation: 'Collect signatures on important documents in a few easy steps.',\n className: 'isSign',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: true,\n editable: true,\n isIconVisible: true\n },\n subTitle: {\n visible: true,\n isIconVisible: false\n }\n },\n primaryColor: '#7BB60F',\n secondaryColor: '#6b9e0d',\n backgroundColor: '#7BB60F',\n appColor: '#94CD2A',\n ...branding21sharedConfigs.colors\n },\n approvals: {\n 'data-icon': 'forApprovals',\n icon: ,\n icons: AppIcons.approvals,\n appLink: (formID, oldNavigation) => `/workflow/${oldNavigation ? 'withForm/' : ''}${formID}`,\n ...APPROVALS_TEXT,\n className: 'isApprovals',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: true,\n editable: true,\n isIconVisible: true\n },\n subTitle: {\n visible: false,\n isIconVisible: false\n }\n },\n primaryColor: '#37836F',\n secondaryColor: '#025F46',\n backgroundColor: '#37836F',\n appColor: '#007862',\n ...branding21sharedConfigs.colors\n },\n myDocuments: {\n 'data-icon': 'forMyDocuments',\n icon: ,\n icons: AppIcons.sign,\n appLink: '/mysigndocuments/',\n title: 'My Sign Documents',\n titleForTeamContext: 'Sign Documents',\n className: 'isMyDocuments',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: false,\n editable: false,\n isIconVisible: false\n },\n subTitle: {\n visible: false,\n isIconVisible: false\n }\n },\n primaryColor: '#7BB60F',\n secondaryColor: '#6b9e0d',\n backgroundColor: '#7BB60F',\n appColor: '#78BB07',\n ...branding21sharedConfigs.colors\n },\n pageBuilder: {\n 'data-icon': 'forPageBuilder',\n title: 'Page Builder',\n className: 'isPageBuilder',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n title: {\n visible: false,\n editable: false,\n isIconVisible: false\n },\n subTitle: {\n visible: false,\n isIconVisible: false\n }\n },\n primaryColor: '#0A1551',\n secondaryColor: '#18265b',\n backgroundColor: '#FFFFFF',\n appColor: '#0A1551',\n ...branding21sharedConfigs.colors\n },\n myTeams: {\n 'data-icon': 'forMyTeams',\n icon: ,\n icons: AppIcons.myTeams,\n appLink: '/myteams/',\n title: 'My Teams',\n target: '_self',\n primaryColor: '#18235C',\n secondaryColor: '#18235C',\n backgroundColor: '#18235C',\n appColor: '#18235C',\n ...branding21sharedConfigs.colors\n },\n myWorkspace: {\n 'data-icon': 'forMyWorkspace',\n icon: ,\n icons: AppIcons.myWorkspace,\n appLink: '/myworkspace/',\n title: 'My Workspace',\n target: '_self',\n primaryColor: '#18235C',\n secondaryColor: '#18235C',\n backgroundColor: '#18235C',\n appColor: '#18235C',\n ...branding21sharedConfigs.colors\n },\n myAgents: {\n 'data-icon': 'forMyAgents',\n icon: ,\n icons: AppIcons.myAgents,\n appLink: '/myagents/',\n title: 'My Agents',\n target: '_self',\n primaryColor: '#0099ff',\n secondaryColor: '#0099ff',\n backgroundColor: '#0099ff',\n appColor: '#0099ff',\n ...branding21sharedConfigs.colors\n },\n myContacts: {\n 'data-icon': 'forMyContacts',\n icon: ,\n icons: AppIcons.myContacts,\n appLink: '/mycontacts/',\n title: 'My Contacts',\n target: '_self',\n primaryColor: '#895FFF',\n secondaryColor: '#895FFF',\n backgroundColor: '#895FFF',\n appColor: '#895FFF',\n ...branding21sharedConfigs.colors\n },\n myPages: {\n 'data-icon': 'forMyPages',\n icon: ,\n icons: AppIcons.pages,\n appLink: '/mypages/',\n title: 'My Pages',\n className: 'isMyPages',\n target: '_self',\n primaryColor: '#034f96',\n secondaryColor: '#034f96',\n backgroundColor: '#034f96',\n appColor: '#034f96',\n ...branding21sharedConfigs.colors\n },\n singleSubmissionViewer: {\n title: 'Submission',\n className: 'isSingleSubmissionViewer',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo2021/jotform-logo-white.svg'\n },\n title: {\n visible: true,\n editable: false,\n isIconVisible: false\n },\n subTitle: {\n visible: true,\n title: 'View Form',\n isIconVisible: false\n }\n },\n primaryColor: '#39B9C5',\n secondaryColor: '#228DB5',\n backgroundColor: '#0097a7',\n appColor: '#249BB4',\n ...branding21sharedConfigs.colors\n },\n AIAgentSubmissionViewer: {\n title: 'AI Agent',\n className: 'isAIAgentSubmissionViewer',\n target: '_self',\n components: {\n ...branding21sharedConfigs.components,\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo2021/jotform-logo-white.svg'\n },\n title: {\n visible: true,\n editable: false,\n isIconVisible: false\n },\n subTitle: {\n visible: true,\n title: 'View This Agent',\n isIconVisible: false\n }\n },\n primaryColor: '#39B9C5',\n secondaryColor: '#228DB5',\n backgroundColor: '#0097a7',\n appColor: '#249BB4',\n ...branding21sharedConfigs.colors\n }\n};\n\nexport const appConfigPropsTypes = PropTypes.shape({\n 'data-icon': PropTypes.string,\n icon: PropTypes.element,\n appLink: PropTypes.func,\n title: oneOfType([PropTypes.string, PropTypes.node]),\n className: PropTypes.string,\n target: PropTypes.string,\n components: PropTypes.shape({\n logo: PropTypes.shape({\n visible: PropTypes.bool,\n src: PropTypes.string\n }),\n title: PropTypes.shape({\n visible: PropTypes.bool,\n editable: PropTypes.bool,\n isIconVisible: PropTypes.bool\n }),\n subTitle: PropTypes.shape({\n visible: PropTypes.bool,\n title: PropTypes.string,\n isIconVisible: PropTypes.bool\n })\n })\n});\n\nconst defaultNavigationItemObject = appTitle => {\n return {\n 'data-icon': `for${appTitle}`,\n icon: ,\n appLink: formID => `/${formID}`,\n title: appTitle,\n className: `is${appTitle}`,\n components: {\n logo: {\n visible: true,\n src: 'https://cdn.jotfor.ms/assets/img/logo/jotform-logo-white@4x.png'\n },\n title: {\n visible: false,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: false,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#f38632',\n secondaryColor: '#d27e2d',\n backgroundColor: '#d27e2d'\n };\n};\n\nconst defaultBranding21NavigationItemObject = appTitle => {\n return {\n 'data-icon': `for${appTitle}`,\n icon: ,\n appLink: formID => `/${formID}`,\n title: appTitle,\n className: `is${appTitle}`,\n components: {\n logo: {\n visible: true,\n src: getDefaultLogoSrc()\n },\n title: {\n visible: false,\n editable: false,\n isIconVisible: true\n },\n subTitle: {\n visible: false,\n title: 'View This Form',\n isIconVisible: false\n }\n },\n primaryColor: '#f38632',\n secondaryColor: '#d27e2d',\n backgroundColor: '#d27e2d'\n };\n};\n\nexport const defaultNavigationItem = (appName, branding21) => {\n const appTitle = `${appName.charAt(0).toUpperCase()}${appName.substr(1)}`;\n\n return branding21 ? defaultBranding21NavigationItemObject(appTitle) : defaultNavigationItemObject(appTitle);\n};\n\nexport const getDefaultNavItems = branding21 => {\n return branding21 ? navigationItemsForBranding21 : navigationItems;\n};\n","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _g, _path9, _path10, _path11, _path12, _g2, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _g3, _path20, _path21, _path22, _path23, _g4, _path24, _path25, _path26, _path27, _path28, _path29, _path30, _path31, _path32, _path33, _path34, _path35, _path36, _path37, _path38, _path39, _path40, _path41, _path42, _path43, _path44, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoFormsIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 198 141\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 97.4367C0 73.8043 19.1578 54.6465 42.7902 54.6465H155.115C178.747 54.6465 197.905 73.8043 197.905 97.4367C197.905 121.069 178.747 140.227 155.115 140.227H42.7902C19.1578 140.227 0 121.069 0 97.4367Z\",\n fill: \"#E6E6F5\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask0_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 0,\n y: 54,\n width: 198,\n height: 87\n}, _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 97.4367C0 73.8043 19.1578 54.6465 42.7902 54.6465H155.115C178.747 54.6465 197.905 73.8043 197.905 97.4367C197.905 121.069 178.747 140.227 155.115 140.227H42.7902C19.1578 140.227 0 121.069 0 97.4367Z\",\n fill: \"#E6E6F5\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask0_624:16012)\"\n}, _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M115.336 77.9239C106.901 88.5617 99.9998 95.4214 94.6306 98.5029C86.5769 103.125 85.9877 98.2682 56.4901 77.7583C54.439 76.8969 52.7754 76.6674 49.9956 79.7585C48.3335 81.6069 44.7598 82.0931 39.2746 81.2173L39.2746 81.2173C38.7245 81.1295 38.2053 81.504 38.115 82.0539C38.0701 82.3274 38.1397 82.6067 38.3074 82.8265C39.6577 84.5955 41.994 85.5598 45.3164 85.7196C51.9089 86.0364 52.6163 83.5632 56.326 86.4774C60.0356 89.3916 79.9102 112.691 91.8962 113.269C103.882 113.848 119.63 96.0418 124.085 94.6697C127.055 93.7549 129.477 86.5287 131.353 72.9909L115.336 77.9239Z\",\n fill: \"#CD7448\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M58.9543 90.0563C62.224 86.9336 64.2069 84.21 64.903 81.8853C79.5311 92.8149 87.8103 97.9805 89.7407 97.382C92.3874 96.5614 113.744 77.3633 121.165 72.8215C121.839 72.149 121.886 77.8987 122.422 77.2795L120.015 99.5943C111.348 105.796 105.826 109.617 103.45 111.057C99.8843 113.217 90.5281 117.172 82.0782 110.302C76.4449 105.722 68.7369 98.9735 58.9543 90.0563Z\",\n fill: \"#F4F5FE\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.638 114.549C111.986 119.246 111.986 125.139 110.638 135.875L160.179 128.641L157.146 88.3777C155.124 81.6671 152.765 76.9698 150.069 74.2855C146.025 70.2592 124.793 72.2724 119.737 74.2855C114.682 76.2987 113.671 85.3579 108.616 93.4106C103.561 101.463 108.616 107.503 110.638 114.549Z\",\n fill: \"white\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M141.981 72.1544C139.959 88.6243 134.277 96.8593 124.934 96.8593C110.92 96.8593 114.206 89.4872 115.961 86.0305C117.131 83.726 118.417 79.6245 119.82 73.7258C124.641 72.1872 128.321 71.3278 130.86 71.1478C133.398 70.9679 137.105 71.3034 141.981 72.1544Z\",\n fill: \"#CD7448\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask1_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 51,\n y: -1,\n width: 110,\n height: 94\n}, _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M51.2891 -0.625H160.642V92.0872H51.2891V-0.625Z\",\n fill: \"#C4C4C4\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask1_624:16012)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask2_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 106,\n y: 71,\n width: 59,\n height: 93\n}, _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.638 138.541C111.986 127.804 111.986 119.246 110.638 114.549C108.616 107.503 103.561 101.463 108.616 93.4106C113.671 85.3579 114.682 76.2987 119.737 74.2855C124.793 72.2724 146.025 70.2592 150.069 74.2855C152.765 76.9698 155.124 81.6671 157.146 88.3777L160.179 128.641C164.898 146.759 165.572 157.832 162.201 161.858C157.146 167.898 155.124 151.792 132.881 142.733C128.163 140.72 120.748 139.883 110.638 138.541Z\",\n fill: \"white\"\n}))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask2_624:16012)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.638 138.539C111.986 127.803 111.986 120.085 110.638 115.388C108.616 108.342 103.561 102.302 108.616 94.2498C113.671 86.1972 114.398 76.4272 119.454 74.414C124.509 72.4008 145.286 69.4997 149.33 73.526C152.026 76.2102 155.124 82.5064 157.146 89.2169V102.827L160.179 129.48C164.898 147.599 165.572 158.671 162.201 162.697C157.146 168.737 155.124 152.632 132.881 143.572C128.163 141.559 120.748 139.882 110.638 138.539Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M141.981 72.1544C139.959 88.6243 134.277 96.8593 124.934 96.8593C110.92 96.8593 114.206 89.4872 115.961 86.0305C117.131 83.726 118.417 79.6245 119.82 73.7258C124.641 72.1872 128.321 71.3278 130.86 71.1478C133.398 70.9679 137.105 71.3034 141.981 72.1544Z\",\n fill: \"#CD7448\"\n}))), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M113.82 33.3166C110.43 47.7514 109.279 49.4479 108.018 52.6186C107.705 53.4047 107.867 54.3038 108.456 54.912C113.256 59.8667 119.676 61.4146 127.717 59.5556C136.283 57.5753 136.242 54.5995 130.934 30.4186L113.82 33.3166Z\",\n fill: \"#0A1551\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M136.285 53.9991C134.625 66.972 140.19 71.5228 142.1 71.5552C144.009 71.5876 136.698 79.5784 123.067 92.3643C118.606 83.7663 118.107 76.0982 119.5 73.8743C121.59 70.5386 123.529 73.3922 122.813 61.7133C122.343 54.0415 132.544 54.7707 139.81 53.5254C136.285 53.9991 130.529 54.1174 136.285 53.9991Z\",\n fill: \"#CD7448\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.677232,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M122.313 56.5259C123.105 63.7532 123.082 67.7391 123 68.3752C122.878 69.3293 140.282 68.5234 135.312 53.2024C130.342 37.8815 128.68 55.0076 122.313 56.5259Z\",\n fill: \"#BD5826\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask3_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 113,\n y: 24,\n width: 38,\n height: 44\n}, _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M145.092 57.0491C140.516 63.1625 134.135 66.5174 125.949 67.1136C117.636 67.7191 112.086 56.8794 113.156 45.7503C113.667 40.4403 114.843 35.7532 119.518 30.9235C129.169 20.9553 138.236 22.2718 146.718 34.8728L150.38 44.6449L145.092 57.0491Z\",\n fill: \"white\"\n}))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask3_624:16012)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M143.966 56.1764C138.857 61.8531 132.197 64.6207 123.988 64.4795C115.652 64.336 111.101 53.0441 113.171 42.0585C114.159 36.8169 115.753 32.2554 120.847 27.866C131.36 18.8066 140.273 20.9315 147.587 34.2405L150.353 44.2998L143.966 56.1764Z\",\n fill: \"#CD7448\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.422879,\n d: \"M131.771 56.3898C129.076 55.9732 127.129 54.1378 127.423 52.2901C127.718 50.4425 130.141 49.2824 132.836 49.6989C135.532 50.1155 137.478 51.9509 137.184 53.7985C136.89 55.6462 134.466 56.8063 131.771 56.3898Z\",\n fill: \"#A44616\"\n}))), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M125.579 55.9777C123.46 56.8827 120.96 56.4158 118.079 54.5768C119.435 58.4286 120.976 60.1813 122.702 59.8349C124.428 59.4886 125.387 58.2028 125.579 55.9777Z\",\n fill: \"#A5330A\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M126.938 38.462C119.116 37.1633 115.933 36.5576 113.227 34.4149C113.384 24.3556 121.661 18.4345 125.497 17.5383C134.368 15.3748 143.999 18.0813 149.91 25.865C150.496 26.6367 150.986 27.4266 151.389 28.2296C151.621 28.6034 151.85 29.0216 152.077 29.4864C155.776 40.1435 157.722 55.6928 156.667 61.4529C153.71 65.2542 129.978 66.0739 132.95 61.3098C133.116 61.0439 133.301 60.7682 133.498 60.4748C134.894 58.3952 136.885 55.4288 136.866 48.7651C136.862 47.1514 136.396 45.2638 135.87 43.1353C135.692 42.4157 135.507 41.6685 135.332 40.8951C134.913 40.7489 134.514 40.6101 134.135 40.4782C132.443 39.8904 131.149 39.4404 130.345 39.0921C129.465 38.7109 130.304 36.1681 130.907 34.3427C131.433 32.7486 131.778 31.7015 130.641 33.1186C129.176 34.9439 128.616 36.3723 128.341 37.492C128.184 38.1288 127.585 38.5694 126.938 38.462Z\",\n fill: \"#0A1551\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M115.165 138.735C120.494 135.738 144.433 142.471 162.674 135.789C172.674 132.126 165.022 110.79 160.852 92.8997C158.213 82.9975 153.845 76.4349 149.863 74.0075L141.201 80.3815L143.406 92.2543C143.406 92.2543 142.036 96.5649 144.923 104.397C147.811 112.229 152.298 122.076 152.298 122.076L109.373 131.081C109.528 134.632 110.902 141.133 115.165 138.735Z\",\n fill: \"white\"\n}))), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M120.877 137.279C118.784 138.945 117.779 138.998 115.278 140.92C113.265 141.884 111.779 142.298 107.412 140.994C104.792 140.212 101.091 140.012 96.3082 140.393L96.3082 140.393C95.7516 140.438 95.2652 140.024 95.2217 139.47C95.2055 139.263 95.2538 139.057 95.3599 138.878C96.5754 136.833 98.9431 135.637 102.463 135.287C109.043 134.635 109.862 137.065 113.441 133.969C115.827 131.905 118.306 133.008 120.877 137.279Z\",\n fill: \"#CD7448\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M116.883 140.747C127.5 139.876 146.152 144.482 164.392 137.801C174.393 134.137 166.74 112.802 162.57 94.9114C159.932 85.0092 155.564 78.4466 151.582 76.0192L142.92 82.3932L145.125 94.266C145.125 94.266 143.755 98.5766 146.642 106.408C149.529 114.24 154.017 124.088 154.017 124.088L111.092 133.093C111.246 136.643 110 140.376 116.883 140.747Z\",\n fill: \"url(#paint0_linear_624:16012)\"\n}))), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask4_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 96,\n y: 14,\n width: 64,\n height: 79\n}, _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M96 14.375H160V92.375H96V14.375Z\",\n fill: \"#C4C4C4\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask4_624:16012)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask5_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 106,\n y: 71,\n width: 59,\n height: 93\n}, _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.349 138.541C111.697 127.804 111.697 119.246 110.349 114.549C108.327 107.503 103.272 101.463 108.327 93.4106C113.382 85.3579 114.393 76.2987 119.448 74.2855C124.504 72.2724 145.736 70.2592 149.78 74.2855C152.476 76.9698 154.835 81.6671 156.857 88.3777L159.89 128.641C164.609 146.759 165.283 157.832 161.912 161.858C156.857 167.898 154.835 151.792 132.592 142.733C127.874 140.72 120.459 139.883 110.349 138.541Z\",\n fill: \"white\"\n}))), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask5_624:16012)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.349 138.539C111.697 127.803 111.697 120.085 110.349 115.388C108.327 108.342 103.272 102.302 108.327 94.2498C113.382 86.1972 114.109 76.4272 119.165 74.414C124.22 72.4008 144.997 69.4997 149.041 73.526C151.737 76.2102 154.835 82.5064 156.857 89.2169V102.827L159.89 129.48C164.609 147.599 165.283 158.671 161.912 162.697C156.857 168.737 154.835 152.632 132.592 143.572C127.874 141.559 120.459 139.882 110.349 138.539Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M141.692 72.1544C139.67 88.6243 133.988 96.8593 124.645 96.8593C110.631 96.8593 113.917 89.4872 115.672 86.0305C116.842 83.726 118.128 79.6245 119.531 73.7258C124.352 72.1872 128.032 71.3278 130.571 71.1478C133.109 70.9679 136.816 71.3034 141.692 72.1544Z\",\n fill: \"#CD7448\"\n}))), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M113.531 33.3166C110.141 47.7514 108.989 49.4479 107.729 52.6186C107.416 53.4047 107.578 54.3038 108.167 54.912C112.967 59.8667 119.387 61.4146 127.428 59.5556C135.994 57.5753 135.953 54.5995 130.645 30.4186L113.531 33.3166Z\",\n fill: \"#0A1551\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M135.996 53.9991C134.335 66.972 139.901 71.5228 141.811 71.5552C143.72 71.5876 136.409 79.5784 122.778 92.3643C118.317 83.7663 117.818 76.0982 119.211 73.8743C121.301 70.5386 123.24 73.3922 122.524 61.7133C122.054 54.0415 132.255 54.7707 139.521 53.5254C135.996 53.9991 130.24 54.1174 135.996 53.9991Z\",\n fill: \"#CD7448\"\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.677232,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M122.024 56.5259C122.816 63.7532 122.793 67.7391 122.711 68.3752C122.589 69.3293 139.993 68.5234 135.023 53.2024C130.053 37.8815 128.391 55.0076 122.024 56.5259Z\",\n fill: \"#BD5826\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask6_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 112,\n y: 24,\n width: 39,\n height: 44\n}, _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M144.803 57.0491C140.227 63.1625 133.846 66.5174 125.66 67.1136C117.347 67.7191 111.797 56.8794 112.867 45.7503C113.377 40.4403 114.553 35.7532 119.229 30.9235C128.88 20.9553 137.947 22.2718 146.429 34.8728L150.091 44.6449L144.803 57.0491Z\",\n fill: \"white\"\n}))), _g4 || (_g4 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask6_624:16012)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M143.677 56.1764C138.567 61.8531 131.908 64.6207 123.699 64.4795C115.363 64.336 110.812 53.0441 112.882 42.0585C113.87 36.8169 115.464 32.2554 120.558 27.866C131.071 18.8066 139.984 20.9315 147.298 34.2405L150.064 44.2998L143.677 56.1764Z\",\n fill: \"#CD7448\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M128.904 40.8301C130.107 41.4177 130.959 42.3601 131.387 43.0696C131.557 43.3507 131.466 43.716 131.185 43.8855C130.905 44.0549 130.539 43.9644 130.37 43.6833C130.041 43.1393 129.35 42.3705 128.383 41.8981C127.438 41.4364 126.218 41.2495 124.756 41.8547C124.453 41.9803 124.106 41.8362 123.98 41.5329C123.854 41.2296 123.998 40.882 124.301 40.7564C126.103 40.01 127.679 40.2318 128.904 40.8301Z\",\n fill: \"#37120C\",\n fillOpacity: 0.25\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M117.443 38.8566C116.482 38.8034 115.689 39.1609 115.177 39.5723C114.922 39.778 114.882 40.152 115.088 40.4078C115.294 40.6636 115.668 40.7042 115.923 40.4985C116.242 40.2424 116.753 40.0088 117.379 40.0434C117.994 40.0774 118.794 40.3744 119.692 41.3119C119.919 41.5491 120.295 41.5576 120.532 41.3308C120.769 41.104 120.777 40.7278 120.55 40.4905C119.487 39.38 118.416 38.9104 117.443 38.8566Z\",\n fill: \"#37120C\",\n fillOpacity: 0.25\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.422879,\n d: \"M131.482 56.3898C128.787 55.9732 126.84 54.1378 127.134 52.2901C127.428 50.4425 129.852 49.2824 132.547 49.6989C135.243 50.1155 137.189 51.9509 136.895 53.7985C136.601 55.6462 134.177 56.8063 131.482 56.3898Z\",\n fill: \"#A44616\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.422879,\n d: \"M109.964 51.9299C107.316 51.2573 105.484 49.2294 105.872 47.4007C106.26 45.5719 108.72 44.6347 111.368 45.3074C114.016 45.9801 115.848 48.0079 115.46 49.8367C115.072 51.6654 112.612 52.6026 109.964 51.9299Z\",\n fill: \"#A44616\"\n}))), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M125.29 55.9777C123.171 56.8827 120.671 56.4158 117.79 54.5768C119.146 58.4286 120.687 60.1813 122.413 59.8349C124.139 59.4886 125.098 58.2028 125.29 55.9777Z\",\n fill: \"#A5330A\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M126.298 46.5747C125.74 46.5652 125.298 45.8942 125.311 45.0761C125.324 44.2579 125.787 43.6023 126.345 43.6118C126.903 43.6212 127.345 44.2922 127.332 45.1104C127.319 45.9285 126.856 46.5841 126.298 46.5747Z\",\n fill: \"#321907\"\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M117.699 45.0239C117.141 45.0144 116.699 44.3435 116.712 43.5253C116.725 42.7071 117.187 42.0515 117.745 42.061C118.303 42.0704 118.745 42.7414 118.732 43.5596C118.72 44.3778 118.257 45.0334 117.699 45.0239Z\",\n fill: \"#321907\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M122.715 43.9712C122.557 43.8531 122.333 43.8846 122.215 44.0417C121.233 45.3458 120.594 45.9805 119.993 46.4194C119.691 46.6402 119.392 46.8164 119.05 47.0061C118.957 47.0578 118.86 47.1107 118.759 47.1659C118.492 47.3116 118.197 47.473 117.868 47.667C116.711 48.3477 116.542 49.9158 117.066 51.0793C117.337 51.6792 117.802 52.2141 118.46 52.5212C119.121 52.8298 119.943 52.8927 120.894 52.6054C121.082 52.5484 121.189 52.3497 121.131 52.1616C121.073 51.9735 120.874 51.8672 120.685 51.9242C119.876 52.1686 119.239 52.0996 118.762 51.8768C118.281 51.6523 117.929 51.2561 117.718 50.789C117.281 49.8185 117.503 48.7093 118.232 48.28C118.551 48.0922 118.831 47.9392 119.095 47.7951C119.198 47.7386 119.299 47.6835 119.399 47.6282C119.749 47.4336 120.079 47.2406 120.417 46.9937C121.096 46.4969 121.784 45.8014 122.787 44.4696C122.905 44.3125 122.873 44.0894 122.715 43.9712Z\",\n fill: \"#8A3110\"\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M126.649 38.462C118.827 37.1633 115.644 36.5576 112.938 34.4149C113.095 24.3556 121.372 18.4345 125.208 17.5383C134.079 15.3748 143.71 18.0813 149.621 25.865C150.207 26.6367 150.697 27.4266 151.1 28.2296C151.332 28.6034 151.561 29.0216 151.788 29.4864C155.487 40.1435 157.433 55.6928 156.378 61.4529C153.421 65.2542 129.689 66.0739 132.661 61.3098C132.827 61.0439 133.012 60.7682 133.209 60.4748C134.605 58.3952 136.596 55.4288 136.577 48.7651C136.573 47.1514 136.106 45.2638 135.581 43.1353C135.403 42.4157 135.218 41.6685 135.043 40.8951C134.624 40.7489 134.225 40.6101 133.846 40.4782C132.154 39.8904 130.859 39.4404 130.056 39.0921C129.176 38.7109 130.015 36.1681 130.618 34.3427C131.144 32.7486 131.489 31.7015 130.352 33.1186C128.887 34.9439 128.327 36.3723 128.052 37.492C127.895 38.1288 127.296 38.5694 126.649 38.462Z\",\n fill: \"#0A1551\"\n})), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M114.876 138.735C120.204 135.738 144.144 142.471 162.384 135.789C172.385 132.126 164.732 110.79 160.563 92.8997C157.924 82.9975 153.556 76.4349 149.574 74.0075L140.912 80.3815L143.117 92.2543C143.117 92.2543 141.747 96.5649 144.634 104.397C147.522 112.229 152.009 122.076 152.009 122.076L109.084 131.081C109.239 134.632 110.612 141.133 114.876 138.735Z\",\n fill: \"white\"\n}))), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M38 4.95802C38 2.42689 40.0519 0.375 42.583 0.375H64.3524C66.8835 0.375 68.9354 2.42689 68.9354 4.95802V32.4562C68.9354 34.9873 66.8835 37.0392 64.3524 37.0392H42.583C40.0519 37.0392 38 34.9873 38 32.4562V4.95802Z\",\n fill: \"white\"\n})), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M64.3524 1.52076H42.583C40.6847 1.52076 39.1458 3.05967 39.1458 4.95802V32.4562C39.1458 34.3545 40.6847 35.8934 42.583 35.8934H64.3524C66.2507 35.8934 67.7897 34.3545 67.7897 32.4562V4.95802C67.7897 3.05967 66.2507 1.52076 64.3524 1.52076ZM42.583 0.375C40.0519 0.375 38 2.42689 38 4.95802V32.4562C38 34.9873 40.0519 37.0392 42.583 37.0392H64.3524C66.8835 37.0392 68.9354 34.9873 68.9354 32.4562V4.95802C68.9354 2.42689 66.8835 0.375 64.3524 0.375H42.583Z\",\n fill: \"#C8CEED\"\n})), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.5469 12.8157C44.5469 11.7309 45.4263 10.8516 46.511 10.8516H60.9148C61.9996 10.8516 62.879 11.7309 62.879 12.8157C62.879 13.9005 61.9996 14.7799 60.9148 14.7799H46.511C45.4263 14.7799 44.5469 13.9005 44.5469 12.8157Z\",\n fill: \"#0099FF\"\n})), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.5469 19.3626C44.5469 18.2778 45.4263 17.3984 46.511 17.3984H60.9148C61.9996 17.3984 62.879 18.2778 62.879 19.3626C62.879 20.4474 61.9996 21.3267 60.9148 21.3267H46.511C45.4263 21.3267 44.5469 20.4474 44.5469 19.3626Z\",\n fill: \"#FF6100\"\n})), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.5469 25.9095C44.5469 24.8247 45.4263 23.9453 46.511 23.9453H60.9148C61.9996 23.9453 62.879 24.8247 62.879 25.9095C62.879 26.9942 61.9996 27.8736 60.9148 27.8736H46.511C45.4263 27.8736 44.5469 26.9942 44.5469 25.9095Z\",\n fill: \"#FFB629\"\n})), _path35 || (_path35 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M57.0645 44.958C57.0645 42.4269 59.1163 40.375 61.6475 40.375H83.4168C85.948 40.375 87.9999 42.4269 87.9999 44.958V72.4562C87.9999 74.9873 85.948 77.0392 83.4168 77.0392H61.6475C59.1163 77.0392 57.0645 74.9873 57.0645 72.4562V44.958Z\",\n fill: \"white\"\n})), _path36 || (_path36 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M83.4168 41.5208H61.6475C59.7491 41.5208 58.2102 43.0597 58.2102 44.958V72.4562C58.2102 74.3545 59.7491 75.8934 61.6475 75.8934H83.4168C85.3152 75.8934 86.8541 74.3545 86.8541 72.4562V44.958C86.8541 43.0597 85.3152 41.5208 83.4168 41.5208ZM61.6475 40.375C59.1163 40.375 57.0645 42.4269 57.0645 44.958V72.4562C57.0645 74.9873 59.1163 77.0392 61.6475 77.0392H83.4168C85.948 77.0392 87.9999 74.9873 87.9999 72.4562V44.958C87.9999 42.4269 85.948 40.375 83.4168 40.375H61.6475Z\",\n fill: \"#C8CEED\"\n})), _path37 || (_path37 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.6113 52.8157C63.6113 51.7309 64.4907 50.8516 65.5755 50.8516H79.9793C81.064 50.8516 81.9434 51.7309 81.9434 52.8157C81.9434 53.9005 81.064 54.7799 79.9793 54.7799H65.5755C64.4907 54.7799 63.6113 53.9005 63.6113 52.8157Z\",\n fill: \"#0099FF\"\n})), _path38 || (_path38 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.6113 59.3626C63.6113 58.2778 64.4907 57.3984 65.5755 57.3984H79.9793C81.064 57.3984 81.9434 58.2778 81.9434 59.3626C81.9434 60.4474 81.064 61.3267 79.9793 61.3267H65.5755C64.4907 61.3267 63.6113 60.4474 63.6113 59.3626Z\",\n fill: \"#FF6100\"\n})), _path39 || (_path39 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.6113 65.9095C63.6113 64.8247 64.4907 63.9453 65.5755 63.9453H79.9793C81.064 63.9453 81.9434 64.8247 81.9434 65.9095C81.9434 66.9942 81.064 67.8736 79.9793 67.8736H65.5755C64.4907 67.8736 63.6113 66.9942 63.6113 65.9095Z\",\n fill: \"#FFB629\"\n})), _path40 || (_path40 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18 44.958C18 42.4269 20.0519 40.375 22.583 40.375H44.3524C46.8835 40.375 48.9354 42.4269 48.9354 44.958V72.4562C48.9354 74.9873 46.8835 77.0392 44.3524 77.0392H22.583C20.0519 77.0392 18 74.9873 18 72.4562V44.958Z\",\n fill: \"white\"\n})), _path41 || (_path41 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M44.3524 41.5208H22.583C20.6847 41.5208 19.1458 43.0597 19.1458 44.958V72.4562C19.1458 74.3545 20.6847 75.8934 22.583 75.8934H44.3524C46.2507 75.8934 47.7897 74.3545 47.7897 72.4562V44.958C47.7897 43.0597 46.2507 41.5208 44.3524 41.5208ZM22.583 40.375C20.0519 40.375 18 42.4269 18 44.958V72.4562C18 74.9873 20.0519 77.0392 22.583 77.0392H44.3524C46.8835 77.0392 48.9354 74.9873 48.9354 72.4562V44.958C48.9354 42.4269 46.8835 40.375 44.3524 40.375H22.583Z\",\n fill: \"#C8CEED\"\n})), _path42 || (_path42 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.5469 52.8157C24.5469 51.7309 25.4263 50.8516 26.511 50.8516H40.9148C41.9996 50.8516 42.879 51.7309 42.879 52.8157C42.879 53.9005 41.9996 54.7799 40.9148 54.7799H26.511C25.4263 54.7799 24.5469 53.9005 24.5469 52.8157Z\",\n fill: \"#0099FF\"\n})), _path43 || (_path43 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.5469 59.3626C24.5469 58.2778 25.4263 57.3984 26.511 57.3984H40.9148C41.9996 57.3984 42.879 58.2778 42.879 59.3626C42.879 60.4474 41.9996 61.3267 40.9148 61.3267H26.511C25.4263 61.3267 24.5469 60.4474 24.5469 59.3626Z\",\n fill: \"#FF6100\"\n})), _path44 || (_path44 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.5469 65.9095C24.5469 64.8247 25.4263 63.9453 26.511 63.9453H40.9148C41.9996 63.9453 42.879 64.8247 42.879 65.9095C42.879 66.9942 41.9996 67.8736 40.9148 67.8736H26.511C25.4263 67.8736 24.5469 66.9942 24.5469 65.9095Z\",\n fill: \"#FFB629\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear_624:16012\",\n x1: 152.19,\n y1: 93.8799,\n x2: 149.764,\n y2: 110.89,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"white\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#F3F5FE\"\n})))));\nexport default SvgNoFormsIcon;","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _g, _path12, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _circle, _path20, _path21, _path22, _path23, _path24, _path25, _rect, _path26, _path27, _path28, _path29, _path30, _rect2, _path31, _path32, _path33, _path34, _path35, _rect3, _path36, _path37, _path38, _path39, _path40, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoAppsIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 198 138\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 94.4357C0 70.8034 19.1578 51.6455 42.7902 51.6455H155.115C178.747 51.6455 197.905 70.8034 197.905 94.4357C197.905 118.068 178.747 137.226 155.115 137.226H42.7902C19.1578 137.226 0 118.068 0 94.4357Z\",\n fill: \"#E6E6F5\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M65.8372 81.9592C64.5361 80.8456 63.0223 80.0079 61.3877 79.4968C59.7531 78.9858 58.032 78.8122 56.3283 78.9865L51.2601 76.694C50.8846 76.5178 50.4599 76.4753 50.0569 76.5736C49.654 76.6718 49.297 76.9049 49.0446 77.234C48.924 77.4075 48.8398 77.6037 48.7972 77.8106C48.7546 78.0176 48.7542 78.231 48.7965 78.438C48.8389 78.645 48.9228 78.8413 49.0432 79.015C49.1637 79.1886 49.3181 79.336 49.4971 79.4482L52.2518 81.2906L51.0775 81.1933C49.2316 81.0459 47.4791 80.3203 46.0693 79.1196L42.156 75.7349C41.9289 75.5451 41.6577 75.4154 41.3673 75.3579C41.0769 75.3004 40.7768 75.317 40.4945 75.4059C40.2447 75.4669 40.0149 75.5918 39.8279 75.7684C39.6409 75.945 39.5035 76.1672 39.4283 76.4131C39.3531 76.6591 39.3431 76.9203 39.3994 77.1712C39.4557 77.4222 39.5761 77.6541 39.7491 77.8444L44.3206 82.8871C45.2215 83.8663 46.3102 84.6544 47.5217 85.2045C48.7332 85.7547 50.043 86.0557 51.3731 86.0897L66.0281 86.5405L65.8372 81.9592Z\",\n fill: \"#EFBB9D\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M114.82 31.3173C111.43 45.7521 107.561 80.2678 106.301 83.4385C105.988 84.2245 106.15 85.1237 106.739 85.7319C111.539 90.6866 117.959 92.2345 126 90.3755C134.566 88.3952 137.243 52.6002 131.935 28.4193L114.82 31.3173Z\",\n fill: \"#091141\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M59.9552 88.0553C63.225 84.9327 65.2079 82.209 65.9039 79.8843C80.5321 90.814 88.8113 95.9795 90.7416 95.381C93.3884 94.5604 114.745 75.3623 122.166 70.8205C122.84 70.148 122.887 75.8977 123.423 75.2786L121.016 97.5933C112.349 103.795 106.827 107.616 104.451 109.056C100.885 111.216 91.5291 115.171 83.0792 108.301C77.4459 103.721 69.7379 96.9725 59.9552 88.0553Z\",\n fill: \"#F4F5FE\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.591 112.816C111.714 117.571 113.857 121.714 112 132.375C122.035 134.192 128.883 131.142 133.5 133.375L151 125.375L163.5 119.875L157.644 102.462L158.292 88.8673C156.591 82.0689 153.796 75.6337 151.23 72.8253C147.382 68.6128 126.49 70.5307 121.345 72.3032C116.2 74.0757 115.009 83.8004 109.576 91.6056C104.144 99.4108 108.906 105.682 110.591 112.816Z\",\n fill: \"white\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M142.981 70.1537C140.959 86.6236 135.276 94.8586 125.934 94.8586C111.92 94.8586 115.206 87.4865 116.961 84.0298C118.131 81.7253 119.417 77.6237 120.82 71.7251C125.641 70.1864 129.321 69.3271 131.859 69.1471C134.398 68.9671 138.105 69.3026 142.981 70.1537Z\",\n fill: \"#EFBB9D\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M122.003 47.5342C121.451 47.6155 120.906 47.0251 120.785 46.2156C120.664 45.4061 121.013 44.6839 121.565 44.6026C122.117 44.5212 122.662 45.1116 122.783 45.9211C122.904 46.7307 122.555 47.4528 122.003 47.5342Z\",\n fill: \"#321907\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M114.454 47.4026C113.902 47.4839 113.356 46.8935 113.235 46.084C113.114 45.2745 113.464 44.5523 114.015 44.471C114.567 44.3897 115.113 44.98 115.234 45.7895C115.355 46.5991 115.006 47.3212 114.454 47.4026Z\",\n fill: \"#321907\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M137.286 51.9998C135.625 64.9726 141.591 69.8426 143.5 69.875C145.409 69.9074 137.698 77.5791 124.067 90.365C119.607 81.7669 119.107 74.0988 120.501 71.875C122.59 68.5393 124.53 71.3929 123.813 59.714C123.343 52.0421 133.544 52.7714 140.811 51.5261C137.286 51.9998 131.529 52.1181 137.286 51.9998Z\",\n fill: \"#EFBB9D\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.677232,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M123.313 54.5259C124.105 61.7532 124.082 65.7391 124 66.3752C123.878 67.3293 141.282 66.5234 136.312 51.2024C131.342 35.8815 129.68 53.0076 123.313 54.5259Z\",\n fill: \"#DC9F7E\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask0\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 114,\n y: 22,\n width: 38,\n height: 44\n}, _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M146.092 55.0486C141.517 61.1621 135.136 64.5169 126.949 65.1132C118.636 65.7186 113.086 54.8789 114.156 43.7498C114.667 38.4398 115.843 33.7527 120.519 28.923C130.169 18.9548 139.236 20.2713 147.719 32.8723L151.381 42.6444L146.092 55.0486Z\",\n fill: \"white\"\n}))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M144.967 54.1757C139.857 59.8523 133.198 62.62 124.989 62.4787C116.653 62.3353 112.102 51.0434 114.172 40.0578C115.16 34.8162 116.754 30.2546 121.848 25.8652C132.361 16.8059 141.274 18.9308 148.588 32.2398L151.354 42.2991L144.967 54.1757Z\",\n fill: \"#EFBB9D\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M132.771 54.3902C130.075 53.9737 128.129 52.1383 128.423 50.2906C128.717 48.443 131.141 47.2829 133.836 47.6994C136.531 48.1159 138.478 49.9514 138.184 51.799C137.89 53.6467 135.466 54.8068 132.771 54.3902Z\",\n fill: \"#EFA77F\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M111.252 49.9304C108.605 49.2578 106.773 47.2299 107.16 45.4012C107.548 43.5724 110.009 42.6352 112.657 43.3079C115.304 43.9806 117.136 46.0084 116.749 47.8372C116.361 49.6659 113.9 50.6031 111.252 49.9304Z\",\n fill: \"#EFA77F\"\n}))), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M126.024 53.9409C123.905 54.8459 121.405 54.3789 118.523 52.5399C119.88 56.3917 121.421 58.1444 123.147 57.798C124.873 57.4517 125.832 56.166 126.024 53.9409Z\",\n fill: \"#A5330A\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M127.588 44.5756C127.03 44.5662 126.588 43.8952 126.601 43.077C126.613 42.2588 127.076 41.6033 127.634 41.6127C128.192 41.6222 128.634 42.2932 128.621 43.1113C128.609 43.9295 128.146 44.5851 127.588 44.5756Z\",\n fill: \"#0A1551\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M118.988 43.0239C118.43 43.0144 117.988 42.3435 118.001 41.5253C118.014 40.7071 118.477 40.0515 119.035 40.061C119.593 40.0704 120.035 40.7414 120.022 41.5596C120.009 42.3778 119.546 43.0334 118.988 43.0239Z\",\n fill: \"#0A1551\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M142.981 70.1542C140.959 86.6241 135.276 94.8591 125.934 94.8591C111.92 94.8591 115.206 87.487 116.961 84.0303C118.131 81.7258 119.417 77.6242 120.82 71.7256C125.641 70.1869 129.321 69.3276 131.859 69.1476C134.398 68.9676 138.105 69.3031 142.981 70.1542Z\",\n fill: \"#EFBB9D\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M142.201 78.3815L144.407 90.2543C144.407 90.2543 143.036 94.5649 145.923 102.397C148.811 110.229 153.298 120.076 153.298 120.076L163.674 133.789C173.674 130.126 166.022 108.79 161.852 90.8997C159.213 80.9975 154.846 74.4349 150.863 72.0075L142.201 78.3815Z\",\n fill: \"white\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M144.231 81.3883L146.436 93.2611C146.436 93.2611 145.066 97.5717 147.953 105.404C150.841 113.235 155.328 123.083 155.328 123.083L164.5 135.375C174.5 131.712 168.051 111.797 163.881 93.9065C161.243 84.0043 156.875 77.4416 152.893 75.0142L144.231 81.3883Z\",\n fill: \"url(#paint0_linear)\"\n})), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M142.501 69.375C131.301 71.775 125.168 70.0417 123.501 68.875C122.702 69.275 120.834 71.375 120 72.375C118.5 76.0417 115.201 84.075 114.001 86.875C112.501 90.375 115.001 92.375 118.501 96.375C122.001 100.375 133.001 96.875 137.001 95.875C140.201 95.075 144.001 78.5417 145.501 70.375C143.501 69.975 142.668 69.5417 142.501 69.375Z\",\n fill: \"white\"\n})), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M127.938 36.4629C120.117 35.1642 116.934 34.5586 114.228 32.4159C114.384 22.3566 122.661 16.4355 126.497 15.5393C135.368 13.3758 144.999 16.0823 150.91 23.866C151.496 24.6377 151.986 25.4275 152.389 26.2306C152.622 26.6044 152.851 27.0226 153.078 27.4874C156.776 38.1445 156.679 78.258 155.624 84.0181C152.667 87.8194 128.935 88.6391 131.907 83.875C132.073 83.609 132.258 83.3333 132.455 83.04C133.851 80.9604 137.885 53.4298 137.866 46.7661C137.862 45.1523 137.396 43.2648 136.87 41.1363C136.692 40.4167 136.508 39.6695 136.332 38.896C135.914 38.7499 135.514 38.6111 135.135 38.4792C133.444 37.8914 132.149 37.4414 131.345 37.0931C130.465 36.7119 131.304 34.1691 131.907 32.3436C132.433 30.7495 132.779 29.7024 131.641 31.1196C130.176 32.9449 129.616 34.3733 129.341 35.493C129.184 36.1298 128.586 36.5704 127.938 36.4629Z\",\n fill: \"#091141\"\n})), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 145.5,\n cy: 16.875,\n r: 9.5,\n fill: \"#091141\"\n})), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M129.897 38.4106C129.897 38.4106 126.839 37.5691 126.481 38.8687C126.481 38.8687 126.241 39.7406 129.026 40.4412C131.81 41.1417 132.489 41.0654 132.889 40.2708C133.288 39.4761 131.379 38.7034 129.897 38.4106Z\",\n fill: \"#091141\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M118.797 36.4607C118.797 36.4607 121.443 36.6167 121.438 37.909C121.438 37.909 121.429 38.7744 119.107 38.5708C116.785 38.3672 116.107 37.9472 116.011 37.235C115.916 36.5228 117.553 36.2718 118.797 36.4607Z\",\n fill: \"#091141\"\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M121.942 45.389L121 48.2849L122.873 48.7786\",\n stroke: \"#D97D4A\",\n strokeWidth: 0.919783,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n})), _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M124.604 130.031L132.63 129.412L132.384 137.438H125.435L124.604 130.031Z\",\n fill: \"#EFBB9D\"\n})), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M126.861 129.813L127.262 131.418L128.065 137.438H108C108.402 133.425 114.02 129.412 118.033 129.412C121.243 129.412 126.058 129.679 126.861 129.813Z\",\n fill: \"#EFBB9D\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M161.399 122.431L130 123.372L132 137.375L162 136.875C163.085 136.729 164.344 136.671 165.256 136.065C166.256 135.4 167.941 134.131 168.495 133.187C169.05 132.242 169.382 131.184 169.467 130.092C169.551 129.001 169.387 127.904 168.985 126.886C168.388 125.411 167.321 124.174 165.949 123.369C164.578 122.563 162.978 122.233 161.399 122.431Z\",\n fill: \"#F4F6FF\"\n})), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 38.3032,\n y: 1.625,\n width: 30.3839,\n height: 30.3839,\n rx: 2.75,\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.4697 7.79267C41.4697 6.13099 42.8168 4.78394 44.4785 4.78394H62.5309C64.1926 4.78394 65.5396 6.13099 65.5396 7.79267V25.8451C65.5396 27.5068 64.1926 28.8538 62.5309 28.8538H44.4785C42.8168 28.8538 41.4697 27.5068 41.4697 25.8451V7.79267Z\",\n fill: \"white\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M58.5096 18.4526C58.2886 18.4526 58.1093 18.6319 58.1093 18.8528V21.2041H55.7581C55.5372 21.2041 55.3579 21.3833 55.3579 21.6043C55.3579 21.8252 55.5372 22.0045 55.7581 22.0045H58.1093V24.3557C58.1093 24.5767 58.2886 24.7559 58.5096 24.7559C58.7305 24.7559 58.9098 24.5767 58.9098 24.3557V22.0045H61.261C61.482 22.0045 61.6612 21.8252 61.6612 21.6043C61.6612 21.3833 61.482 21.2041 61.261 21.2041H58.9098V18.8528C58.9098 18.6319 58.7305 18.4526 58.5096 18.4526Z\",\n fill: \"#97ACDA\",\n stroke: \"#97ACDA\",\n strokeWidth: 0.651698\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M54.6129 8.44541C54.6129 8.08278 54.9068 7.78882 55.2694 7.78882H61.8354C62.198 7.78882 62.492 8.08279 62.492 8.44541V15.0113C62.492 15.374 62.198 15.6679 61.8354 15.6679H55.2694C54.9068 15.6679 54.6129 15.374 54.6129 15.0113V8.44541Z\",\n fill: \"#FF6100\"\n})), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.4761 8.44517C44.4761 8.08254 44.7701 7.78857 45.1327 7.78857H51.6987C52.0613 7.78857 52.3553 8.08254 52.3553 8.44517V15.0111C52.3553 15.3737 52.0613 15.6677 51.6987 15.6677H45.1327C44.7701 15.6677 44.4761 15.3737 44.4761 15.0111V8.44517Z\",\n fill: \"#0099FF\"\n})), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.4756 18.5816C44.4756 18.219 44.7696 17.925 45.1322 17.925H51.6981C52.0607 17.925 52.3547 18.219 52.3547 18.5816V25.1476C52.3547 25.5102 52.0607 25.8042 51.6981 25.8042H45.1322C44.7696 25.8042 44.4756 25.5102 44.4756 25.1476V18.5816Z\",\n fill: \"#FFB629\"\n})), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 18.25,\n y: 41.741,\n width: 30.3839,\n height: 30.3839,\n rx: 2.75,\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.4027 47.9084C21.4027 46.2467 22.7498 44.8997 24.4114 44.8997H42.4639C44.1256 44.8997 45.4726 46.2467 45.4726 47.9084V65.9608C45.4726 67.6225 44.1256 68.9696 42.4639 68.9696H24.4114C22.7498 68.9696 21.4027 67.6225 21.4027 65.9608V47.9084Z\",\n fill: \"white\"\n})), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M38.4411 58.5681C38.2202 58.5681 38.0409 58.7474 38.0409 58.9683V61.3196H35.6897C35.4687 61.3196 35.2895 61.4988 35.2895 61.7198C35.2895 61.9407 35.4687 62.12 35.6897 62.12H38.0409V64.4712C38.0409 64.6922 38.2202 64.8714 38.4411 64.8714C38.6621 64.8714 38.8413 64.6922 38.8413 64.4712V62.12H41.1926C41.4135 62.12 41.5928 61.9407 41.5928 61.7198C41.5928 61.4988 41.4135 61.3196 41.1926 61.3196H38.8413V58.9683C38.8413 58.7474 38.6621 58.5681 38.4411 58.5681Z\",\n fill: \"#97ACDA\",\n stroke: \"#97ACDA\",\n strokeWidth: 0.651698\n})), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M34.5474 48.5628C34.5474 48.2002 34.8413 47.9062 35.204 47.9062H41.7699C42.1325 47.9062 42.4265 48.2002 42.4265 48.5628V55.1288C42.4265 55.4914 42.1325 55.7854 41.7699 55.7854H35.204C34.8413 55.7854 34.5474 55.4914 34.5474 55.1288V48.5628Z\",\n fill: \"#FF6100\"\n})), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.4124 48.5643C24.4124 48.2017 24.7064 47.9077 25.069 47.9077H31.6349C31.9976 47.9077 32.2915 48.2017 32.2915 48.5643V55.1302C32.2915 55.4929 31.9976 55.7868 31.6349 55.7868H25.069C24.7064 55.7868 24.4124 55.4929 24.4124 55.1302V48.5643Z\",\n fill: \"#0099FF\"\n})), _path35 || (_path35 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.4072 58.6971C24.4072 58.3345 24.7011 58.0405 25.0638 58.0405H31.6297C31.9923 58.0405 32.2863 58.3345 32.2863 58.6971V65.2631C32.2863 65.6257 31.9923 65.9196 31.6297 65.9196H25.0638C24.7011 65.9196 24.4072 65.6257 24.4072 65.2631V58.6971Z\",\n fill: \"#FFB629\"\n})), _rect3 || (_rect3 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 57.567,\n y: 41.741,\n width: 30.3839,\n height: 30.3839,\n rx: 2.75,\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path36 || (_path36 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M60.7231 47.9084C60.7231 46.2467 62.0702 44.8997 63.7319 44.8997H81.7843C83.446 44.8997 84.793 46.2467 84.793 47.9084V65.9608C84.793 67.6225 83.446 68.9696 81.7843 68.9696H63.7319C62.0702 68.9696 60.7231 67.6225 60.7231 65.9608V47.9084Z\",\n fill: \"white\"\n})), _path37 || (_path37 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M77.7713 58.5681C77.5503 58.5681 77.3711 58.7474 77.3711 58.9683V61.3196H75.0198C74.7989 61.3196 74.6196 61.4988 74.6196 61.7198C74.6196 61.9407 74.7989 62.12 75.0198 62.12H77.3711V64.4712C77.3711 64.6922 77.5503 64.8714 77.7713 64.8714C77.9922 64.8714 78.1715 64.6922 78.1715 64.4712V62.12H80.5227C80.7437 62.12 80.9229 61.9407 80.9229 61.7198C80.9229 61.4988 80.7437 61.3196 80.5227 61.3196H78.1715V58.9683C78.1715 58.7474 77.9922 58.5681 77.7713 58.5681Z\",\n fill: \"#97ACDA\",\n stroke: \"#97ACDA\",\n strokeWidth: 0.651698\n})), _path38 || (_path38 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M73.8698 48.5628C73.8698 48.2002 74.1637 47.9062 74.5263 47.9062H81.0923C81.4549 47.9062 81.7489 48.2002 81.7489 48.5628V55.1288C81.7489 55.4914 81.4549 55.7854 81.0923 55.7854H74.5263C74.1637 55.7854 73.8698 55.4914 73.8698 55.1288V48.5628Z\",\n fill: \"#FF6100\"\n})), _path39 || (_path39 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.7274 48.5641C63.7274 48.2014 64.0213 47.9075 64.3839 47.9075H70.9499C71.3125 47.9075 71.6065 48.2014 71.6065 48.5641V55.13C71.6065 55.4926 71.3125 55.7866 70.9499 55.7866H64.3839C64.0213 55.7866 63.7274 55.4926 63.7274 55.13V48.5641Z\",\n fill: \"#0099FF\"\n})), _path40 || (_path40 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.7277 58.6971C63.7277 58.3345 64.0216 58.0405 64.3843 58.0405H70.9502C71.3128 58.0405 71.6068 58.3345 71.6068 58.6971V65.2631C71.6068 65.6257 71.3128 65.9196 70.9502 65.9196H64.3843C64.0216 65.9196 63.7277 65.6257 63.7277 65.2631V58.6971Z\",\n fill: \"#FFB629\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear\",\n x1: 160,\n y1: 122.375,\n x2: 148.271,\n y2: 68.4249,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#F4F5FE\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"white\"\n})))));\nexport default SvgNoAppsIcon;","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _g, _path9, _path10, _path11, _path12, _g2, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _g3, _path20, _path21, _path22, _path23, _g4, _path24, _path25, _path26, _path27, _path28, _path29, _path30, _path31, _path32, _path33, _path34, _path35, _path36, _path37, _path38, _path39, _path40, _g5, _path41, _path42, _path43, _path44, _path45, _path46, _path47, _path48, _circle, _path49, _path50, _path51, _path52, _path53, _path54, _path55, _rect, _path56, _path57, _path58, _path59, _path60, _path61, _path62, _path63, _path64, _rect2, _path65, _rect3, _path66, _path67, _path68, _path69, _path70, _path71, _path72, _path73, _path74, _rect4, _path75, _rect5, _path76, _path77, _path78, _path79, _path80, _path81, _path82, _path83, _path84, _rect6, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoTablesIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 201 138\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3 93.8117C3 70.1793 22.1578 51.0215 45.7902 51.0215H158.115C181.747 51.0215 200.905 70.1793 200.905 93.8117C200.905 117.444 181.747 136.602 158.115 136.602H45.7902C22.1578 136.602 3 117.444 3 93.8117Z\",\n fill: \"#E6E6F5\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask0_614:19850\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 3,\n y: 51,\n width: 198,\n height: 86\n}, _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3 93.8117C3 70.1793 22.1578 51.0215 45.7902 51.0215H158.115C181.747 51.0215 200.905 70.1793 200.905 93.8117C200.905 117.444 181.747 136.602 158.115 136.602H45.7902C22.1578 136.602 3 117.444 3 93.8117Z\",\n fill: \"#E6E6F5\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask0_614:19850)\"\n}, _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M118.336 74.2989C109.901 84.9367 103 91.7964 97.6306 94.8779C89.5769 99.5003 88.9877 94.6432 59.4901 74.1333C57.439 73.2719 55.7754 73.0424 52.9956 76.1335C51.3335 77.9819 47.7598 78.4681 42.2746 77.5923L42.2746 77.5923C41.7245 77.5045 41.2053 77.879 41.115 78.4289C41.0701 78.7024 41.1397 78.9817 41.3074 79.2015C42.6577 80.9705 44.994 81.9348 48.3164 82.0946C54.9089 82.4114 55.6163 79.9382 59.326 82.8524C63.0356 85.7666 82.9102 109.066 94.8962 109.644C106.882 110.223 122.63 92.4168 127.085 91.0447C130.055 90.1299 132.477 82.9037 134.353 69.3659L118.336 74.2989Z\",\n fill: \"#CD7448\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M61.9543 86.4313C65.224 83.3086 67.2069 80.585 67.903 78.2603C82.5311 89.1899 90.8103 94.3555 92.7407 93.757C95.3874 92.9364 116.744 73.7383 124.165 69.1965C124.839 68.524 124.886 74.2737 125.422 73.6545L123.015 95.9693C114.348 102.171 108.826 105.992 106.45 107.432C102.884 109.592 93.5281 113.547 85.0782 106.677C79.4449 102.097 71.7369 95.3485 61.9543 86.4313Z\",\n fill: \"#F4F5FE\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M113.638 110.924C114.986 115.621 114.986 121.514 113.638 132.25L163.179 125.016L160.146 84.7527C158.124 78.0421 155.765 73.3448 153.069 70.6605C149.025 66.6342 127.793 68.6474 122.737 70.6605C117.682 72.6737 116.671 81.7329 111.616 89.7856C106.561 97.8382 111.616 103.878 113.638 110.924Z\",\n fill: \"white\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M144.981 68.5294C142.959 84.9993 137.277 93.2343 127.934 93.2343C113.92 93.2343 117.206 85.8622 118.961 82.4055C120.131 80.101 121.417 75.9995 122.82 70.1008C127.641 68.5622 131.321 67.7028 133.86 67.5228C136.398 67.3429 140.105 67.6784 144.981 68.5294Z\",\n fill: \"#CD7448\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask1_614:19850\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 54,\n y: -5,\n width: 110,\n height: 94\n}, _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M54.2891 -4.25H163.642V88.4622H54.2891V-4.25Z\",\n fill: \"#C4C4C4\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask1_614:19850)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask2_614:19850\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 109,\n y: 68,\n width: 59,\n height: 92\n}, _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M113.638 134.916C114.986 124.179 114.986 115.621 113.638 110.924C111.616 103.878 106.561 97.8382 111.616 89.7856C116.671 81.7329 117.682 72.6737 122.737 70.6605C127.793 68.6474 149.025 66.6342 153.069 70.6605C155.765 73.3448 158.124 78.0421 160.146 84.7527L163.179 125.016C167.898 143.134 168.572 154.207 165.201 158.233C160.146 164.273 158.124 148.167 135.881 139.108C131.163 137.095 123.748 136.258 113.638 134.916Z\",\n fill: \"white\"\n}))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask2_614:19850)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M113.638 134.914C114.986 124.178 114.986 116.46 113.638 111.763C111.616 104.717 106.561 98.6775 111.616 90.6248C116.671 82.5722 117.398 72.8022 122.454 70.789C127.509 68.7758 148.286 65.8747 152.33 69.901C155.026 72.5852 158.124 78.8814 160.146 85.5919V99.2016L163.179 125.855C167.898 143.974 168.572 155.046 165.201 159.072C160.146 165.112 158.124 149.007 135.881 139.947C131.163 137.934 123.748 136.257 113.638 134.914Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M144.981 68.5294C142.959 84.9993 137.277 93.2343 127.934 93.2343C113.92 93.2343 117.206 85.8622 118.961 82.4055C120.131 80.101 121.417 75.9995 122.82 70.1008C127.641 68.5622 131.321 67.7028 133.86 67.5228C136.398 67.3429 140.105 67.6784 144.981 68.5294Z\",\n fill: \"#CD7448\"\n}))), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M116.82 29.6916C113.43 44.1264 112.279 45.8229 111.018 48.9936C110.705 49.7797 110.867 50.6788 111.456 51.287C116.256 56.2417 122.676 57.7896 130.717 55.9306C139.283 53.9503 139.242 50.9745 133.934 26.7936L116.82 29.6916Z\",\n fill: \"#0A1551\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M139.285 50.3741C137.625 63.347 143.19 67.8978 145.1 67.9302C147.009 67.9626 139.698 75.9534 126.067 88.7393C121.606 80.1413 121.107 72.4732 122.5 70.2493C124.59 66.9136 126.529 69.7672 125.813 58.0883C125.343 50.4165 135.544 51.1457 142.81 49.9004C139.285 50.3741 133.529 50.4924 139.285 50.3741Z\",\n fill: \"#CD7448\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.677232,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M125.313 52.9009C126.105 60.1282 126.082 64.1141 126 64.7502C125.878 65.7043 143.282 64.8984 138.312 49.5774C133.342 34.2565 131.68 51.3826 125.313 52.9009Z\",\n fill: \"#BD5826\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask3_614:19850\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 116,\n y: 20,\n width: 38,\n height: 44\n}, _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M148.092 53.4241C143.516 59.5375 137.135 62.8924 128.949 63.4886C120.636 64.0941 115.086 53.2544 116.156 42.1253C116.667 36.8153 117.843 32.1282 122.518 27.2985C132.169 17.3303 141.236 18.6468 149.718 31.2478L153.38 41.0199L148.092 53.4241Z\",\n fill: \"white\"\n}))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask3_614:19850)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M146.966 52.5514C141.857 58.2281 135.197 60.9957 126.988 60.8545C118.652 60.711 114.101 49.4191 116.171 38.4335C117.159 33.1919 118.753 28.6304 123.847 24.241C134.36 15.1816 143.273 17.3065 150.587 30.6155L153.353 40.6748L146.966 52.5514Z\",\n fill: \"#CD7448\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.422879,\n d: \"M134.771 52.7648C132.076 52.3482 130.129 50.5128 130.423 48.6651C130.718 46.8175 133.141 45.6574 135.836 46.0739C138.532 46.4905 140.478 48.3259 140.184 50.1735C139.89 52.0212 137.466 53.1813 134.771 52.7648Z\",\n fill: \"#A44616\"\n}))), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M128.579 52.3527C126.46 53.2577 123.96 52.7908 121.079 50.9518C122.435 54.8036 123.976 56.5563 125.702 56.2099C127.428 55.8636 128.387 54.5778 128.579 52.3527Z\",\n fill: \"#A5330A\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M129.938 34.837C122.116 33.5383 118.933 32.9326 116.227 30.7899C116.384 20.7306 124.661 14.8095 128.497 13.9133C137.368 11.7498 146.999 14.4563 152.91 22.24C153.496 23.0117 153.986 23.8016 154.389 24.6046C154.621 24.9784 154.85 25.3966 155.077 25.8614C158.776 36.5185 160.722 52.0678 159.667 57.8279C156.71 61.6292 132.978 62.4489 135.95 57.6848C136.116 57.4189 136.301 57.1432 136.498 56.8498C137.894 54.7702 139.885 51.8038 139.866 45.1401C139.862 43.5264 139.396 41.6388 138.87 39.5103C138.692 38.7907 138.507 38.0435 138.332 37.2701C137.913 37.1239 137.514 36.9851 137.135 36.8532C135.443 36.2654 134.149 35.8154 133.345 35.4671C132.465 35.0859 133.304 32.5431 133.907 30.7177C134.433 29.1236 134.778 28.0765 133.641 29.4936C132.176 31.3189 131.616 32.7473 131.341 33.867C131.184 34.5038 130.585 34.9444 129.938 34.837Z\",\n fill: \"#0A1551\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M118.165 135.11C123.494 132.113 147.433 138.846 165.674 132.164C175.674 128.501 168.022 107.165 163.852 89.2747C161.213 79.3725 156.845 72.8099 152.863 70.3825L144.201 76.7565L146.406 88.6293C146.406 88.6293 145.036 92.9399 147.923 100.772C150.811 108.604 155.298 118.451 155.298 118.451L112.373 127.456C112.528 131.007 113.902 137.508 118.165 135.11Z\",\n fill: \"white\"\n}))), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M123.877 133.654C121.784 135.32 120.779 135.373 118.278 137.295C116.265 138.259 114.779 138.673 110.412 137.369C107.792 136.587 104.091 136.387 99.3082 136.768L99.3082 136.768C98.7516 136.813 98.2652 136.399 98.2217 135.845C98.2055 135.638 98.2538 135.432 98.3599 135.253C99.5754 133.208 101.943 132.012 105.463 131.662C112.043 131.01 112.862 133.44 116.441 130.344C118.827 128.28 121.306 129.383 123.877 133.654Z\",\n fill: \"#CD7448\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M119.883 137.122C130.5 136.251 149.152 140.857 167.392 134.176C177.393 130.512 169.74 109.177 165.57 91.2864C162.932 81.3842 158.564 74.8216 154.582 72.3942L145.92 78.7682L148.125 90.641C148.125 90.641 146.755 94.9516 149.642 102.783C152.529 110.615 157.017 120.463 157.017 120.463L114.092 129.468C114.246 133.018 113 136.751 119.883 137.122Z\",\n fill: \"url(#paint0_linear_614:19850)\"\n}))), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask4_614:19850\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 99,\n y: 10,\n width: 64,\n height: 79\n}, _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M99 10.75H163V88.75H99V10.75Z\",\n fill: \"#C4C4C4\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask4_614:19850)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask5_614:19850\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 109,\n y: 68,\n width: 59,\n height: 92\n}, _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M113.349 134.916C114.697 124.179 114.697 115.621 113.349 110.924C111.327 103.878 106.272 97.8382 111.327 89.7856C116.382 81.7329 117.393 72.6737 122.448 70.6605C127.504 68.6474 148.736 66.6342 152.78 70.6605C155.476 73.3448 157.835 78.0421 159.857 84.7527L162.89 125.016C167.609 143.134 168.283 154.207 164.912 158.233C159.857 164.273 157.835 148.167 135.592 139.108C130.874 137.095 123.459 136.258 113.349 134.916Z\",\n fill: \"white\"\n}))), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask5_614:19850)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M113.349 134.914C114.697 124.178 114.697 116.46 113.349 111.763C111.327 104.717 106.272 98.6775 111.327 90.6248C116.382 82.5722 117.109 72.8022 122.165 70.789C127.22 68.7758 147.997 65.8747 152.041 69.901C154.737 72.5852 157.835 78.8814 159.857 85.5919V99.2016L162.89 125.855C167.609 143.974 168.283 155.046 164.912 159.072C159.857 165.112 157.835 149.007 135.592 139.947C130.874 137.934 123.459 136.257 113.349 134.914Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M144.692 68.5294C142.67 84.9993 136.988 93.2343 127.645 93.2343C113.631 93.2343 116.917 85.8622 118.672 82.4055C119.842 80.101 121.128 75.9995 122.531 70.1008C127.352 68.5622 131.032 67.7028 133.571 67.5228C136.109 67.3429 139.816 67.6784 144.692 68.5294Z\",\n fill: \"#CD7448\"\n}))), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M116.531 29.6916C113.141 44.1264 111.989 45.8229 110.729 48.9936C110.416 49.7797 110.578 50.6788 111.167 51.287C115.967 56.2417 122.387 57.7896 130.428 55.9306C138.994 53.9503 138.953 50.9745 133.645 26.7936L116.531 29.6916Z\",\n fill: \"#0A1551\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M138.996 50.3741C137.335 63.347 142.901 67.8978 144.811 67.9302C146.72 67.9626 139.409 75.9534 125.778 88.7393C121.317 80.1413 120.818 72.4732 122.211 70.2493C124.301 66.9136 126.24 69.7672 125.524 58.0883C125.054 50.4165 135.255 51.1457 142.521 49.9004C138.996 50.3741 133.24 50.4924 138.996 50.3741Z\",\n fill: \"#CD7448\"\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.677232,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M125.024 52.9009C125.816 60.1282 125.793 64.1141 125.711 64.7502C125.589 65.7043 142.993 64.8984 138.023 49.5774C133.053 34.2565 131.391 51.3826 125.024 52.9009Z\",\n fill: \"#BD5826\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask6_614:19850\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 115,\n y: 20,\n width: 39,\n height: 44\n}, _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M147.803 53.4241C143.227 59.5375 136.846 62.8924 128.66 63.4886C120.347 64.0941 114.797 53.2544 115.867 42.1253C116.377 36.8153 117.553 32.1282 122.229 27.2985C131.88 17.3303 140.947 18.6468 149.429 31.2478L153.091 41.0199L147.803 53.4241Z\",\n fill: \"white\"\n}))), _g4 || (_g4 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask6_614:19850)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M146.677 52.5514C141.567 58.2281 134.908 60.9957 126.699 60.8545C118.363 60.711 113.812 49.4191 115.882 38.4335C116.87 33.1919 118.464 28.6304 123.558 24.241C134.071 15.1816 142.984 17.3065 150.298 30.6155L153.064 40.6748L146.677 52.5514Z\",\n fill: \"#CD7448\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M131.904 37.2051C133.107 37.7927 133.959 38.7351 134.387 39.4446C134.557 39.7257 134.466 40.091 134.185 40.2605C133.905 40.4299 133.539 40.3394 133.37 40.0583C133.041 39.5143 132.35 38.7455 131.383 38.2731C130.438 37.8114 129.218 37.6245 127.756 38.2297C127.453 38.3553 127.106 38.2112 126.98 37.9079C126.854 37.6046 126.998 37.257 127.301 37.1314C129.103 36.385 130.679 36.6068 131.904 37.2051Z\",\n fill: \"#37120C\",\n fillOpacity: 0.25\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M120.443 35.2316C119.482 35.1784 118.689 35.5359 118.177 35.9473C117.922 36.153 117.882 36.527 118.088 36.7828C118.294 37.0386 118.668 37.0792 118.923 36.8735C119.242 36.6174 119.753 36.3838 120.379 36.4184C120.994 36.4524 121.794 36.7494 122.692 37.6869C122.919 37.9241 123.295 37.9326 123.532 37.7058C123.769 37.479 123.777 37.1028 123.55 36.8655C122.487 35.755 121.416 35.2854 120.443 35.2316Z\",\n fill: \"#37120C\",\n fillOpacity: 0.25\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.422879,\n d: \"M134.482 52.7648C131.787 52.3482 129.84 50.5128 130.134 48.6651C130.428 46.8175 132.852 45.6574 135.547 46.0739C138.243 46.4905 140.189 48.3259 139.895 50.1735C139.601 52.0212 137.177 53.1813 134.482 52.7648Z\",\n fill: \"#A44616\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.422879,\n d: \"M112.964 48.3049C110.316 47.6323 108.484 45.6044 108.872 43.7757C109.26 41.9469 111.72 41.0097 114.368 41.6824C117.016 42.3551 118.848 44.3829 118.46 46.2117C118.072 48.0404 115.612 48.9776 112.964 48.3049Z\",\n fill: \"#A44616\"\n}))), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M128.29 52.3527C126.171 53.2577 123.671 52.7908 120.79 50.9518C122.146 54.8036 123.687 56.5563 125.413 56.2099C127.139 55.8636 128.098 54.5778 128.29 52.3527Z\",\n fill: \"#A5330A\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M129.298 42.9497C128.74 42.9402 128.298 42.2692 128.311 41.4511C128.324 40.6329 128.787 39.9773 129.345 39.9868C129.903 39.9962 130.345 40.6672 130.332 41.4854C130.319 42.3035 129.856 42.9591 129.298 42.9497Z\",\n fill: \"#321907\"\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M120.699 41.3989C120.141 41.3894 119.699 40.7185 119.712 39.9003C119.725 39.0821 120.187 38.4265 120.745 38.436C121.303 38.4454 121.745 39.1164 121.732 39.9346C121.72 40.7528 121.257 41.4084 120.699 41.3989Z\",\n fill: \"#321907\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M125.715 40.3462C125.557 40.2281 125.333 40.2596 125.215 40.4167C124.233 41.7208 123.594 42.3555 122.993 42.7944C122.691 43.0152 122.392 43.1914 122.05 43.3811C121.957 43.4328 121.86 43.4857 121.759 43.5409C121.492 43.6866 121.197 43.848 120.868 44.042C119.711 44.7227 119.542 46.2908 120.066 47.4543C120.337 48.0542 120.802 48.5891 121.46 48.8962C122.121 49.2048 122.943 49.2677 123.894 48.9804C124.082 48.9234 124.189 48.7247 124.131 48.5366C124.073 48.3485 123.874 48.2422 123.685 48.2992C122.876 48.5436 122.239 48.4746 121.762 48.2518C121.281 48.0273 120.929 47.6311 120.718 47.164C120.281 46.1935 120.503 45.0843 121.232 44.655C121.551 44.4672 121.831 44.3142 122.095 44.1701C122.198 44.1136 122.299 44.0585 122.399 44.0032C122.749 43.8086 123.079 43.6156 123.417 43.3687C124.096 42.8719 124.784 42.1764 125.787 40.8446C125.905 40.6875 125.873 40.4644 125.715 40.3462Z\",\n fill: \"#8A3110\"\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M129.649 34.837C121.827 33.5383 118.644 32.9326 115.938 30.7899C116.095 20.7306 124.372 14.8095 128.208 13.9133C137.079 11.7498 146.71 14.4563 152.621 22.24C153.207 23.0117 153.697 23.8016 154.1 24.6046C154.332 24.9784 154.561 25.3966 154.788 25.8614C158.487 36.5185 160.433 52.0678 159.378 57.8279C156.421 61.6292 132.689 62.4489 135.661 57.6848C135.827 57.4189 136.012 57.1432 136.209 56.8498C137.605 54.7702 139.596 51.8038 139.577 45.1401C139.573 43.5264 139.106 41.6388 138.581 39.5103C138.403 38.7907 138.218 38.0435 138.043 37.2701C137.624 37.1239 137.225 36.9851 136.846 36.8532C135.154 36.2654 133.859 35.8154 133.056 35.4671C132.176 35.0859 133.015 32.5431 133.618 30.7177C134.144 29.1236 134.489 28.0765 133.352 29.4936C131.887 31.3189 131.327 32.7473 131.052 33.867C130.895 34.5038 130.296 34.9444 129.649 34.837Z\",\n fill: \"#0A1551\"\n})), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M117.876 135.11C123.204 132.113 147.144 138.846 165.384 132.164C175.385 128.501 167.732 107.165 163.563 89.2747C160.924 79.3725 156.556 72.8099 152.574 70.3825L143.912 76.7565L146.117 88.6293C146.117 88.6293 144.747 92.9399 147.634 100.772C150.522 108.604 155.009 118.451 155.009 118.451L112.084 127.456C112.239 131.007 113.612 137.508 117.876 135.11Z\",\n fill: \"white\"\n}))), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 94.4348C0 70.8024 19.1578 51.6445 42.7902 51.6445H155.115C178.747 51.6445 197.905 70.8024 197.905 94.4348C197.905 118.067 178.747 137.225 155.115 137.225H42.7902C19.1578 137.225 0 118.067 0 94.4348Z\",\n fill: \"#E6E6F5\"\n})), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M65.837 81.9592C64.5359 80.8456 63.022 80.0079 61.3875 79.4968C59.7529 78.9858 58.0318 78.8122 56.3281 78.9865L51.2598 76.694C50.8843 76.5178 50.4597 76.4753 50.0567 76.5736C49.6537 76.6718 49.2967 76.9049 49.0444 77.234C48.9237 77.4075 48.8395 77.6037 48.7969 77.8106C48.7543 78.0176 48.7539 78.231 48.7963 78.438C48.8386 78.645 48.9226 78.8413 49.043 79.015C49.1634 79.1886 49.3178 79.336 49.4969 79.4482L52.2516 81.2906L51.0773 81.1933C49.2314 81.0459 47.4788 80.3203 46.0691 79.1196L42.1557 75.7349C41.9286 75.5451 41.6574 75.4154 41.3671 75.3579C41.0767 75.3004 40.7766 75.317 40.4943 75.4059C40.2444 75.4669 40.0146 75.5918 39.8277 75.7684C39.6407 75.945 39.5032 76.1672 39.428 76.4131C39.3529 76.6591 39.3429 76.9203 39.3992 77.1712C39.4554 77.4222 39.5758 77.6541 39.7488 77.8444L44.3203 82.8871C45.2213 83.8663 46.3099 84.6544 47.5215 85.2045C48.733 85.7547 50.0428 86.0557 51.3729 86.0897L66.0279 86.5405L65.837 81.9592Z\",\n fill: \"#EFBB9D\"\n})), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M114.82 31.3168C111.43 45.7517 107.561 80.2673 106.301 83.438C105.988 84.2241 106.15 85.1232 106.739 85.7314C111.538 90.6861 117.959 92.234 126 90.375C134.565 88.3947 137.243 52.5997 131.934 28.4188L114.82 31.3168Z\",\n fill: \"#091141\"\n})), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M59.9562 88.0544C63.226 84.9317 65.2089 82.208 65.9049 79.8834C80.533 90.813 88.8123 95.9785 90.7426 95.38C93.3894 94.5594 114.746 75.3614 122.167 70.8196C122.841 70.147 122.888 75.8967 123.424 75.2776L121.017 97.5923C112.35 103.794 106.828 107.615 104.451 109.055C100.886 111.215 91.53 115.17 83.0801 108.3C77.4469 103.72 69.7389 96.9715 59.9562 88.0544Z\",\n fill: \"#F4F5FE\"\n})), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.592 112.816C111.715 117.572 113.858 121.714 112 132.376C122.036 134.193 128.883 131.142 133.5 133.376L151 125.376L163.5 119.876L157.645 102.462L158.292 88.868C156.591 82.0696 153.796 75.6344 151.231 72.8261C147.382 68.6135 126.491 70.5315 121.346 72.3039C116.2 74.0764 115.009 83.8012 109.577 91.6064C104.144 99.4116 108.907 105.683 110.592 112.816Z\",\n fill: \"white\"\n})), _path35 || (_path35 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M142.981 70.1544C140.959 86.6243 135.277 94.8593 125.934 94.8593C111.92 94.8593 115.206 87.4872 116.961 84.0305C118.131 81.726 119.417 77.6245 120.82 71.7258C125.641 70.1872 129.321 69.3278 131.86 69.1478C134.398 68.9679 138.105 69.3034 142.981 70.1544Z\",\n fill: \"#EFBB9D\"\n})), _path36 || (_path36 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M122.004 47.5359C121.452 47.6172 120.906 47.0268 120.785 46.2173C120.664 45.4078 121.013 44.6856 121.565 44.6043C122.117 44.523 122.663 45.1133 122.784 45.9228C122.905 46.7324 122.556 47.4546 122.004 47.5359Z\",\n fill: \"#321907\"\n})), _path37 || (_path37 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M114.453 47.403C113.901 47.4844 113.355 46.894 113.234 46.0845C113.113 45.275 113.462 44.5528 114.014 44.4715C114.566 44.3901 115.112 44.9805 115.233 45.79C115.354 46.5995 115.005 47.3217 114.453 47.403Z\",\n fill: \"#321907\"\n})), _path38 || (_path38 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M137.285 52.0003C135.625 64.9731 141.59 69.8431 143.5 69.8755C145.409 69.9079 137.698 77.5795 124.067 90.3655C119.606 81.7674 119.107 74.0993 120.5 71.8755C122.59 68.5397 124.529 71.3934 123.813 59.7145C123.343 52.0426 133.544 52.7719 140.811 51.5265C137.285 52.0003 131.529 52.1186 137.285 52.0003Z\",\n fill: \"#EFBB9D\"\n})), _path39 || (_path39 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.677232,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M123.313 54.5259C124.105 61.7532 124.082 65.7391 124 66.3752C123.878 67.3293 141.282 66.5234 136.312 51.2024C131.342 35.8815 129.68 53.0076 123.313 54.5259Z\",\n fill: \"#DC9F7E\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask7_614:19850\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 114,\n y: 22,\n width: 38,\n height: 44\n}, _path40 || (_path40 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M146.092 55.0491C141.516 61.1625 135.135 64.5174 126.949 65.1136C118.636 65.7191 113.086 54.8794 114.156 43.7503C114.667 38.4403 115.843 33.7532 120.518 28.9235C130.169 18.9553 139.236 20.2718 147.718 32.8728L151.38 42.6449L146.092 55.0491Z\",\n fill: \"white\"\n}))), _g5 || (_g5 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask7_614:19850)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M144.966 54.1764C139.857 59.8531 133.197 62.6207 124.988 62.4795C116.652 62.336 112.101 51.0441 114.171 40.0585C115.159 34.8169 116.753 30.2554 121.847 25.866C132.36 16.8066 141.273 18.9315 148.587 32.2405L151.353 42.2998L144.966 54.1764Z\",\n fill: \"#EFBB9D\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M132.771 54.3898C130.076 53.9732 128.129 52.1378 128.423 50.2901C128.718 48.4425 131.141 47.2824 133.836 47.6989C136.532 48.1155 138.478 49.9509 138.184 51.7985C137.89 53.6462 135.466 54.8063 132.771 54.3898Z\",\n fill: \"#EFA77F\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M111.253 49.9299C108.605 49.2573 106.773 47.2294 107.161 45.4007C107.549 43.5719 110.009 42.6347 112.657 43.3074C115.305 43.9801 117.137 46.0079 116.749 47.8367C116.361 49.6654 113.901 50.6026 111.253 49.9299Z\",\n fill: \"#EFA77F\"\n}))), _path41 || (_path41 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M126.024 53.9406C123.906 54.8456 121.406 54.3786 118.524 52.5397C119.88 56.3915 121.422 58.1442 123.148 57.7978C124.874 57.4515 125.833 56.1657 126.024 53.9406Z\",\n fill: \"#A5330A\"\n})), _path42 || (_path42 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M127.587 44.5747C127.029 44.5652 126.587 43.8942 126.6 43.0761C126.613 42.2579 127.076 41.6023 127.634 41.6118C128.192 41.6212 128.634 42.2922 128.621 43.1104C128.608 43.9285 128.145 44.5841 127.587 44.5747Z\",\n fill: \"#0A1551\"\n})), _path43 || (_path43 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M118.988 43.0239C118.43 43.0144 117.988 42.3435 118.001 41.5253C118.014 40.7071 118.476 40.0515 119.035 40.061C119.593 40.0704 120.034 40.7414 120.022 41.5596C120.009 42.3778 119.546 43.0334 118.988 43.0239Z\",\n fill: \"#0A1551\"\n})), _path44 || (_path44 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M142.981 70.1544C140.959 86.6243 135.277 94.8593 125.934 94.8593C111.92 94.8593 115.206 87.4872 116.961 84.0305C118.131 81.726 119.417 77.6245 120.82 71.7258C125.641 70.1872 129.321 69.3278 131.86 69.1478C134.398 68.9679 138.105 69.3034 142.981 70.1544Z\",\n fill: \"#EFBB9D\"\n})), _path45 || (_path45 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M142.201 78.3815L144.406 90.2543C144.406 90.2543 143.036 94.5649 145.923 102.397C148.811 110.229 153.298 120.076 153.298 120.076L163.674 133.789C173.674 130.126 166.022 108.79 161.852 90.8997C159.213 80.9975 154.845 74.4349 150.863 72.0075L142.201 78.3815Z\",\n fill: \"white\"\n})), _path46 || (_path46 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M144.23 81.3875L146.435 93.2604C146.435 93.2604 145.065 97.571 147.952 105.403C150.84 113.235 155.327 123.082 155.327 123.082L164.499 135.374C174.499 131.711 168.05 111.797 163.881 93.9058C161.242 84.0035 156.874 77.4409 152.892 75.0135L144.23 81.3875Z\",\n fill: \"url(#paint1_linear_614:19850)\"\n})), _path47 || (_path47 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M142.501 69.375C131.301 71.775 125.167 70.0417 123.501 68.875C122.701 69.275 120.834 71.375 120 72.375C118.5 76.0417 115.201 84.075 114.001 86.875C112.501 90.375 115.001 92.375 118.501 96.375C122.001 100.375 133.001 96.875 137.001 95.875C140.201 95.075 144.001 78.5417 145.501 70.375C143.501 69.975 142.667 69.5417 142.501 69.375Z\",\n fill: \"white\"\n})), _path48 || (_path48 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M127.938 36.462C120.116 35.1633 116.933 34.5576 114.227 32.4149C114.384 22.3556 122.661 16.4345 126.497 15.5383C135.368 13.3748 144.999 16.0813 150.91 23.865C151.496 24.6367 151.986 25.4266 152.389 26.2296C152.621 26.6034 152.85 27.0216 153.077 27.4864C156.776 38.1435 156.679 78.257 155.623 84.0171C152.666 87.8184 128.935 88.6381 131.907 83.874C132.073 83.6081 132.258 83.3324 132.455 83.039C133.85 80.9594 137.885 53.4288 137.866 46.7651C137.862 45.1514 137.396 43.2638 136.87 41.1353C136.692 40.4157 136.507 39.6685 136.332 38.8951C135.913 38.7489 135.514 38.6101 135.135 38.4782C133.443 37.8904 132.149 37.4404 131.345 37.0921C130.465 36.7109 131.304 34.1681 131.907 32.3427C132.433 30.7486 132.778 29.7015 131.641 31.1186C130.176 32.9439 129.616 34.3723 129.341 35.492C129.184 36.1288 128.585 36.5694 127.938 36.462Z\",\n fill: \"#091141\"\n})), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 145.5,\n cy: 16.875,\n r: 9.5,\n fill: \"#091141\"\n})), _path49 || (_path49 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M129.897 38.4111C129.897 38.4111 126.839 37.5696 126.481 38.8692C126.481 38.8692 126.241 39.7411 129.025 40.4416C131.81 41.1422 132.489 41.0659 132.888 40.2713C133.288 39.4766 131.379 38.7038 129.897 38.4111Z\",\n fill: \"#091141\"\n})), _path50 || (_path50 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M118.797 36.4602C118.797 36.4602 121.442 36.6162 121.438 37.9085C121.438 37.9085 121.428 38.7739 119.107 38.5703C116.785 38.3667 116.107 37.9467 116.011 37.2345C115.916 36.5223 117.552 36.2713 118.797 36.4602Z\",\n fill: \"#091141\"\n})), _path51 || (_path51 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M121.942 45.389L121 48.2849L122.873 48.7786\",\n stroke: \"#D97D4A\",\n strokeWidth: 0.919783,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n})), _path52 || (_path52 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M124.604 130.031L132.629 129.412L132.384 137.438H125.434L124.604 130.031Z\",\n fill: \"#EFBB9D\"\n})), _path53 || (_path53 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M126.861 129.813L127.262 131.419L128.065 137.438H108C108.401 133.425 114.019 129.412 118.032 129.412C121.243 129.412 126.058 129.68 126.861 129.813Z\",\n fill: \"#EFBB9D\"\n})), _path54 || (_path54 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M161.399 122.431L130 123.372L132 137.375L162 136.875C163.085 136.729 164.344 136.671 165.256 136.065C166.256 135.4 167.941 134.131 168.495 133.187C169.05 132.242 169.382 131.184 169.467 130.092C169.551 129.001 169.387 127.904 168.985 126.886C168.388 125.411 167.321 124.174 165.949 123.369C164.578 122.563 162.978 122.233 161.399 122.431Z\",\n fill: \"#F4F6FF\"\n})), _path55 || (_path55 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.134 31.2582C39.5049 31.2582 39.0603 30.8194 39.0601 29.1831C39.058 14.5092 39.0582 19.091 39.06 4.41714C39.0601 2.85541 39.5295 2.37824 41.1004 2.37789C55.7861 2.37404 51.2159 2.37404 65.9015 2.37789C67.4504 2.37824 67.9399 2.87413 67.9402 4.42922C67.943 19.1031 67.9429 14.5213 67.9406 29.1952C67.9403 30.8131 67.4816 31.258 65.8476 31.2582C58.5049 31.2591 60.7899 31.2586 53.4472 31.2586C46.1335 31.2586 48.4477 31.2591 41.134 31.2582ZM65.3567 29.1956C65.6453 29.1956 65.8792 28.9617 65.8792 28.6731V23.0464C65.8792 22.7579 65.6453 22.5239 65.3567 22.5239H59.73C59.4415 22.5239 59.2075 22.7579 59.2075 23.0464V28.6731C59.2075 28.9617 59.4415 29.1956 59.73 29.1956H65.3567ZM50.6871 29.1956H56.3138C56.6024 29.1956 56.8363 28.9617 56.8363 28.6731V23.0464C56.8363 22.7579 56.6024 22.5239 56.3138 22.5239H50.6871C50.3985 22.5239 50.1646 22.7579 50.1646 23.0464V28.6731C50.1646 28.9617 50.3985 29.1956 50.6871 29.1956ZM41.6442 29.1956H47.2709C47.5594 29.1956 47.7934 28.9617 47.7934 28.6731V23.0464C47.7934 22.7579 47.5594 22.5239 47.2709 22.5239H41.6442C41.3556 22.5239 41.1217 22.7579 41.1217 23.0464V28.6731C41.1217 28.9617 41.3556 29.1956 41.6442 29.1956ZM59.73 20.1527H65.3567C65.6453 20.1527 65.8792 19.9188 65.8792 19.6302V14.0035C65.8792 13.715 65.6453 13.481 65.3567 13.481H59.73C59.4415 13.481 59.2075 13.715 59.2075 14.0035V19.6302C59.2075 19.9188 59.4415 20.1527 59.73 20.1527ZM50.6871 20.1527H56.3138C56.6024 20.1527 56.8363 19.9188 56.8363 19.6302V14.0035C56.8363 13.715 56.6024 13.481 56.3138 13.481H50.6871C50.3985 13.481 50.1646 13.715 50.1646 14.0035V19.6302C50.1646 19.9188 50.3985 20.1527 50.6871 20.1527ZM41.6442 20.1527H47.2709C47.5594 20.1527 47.7934 19.9188 47.7934 19.6302V14.0035C47.7934 13.715 47.5594 13.481 47.2709 13.481H41.6442C41.3556 13.481 41.1217 13.715 41.1217 14.0035V19.6302C41.1217 19.9188 41.3556 20.1527 41.6442 20.1527ZM50.6871 11.1098H56.3138C56.6024 11.1098 56.8363 10.9685 56.8363 10.7942V7.396C56.8363 7.22172 56.6024 7.08045 56.3138 7.08045H50.6871C50.3985 7.08045 50.1646 7.22172 50.1646 7.396V10.7942C50.1646 10.9685 50.3985 11.1098 50.6871 11.1098ZM59.7133 11.1098H65.34C65.6285 11.1098 65.8625 10.9685 65.8625 10.7942V7.396C65.8625 7.22172 65.6285 7.08045 65.34 7.08045H59.7133C59.4247 7.08045 59.1908 7.22172 59.1908 7.396V10.7942C59.1908 10.9685 59.4247 11.1098 59.7133 11.1098ZM41.6442 11.1098H47.2709C47.5594 11.1098 47.7934 10.9685 47.7934 10.7942V7.396C47.7934 7.22172 47.5594 7.08045 47.2709 7.08045H41.6442C41.3556 7.08045 41.1217 7.22172 41.1217 7.396V10.7942C41.1217 10.9685 41.3556 11.1098 41.6442 11.1098Z\",\n fill: \"white\"\n})), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 40.6641,\n y: 4.78125,\n width: 25.6744,\n height: 24.8721,\n fill: \"white\"\n})), _path56 || (_path56 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M59.1172 7.38672C59.1172 6.83443 59.5649 6.38672 60.1172 6.38672H64.8629C65.4152 6.38672 65.8629 6.83443 65.8629 7.38672V10.2007C65.8629 10.753 65.4152 11.2007 64.8629 11.2007H60.1172C59.5649 11.2007 59.1172 10.753 59.1172 10.2007V7.38672Z\",\n fill: \"#0D953B\"\n})), _path57 || (_path57 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M59.1172 14.6074C59.1172 14.0551 59.5649 13.6074 60.1172 13.6074H64.5358C65.0881 13.6074 65.5358 14.0551 65.5358 14.6074V19.026C65.5358 19.5783 65.0881 20.026 64.5358 20.026H60.1172C59.5649 20.026 59.1172 19.5783 59.1172 19.026V14.6074Z\",\n fill: \"#FFB629\"\n})), _path58 || (_path58 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M59.1172 23.4336C59.1172 22.8813 59.5649 22.4336 60.1172 22.4336H64.5358C65.0881 22.4336 65.5358 22.8813 65.5358 23.4336V27.8522C65.5358 28.4045 65.0881 28.8522 64.5358 28.8522H60.1172C59.5649 28.8522 59.1172 28.4045 59.1172 27.8522V23.4336Z\",\n fill: \"#FFB629\"\n})), _path59 || (_path59 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M50.166 7.38672C50.166 6.83443 50.6137 6.38672 51.166 6.38672H56.0378C56.59 6.38672 57.0378 6.83443 57.0378 7.38672V10.2007C57.0378 10.753 56.59 11.2007 56.0378 11.2007H51.166C50.6137 11.2007 50.166 10.753 50.166 10.2007V7.38672Z\",\n fill: \"#0D953B\"\n})), _path60 || (_path60 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M50.2929 14.6074C50.2929 14.0551 50.7407 13.6074 51.2929 13.6074H55.7116C56.2639 13.6074 56.7116 14.0551 56.7116 14.6074V19.026C56.7116 19.5783 56.2639 20.026 55.7116 20.026H51.2929C50.7407 20.026 50.2929 19.5783 50.2929 19.026V14.6074Z\",\n fill: \"#FF6100\"\n})), _path61 || (_path61 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M50.2929 23.4336C50.2929 22.8813 50.7407 22.4336 51.2929 22.4336H55.7116C56.2639 22.4336 56.7116 22.8813 56.7116 23.4336V27.8522C56.7116 28.4045 56.2639 28.8522 55.7116 28.8522H51.2929C50.7407 28.8522 50.2929 28.4045 50.2929 27.8522V23.4336Z\",\n fill: \"#FF6100\"\n})), _path62 || (_path62 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.0645 7.38672C41.0645 6.83443 41.5122 6.38672 42.0645 6.38672H46.8842C47.4365 6.38672 47.8842 6.83443 47.8842 7.38672V10.2007C47.8842 10.753 47.4365 11.2007 46.8842 11.2007H42.0645C41.5122 11.2007 41.0645 10.753 41.0645 10.2007V7.38672Z\",\n fill: \"#0D953B\"\n})), _path63 || (_path63 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.0645 14.6074C41.0645 14.0551 41.5122 13.6074 42.0645 13.6074H46.8842C47.4365 13.6074 47.8842 14.0551 47.8842 14.6074V19.026C47.8842 19.5783 47.4365 20.026 46.8842 20.026H42.0645C41.5122 20.026 41.0645 19.5783 41.0645 19.026V16.8167V14.6074Z\",\n fill: \"#0099FF\"\n})), _path64 || (_path64 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.0645 23.4336C41.0645 22.8813 41.5122 22.4336 42.0645 22.4336H46.8842C47.4365 22.4336 47.8842 22.8813 47.8842 23.4336V27.8522C47.8842 28.4045 47.4365 28.8522 46.8842 28.8522H42.0645C41.5122 28.8522 41.0645 28.4045 41.0645 27.8522V25.6429V23.4336Z\",\n fill: \"#0099FF\"\n})), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 38.3086,\n y: 1.625,\n width: 30.3837,\n height: 30.3837,\n rx: 2.75,\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path65 || (_path65 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.0754 71.3754C19.4463 71.3754 19.0017 70.9366 19.0015 69.3003C18.9994 54.6264 18.9996 59.2082 19.0014 44.5343C19.0015 42.9726 19.4709 42.4954 21.0418 42.4951C35.7275 42.4912 31.1573 42.4912 45.8429 42.4951C47.3918 42.4954 47.8813 42.9913 47.8816 44.5464C47.8844 59.2203 47.8843 54.6385 47.882 69.3124C47.8817 70.9303 47.4231 71.3752 45.789 71.3754C38.4463 71.3763 40.7313 71.3758 33.3886 71.3758C26.0749 71.3758 28.3891 71.3763 21.0754 71.3754ZM45.2981 69.3128C45.5867 69.3128 45.8206 69.0789 45.8206 68.7903V63.1636C45.8206 62.8751 45.5867 62.6411 45.2981 62.6411H39.6714C39.3829 62.6411 39.1489 62.8751 39.1489 63.1636V68.7903C39.1489 69.0789 39.3829 69.3128 39.6714 69.3128H45.2981ZM30.6285 69.3128H36.2552C36.5438 69.3128 36.7777 69.0789 36.7777 68.7903V63.1636C36.7777 62.8751 36.5438 62.6411 36.2552 62.6411H30.6285C30.3399 62.6411 30.106 62.8751 30.106 63.1636V68.7903C30.106 69.0789 30.3399 69.3128 30.6285 69.3128ZM21.5856 69.3128H27.2123C27.5008 69.3128 27.7348 69.0789 27.7348 68.7903V63.1636C27.7348 62.8751 27.5008 62.6411 27.2123 62.6411H21.5856C21.297 62.6411 21.0631 62.8751 21.0631 63.1636V68.7903C21.0631 69.0789 21.297 69.3128 21.5856 69.3128ZM39.6714 60.2699H45.2981C45.5867 60.2699 45.8206 60.036 45.8206 59.7474V54.1207C45.8206 53.8321 45.5867 53.5982 45.2981 53.5982H39.6714C39.3829 53.5982 39.1489 53.8321 39.1489 54.1207V59.7474C39.1489 60.036 39.3829 60.2699 39.6714 60.2699ZM30.6285 60.2699H36.2552C36.5438 60.2699 36.7777 60.036 36.7777 59.7474V54.1207C36.7777 53.8321 36.5438 53.5982 36.2552 53.5982H30.6285C30.3399 53.5982 30.106 53.8321 30.106 54.1207V59.7474C30.106 60.036 30.3399 60.2699 30.6285 60.2699ZM21.5856 60.2699H27.2123C27.5008 60.2699 27.7348 60.036 27.7348 59.7474V54.1207C27.7348 53.8321 27.5008 53.5982 27.2123 53.5982H21.5856C21.297 53.5982 21.0631 53.8321 21.0631 54.1207V59.7474C21.0631 60.036 21.297 60.2699 21.5856 60.2699ZM30.6285 51.227H36.2552C36.5438 51.227 36.7777 51.0857 36.7777 50.9114V47.5132C36.7777 47.3389 36.5438 47.1976 36.2552 47.1976H30.6285C30.3399 47.1976 30.106 47.3389 30.106 47.5132V50.9114C30.106 51.0857 30.3399 51.227 30.6285 51.227ZM39.6547 51.227H45.2814C45.5699 51.227 45.8039 51.0857 45.8039 50.9114V47.5132C45.8039 47.3389 45.5699 47.1976 45.2814 47.1976H39.6547C39.3661 47.1976 39.1322 47.3389 39.1322 47.5132V50.9114C39.1322 51.0857 39.3661 51.227 39.6547 51.227ZM21.5856 51.227H27.2123C27.5008 51.227 27.7348 51.0857 27.7348 50.9114V47.5132C27.7348 47.3389 27.5008 47.1976 27.2123 47.1976H21.5856C21.297 47.1976 21.0631 47.3389 21.0631 47.5132V50.9114C21.0631 51.0857 21.297 51.227 21.5856 51.227Z\",\n fill: \"white\"\n})), _rect3 || (_rect3 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 20.6055,\n y: 44.8984,\n width: 25.6744,\n height: 24.8721,\n fill: \"white\"\n})), _path66 || (_path66 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39.0586 47.5039C39.0586 46.9516 39.5063 46.5039 40.0586 46.5039H44.8043C45.3566 46.5039 45.8043 46.9516 45.8043 47.5039V50.3179C45.8043 50.8701 45.3566 51.3179 44.8043 51.3179H40.0586C39.5063 51.3179 39.0586 50.8701 39.0586 50.3179V47.5039Z\",\n fill: \"#0D953B\"\n})), _path67 || (_path67 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39.0586 54.7246C39.0586 54.1723 39.5063 53.7246 40.0586 53.7246H44.4772C45.0295 53.7246 45.4772 54.1723 45.4772 54.7246V59.1432C45.4772 59.6955 45.0295 60.1432 44.4772 60.1432H40.0586C39.5063 60.1432 39.0586 59.6955 39.0586 59.1432V54.7246Z\",\n fill: \"#FFB629\"\n})), _path68 || (_path68 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39.0586 63.5508C39.0586 62.9985 39.5063 62.5508 40.0586 62.5508H44.4772C45.0295 62.5508 45.4772 62.9985 45.4772 63.5508V67.9694C45.4772 68.5217 45.0295 68.9694 44.4772 68.9694H40.0586C39.5063 68.9694 39.0586 68.5217 39.0586 67.9694V63.5508Z\",\n fill: \"#FFB629\"\n})), _path69 || (_path69 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M30.1074 47.5039C30.1074 46.9516 30.5551 46.5039 31.1074 46.5039H35.9792C36.5314 46.5039 36.9792 46.9516 36.9792 47.5039V50.3179C36.9792 50.8701 36.5315 51.3179 35.9792 51.3179H31.1074C30.5551 51.3179 30.1074 50.8701 30.1074 50.3179V47.5039Z\",\n fill: \"#0D953B\"\n})), _path70 || (_path70 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M30.2324 54.7246C30.2324 54.1723 30.6801 53.7246 31.2324 53.7246H35.651C36.2033 53.7246 36.651 54.1723 36.651 54.7246V59.1432C36.651 59.6955 36.2033 60.1432 35.651 60.1432H31.2324C30.6801 60.1432 30.2324 59.6955 30.2324 59.1432V54.7246Z\",\n fill: \"#FF6100\"\n})), _path71 || (_path71 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M30.2324 63.5508C30.2324 62.9985 30.6801 62.5508 31.2324 62.5508H35.651C36.2033 62.5508 36.651 62.9985 36.651 63.5508V67.9694C36.651 68.5217 36.2033 68.9694 35.651 68.9694H31.2324C30.6801 68.9694 30.2324 68.5217 30.2324 67.9694V63.5508Z\",\n fill: \"#FF6100\"\n})), _path72 || (_path72 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.0059 47.5039C21.0059 46.9516 21.4536 46.5039 22.0059 46.5039H26.8256C27.3779 46.5039 27.8256 46.9516 27.8256 47.5039V50.3179C27.8256 50.8701 27.3779 51.3179 26.8256 51.3179H22.0059C21.4536 51.3179 21.0059 50.8701 21.0059 50.3179V47.5039Z\",\n fill: \"#0D953B\"\n})), _path73 || (_path73 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.0059 54.7246C21.0059 54.1723 21.4536 53.7246 22.0059 53.7246H26.8256C27.3779 53.7246 27.8256 54.1723 27.8256 54.7246V59.1432C27.8256 59.6955 27.3779 60.1432 26.8256 60.1432H22.0059C21.4536 60.1432 21.0059 59.6955 21.0059 59.1432V56.9339V54.7246Z\",\n fill: \"#0099FF\"\n})), _path74 || (_path74 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.0059 63.5508C21.0059 62.9985 21.4536 62.5508 22.0059 62.5508H26.8256C27.3779 62.5508 27.8256 62.9985 27.8256 63.5508V67.9694C27.8256 68.5217 27.3779 68.9694 26.8256 68.9694H22.0059C21.4536 68.9694 21.0059 68.5217 21.0059 67.9694V65.7601V63.5508Z\",\n fill: \"#0099FF\"\n})), _rect4 || (_rect4 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 18.25,\n y: 41.7422,\n width: 30.3837,\n height: 30.3837,\n rx: 2.75,\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path75 || (_path75 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M60.3898 71.3754C58.7607 71.3754 58.3162 70.9366 58.316 69.3003C58.3139 54.6264 58.3141 59.2082 58.3158 44.5343C58.316 42.9726 58.7854 42.4954 60.3563 42.4951C75.0419 42.4912 70.4717 42.4912 85.1574 42.4951C86.7062 42.4954 87.1957 42.9913 87.1961 44.5464C87.1989 59.2203 87.1987 54.6385 87.1965 69.3124C87.1961 70.9303 86.7375 71.3752 85.1035 71.3754C77.7608 71.3763 80.0458 71.3758 72.703 71.3758C65.3893 71.3758 67.7035 71.3763 60.3898 71.3754ZM84.6126 69.3128C84.9011 69.3128 85.1351 69.0789 85.1351 68.7903V63.1636C85.1351 62.8751 84.9011 62.6411 84.6126 62.6411H78.9859C78.6973 62.6411 78.4634 62.8751 78.4634 63.1636V68.7903C78.4634 69.0789 78.6973 69.3128 78.9859 69.3128H84.6126ZM69.943 69.3128H75.5697C75.8582 69.3128 76.0921 69.0789 76.0921 68.7903V63.1636C76.0921 62.8751 75.8582 62.6411 75.5697 62.6411H69.943C69.6544 62.6411 69.4205 62.8751 69.4205 63.1636V68.7903C69.4205 69.0789 69.6544 69.3128 69.943 69.3128ZM60.9 69.3128H66.5267C66.8153 69.3128 67.0492 69.0789 67.0492 68.7903V63.1636C67.0492 62.8751 66.8153 62.6411 66.5267 62.6411H60.9C60.6115 62.6411 60.3776 62.8751 60.3776 63.1636V68.7903C60.3776 69.0789 60.6115 69.3128 60.9 69.3128ZM78.9859 60.2699H84.6126C84.9011 60.2699 85.1351 60.036 85.1351 59.7474V54.1207C85.1351 53.8321 84.9011 53.5982 84.6126 53.5982H78.9859C78.6973 53.5982 78.4634 53.8321 78.4634 54.1207V59.7474C78.4634 60.036 78.6973 60.2699 78.9859 60.2699ZM69.943 60.2699H75.5697C75.8582 60.2699 76.0921 60.036 76.0921 59.7474V54.1207C76.0921 53.8321 75.8582 53.5982 75.5697 53.5982H69.943C69.6544 53.5982 69.4205 53.8321 69.4205 54.1207V59.7474C69.4205 60.036 69.6544 60.2699 69.943 60.2699ZM60.9 60.2699H66.5267C66.8153 60.2699 67.0492 60.036 67.0492 59.7474V54.1207C67.0492 53.8321 66.8153 53.5982 66.5267 53.5982H60.9C60.6115 53.5982 60.3776 53.8321 60.3776 54.1207V59.7474C60.3776 60.036 60.6115 60.2699 60.9 60.2699ZM69.943 51.227H75.5697C75.8582 51.227 76.0921 51.0857 76.0921 50.9114V47.5132C76.0921 47.3389 75.8582 47.1976 75.5697 47.1976H69.943C69.6544 47.1976 69.4205 47.3389 69.4205 47.5132V50.9114C69.4205 51.0857 69.6544 51.227 69.943 51.227ZM78.9691 51.227H84.5958C84.8844 51.227 85.1183 51.0857 85.1183 50.9114V47.5132C85.1183 47.3389 84.8844 47.1976 84.5958 47.1976H78.9691C78.6806 47.1976 78.4466 47.3389 78.4466 47.5132V50.9114C78.4466 51.0857 78.6806 51.227 78.9691 51.227ZM60.9 51.227H66.5267C66.8153 51.227 67.0492 51.0857 67.0492 50.9114V47.5132C67.0492 47.3389 66.8153 47.1976 66.5267 47.1976H60.9C60.6115 47.1976 60.3776 47.3389 60.3776 47.5132V50.9114C60.3776 51.0857 60.6115 51.227 60.9 51.227Z\",\n fill: \"white\"\n})), _rect5 || (_rect5 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 59.9199,\n y: 44.8984,\n width: 25.6744,\n height: 24.8721,\n fill: \"white\"\n})), _path76 || (_path76 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M78.373 47.5039C78.373 46.9516 78.8208 46.5039 79.373 46.5039H84.1188C84.6711 46.5039 85.1188 46.9516 85.1188 47.5039V50.3179C85.1188 50.8701 84.6711 51.3179 84.1188 51.3179H79.373C78.8208 51.3179 78.373 50.8701 78.373 50.3179V47.5039Z\",\n fill: \"#0D953B\"\n})), _path77 || (_path77 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M78.373 54.7246C78.373 54.1723 78.8208 53.7246 79.373 53.7246H83.7917C84.3439 53.7246 84.7917 54.1723 84.7917 54.7246V59.1432C84.7917 59.6955 84.3439 60.1432 83.7917 60.1432H79.373C78.8208 60.1432 78.373 59.6955 78.373 59.1432V54.7246Z\",\n fill: \"#FFB629\"\n})), _path78 || (_path78 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M78.373 63.5508C78.373 62.9985 78.8208 62.5508 79.373 62.5508H83.7917C84.3439 62.5508 84.7917 62.9985 84.7917 63.5508V67.9694C84.7917 68.5217 84.3439 68.9694 83.7917 68.9694H79.373C78.8208 68.9694 78.373 68.5217 78.373 67.9694V63.5508Z\",\n fill: \"#FFB629\"\n})), _path79 || (_path79 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.4218 47.5039C69.4218 46.9516 69.8696 46.5039 70.4218 46.5039H75.2936C75.8459 46.5039 76.2936 46.9516 76.2936 47.5039V50.3179C76.2936 50.8701 75.8459 51.3179 75.2936 51.3179H70.4218C69.8696 51.3179 69.4218 50.8701 69.4218 50.3179V47.5039Z\",\n fill: \"#0D953B\"\n})), _path80 || (_path80 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.5469 54.7246C69.5469 54.1723 69.9946 53.7246 70.5469 53.7246H74.9655C75.5178 53.7246 75.9655 54.1723 75.9655 54.7246V59.1432C75.9655 59.6955 75.5178 60.1432 74.9655 60.1432H70.5469C69.9946 60.1432 69.5469 59.6955 69.5469 59.1432V54.7246Z\",\n fill: \"#FF6100\"\n})), _path81 || (_path81 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.5469 63.5508C69.5469 62.9985 69.9946 62.5508 70.5469 62.5508H74.9655C75.5178 62.5508 75.9655 62.9985 75.9655 63.5508V67.9694C75.9655 68.5217 75.5178 68.9694 74.9655 68.9694H70.5469C69.9946 68.9694 69.5469 68.5217 69.5469 67.9694V63.5508Z\",\n fill: \"#FF6100\"\n})), _path82 || (_path82 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M60.3203 47.5039C60.3203 46.9516 60.768 46.5039 61.3203 46.5039H66.1401C66.6924 46.5039 67.1401 46.9516 67.1401 47.5039V50.3179C67.1401 50.8701 66.6924 51.3179 66.1401 51.3179H61.3203C60.768 51.3179 60.3203 50.8701 60.3203 50.3179V47.5039Z\",\n fill: \"#0D953B\"\n})), _path83 || (_path83 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M60.3203 54.7246C60.3203 54.1723 60.768 53.7246 61.3203 53.7246H66.1401C66.6924 53.7246 67.1401 54.1723 67.1401 54.7246V59.1432C67.1401 59.6955 66.6924 60.1432 66.1401 60.1432H61.3203C60.768 60.1432 60.3203 59.6955 60.3203 59.1432V56.9339V54.7246Z\",\n fill: \"#0099FF\"\n})), _path84 || (_path84 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M60.3203 63.5508C60.3203 62.9985 60.768 62.5508 61.3203 62.5508H66.1401C66.6924 62.5508 67.1401 62.9985 67.1401 63.5508V67.9694C67.1401 68.5217 66.6924 68.9694 66.1401 68.9694H61.3203C60.768 68.9694 60.3203 68.5217 60.3203 67.9694V65.7601V63.5508Z\",\n fill: \"#0099FF\"\n})), _rect6 || (_rect6 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 57.5645,\n y: 41.7422,\n width: 30.3837,\n height: 30.3837,\n rx: 2.75,\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear_614:19850\",\n x1: 155.19,\n y1: 90.2549,\n x2: 152.764,\n y2: 107.265,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"white\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#F3F5FE\"\n})), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint1_linear_614:19850\",\n x1: 159.999,\n y1: 122.374,\n x2: 148.27,\n y2: 68.4241,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#F4F5FE\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"white\"\n})))));\nexport default SvgNoTablesIcon;","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _path12, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _path20, _path21, _path22, _path23, _path24, _path25, _circle, _path26, _path27, _path28, _path29, _path30, _path31, _path32, _path33, _path34, _path35, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoReportsIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 198 145\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 101.437C0 77.8043 19.1578 58.6465 42.7902 58.6465H155.115C178.747 58.6465 197.905 77.8043 197.905 101.437C197.905 125.069 178.747 144.227 155.115 144.227H42.7902C19.1578 144.227 0 125.069 0 101.437Z\",\n fill: \"#E6E6F5\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M36.9316 5.17167C36.9316 2.52254 39.0792 0.375 41.7283 0.375H64.5125C67.1616 0.375 69.3092 2.52254 69.3092 5.17167V33.9517C69.3092 36.6008 67.1616 38.7483 64.5125 38.7483H41.7283C39.0792 38.7483 36.9316 36.6008 36.9316 33.9517V5.17167Z\",\n fill: \"white\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M64.5125 1.57417H41.7283C39.7415 1.57417 38.1308 3.18482 38.1308 5.17167V33.9517C38.1308 35.9385 39.7415 37.5492 41.7283 37.5492H64.5125C66.4993 37.5492 68.11 35.9385 68.11 33.9517V5.17167C68.11 3.18482 66.4993 1.57417 64.5125 1.57417ZM41.7283 0.375C39.0792 0.375 36.9316 2.52254 36.9316 5.17167V33.9517C36.9316 36.6008 39.0792 38.7483 41.7283 38.7483H64.5125C67.1616 38.7483 69.3092 36.6008 69.3092 33.9517V5.17167C69.3092 2.52254 67.1616 0.375 64.5125 0.375H41.7283Z\",\n fill: \"#D3DCEF\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42.3809 10.3907C42.3809 9.67225 42.9633 9.08984 43.6817 9.08984H46.2834C47.0018 9.08984 47.5842 9.67225 47.5842 10.3907V29.9032H42.3809V10.3907Z\",\n fill: \"#0099FF\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M50.3672 16.2442C50.3672 15.5258 50.9496 14.9434 51.668 14.9434H54.2697C54.9881 14.9434 55.5705 15.5258 55.5705 16.2442V29.9029H50.3672V16.2442Z\",\n fill: \"#FF6100\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M58.3555 11.0411C58.3555 10.3226 58.9379 9.74023 59.6563 9.74023H62.258C62.9764 9.74023 63.5588 10.3226 63.5588 11.0411V29.9031H58.3555V11.0411Z\",\n fill: \"#FFB629\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 46.7986C16 44.1495 18.1475 42.002 20.7967 42.002H43.5808C46.23 42.002 48.3775 44.1495 48.3775 46.7986V75.5786C48.3775 78.2278 46.23 80.3753 43.5808 80.3753H20.7967C18.1475 80.3753 16 78.2278 16 75.5786V46.7986Z\",\n fill: \"white\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M43.5808 43.2011H20.7967C18.8098 43.2011 17.1992 44.8118 17.1992 46.7986V75.5786C17.1992 77.5655 18.8098 79.1761 20.7967 79.1761H43.5808C45.5677 79.1761 47.1783 77.5655 47.1783 75.5786V46.7986C47.1783 44.8118 45.5677 43.2011 43.5808 43.2011ZM20.7967 42.002C18.1475 42.002 16 44.1495 16 46.7986V75.5786C16 78.2278 18.1475 80.3753 20.7967 80.3753H43.5808C46.23 80.3753 48.3775 78.2278 48.3775 75.5786V46.7986C48.3775 44.1495 46.23 42.002 43.5808 42.002H20.7967Z\",\n fill: \"#D3DCEF\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.4492 52.0176C21.4492 51.2992 22.0316 50.7168 22.7501 50.7168H25.3517C26.0701 50.7168 26.6526 51.2992 26.6526 52.0176V71.5301H21.4492V52.0176Z\",\n fill: \"#0099FF\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M29.4375 57.8711C29.4375 57.1527 30.0199 56.5703 30.7383 56.5703H33.34C34.0584 56.5703 34.6408 57.1527 34.6408 57.8711V71.5299H29.4375V57.8711Z\",\n fill: \"#FF6100\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37.4238 52.668C37.4238 51.9496 38.0062 51.3672 38.7247 51.3672H41.3263C42.0448 51.3672 42.6272 51.9496 42.6272 52.668V71.5301H37.4238V52.668Z\",\n fill: \"#FFB629\"\n})), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56.7949 46.7986C56.7949 44.1495 58.9425 42.002 61.5916 42.002H84.3758C87.0249 42.002 89.1724 44.1495 89.1724 46.7986V75.5786C89.1724 78.2278 87.0249 80.3753 84.3758 80.3753H61.5916C58.9425 80.3753 56.7949 78.2278 56.7949 75.5786V46.7986Z\",\n fill: \"white\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M84.3758 43.2011H61.5916C59.6047 43.2011 57.9941 44.8118 57.9941 46.7986V75.5786C57.9941 77.5655 59.6047 79.1761 61.5916 79.1761H84.3758C86.3626 79.1761 87.9733 77.5655 87.9733 75.5786V46.7986C87.9733 44.8118 86.3626 43.2011 84.3758 43.2011ZM61.5916 42.002C58.9425 42.002 56.7949 44.1495 56.7949 46.7986V75.5786C56.7949 78.2278 58.9425 80.3753 61.5916 80.3753H84.3758C87.0249 80.3753 89.1724 78.2278 89.1724 75.5786V46.7986C89.1724 44.1495 87.0249 42.002 84.3758 42.002H61.5916Z\",\n fill: \"#D3DCEF\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M62.2441 52.0176C62.2441 51.2992 62.8265 50.7168 63.545 50.7168H66.1466C66.8651 50.7168 67.4475 51.2992 67.4475 52.0176V71.5301H62.2441V52.0176Z\",\n fill: \"#0099FF\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M70.2305 57.8711C70.2305 57.1527 70.8129 56.5703 71.5313 56.5703H74.133C74.8514 56.5703 75.4338 57.1527 75.4338 57.8711V71.5299H70.2305V57.8711Z\",\n fill: \"#FF6100\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M78.2188 52.668C78.2188 51.9496 78.8012 51.3672 79.5196 51.3672H82.1212C82.8397 51.3672 83.4221 51.9496 83.4221 52.668V71.5301H78.2188V52.668Z\",\n fill: \"#FFB629\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.0707 103.549C67.3802 102.288 65.451 101.383 63.4004 100.89C61.3498 100.397 59.2207 100.326 57.1416 100.68L50.725 98.2814C50.2491 98.096 49.7238 98.0788 49.2368 98.2327C48.7497 98.3867 48.3303 98.7025 48.0473 99.1277C47.9134 99.3508 47.8261 99.5988 47.7908 99.8566C47.7556 100.114 47.7727 100.377 47.8418 100.628C47.9108 100.878 48.0302 101.113 48.1925 101.316C48.3548 101.52 48.5566 101.688 48.7859 101.811L52.3227 103.848L50.8717 103.825C48.5914 103.796 46.3782 103.049 44.5469 101.69L39.4594 97.8537C39.1647 97.6392 38.8207 97.5022 38.4592 97.4556C38.0977 97.4089 37.7303 97.4539 37.3907 97.5865C37.0888 97.6821 36.8167 97.8545 36.6015 98.0868C36.3863 98.3192 36.2357 98.6036 36.1636 98.912C36.0916 99.2204 36.1008 99.5422 36.1907 99.8459C36.2805 100.15 36.4476 100.425 36.6758 100.644L42.7089 106.463C43.8966 107.592 45.2993 108.471 46.8333 109.047C48.3673 109.623 50.0015 109.885 51.6387 109.817L69.6831 109.163L69.0707 103.549Z\",\n fill: \"#B46458\"\n})), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M104.657 85.0995C96.9777 98.6859 90.622 112.979 85.6775 127.782C85.2695 129.045 85.1818 130.391 85.4228 131.696C85.6638 133.002 86.2256 134.227 87.0578 135.262C90.8717 139.967 99.4037 137.94 102.284 132.921C102.284 132.921 124.25 95.1214 123.021 93.8093C122.734 93.4872 104.657 85.0995 104.657 85.0995Z\",\n fill: \"url(#paint0_linear_614:20297)\"\n})), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M130.469 80.6016L107.252 83.599C106.12 83.7385 105.086 84.3132 104.37 85.2011C103.654 86.089 103.311 87.2204 103.415 88.3565L117 144.376L166.5 143.876L163.202 88.5152C163.271 87.9372 163.225 87.351 163.066 86.7908C162.908 86.2306 162.641 85.7073 162.28 85.2507C161.919 84.794 161.471 84.4129 160.963 84.1294C160.455 83.846 159.895 83.6659 159.317 83.599L130.469 80.6016Z\",\n fill: \"white\"\n})), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M141.807 92.865C146.99 108.7 153.141 124.174 160.225 139.195C161.363 141.548 164.678 143.119 167.236 143.372C172.995 143.957 176.35 137.968 174.947 132.473C174.947 132.473 163.026 86.1336 160.589 85.0574C160.2 84.8781 141.807 92.865 141.807 92.865Z\",\n fill: \"url(#paint1_linear_614:20297)\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M121.352 68.0419L122.509 81.6648C122.906 86.4223 125.982 88.753 130.534 88.3248C134.419 87.9442 138.463 85.6922 138.003 81.4898L135.196 60.1445L121.352 68.0419Z\",\n fill: \"#B46458\"\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M124.615 72.338C116.829 73.004 109.883 67.2163 109.105 60.6827L107.52 46.9964C106.994 43.1192 107.993 39.1899 110.306 36.0342C112.619 32.8784 116.065 30.7423 119.921 30.0757C128.009 28.807 137.016 34.3257 138.285 42.7623L139.379 53.435C139.866 57.8884 138.596 62.3563 135.839 65.887C133.081 69.4177 129.054 71.7322 124.615 72.338Z\",\n fill: \"#B46458\"\n})), _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M134.067 46.2851C126.788 40.6554 130.451 35.8978 130.451 35.8978L135.637 33.8203C152.986 33.8203 141.885 50.6934 141.885 50.6934L139.744 57.8777C139.744 57.8777 138.048 74.2592 121.936 73.609C109.82 73.1174 109.582 62.8411 109.582 62.8411C116.496 58.0202 131.244 61.0493 131.244 61.0493C132.83 58.0521 134.067 46.2851 134.067 46.2851Z\",\n fill: \"#091141\"\n})), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M131.103 36.6104C123.912 37.0574 116.702 37.1154 109.504 36.7846C109.504 36.7846 101.464 33.7715 104.747 28.8555C107.379 25.0019 113.754 28.1419 113.754 28.1419C113.754 28.1419 113.643 24.1774 116.45 23.0991C119.796 21.7987 129.597 20.7519 137.938 34.0412L131.103 36.6104Z\",\n fill: \"#091141\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M122.381 81.6482L118.068 82.2034C118.068 82.2034 116.149 89.3872 126.124 90.1325C136.527 90.8779 140.634 86.961 142.633 81.9021L131.183 79.6504L122.381 81.6482Z\",\n fill: \"#B46458\"\n})), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 140,\n cy: 51.375,\n r: 4,\n fill: \"#B46458\"\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M116.782 53.5938L116.734 56.6386L118.669 56.5593\",\n stroke: \"#893B2F\",\n strokeWidth: 0.919783,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M112.752 51.5131C112.164 51.5031 111.698 50.7964 111.712 49.9345C111.726 49.0727 112.213 48.3821 112.801 48.3921C113.389 48.4021 113.854 49.1088 113.841 49.9707C113.827 50.8325 113.339 51.5231 112.752 51.5131Z\",\n fill: \"#0A1551\"\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M123.752 51.5131C123.164 51.5031 122.698 50.7964 122.712 49.9345C122.726 49.0727 123.213 48.3821 123.801 48.3921C124.389 48.4021 124.854 49.1088 124.841 49.9707C124.827 50.8325 124.339 51.5231 123.752 51.5131Z\",\n fill: \"#0A1551\"\n})), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M124.601 44.4004C124.601 44.4004 121.43 44.4006 121.43 45.7485C121.43 45.7485 121.43 46.6529 124.3 46.5894C127.17 46.526 127.805 46.2723 127.979 45.4001C128.154 44.5279 126.108 44.2894 124.601 44.4004Z\",\n fill: \"#091141\"\n})), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M112.816 44.8345C112.816 44.8345 115.462 44.7005 115.599 45.9856C115.599 45.9856 115.684 46.8468 113.354 46.8982C111.023 46.9496 110.303 46.6062 110.131 45.9088C109.958 45.2113 111.557 44.7828 112.816 44.8345Z\",\n fill: \"#091141\"\n})), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M117 64.584L122.555 64.1706C122.555 64.1706 122.799 66.2381 119.921 66.3721C117.043 66.5061 117 64.584 117 64.584Z\",\n fill: \"white\"\n})), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M93.8821 119.624L67.5011 99.3745L57.7583 113.229L86.5332 135.082C87.561 135.89 88.806 136.372 90.1094 136.467C92.3382 136.604 94.5348 135.882 96.248 134.45C97.9613 133.018 99.0615 130.984 99.3224 128.766C99.5536 126.855 99.145 124.922 98.1607 123.268C97.1764 121.614 95.6719 120.332 93.8821 119.624Z\",\n fill: \"white\"\n})), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M117.688 135.146L127.688 134.375L127.381 144.375H118.723L117.688 135.146Z\",\n fill: \"#B46458\"\n})), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M120.5 134.875L121 136.875L122 144.375H97C97.5 139.375 104.5 134.375 109.5 134.375C113.5 134.375 119.5 134.708 120.5 134.875Z\",\n fill: \"#B46458\"\n})), _path35 || (_path35 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M164.171 126.923L125.049 128.096L124.5 144.375L168.5 143.875C169.852 143.693 169.1 144.016 170.236 143.261C171.372 142.505 172.322 141.501 173.012 140.324C173.703 139.148 174.117 137.829 174.223 136.469C174.328 135.109 174.123 133.743 173.623 132.473C172.879 130.636 171.55 129.095 169.84 128.092C168.131 127.088 166.138 126.677 164.171 126.923Z\",\n fill: \"#F4F6FF\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear_614:20297\",\n x1: 96.5,\n y1: 120.875,\n x2: 156.139,\n y2: 53.9192,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"white\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#A1A9EE\"\n})), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint1_linear_614:20297\",\n x1: 173.499,\n y1: 142.771,\n x2: 153.836,\n y2: 84.7064,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.307292,\n stopColor: \"#F4F6FF\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"white\"\n})))));\nexport default SvgNoReportsIcon;","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _circle, _path11, _path12, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _path20, _rect, _path21, _path22, _path23, _path24, _path25, _rect2, _rect3, _path26, _path27, _path28, _path29, _path30, _rect4, _rect5, _path31, _path32, _path33, _path34, _path35, _rect6, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoApprovalsIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 198 140\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 97.0607C0 73.4284 19.1578 54.2705 42.7902 54.2705H155.115C178.747 54.2705 197.905 73.4284 197.905 97.0607C197.905 120.693 178.747 139.851 155.115 139.851H42.7902C19.1578 139.851 0 120.693 0 97.0607Z\",\n fill: \"#E6E6F5\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M66.0704 99.1741C64.3799 97.9131 62.4507 97.0085 60.4001 96.5154C58.3495 96.0222 56.2203 95.9509 54.1413 96.3054L47.7247 93.9064C47.2488 93.721 46.7235 93.7038 46.2364 93.8577C45.7494 94.0117 45.33 94.3275 45.047 94.7527C44.9131 94.9758 44.8258 95.2238 44.7905 95.4816C44.7553 95.7395 44.7724 96.0017 44.8414 96.2526C44.9105 96.5035 45.0299 96.7377 45.1922 96.9411C45.3545 97.1446 45.5563 97.3129 45.7856 97.436L49.3224 99.4727L47.8714 99.4501C45.5911 99.4212 43.3779 98.6741 41.5466 97.3149L36.4591 93.4787C36.1643 93.2642 35.8204 93.1272 35.4589 93.0806C35.0974 93.0339 34.73 93.0789 34.3904 93.2115C34.0885 93.3071 33.8164 93.4795 33.6012 93.7118C33.386 93.9442 33.2354 94.2286 33.1633 94.537C33.0913 94.8454 33.1005 95.1672 33.1904 95.4709C33.2802 95.7746 33.4472 96.0497 33.6755 96.2692L39.7086 102.088C40.8963 103.217 42.299 104.096 43.833 104.672C45.367 105.248 47.0012 105.51 48.6384 105.442L66.6828 104.788L66.0704 99.1741Z\",\n fill: \"#B46458\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M101.657 80.7244C93.9774 94.3108 87.6216 108.604 82.6772 123.407C82.2691 124.67 82.1815 126.015 82.4225 127.321C82.6635 128.627 83.2253 129.852 84.0575 130.887C87.8714 135.592 96.4034 133.565 99.2834 128.546C99.2834 128.546 121.25 90.7463 120.02 89.4342C119.733 89.1121 101.657 80.7244 101.657 80.7244Z\",\n fill: \"url(#paint0_linear_2531_7001)\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M127.468 76.2256L104.252 79.223C103.12 79.3625 102.086 79.9372 101.37 80.8251C100.654 81.713 100.311 82.8444 100.414 83.9805L114 140L163.843 139.873L160.202 84.1393C160.27 83.5612 160.224 82.975 160.066 82.4148C159.908 81.8547 159.64 81.3314 159.279 80.8747C158.919 80.418 158.471 80.0369 157.963 79.7534C157.454 79.47 156.895 79.2899 156.317 79.223L127.468 76.2256Z\",\n fill: \"white\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M138.807 88.491C143.99 104.326 150.141 119.8 157.225 134.821C158.363 137.174 161.677 138.745 164.236 138.998C169.994 139.583 173.35 133.594 171.946 128.099C171.946 128.099 160.026 81.7595 157.588 80.6834C157.199 80.5041 138.807 88.491 138.807 88.491Z\",\n fill: \"url(#paint1_linear_2531_7001)\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M118.351 63.666L119.509 77.2888C119.905 82.0463 122.982 84.377 127.533 83.9488C131.419 83.5682 135.462 81.3163 135.002 77.1138L132.196 55.7686L118.351 63.666Z\",\n fill: \"#B46458\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M121.615 67.9639C113.828 68.63 106.882 62.8423 106.105 56.3087L104.519 42.6224C103.994 38.7452 104.993 34.8159 107.306 31.6601C109.619 28.5044 113.065 26.3683 116.92 25.7017C125.008 24.433 134.016 29.9517 135.285 38.3883L136.379 49.0609C136.866 53.5144 135.596 57.9822 132.838 61.513C130.081 65.0437 126.054 67.3582 121.615 67.9639Z\",\n fill: \"#B46458\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M131.067 41.9091C123.788 36.2794 127.451 31.5219 127.451 31.5219L132.637 29.4443C149.986 29.4443 138.885 46.3174 138.885 46.3174L136.744 53.5017C136.744 53.5017 135.047 69.8832 118.935 69.233C106.819 68.7414 106.582 58.4651 106.582 58.4651C113.496 53.6442 128.244 56.6733 128.244 56.6733C129.83 53.6761 131.067 41.9091 131.067 41.9091Z\",\n fill: \"#091141\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M128.103 32.2354C120.912 32.6824 113.701 32.7404 106.504 32.4096C106.504 32.4096 98.4636 29.3965 101.746 24.4805C104.379 20.6269 110.754 23.7669 110.754 23.7669C110.754 23.7669 110.643 19.8024 113.45 18.7241C116.796 17.4237 126.596 16.3769 134.938 29.6662L128.103 32.2354Z\",\n fill: \"#091141\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M119.381 77.2732L115.068 77.8284C115.068 77.8284 113.149 85.0122 123.124 85.7575C133.527 86.5029 137.634 82.586 139.632 77.5271L128.183 75.2754L119.381 77.2732Z\",\n fill: \"#B46458\"\n})), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 137,\n cy: 47,\n r: 4,\n fill: \"#B46458\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M113.782 49.2178L113.734 52.2626L115.669 52.1833\",\n stroke: \"#893B2F\",\n strokeWidth: 0.919783,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n})), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M109.751 47.1391C109.164 47.1291 108.698 46.4224 108.712 45.5605C108.725 44.6987 109.213 44.0081 109.801 44.0181C110.388 44.028 110.854 44.7348 110.84 45.5966C110.827 46.4585 110.339 47.1491 109.751 47.1391Z\",\n fill: \"#0A1551\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M120.751 47.1391C120.164 47.1291 119.698 46.4224 119.712 45.5605C119.725 44.6987 120.213 44.0081 120.801 44.0181C121.388 44.028 121.854 44.7348 121.84 45.5966C121.827 46.4585 121.339 47.1491 120.751 47.1391Z\",\n fill: \"#0A1551\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M121.601 40.0254C121.601 40.0254 118.429 40.0256 118.429 41.3735C118.429 41.3735 118.429 42.2779 121.3 42.2144C124.17 42.151 124.804 41.8973 124.979 41.0251C125.153 40.1529 123.108 39.9144 121.601 40.0254Z\",\n fill: \"#091141\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M109.815 40.4595C109.815 40.4595 112.462 40.3255 112.598 41.6106C112.598 41.6106 112.683 42.4718 110.353 42.5232C108.023 42.5746 107.303 42.2312 107.13 41.5338C106.958 40.8363 108.557 40.4078 109.815 40.4595Z\",\n fill: \"#091141\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M114 60.2094L119.555 59.796C119.555 59.796 119.799 61.8636 116.921 61.9976C114.043 62.1316 114 60.2094 114 60.2094Z\",\n fill: \"white\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M90.8818 115.25L64.5008 95L54.758 108.855L83.5329 130.708C84.5607 131.515 85.8057 131.997 87.1091 132.093C89.3379 132.229 91.5345 131.507 93.2477 130.075C94.961 128.643 96.0612 126.609 96.3221 124.391C96.5533 122.481 96.1447 120.547 95.1604 118.893C94.1761 117.239 92.6716 115.958 90.8818 115.25Z\",\n fill: \"white\"\n})), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M114.687 130.771L124.687 130L124.381 140H115.722L114.687 130.771Z\",\n fill: \"#B46458\"\n})), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M117.5 130.5L118 132.5L119 140H93.9998C94.4998 135 101.5 130 106.5 130C110.5 130 116.5 130.333 117.5 130.5Z\",\n fill: \"#B46458\"\n})), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M161.171 122.548L122.049 123.721L121.5 140L165.5 139.5C166.852 139.318 166.1 139.641 167.236 138.886C168.372 138.13 169.322 137.126 170.012 135.949C170.703 134.773 171.117 133.454 171.223 132.094C171.328 130.734 171.123 129.368 170.623 128.098C169.879 126.261 168.55 124.72 166.84 123.717C165.131 122.713 163.138 122.302 161.171 122.548Z\",\n fill: \"#F4F6FF\"\n})), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 34.5,\n y: 0.5,\n width: 29.0625,\n height: 36,\n rx: 5.28125,\n fill: \"white\",\n stroke: \"#C8CEED\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M49.0309 11.1233V14.4454M49.0309 14.4454H42.4965C41.7302 14.4454 41.109 15.0666 41.109 15.8329V16.3619M49.0309 14.4454H55.3097C56.076 14.4454 56.6972 15.0666 56.6972 15.8329V16.3619\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.73438\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M49.0309 27.0568L49.0309 23.2622M49.0309 23.2622L42.4965 23.2622C41.7302 23.2622 41.109 22.641 41.109 21.8747L41.109 21.3456M49.0309 23.2622L55.3097 23.2622C56.076 23.2622 56.6972 22.641 56.6972 21.8747L56.6972 21.3456\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.73438\n})), _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M36.2537 18.7898C36.2537 17.3785 37.3978 16.2344 38.8091 16.2344H43.92C45.3313 16.2344 46.4754 17.3785 46.4754 18.7898C46.4754 20.2011 45.3313 21.3452 43.92 21.3452H38.8091C37.3978 21.3452 36.2537 20.2011 36.2537 18.7898Z\",\n fill: \"#FFB629\"\n})), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M51.5851 18.7898C51.5851 17.3785 52.7292 16.2344 54.1406 16.2344H59.2515C60.6628 16.2344 61.8069 17.3785 61.8069 18.7898C61.8069 20.2011 60.6628 21.3452 59.2515 21.3452H54.1406C52.7292 21.3452 51.5851 20.2011 51.5851 18.7898Z\",\n fill: \"#FFB629\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M43.9205 29.6121C43.9205 28.2008 45.0646 27.0567 46.4759 27.0567H51.5868C52.9981 27.0567 54.1422 28.2008 54.1422 29.6121C54.1422 31.0234 52.9981 32.1675 51.5868 32.1675H46.4759C45.0646 32.1675 43.9205 31.0234 43.9205 29.6121Z\",\n fill: \"#0099FF\"\n})), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 43.9206,\n y: 6.01276,\n width: 10.2218,\n height: 5.11088,\n rx: 2.55544,\n fill: \"#FF6100\"\n})), _rect3 || (_rect3 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 15.5,\n y: 40.5,\n width: 29.0625,\n height: 36,\n rx: 5.28125,\n fill: \"white\",\n stroke: \"#C8CEED\"\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M30.0309 51.1233V54.4454M30.0309 54.4454H23.4965C22.7302 54.4454 22.109 55.0666 22.109 55.8329V56.3619M30.0309 54.4454H36.3097C37.076 54.4454 37.6972 55.0666 37.6972 55.8329V56.3619\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.73438\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M30.0309 67.0568L30.0309 63.2622M30.0309 63.2622L23.4965 63.2622C22.7302 63.2622 22.109 62.641 22.109 61.8747L22.109 61.3456M30.0309 63.2622L36.3097 63.2622C37.076 63.2622 37.6972 62.641 37.6972 61.8747L37.6972 61.3456\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.73438\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.2537 58.7898C17.2537 57.3785 18.3978 56.2344 19.8091 56.2344H24.92C26.3313 56.2344 27.4754 57.3785 27.4754 58.7898C27.4754 60.2011 26.3313 61.3452 24.92 61.3452H19.8091C18.3978 61.3452 17.2537 60.2011 17.2537 58.7898Z\",\n fill: \"#FFB629\"\n})), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M32.5851 58.7898C32.5851 57.3785 33.7292 56.2344 35.1406 56.2344H40.2515C41.6628 56.2344 42.8069 57.3785 42.8069 58.7898C42.8069 60.2011 41.6628 61.3452 40.2515 61.3452H35.1406C33.7292 61.3452 32.5851 60.2011 32.5851 58.7898Z\",\n fill: \"#FFB629\"\n})), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.9205 69.6121C24.9205 68.2008 26.0646 67.0567 27.4759 67.0567H32.5868C33.9981 67.0567 35.1422 68.2008 35.1422 69.6121C35.1422 71.0234 33.9981 72.1675 32.5868 72.1675H27.4759C26.0646 72.1675 24.9205 71.0234 24.9205 69.6121Z\",\n fill: \"#0099FF\"\n})), _rect4 || (_rect4 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 24.9206,\n y: 46.0128,\n width: 10.2218,\n height: 5.11088,\n rx: 2.55544,\n fill: \"#FF6100\"\n})), _rect5 || (_rect5 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 54.5,\n y: 40.5,\n width: 29.0625,\n height: 36,\n rx: 5.28125,\n fill: \"white\",\n stroke: \"#C8CEED\"\n})), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.0309 51.1233V54.4454M69.0309 54.4454H62.4965C61.7302 54.4454 61.109 55.0666 61.109 55.8329V56.3619M69.0309 54.4454H75.3097C76.076 54.4454 76.6972 55.0666 76.6972 55.8329V56.3619\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.73438\n})), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.0309 67.0568L69.0309 63.2622M69.0309 63.2622L62.4965 63.2622C61.7302 63.2622 61.109 62.641 61.109 61.8747L61.109 61.3456M69.0309 63.2622L75.3097 63.2622C76.076 63.2622 76.6972 62.641 76.6972 61.8747L76.6972 61.3456\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.73438\n})), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56.2537 58.7898C56.2537 57.3785 57.3978 56.2344 58.8091 56.2344H63.92C65.3313 56.2344 66.4754 57.3785 66.4754 58.7898C66.4754 60.2011 65.3313 61.3452 63.92 61.3452H58.8091C57.3978 61.3452 56.2537 60.2011 56.2537 58.7898Z\",\n fill: \"#FFB629\"\n})), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M71.5851 58.7898C71.5851 57.3785 72.7292 56.2344 74.1406 56.2344H79.2515C80.6628 56.2344 81.8069 57.3785 81.8069 58.7898C81.8069 60.2011 80.6628 61.3452 79.2515 61.3452H74.1406C72.7292 61.3452 71.5851 60.2011 71.5851 58.7898Z\",\n fill: \"#FFB629\"\n})), _path35 || (_path35 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.9205 69.6121C63.9205 68.2008 65.0646 67.0567 66.4759 67.0567H71.5868C72.9981 67.0567 74.1422 68.2008 74.1422 69.6121C74.1422 71.0234 72.9981 72.1675 71.5868 72.1675H66.4759C65.0646 72.1675 63.9205 71.0234 63.9205 69.6121Z\",\n fill: \"#0099FF\"\n})), _rect6 || (_rect6 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 63.9206,\n y: 46.0128,\n width: 10.2218,\n height: 5.11088,\n rx: 2.55544,\n fill: \"#FF6100\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear_2531_7001\",\n x1: 93.4997,\n y1: 116.5,\n x2: 153.138,\n y2: 49.5441,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"white\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#A1A9EE\"\n})), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint1_linear_2531_7001\",\n x1: 170.498,\n y1: 138.397,\n x2: 150.836,\n y2: 80.3324,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.307292,\n stopColor: \"#F4F6FF\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"white\"\n})))));\nexport default SvgNoApprovalsIcon;","var _path, _g, _g2, _g3, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _g4, _path9, _path10, _path11, _path12, _g5, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _g6, _path20, _path21, _path22, _path23, _g7, _path24, _path25, _path26, _path27, _path28, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoSignDocumentsIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 199 145\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.284 102.074c0-23.195 19.167-42 42.81-42h112.379c23.644 0 42.811 18.805 42.811 42 0 23.196-19.167 42-42.811 42H43.095c-23.644 0-42.811-18.804-42.811-42Z\",\n fill: \"#E6E6F5\"\n})), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M38.964 35.597V9.019a4.983 4.983 0 0 1 4.984-4.983h16.267a.83.83 0 0 1 .587.243l3.91 3.91 3.909 3.909a.83.83 0 0 1 .243.587v22.912a4.983 4.983 0 0 1-4.983 4.983H43.948a4.983 4.983 0 0 1-4.984-4.983Z\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.778 19.218c0-1.046.848-1.893 1.894-1.893h14.485a1.894 1.894 0 0 1 0 3.787H46.672a1.894 1.894 0 0 1-1.894-1.894Z\",\n fill: \"#09F\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.778 25.73c0-1.046.848-1.894 1.894-1.894h14.485a1.894 1.894 0 0 1 0 3.787H46.672a1.894 1.894 0 0 1-1.894-1.893Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M49.44 32.443c0-.122-.047-.098-.116-.096-.093.002-1.836 1.086-1.836 1.086s-.762.328-.967.494c-1.192 1.15-1.592.166-1.662 0-.236-.56.079-1.068.47-1.484.203-.164 1.191-1.008 2.253-1.514.547-.26 1.016-.543 1.65-.557.25-.025.977-.098 1.44.233.346.245.378 1.144.448 1.306.129.303.228.372.228.954 0 .284-.534 1.22-.673 1.884.067-.038.567-.202.867-.3.435-.142.687-.12 1.125-.327l.342-.162c1.737-.824 4.308-1.694 5.061-1.914.22-.064 1.18-.176 1.74.22.516.366.78 1.422.78 1.422s.05.239.705 0v1.517c-.362-.109-.638-.123-.853-.281-.467-.492-.744-1.227-.964-1.163-1.481.434-2.16.996-5.484 2.143-.662.228-1.142.596-1.66.68-.725.12-1.273.24-1.85.183-.41-.041-.574-.145-.831-.396-.346-.339-.282-.702-.42-1.166-.148-.491-.32-.772-.304-1.278.015-.423.303-1.062.303-1.062s.209-.3.209-.422Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M38.964 9.019a4.983 4.983 0 0 1 4.984-4.983h17.441a.83.83 0 0 1 .588.243l6.644 6.644a.83.83 0 0 1 .243.588v24.086a4.983 4.983 0 0 1-4.983 4.983H43.948a4.983 4.983 0 0 1-4.984-4.983V9.019Zm4.984-3.322a3.322 3.322 0 0 0-3.322 3.322v26.578a3.322 3.322 0 0 0 3.322 3.322H63.88a3.322 3.322 0 0 0 3.322-3.322V12.34H63.05A2.492 2.492 0 0 1 60.56 9.85V5.697H43.948Z\",\n fill: \"#C8CEED\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M71.934 23.239a1.387 1.387 0 0 0-1.962 0l-3.55 3.55-4.532 4.532-.745 2.98a.694.694 0 0 0 .84.841l2.98-.745 4.532-4.531 3.551-3.551a1.387 1.387 0 0 0 0-1.962l-1.114-1.114Z\",\n fill: \"#0A1551\"\n}))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#b)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.03 75.463V48.886a4.983 4.983 0 0 1 4.984-4.984h16.267a.83.83 0 0 1 .588.244l3.91 3.91 3.909 3.909a.83.83 0 0 1 .243.587v22.911a4.983 4.983 0 0 1-4.983 4.984H24.014a4.983 4.983 0 0 1-4.983-4.984Z\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.845 59.085c0-1.046.848-1.894 1.893-1.894h14.485a1.894 1.894 0 1 1 0 3.787H26.738a1.894 1.894 0 0 1-1.893-1.893Z\",\n fill: \"#09F\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.845 65.596c0-1.046.848-1.893 1.893-1.893h14.485a1.894 1.894 0 1 1 0 3.787H26.738a1.894 1.894 0 0 1-1.893-1.894Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M29.507 72.31c0-.123-.047-.098-.117-.096-.093.002-1.835 1.086-1.835 1.086s-.762.328-.968.494c-1.191 1.15-1.59.166-1.66 0-.237-.56.078-1.068.469-1.485.203-.164 1.19-1.007 2.253-1.513.546-.26 1.016-.543 1.65-.557.249-.025.976-.098 1.44.232.345.245.378 1.144.447 1.307.13.302.228.372.228.954 0 .284-.534 1.22-.673 1.884.068-.038.567-.202.868-.3.435-.142.686-.12 1.125-.327l.341-.162c1.738-.825 4.309-1.694 5.062-1.914.22-.065 1.18-.176 1.739.22.517.366.781 1.421.781 1.421s.05.24.705 0v1.518c-.362-.109-.638-.124-.853-.282-.467-.491-.745-1.227-.964-1.162-1.481.434-2.16.996-5.484 2.142-.663.229-1.143.597-1.66.681-.726.12-1.274.24-1.85.183-.41-.041-.574-.145-.831-.397-.346-.338-.282-.701-.421-1.165-.147-.492-.32-.772-.303-1.278.014-.424.303-1.062.303-1.062s.208-.3.208-.423Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M19.031 48.886a4.983 4.983 0 0 1 4.983-4.984h17.442a.83.83 0 0 1 .587.244l6.645 6.644a.83.83 0 0 1 .243.587v24.086a4.983 4.983 0 0 1-4.983 4.984H24.014a4.983 4.983 0 0 1-4.983-4.984V48.886Zm4.983-3.323a3.322 3.322 0 0 0-3.322 3.323v26.577a3.322 3.322 0 0 0 3.322 3.323h19.934a3.322 3.322 0 0 0 3.322-3.323V52.209h-4.153a2.492 2.492 0 0 1-2.492-2.492v-4.153h-16.61Z\",\n fill: \"#C8CEED\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M52 63.105a1.387 1.387 0 0 0-1.961 0l-3.551 3.551-4.532 4.532-.745 2.98a.693.693 0 0 0 .841.84l2.98-.744 4.532-4.532 3.55-3.55a1.387 1.387 0 0 0 0-1.962L52 63.106Z\",\n fill: \"#0A1551\"\n}))), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#c)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M58.898 75.463V48.886a4.983 4.983 0 0 1 4.983-4.984h16.267a.83.83 0 0 1 .587.244l3.91 3.91 3.91 3.909a.83.83 0 0 1 .243.587v22.911a4.983 4.983 0 0 1-4.984 4.984H63.881a4.983 4.983 0 0 1-4.983-4.984Z\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M64.711 59.085c0-1.046.848-1.894 1.894-1.894H81.09a1.894 1.894 0 1 1 0 3.787H66.605a1.894 1.894 0 0 1-1.894-1.893Z\",\n fill: \"#09F\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M64.711 65.596c0-1.046.848-1.893 1.894-1.893H81.09a1.894 1.894 0 1 1 0 3.787H66.605a1.894 1.894 0 0 1-1.894-1.894Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.374 72.31c0-.123-.047-.098-.117-.096-.093.002-1.836 1.086-1.836 1.086s-.762.328-.967.494c-1.191 1.15-1.591.166-1.661 0-.236-.56.078-1.068.47-1.485.203-.164 1.19-1.007 2.252-1.513.547-.26 1.017-.543 1.65-.557.25-.025.977-.098 1.441.232.345.245.378 1.144.447 1.307.13.302.228.372.228.954 0 .284-.534 1.22-.673 1.884.068-.038.567-.202.868-.3.435-.142.686-.12 1.124-.327l.342-.162c1.737-.825 4.309-1.694 5.061-1.914.221-.065 1.181-.176 1.74.22.516.366.78 1.421.78 1.421s.05.24.705 0v1.518c-.361-.109-.637-.124-.852-.282-.467-.491-.745-1.227-.964-1.162-1.482.434-2.161.996-5.484 2.142-.663.229-1.143.597-1.66.681-.726.12-1.274.24-1.85.183-.41-.041-.575-.145-.832-.397-.346-.338-.281-.701-.42-1.165-.148-.492-.32-.772-.303-1.278.014-.424.303-1.062.303-1.062s.208-.3.208-.423Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M58.898 48.886a4.983 4.983 0 0 1 4.983-4.984h17.442a.83.83 0 0 1 .587.244l6.644 6.644a.83.83 0 0 1 .244.587v24.086a4.983 4.983 0 0 1-4.984 4.984H63.881a4.983 4.983 0 0 1-4.983-4.984V48.886Zm4.983-3.323a3.322 3.322 0 0 0-3.322 3.323v26.577a3.322 3.322 0 0 0 3.322 3.323h19.933a3.322 3.322 0 0 0 3.323-3.323V52.209h-4.153a2.492 2.492 0 0 1-2.492-2.492v-4.153H63.881Z\",\n fill: \"#C8CEED\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M91.867 63.105a1.387 1.387 0 0 0-1.961 0l-3.551 3.551-4.532 4.532-.745 2.98a.693.693 0 0 0 .841.84l2.98-.744 4.531-4.532 3.551-3.55a1.387 1.387 0 0 0 0-1.962l-1.114-1.114Z\",\n fill: \"#0A1551\"\n}))), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"d\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 0,\n y: 58,\n width: 199,\n height: 86\n}, _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.284 101.135c0-23.632 19.158-42.79 42.79-42.79H155.4c23.632 0 42.79 19.158 42.79 42.79 0 23.633-19.158 42.791-42.79 42.791H43.074c-23.632 0-42.79-19.158-42.79-42.791Z\",\n fill: \"#F3F3FE\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#d)\"\n}, _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M115.62 81.621C107.186 92.26 100.284 99.12 94.915 102.2c-8.054 4.623-8.643-.235-38.14-20.744-2.052-.862-3.715-1.091-6.495 2-1.662 1.848-5.236 2.334-10.721 1.459a1.014 1.014 0 0 0-1.16.836c-.045.274.025.553.193.773 1.35 1.769 3.686 2.733 7.009 2.893 6.592.317 7.3-2.157 11.01.758 3.709 2.914 23.583 26.213 35.57 26.791 11.985.579 27.733-17.227 32.188-18.599 2.97-.915 5.393-8.141 7.268-21.679l-16.017 4.933Z\",\n fill: \"#CD7448\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M59.239 93.755c3.27-3.123 5.253-5.846 5.949-8.171 14.628 10.93 22.907 16.095 24.837 15.496 2.647-.82 24.004-20.018 31.425-24.56.673-.672.721 5.077 1.257 4.458l-2.407 22.315c-8.667 6.202-14.189 10.023-16.566 11.462-3.565 2.16-12.921 6.116-21.371-.754-5.633-4.58-13.341-11.329-23.124-20.246Z\",\n fill: \"#F4F5FE\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.922 118.248c1.348 4.697 1.348 10.59 0 21.326l49.541-7.234-3.033-40.263c-2.022-6.71-4.381-11.408-7.077-14.093-4.045-4.026-25.277-2.013-30.332 0-5.055 2.014-6.066 11.073-11.121 19.126-5.056 8.052 0 14.092 2.022 21.138Z\",\n fill: \"#fff\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M142.265 75.853c-2.023 16.47-7.705 24.705-17.047 24.705-14.014 0-10.728-7.372-8.973-10.829 1.169-2.304 2.456-6.406 3.859-12.304 4.821-1.539 8.501-2.398 11.039-2.578 2.538-.18 6.245.155 11.122 1.006Z\",\n fill: \"#CD7448\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"e\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 51,\n y: 3,\n width: 110,\n height: 93\n}, _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M51.572 3.074h109.353v92.713H51.572V3.074Z\",\n fill: \"#C4C4C4\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#e)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"f\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 106,\n y: 75,\n width: 59,\n height: 92\n}, _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.921 142.24c1.348-10.737 1.348-19.295 0-23.992-2.022-7.046-7.077-13.086-2.022-21.138 5.055-8.053 6.066-17.112 11.122-19.125 5.055-2.013 26.287-4.027 30.331 0 2.696 2.684 5.055 7.381 7.077 14.092l3.034 40.263c4.718 18.119 5.392 29.191 2.022 33.217-5.056 6.04-7.078-10.065-29.321-19.125-4.718-2.013-12.132-2.85-22.243-4.192Z\",\n fill: \"#fff\"\n}))), _g4 || (_g4 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#f)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.921 142.238c1.349-10.736 1.349-18.454 0-23.151-2.022-7.046-7.077-13.086-2.022-21.138 5.056-8.053 5.783-17.823 10.838-19.836 5.055-2.013 25.832-4.914 29.876-.888 2.697 2.684 5.795 8.98 7.817 15.69v13.611l3.033 26.653c4.718 18.119 5.392 29.191 2.022 33.217-5.055 6.04-7.077-10.065-29.32-19.125-4.719-2.013-12.133-3.691-22.244-5.033Z\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M142.264 75.853c-2.022 16.47-7.705 24.705-17.047 24.705-14.014 0-10.728-7.372-8.973-10.829 1.17-2.304 2.456-6.406 3.859-12.304 4.821-1.539 8.501-2.398 11.039-2.578 2.539-.18 6.246.155 11.122 1.006Z\",\n fill: \"#CD7448\"\n}))), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M114.104 37.017c-3.39 14.435-4.542 16.131-5.802 19.302a2.149 2.149 0 0 0 .438 2.293c4.8 4.955 11.22 6.503 19.261 4.644 8.566-1.98 8.525-4.956 3.217-29.137l-17.114 2.898Z\",\n fill: \"#0A1551\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M136.569 57.7c-1.661 12.972 3.905 17.523 5.814 17.555 1.91.033-5.401 8.024-19.033 20.81-4.46-8.599-4.959-16.267-3.566-18.49 2.09-3.336 4.029-.483 3.313-12.162-.471-7.671 9.73-6.942 16.997-8.187-3.525.473-9.282.592-3.525.473Z\",\n fill: \"#CD7448\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.677,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M122.596 60.225c.792 7.227.769 11.213.688 11.85-.122.953 17.282.148 12.312-15.173-4.971-15.321-6.633 1.805-13 3.323Z\",\n fill: \"#BD5826\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"g\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 113,\n y: 28,\n width: 38,\n height: 43\n}, _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M145.376 60.748c-4.575 6.114-10.956 9.468-19.143 10.065-8.313.605-13.862-10.235-12.793-21.364.511-5.31 1.687-9.997 6.363-14.826 9.65-9.969 18.717-8.652 27.2 3.949l3.662 9.772-5.289 12.404Z\",\n fill: \"#fff\"\n}))), _g5 || (_g5 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#g)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M144.251 59.875c-5.109 5.677-11.769 8.445-19.978 8.303-8.336-.143-12.887-11.435-10.817-22.42.988-5.242 2.582-9.804 7.676-14.193 10.513-9.06 19.426-6.935 26.74 6.374L150.639 48l-6.388 11.876Z\",\n fill: \"#CD7448\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.423,\n d: \"M132.055 60.09c-2.695-.417-4.642-2.252-4.348-4.1.294-1.848 2.718-3.008 5.413-2.591 2.696.416 4.642 2.252 4.348 4.1-.294 1.847-2.718 3.007-5.413 2.59Z\",\n fill: \"#A44616\"\n}))), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M125.862 59.677c-2.118.905-4.618.438-7.5-1.4 1.356 3.851 2.898 5.604 4.624 5.258 1.726-.347 2.685-1.632 2.876-3.858Z\",\n fill: \"#A5330A\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M127.222 42.163c-7.822-1.3-11.005-1.905-13.711-4.047.156-10.06 8.433-15.98 12.27-16.877 8.871-2.163 18.502.543 24.413 8.327a15.038 15.038 0 0 1 1.478 2.364c.233.374.462.792.689 1.257 3.699 10.657 5.645 26.207 4.589 31.967-2.957 3.8-26.689 4.62-23.717-.144.166-.266.351-.541.548-.835 1.396-2.08 3.387-5.045 3.369-11.71-.005-1.613-.471-3.5-.997-5.629-.177-.72-.362-1.467-.538-2.24a585.3 585.3 0 0 0-1.197-.417c-1.691-.588-2.986-1.038-3.79-1.386-.88-.381-.04-2.924.562-4.75.527-1.594.872-2.64-.265-1.224-1.466 1.826-2.026 3.254-2.301 4.374-.156.637-.755 1.077-1.402.97Z\",\n fill: \"#0A1551\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M115.449 142.435c5.328-2.997 29.268 3.735 47.508-2.946 10.001-3.664 2.348-24.999-1.821-42.89-2.639-9.902-7.007-16.464-10.989-18.892l-8.662 6.374 2.205 11.873s-1.37 4.311 1.517 12.142c2.888 7.832 7.375 17.68 7.375 17.68l-42.925 9.005c.155 3.55 1.528 10.051 5.792 7.654Z\",\n fill: \"#fff\"\n}))), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M121.161 140.978c-2.093 1.666-3.098 1.719-5.599 3.641-2.013.964-3.499 1.378-7.866.074-2.619-.782-6.321-.982-11.104-.601a1.007 1.007 0 0 1-.948-1.515c1.216-2.045 3.583-3.241 7.103-3.591 6.58-.652 7.399 1.778 10.978-1.318 2.386-2.064 4.865-.961 7.436 3.31Z\",\n fill: \"#CD7448\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M117.167 144.445c10.617-.871 29.269 3.735 47.509-2.946 10.001-3.664 2.348-24.999-1.822-42.89-2.638-9.902-7.006-16.464-10.989-18.892l-8.662 6.374 2.206 11.873s-1.371 4.311 1.517 12.142c2.887 7.832 7.374 17.68 7.374 17.68l-42.924 9.005c.154 3.55-1.092 7.283 5.791 7.654Z\",\n fill: \"url(#h)\"\n}))), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"i\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 96,\n y: 18,\n width: 65,\n height: 79\n}, _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M96.284 18.075h64v78h-64v-78Z\",\n fill: \"#C4C4C4\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#i)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"j\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 106,\n y: 75,\n width: 59,\n height: 92\n}, _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.633 142.24c1.348-10.737 1.348-19.295 0-23.992-2.022-7.046-7.078-13.086-2.022-21.138 5.055-8.053 6.066-17.112 11.121-19.125 5.055-2.013 26.287-4.027 30.332 0 2.696 2.684 5.055 7.381 7.077 14.092l3.033 40.263c4.718 18.119 5.392 29.191 2.022 33.217-5.055 6.04-7.077-10.065-29.32-19.125-4.719-2.013-12.133-2.85-22.243-4.192Z\",\n fill: \"#fff\"\n}))), _g6 || (_g6 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#j)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.633 142.238c1.348-10.736 1.348-18.454 0-23.151-2.022-7.046-7.077-13.086-2.022-21.138 5.055-8.053 5.782-17.823 10.837-19.836 5.056-2.013 25.833-4.914 29.877-.888 2.696 2.684 5.794 8.98 7.816 15.69v13.611l3.033 26.653c4.718 18.119 5.393 29.191 2.022 33.217-5.055 6.04-7.077-10.065-29.32-19.125-4.718-2.013-12.133-3.691-22.243-5.033Z\",\n fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M141.975 75.853c-2.022 16.47-7.704 24.705-17.047 24.705-14.013 0-10.728-7.372-8.973-10.829 1.17-2.304 2.456-6.406 3.859-12.304 4.822-1.539 8.501-2.398 11.04-2.578 2.538-.18 6.245.155 11.121 1.006Z\",\n fill: \"#CD7448\"\n}))), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M113.815 37.017c-3.39 14.435-4.541 16.131-5.802 19.302a2.15 2.15 0 0 0 .438 2.293c4.8 4.955 11.221 6.503 19.262 4.644 8.565-1.98 8.525-4.956 3.216-29.137l-17.114 2.898Z\",\n fill: \"#0A1551\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M136.28 57.7c-1.66 12.972 3.905 17.523 5.815 17.555 1.909.033-5.402 8.024-19.033 20.81-4.461-8.599-4.96-16.267-3.567-18.49 2.09-3.336 4.029-.483 3.313-12.162-.47-7.671 9.731-6.942 16.998-8.187-3.526.473-9.282.592-3.526.473Z\",\n fill: \"#CD7448\"\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.677,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M122.308 60.225c.792 7.227.769 11.213.687 11.85-.122.953 17.282.148 12.312-15.173-4.97-15.321-6.632 1.805-12.999 3.323Z\",\n fill: \"#BD5826\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"k\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 113,\n y: 28,\n width: 38,\n height: 43\n}, _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M145.088 60.748c-4.576 6.114-10.957 9.468-19.143 10.065-8.314.605-13.863-10.235-12.793-21.364.51-5.31 1.686-9.997 6.362-14.826 9.651-9.969 18.717-8.652 27.2 3.949l3.662 9.772-5.288 12.404Z\",\n fill: \"#fff\"\n}))), _g7 || (_g7 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#k)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M143.963 59.875c-5.11 5.677-11.769 8.445-19.978 8.303-8.337-.143-12.887-11.435-10.817-22.42.987-5.242 2.582-9.804 7.675-14.193 10.513-9.06 19.427-6.935 26.74 6.374L150.35 48l-6.387 11.876Z\",\n fill: \"#CD7448\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M129.189 44.53c1.203.587 2.055 1.53 2.483 2.24a.594.594 0 1 1-1.017.613c-.329-.544-1.02-1.313-1.987-1.785-.945-.462-2.165-.649-3.626-.044a.595.595 0 0 1-.456-1.098c1.802-.746 3.379-.525 4.603.074ZM117.728 42.555a3.335 3.335 0 0 0-2.266.715.594.594 0 1 0 .746.927c.318-.256.829-.49 1.455-.455.615.034 1.415.33 2.313 1.268a.594.594 0 1 0 .858-.821c-1.063-1.11-2.133-1.58-3.106-1.634Z\",\n fill: \"#37120C\",\n fillOpacity: 0.25\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.423,\n d: \"M131.766 60.09c-2.695-.417-4.641-2.252-4.347-4.1.294-1.848 2.717-3.008 5.413-2.591 2.695.416 4.642 2.252 4.347 4.1-.294 1.847-2.717 3.007-5.413 2.59ZM110.248 55.63c-2.648-.673-4.48-2.7-4.092-4.53.388-1.828 2.848-2.765 5.496-2.093 2.648.673 4.48 2.7 4.092 4.53-.388 1.828-2.848 2.766-5.496 2.093Z\",\n fill: \"#A44616\"\n}))), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M125.574 59.677c-2.119.905-4.619.438-7.501-1.4 1.357 3.851 2.898 5.604 4.624 5.258 1.726-.347 2.685-1.632 2.877-3.858Z\",\n fill: \"#A5330A\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M126.583 50.275c-.558-.01-1-.68-.987-1.499.013-.818.476-1.474 1.034-1.464.558.01 1 .68.987 1.499-.013.818-.475 1.473-1.034 1.464ZM117.984 48.723c-.558-.01-1-.68-.987-1.498.013-.818.475-1.474 1.033-1.465.558.01 1 .68.987 1.499-.013.818-.475 1.474-1.033 1.464Z\",\n fill: \"#321907\"\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M122.999 47.67a.358.358 0 0 0-.5.071c-.982 1.304-1.621 1.939-2.222 2.378-.302.22-.601.397-.943.587l-.291.16c-.267.145-.562.306-.891.5-1.157.681-1.326 2.25-.802 3.413.271.6.736 1.135 1.394 1.442.661.308 1.483.371 2.434.084a.356.356 0 1 0-.209-.681c-.809.244-1.446.175-1.923-.048a2.156 2.156 0 0 1-1.044-1.087c-.437-.971-.215-2.08.514-2.51.319-.187.599-.34.863-.484l.304-.167c.35-.195.68-.388 1.018-.635.679-.497 1.367-1.192 2.37-2.524a.356.356 0 0 0-.072-.498Z\",\n fill: \"#8A3110\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M126.933 42.163c-7.821-1.3-11.005-1.905-13.71-4.047.156-10.06 8.433-15.98 12.269-16.877 8.871-2.163 18.502.543 24.413 8.327a15.12 15.12 0 0 1 1.479 2.364c.232.374.462.792.689 1.257 3.698 10.657 5.644 26.207 4.589 31.967-2.957 3.8-26.689 4.62-23.717-.144.166-.266.351-.541.548-.835 1.396-2.08 3.387-5.045 3.368-11.71-.004-1.613-.47-3.5-.996-5.629-.178-.72-.362-1.467-.538-2.24l-1.197-.417c-1.692-.588-2.986-1.038-3.79-1.386-.88-.381-.041-2.924.562-4.75.526-1.594.872-2.64-.266-1.224-1.465 1.826-2.025 3.254-2.3 4.374-.157.637-.756 1.077-1.403.97Z\",\n fill: \"#0A1551\"\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M115.16 142.435c5.329-2.997 29.269 3.735 47.509-2.946 10-3.664 2.348-24.999-1.822-42.89-2.638-9.902-7.006-16.464-10.989-18.892l-8.662 6.374 2.206 11.873s-1.371 4.311 1.517 12.142c2.887 7.832 7.374 17.68 7.374 17.68l-42.924 9.005c.154 3.55 1.528 10.051 5.791 7.654Z\",\n fill: \"#fff\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"a\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M33.981 2.375h39.867v39.867H33.981z\"\n})), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"b\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M14.048 42.241h39.867v39.867H14.048z\"\n})), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"c\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M53.914 42.241h39.867v39.867H53.914z\"\n})), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"h\",\n x1: 152.474,\n y1: 97.578,\n x2: 150.048,\n y2: 114.588,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#F3F5FE\"\n})))));\nexport default SvgNoSignDocumentsIcon;","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _g, _path9, _path10, _path11, _path12, _g2, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _g3, _path20, _path21, _path22, _path23, _g4, _path24, _path25, _path26, _path27, _path28, _path29, _path30, _path31, _path32, _path33, _path34, _path35, _path36, _path37, _path38, _path39, _path40, _path41, _path42, _path43, _path44, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoTeamFormsIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 198 141\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 97.4367C0 73.8043 19.1578 54.6465 42.7902 54.6465H155.115C178.747 54.6465 197.905 73.8043 197.905 97.4367C197.905 121.069 178.747 140.227 155.115 140.227H42.7902C19.1578 140.227 0 121.069 0 97.4367Z\",\n fill: \"#E6E6F5\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask0_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 0,\n y: 54,\n width: 198,\n height: 87\n}, _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 97.4367C0 73.8043 19.1578 54.6465 42.7902 54.6465H155.115C178.747 54.6465 197.905 73.8043 197.905 97.4367C197.905 121.069 178.747 140.227 155.115 140.227H42.7902C19.1578 140.227 0 121.069 0 97.4367Z\",\n fill: \"#E6E6F5\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask0_624:16012)\"\n}, _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M115.336 77.9239C106.901 88.5617 99.9998 95.4214 94.6306 98.5029C86.5769 103.125 85.9877 98.2682 56.4901 77.7583C54.439 76.8969 52.7754 76.6674 49.9956 79.7585C48.3335 81.6069 44.7598 82.0931 39.2746 81.2173L39.2746 81.2173C38.7245 81.1295 38.2053 81.504 38.115 82.0539C38.0701 82.3274 38.1397 82.6067 38.3074 82.8265C39.6577 84.5955 41.994 85.5598 45.3164 85.7196C51.9089 86.0364 52.6163 83.5632 56.326 86.4774C60.0356 89.3916 79.9102 112.691 91.8962 113.269C103.882 113.848 119.63 96.0418 124.085 94.6697C127.055 93.7549 129.477 86.5287 131.353 72.9909L115.336 77.9239Z\",\n fill: \"#CD7448\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M58.9543 90.0563C62.224 86.9336 64.2069 84.21 64.903 81.8853C79.5311 92.8149 87.8103 97.9805 89.7407 97.382C92.3874 96.5614 113.744 77.3633 121.165 72.8215C121.839 72.149 121.886 77.8987 122.422 77.2795L120.015 99.5943C111.348 105.796 105.826 109.617 103.45 111.057C99.8843 113.217 90.5281 117.172 82.0782 110.302C76.4449 105.722 68.7369 98.9735 58.9543 90.0563Z\",\n fill: \"#F4F5FE\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.638 114.549C111.986 119.246 111.986 125.139 110.638 135.875L160.179 128.641L157.146 88.3777C155.124 81.6671 152.765 76.9698 150.069 74.2855C146.025 70.2592 124.793 72.2724 119.737 74.2855C114.682 76.2987 113.671 85.3579 108.616 93.4106C103.561 101.463 108.616 107.503 110.638 114.549Z\",\n fill: \"white\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M141.981 72.1544C139.959 88.6243 134.277 96.8593 124.934 96.8593C110.92 96.8593 114.206 89.4872 115.961 86.0305C117.131 83.726 118.417 79.6245 119.82 73.7258C124.641 72.1872 128.321 71.3278 130.86 71.1478C133.398 70.9679 137.105 71.3034 141.981 72.1544Z\",\n fill: \"#CD7448\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask1_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 51,\n y: -1,\n width: 110,\n height: 94\n}, _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M51.2891 -0.625H160.642V92.0872H51.2891V-0.625Z\",\n fill: \"#C4C4C4\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask1_624:16012)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask2_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 106,\n y: 71,\n width: 59,\n height: 93\n}, _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.638 138.541C111.986 127.804 111.986 119.246 110.638 114.549C108.616 107.503 103.561 101.463 108.616 93.4106C113.671 85.3579 114.682 76.2987 119.737 74.2855C124.793 72.2724 146.025 70.2592 150.069 74.2855C152.765 76.9698 155.124 81.6671 157.146 88.3777L160.179 128.641C164.898 146.759 165.572 157.832 162.201 161.858C157.146 167.898 155.124 151.792 132.881 142.733C128.163 140.72 120.748 139.883 110.638 138.541Z\",\n fill: \"white\"\n}))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask2_624:16012)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.638 138.539C111.986 127.803 111.986 120.085 110.638 115.388C108.616 108.342 103.561 102.302 108.616 94.2498C113.671 86.1972 114.398 76.4272 119.454 74.414C124.509 72.4008 145.286 69.4997 149.33 73.526C152.026 76.2102 155.124 82.5064 157.146 89.2169V102.827L160.179 129.48C164.898 147.599 165.572 158.671 162.201 162.697C157.146 168.737 155.124 152.632 132.881 143.572C128.163 141.559 120.748 139.882 110.638 138.539Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M141.981 72.1544C139.959 88.6243 134.277 96.8593 124.934 96.8593C110.92 96.8593 114.206 89.4872 115.961 86.0305C117.131 83.726 118.417 79.6245 119.82 73.7258C124.641 72.1872 128.321 71.3278 130.86 71.1478C133.398 70.9679 137.105 71.3034 141.981 72.1544Z\",\n fill: \"#CD7448\"\n}))), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M113.82 33.3166C110.43 47.7514 109.279 49.4479 108.018 52.6186C107.705 53.4047 107.867 54.3038 108.456 54.912C113.256 59.8667 119.676 61.4146 127.717 59.5556C136.283 57.5753 136.242 54.5995 130.934 30.4186L113.82 33.3166Z\",\n fill: \"#0A1551\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M136.285 53.9991C134.625 66.972 140.19 71.5228 142.1 71.5552C144.009 71.5876 136.698 79.5784 123.067 92.3643C118.606 83.7663 118.107 76.0982 119.5 73.8743C121.59 70.5386 123.529 73.3922 122.813 61.7133C122.343 54.0415 132.544 54.7707 139.81 53.5254C136.285 53.9991 130.529 54.1174 136.285 53.9991Z\",\n fill: \"#CD7448\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.677232,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M122.313 56.5259C123.105 63.7532 123.082 67.7391 123 68.3752C122.878 69.3293 140.282 68.5234 135.312 53.2024C130.342 37.8815 128.68 55.0076 122.313 56.5259Z\",\n fill: \"#BD5826\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask3_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 113,\n y: 24,\n width: 38,\n height: 44\n}, _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M145.092 57.0491C140.516 63.1625 134.135 66.5174 125.949 67.1136C117.636 67.7191 112.086 56.8794 113.156 45.7503C113.667 40.4403 114.843 35.7532 119.518 30.9235C129.169 20.9553 138.236 22.2718 146.718 34.8728L150.38 44.6449L145.092 57.0491Z\",\n fill: \"white\"\n}))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask3_624:16012)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M143.966 56.1764C138.857 61.8531 132.197 64.6207 123.988 64.4795C115.652 64.336 111.101 53.0441 113.171 42.0585C114.159 36.8169 115.753 32.2554 120.847 27.866C131.36 18.8066 140.273 20.9315 147.587 34.2405L150.353 44.2998L143.966 56.1764Z\",\n fill: \"#CD7448\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.422879,\n d: \"M131.771 56.3898C129.076 55.9732 127.129 54.1378 127.423 52.2901C127.718 50.4425 130.141 49.2824 132.836 49.6989C135.532 50.1155 137.478 51.9509 137.184 53.7985C136.89 55.6462 134.466 56.8063 131.771 56.3898Z\",\n fill: \"#A44616\"\n}))), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M125.579 55.9777C123.46 56.8827 120.96 56.4158 118.079 54.5768C119.435 58.4286 120.976 60.1813 122.702 59.8349C124.428 59.4886 125.387 58.2028 125.579 55.9777Z\",\n fill: \"#A5330A\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M126.938 38.462C119.116 37.1633 115.933 36.5576 113.227 34.4149C113.384 24.3556 121.661 18.4345 125.497 17.5383C134.368 15.3748 143.999 18.0813 149.91 25.865C150.496 26.6367 150.986 27.4266 151.389 28.2296C151.621 28.6034 151.85 29.0216 152.077 29.4864C155.776 40.1435 157.722 55.6928 156.667 61.4529C153.71 65.2542 129.978 66.0739 132.95 61.3098C133.116 61.0439 133.301 60.7682 133.498 60.4748C134.894 58.3952 136.885 55.4288 136.866 48.7651C136.862 47.1514 136.396 45.2638 135.87 43.1353C135.692 42.4157 135.507 41.6685 135.332 40.8951C134.913 40.7489 134.514 40.6101 134.135 40.4782C132.443 39.8904 131.149 39.4404 130.345 39.0921C129.465 38.7109 130.304 36.1681 130.907 34.3427C131.433 32.7486 131.778 31.7015 130.641 33.1186C129.176 34.9439 128.616 36.3723 128.341 37.492C128.184 38.1288 127.585 38.5694 126.938 38.462Z\",\n fill: \"#0A1551\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M115.165 138.735C120.494 135.738 144.433 142.471 162.674 135.789C172.674 132.126 165.022 110.79 160.852 92.8997C158.213 82.9975 153.845 76.4349 149.863 74.0075L141.201 80.3815L143.406 92.2543C143.406 92.2543 142.036 96.5649 144.923 104.397C147.811 112.229 152.298 122.076 152.298 122.076L109.373 131.081C109.528 134.632 110.902 141.133 115.165 138.735Z\",\n fill: \"white\"\n}))), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M120.877 137.279C118.784 138.945 117.779 138.998 115.278 140.92C113.265 141.884 111.779 142.298 107.412 140.994C104.792 140.212 101.091 140.012 96.3082 140.393L96.3082 140.393C95.7516 140.438 95.2652 140.024 95.2217 139.47C95.2055 139.263 95.2538 139.057 95.3599 138.878C96.5754 136.833 98.9431 135.637 102.463 135.287C109.043 134.635 109.862 137.065 113.441 133.969C115.827 131.905 118.306 133.008 120.877 137.279Z\",\n fill: \"#CD7448\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M116.883 140.747C127.5 139.876 146.152 144.482 164.392 137.801C174.393 134.137 166.74 112.802 162.57 94.9114C159.932 85.0092 155.564 78.4466 151.582 76.0192L142.92 82.3932L145.125 94.266C145.125 94.266 143.755 98.5766 146.642 106.408C149.529 114.24 154.017 124.088 154.017 124.088L111.092 133.093C111.246 136.643 110 140.376 116.883 140.747Z\",\n fill: \"url(#paint0_linear_624:16012)\"\n}))), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask4_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 96,\n y: 14,\n width: 64,\n height: 79\n}, _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M96 14.375H160V92.375H96V14.375Z\",\n fill: \"#C4C4C4\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask4_624:16012)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask5_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 106,\n y: 71,\n width: 59,\n height: 93\n}, _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.349 138.541C111.697 127.804 111.697 119.246 110.349 114.549C108.327 107.503 103.272 101.463 108.327 93.4106C113.382 85.3579 114.393 76.2987 119.448 74.2855C124.504 72.2724 145.736 70.2592 149.78 74.2855C152.476 76.9698 154.835 81.6671 156.857 88.3777L159.89 128.641C164.609 146.759 165.283 157.832 161.912 161.858C156.857 167.898 154.835 151.792 132.592 142.733C127.874 140.72 120.459 139.883 110.349 138.541Z\",\n fill: \"white\"\n}))), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask5_624:16012)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M110.349 138.539C111.697 127.803 111.697 120.085 110.349 115.388C108.327 108.342 103.272 102.302 108.327 94.2498C113.382 86.1972 114.109 76.4272 119.165 74.414C124.22 72.4008 144.997 69.4997 149.041 73.526C151.737 76.2102 154.835 82.5064 156.857 89.2169V102.827L159.89 129.48C164.609 147.599 165.283 158.671 161.912 162.697C156.857 168.737 154.835 152.632 132.592 143.572C127.874 141.559 120.459 139.882 110.349 138.539Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M141.692 72.1544C139.67 88.6243 133.988 96.8593 124.645 96.8593C110.631 96.8593 113.917 89.4872 115.672 86.0305C116.842 83.726 118.128 79.6245 119.531 73.7258C124.352 72.1872 128.032 71.3278 130.571 71.1478C133.109 70.9679 136.816 71.3034 141.692 72.1544Z\",\n fill: \"#CD7448\"\n}))), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M113.531 33.3166C110.141 47.7514 108.989 49.4479 107.729 52.6186C107.416 53.4047 107.578 54.3038 108.167 54.912C112.967 59.8667 119.387 61.4146 127.428 59.5556C135.994 57.5753 135.953 54.5995 130.645 30.4186L113.531 33.3166Z\",\n fill: \"#0A1551\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M135.996 53.9991C134.335 66.972 139.901 71.5228 141.811 71.5552C143.72 71.5876 136.409 79.5784 122.778 92.3643C118.317 83.7663 117.818 76.0982 119.211 73.8743C121.301 70.5386 123.24 73.3922 122.524 61.7133C122.054 54.0415 132.255 54.7707 139.521 53.5254C135.996 53.9991 130.24 54.1174 135.996 53.9991Z\",\n fill: \"#CD7448\"\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.677232,\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M122.024 56.5259C122.816 63.7532 122.793 67.7391 122.711 68.3752C122.589 69.3293 139.993 68.5234 135.023 53.2024C130.053 37.8815 128.391 55.0076 122.024 56.5259Z\",\n fill: \"#BD5826\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask6_624:16012\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 112,\n y: 24,\n width: 39,\n height: 44\n}, _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M144.803 57.0491C140.227 63.1625 133.846 66.5174 125.66 67.1136C117.347 67.7191 111.797 56.8794 112.867 45.7503C113.377 40.4403 114.553 35.7532 119.229 30.9235C128.88 20.9553 137.947 22.2718 146.429 34.8728L150.091 44.6449L144.803 57.0491Z\",\n fill: \"white\"\n}))), _g4 || (_g4 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask6_624:16012)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M143.677 56.1764C138.567 61.8531 131.908 64.6207 123.699 64.4795C115.363 64.336 110.812 53.0441 112.882 42.0585C113.87 36.8169 115.464 32.2554 120.558 27.866C131.071 18.8066 139.984 20.9315 147.298 34.2405L150.064 44.2998L143.677 56.1764Z\",\n fill: \"#CD7448\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M128.904 40.8301C130.107 41.4177 130.959 42.3601 131.387 43.0696C131.557 43.3507 131.466 43.716 131.185 43.8855C130.905 44.0549 130.539 43.9644 130.37 43.6833C130.041 43.1393 129.35 42.3705 128.383 41.8981C127.438 41.4364 126.218 41.2495 124.756 41.8547C124.453 41.9803 124.106 41.8362 123.98 41.5329C123.854 41.2296 123.998 40.882 124.301 40.7564C126.103 40.01 127.679 40.2318 128.904 40.8301Z\",\n fill: \"#37120C\",\n fillOpacity: 0.25\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M117.443 38.8566C116.482 38.8034 115.689 39.1609 115.177 39.5723C114.922 39.778 114.882 40.152 115.088 40.4078C115.294 40.6636 115.668 40.7042 115.923 40.4985C116.242 40.2424 116.753 40.0088 117.379 40.0434C117.994 40.0774 118.794 40.3744 119.692 41.3119C119.919 41.5491 120.295 41.5576 120.532 41.3308C120.769 41.104 120.777 40.7278 120.55 40.4905C119.487 39.38 118.416 38.9104 117.443 38.8566Z\",\n fill: \"#37120C\",\n fillOpacity: 0.25\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.422879,\n d: \"M131.482 56.3898C128.787 55.9732 126.84 54.1378 127.134 52.2901C127.428 50.4425 129.852 49.2824 132.547 49.6989C135.243 50.1155 137.189 51.9509 136.895 53.7985C136.601 55.6462 134.177 56.8063 131.482 56.3898Z\",\n fill: \"#A44616\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.422879,\n d: \"M109.964 51.9299C107.316 51.2573 105.484 49.2294 105.872 47.4007C106.26 45.5719 108.72 44.6347 111.368 45.3074C114.016 45.9801 115.848 48.0079 115.46 49.8367C115.072 51.6654 112.612 52.6026 109.964 51.9299Z\",\n fill: \"#A44616\"\n}))), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M125.29 55.9777C123.171 56.8827 120.671 56.4158 117.79 54.5768C119.146 58.4286 120.687 60.1813 122.413 59.8349C124.139 59.4886 125.098 58.2028 125.29 55.9777Z\",\n fill: \"#A5330A\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M126.298 46.5747C125.74 46.5652 125.298 45.8942 125.311 45.0761C125.324 44.2579 125.787 43.6023 126.345 43.6118C126.903 43.6212 127.345 44.2922 127.332 45.1104C127.319 45.9285 126.856 46.5841 126.298 46.5747Z\",\n fill: \"#321907\"\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M117.699 45.0239C117.141 45.0144 116.699 44.3435 116.712 43.5253C116.725 42.7071 117.187 42.0515 117.745 42.061C118.303 42.0704 118.745 42.7414 118.732 43.5596C118.72 44.3778 118.257 45.0334 117.699 45.0239Z\",\n fill: \"#321907\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M122.715 43.9712C122.557 43.8531 122.333 43.8846 122.215 44.0417C121.233 45.3458 120.594 45.9805 119.993 46.4194C119.691 46.6402 119.392 46.8164 119.05 47.0061C118.957 47.0578 118.86 47.1107 118.759 47.1659C118.492 47.3116 118.197 47.473 117.868 47.667C116.711 48.3477 116.542 49.9158 117.066 51.0793C117.337 51.6792 117.802 52.2141 118.46 52.5212C119.121 52.8298 119.943 52.8927 120.894 52.6054C121.082 52.5484 121.189 52.3497 121.131 52.1616C121.073 51.9735 120.874 51.8672 120.685 51.9242C119.876 52.1686 119.239 52.0996 118.762 51.8768C118.281 51.6523 117.929 51.2561 117.718 50.789C117.281 49.8185 117.503 48.7093 118.232 48.28C118.551 48.0922 118.831 47.9392 119.095 47.7951C119.198 47.7386 119.299 47.6835 119.399 47.6282C119.749 47.4336 120.079 47.2406 120.417 46.9937C121.096 46.4969 121.784 45.8014 122.787 44.4696C122.905 44.3125 122.873 44.0894 122.715 43.9712Z\",\n fill: \"#8A3110\"\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M126.649 38.462C118.827 37.1633 115.644 36.5576 112.938 34.4149C113.095 24.3556 121.372 18.4345 125.208 17.5383C134.079 15.3748 143.71 18.0813 149.621 25.865C150.207 26.6367 150.697 27.4266 151.1 28.2296C151.332 28.6034 151.561 29.0216 151.788 29.4864C155.487 40.1435 157.433 55.6928 156.378 61.4529C153.421 65.2542 129.689 66.0739 132.661 61.3098C132.827 61.0439 133.012 60.7682 133.209 60.4748C134.605 58.3952 136.596 55.4288 136.577 48.7651C136.573 47.1514 136.106 45.2638 135.581 43.1353C135.403 42.4157 135.218 41.6685 135.043 40.8951C134.624 40.7489 134.225 40.6101 133.846 40.4782C132.154 39.8904 130.859 39.4404 130.056 39.0921C129.176 38.7109 130.015 36.1681 130.618 34.3427C131.144 32.7486 131.489 31.7015 130.352 33.1186C128.887 34.9439 128.327 36.3723 128.052 37.492C127.895 38.1288 127.296 38.5694 126.649 38.462Z\",\n fill: \"#0A1551\"\n})), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M114.876 138.735C120.204 135.738 144.144 142.471 162.384 135.789C172.385 132.126 164.732 110.79 160.563 92.8997C157.924 82.9975 153.556 76.4349 149.574 74.0075L140.912 80.3815L143.117 92.2543C143.117 92.2543 141.747 96.5649 144.634 104.397C147.522 112.229 152.009 122.076 152.009 122.076L109.084 131.081C109.239 134.632 110.612 141.133 114.876 138.735Z\",\n fill: \"white\"\n}))), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M38 4.95802C38 2.42689 40.0519 0.375 42.583 0.375H64.3524C66.8835 0.375 68.9354 2.42689 68.9354 4.95802V32.4562C68.9354 34.9873 66.8835 37.0392 64.3524 37.0392H42.583C40.0519 37.0392 38 34.9873 38 32.4562V4.95802Z\",\n fill: \"white\"\n})), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M64.3524 1.52076H42.583C40.6847 1.52076 39.1458 3.05967 39.1458 4.95802V32.4562C39.1458 34.3545 40.6847 35.8934 42.583 35.8934H64.3524C66.2507 35.8934 67.7897 34.3545 67.7897 32.4562V4.95802C67.7897 3.05967 66.2507 1.52076 64.3524 1.52076ZM42.583 0.375C40.0519 0.375 38 2.42689 38 4.95802V32.4562C38 34.9873 40.0519 37.0392 42.583 37.0392H64.3524C66.8835 37.0392 68.9354 34.9873 68.9354 32.4562V4.95802C68.9354 2.42689 66.8835 0.375 64.3524 0.375H42.583Z\",\n fill: \"#C8CEED\"\n})), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.5469 12.8157C44.5469 11.7309 45.4263 10.8516 46.511 10.8516H60.9148C61.9996 10.8516 62.879 11.7309 62.879 12.8157C62.879 13.9005 61.9996 14.7799 60.9148 14.7799H46.511C45.4263 14.7799 44.5469 13.9005 44.5469 12.8157Z\",\n fill: \"#0099FF\"\n})), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.5469 19.3626C44.5469 18.2778 45.4263 17.3984 46.511 17.3984H60.9148C61.9996 17.3984 62.879 18.2778 62.879 19.3626C62.879 20.4474 61.9996 21.3267 60.9148 21.3267H46.511C45.4263 21.3267 44.5469 20.4474 44.5469 19.3626Z\",\n fill: \"#FF6100\"\n})), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.5469 25.9095C44.5469 24.8247 45.4263 23.9453 46.511 23.9453H60.9148C61.9996 23.9453 62.879 24.8247 62.879 25.9095C62.879 26.9942 61.9996 27.8736 60.9148 27.8736H46.511C45.4263 27.8736 44.5469 26.9942 44.5469 25.9095Z\",\n fill: \"#FFB629\"\n})), _path35 || (_path35 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M57.0645 44.958C57.0645 42.4269 59.1163 40.375 61.6475 40.375H83.4168C85.948 40.375 87.9999 42.4269 87.9999 44.958V72.4562C87.9999 74.9873 85.948 77.0392 83.4168 77.0392H61.6475C59.1163 77.0392 57.0645 74.9873 57.0645 72.4562V44.958Z\",\n fill: \"white\"\n})), _path36 || (_path36 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M83.4168 41.5208H61.6475C59.7491 41.5208 58.2102 43.0597 58.2102 44.958V72.4562C58.2102 74.3545 59.7491 75.8934 61.6475 75.8934H83.4168C85.3152 75.8934 86.8541 74.3545 86.8541 72.4562V44.958C86.8541 43.0597 85.3152 41.5208 83.4168 41.5208ZM61.6475 40.375C59.1163 40.375 57.0645 42.4269 57.0645 44.958V72.4562C57.0645 74.9873 59.1163 77.0392 61.6475 77.0392H83.4168C85.948 77.0392 87.9999 74.9873 87.9999 72.4562V44.958C87.9999 42.4269 85.948 40.375 83.4168 40.375H61.6475Z\",\n fill: \"#C8CEED\"\n})), _path37 || (_path37 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.6113 52.8157C63.6113 51.7309 64.4907 50.8516 65.5755 50.8516H79.9793C81.064 50.8516 81.9434 51.7309 81.9434 52.8157C81.9434 53.9005 81.064 54.7799 79.9793 54.7799H65.5755C64.4907 54.7799 63.6113 53.9005 63.6113 52.8157Z\",\n fill: \"#0099FF\"\n})), _path38 || (_path38 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.6113 59.3626C63.6113 58.2778 64.4907 57.3984 65.5755 57.3984H79.9793C81.064 57.3984 81.9434 58.2778 81.9434 59.3626C81.9434 60.4474 81.064 61.3267 79.9793 61.3267H65.5755C64.4907 61.3267 63.6113 60.4474 63.6113 59.3626Z\",\n fill: \"#FF6100\"\n})), _path39 || (_path39 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.6113 65.9095C63.6113 64.8247 64.4907 63.9453 65.5755 63.9453H79.9793C81.064 63.9453 81.9434 64.8247 81.9434 65.9095C81.9434 66.9942 81.064 67.8736 79.9793 67.8736H65.5755C64.4907 67.8736 63.6113 66.9942 63.6113 65.9095Z\",\n fill: \"#FFB629\"\n})), _path40 || (_path40 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18 44.958C18 42.4269 20.0519 40.375 22.583 40.375H44.3524C46.8835 40.375 48.9354 42.4269 48.9354 44.958V72.4562C48.9354 74.9873 46.8835 77.0392 44.3524 77.0392H22.583C20.0519 77.0392 18 74.9873 18 72.4562V44.958Z\",\n fill: \"white\"\n})), _path41 || (_path41 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M44.3524 41.5208H22.583C20.6847 41.5208 19.1458 43.0597 19.1458 44.958V72.4562C19.1458 74.3545 20.6847 75.8934 22.583 75.8934H44.3524C46.2507 75.8934 47.7897 74.3545 47.7897 72.4562V44.958C47.7897 43.0597 46.2507 41.5208 44.3524 41.5208ZM22.583 40.375C20.0519 40.375 18 42.4269 18 44.958V72.4562C18 74.9873 20.0519 77.0392 22.583 77.0392H44.3524C46.8835 77.0392 48.9354 74.9873 48.9354 72.4562V44.958C48.9354 42.4269 46.8835 40.375 44.3524 40.375H22.583Z\",\n fill: \"#C8CEED\"\n})), _path42 || (_path42 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.5469 52.8157C24.5469 51.7309 25.4263 50.8516 26.511 50.8516H40.9148C41.9996 50.8516 42.879 51.7309 42.879 52.8157C42.879 53.9005 41.9996 54.7799 40.9148 54.7799H26.511C25.4263 54.7799 24.5469 53.9005 24.5469 52.8157Z\",\n fill: \"#0099FF\"\n})), _path43 || (_path43 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.5469 59.3626C24.5469 58.2778 25.4263 57.3984 26.511 57.3984H40.9148C41.9996 57.3984 42.879 58.2778 42.879 59.3626C42.879 60.4474 41.9996 61.3267 40.9148 61.3267H26.511C25.4263 61.3267 24.5469 60.4474 24.5469 59.3626Z\",\n fill: \"#FF6100\"\n})), _path44 || (_path44 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.5469 65.9095C24.5469 64.8247 25.4263 63.9453 26.511 63.9453H40.9148C41.9996 63.9453 42.879 64.8247 42.879 65.9095C42.879 66.9942 41.9996 67.8736 40.9148 67.8736H26.511C25.4263 67.8736 24.5469 66.9942 24.5469 65.9095Z\",\n fill: \"#FFB629\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear_624:16012\",\n x1: 152.19,\n y1: 93.8799,\n x2: 149.764,\n y2: 110.89,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"white\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#F3F5FE\"\n})))));\nexport default SvgNoTeamFormsIcon;","var _rect, _path, _path2, _path3, _path4, _path5, _rect2, _path6, _path7;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoDocumentIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 106 121\"\n}, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 0.5,\n y: 15.5,\n width: 105,\n height: 105,\n rx: 52.5,\n fill: \"#DADEF3\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M28.25 90V46C28.25 41.4437 31.9436 37.75 36.5 37.75H63.4305C63.7951 37.75 64.1449 37.8949 64.4027 38.1527L70.875 44.625L77.3473 51.0973C77.6051 51.3551 77.75 51.7049 77.75 52.0695V90C77.75 94.5564 74.0563 98.25 69.5 98.25H36.5C31.9436 98.25 28.25 94.5564 28.25 90Z\",\n fill: \"white\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37.875 60.135C37.875 58.4036 39.2786 57 41.01 57H64.99C66.7214 57 68.125 58.4036 68.125 60.135C68.125 61.8664 66.7214 63.27 64.99 63.27H41.01C39.2786 63.27 37.875 61.8664 37.875 60.135Z\",\n fill: \"#0099FF\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37.875 70.7493C37.875 69.0178 39.2786 67.6143 41.01 67.6143H64.99C66.7214 67.6143 68.125 69.0178 68.125 70.7493C68.125 72.4807 66.7214 73.8843 64.99 73.8843H41.01C39.2786 73.8843 37.875 72.4807 37.875 70.7493Z\",\n fill: \"#FF6100\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37.875 81.3645C37.875 79.6331 39.2786 78.2295 41.01 78.2295H64.99C66.7214 78.2295 68.125 79.6331 68.125 81.3645C68.125 83.0959 66.7214 84.4995 64.99 84.4995H41.01C39.2786 84.4995 37.875 83.0959 37.875 81.3645Z\",\n fill: \"#FFB629\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M28.25 46C28.25 41.4437 31.9437 37.75 36.5 37.75H65.375C65.7397 37.75 66.0894 37.8949 66.3473 38.1527L77.3473 49.1527C77.6051 49.4106 77.75 49.7603 77.75 50.125V90C77.75 94.5564 74.0564 98.25 69.5 98.25H36.5C31.9437 98.25 28.25 94.5563 28.25 90V46ZM36.5 40.5C33.4624 40.5 31 42.9624 31 46V90C31 93.0376 33.4624 95.5 36.5 95.5H69.5C72.5376 95.5 75 93.0376 75 90V51.5H68.125C65.8468 51.5 64 49.6532 64 47.375V40.5H36.5Z\",\n fill: \"#C8CEED\"\n})), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 39.7285,\n y: 0.5,\n width: 27.5443,\n height: 27.5443,\n rx: 6.88608,\n fill: \"#292D3C\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M50.753 14.5792C50.753 15.2816 50.8081 15.9289 50.9183 16.5211C51.0285 17.0995 51.2144 17.5884 51.4761 17.9878C51.6827 18.3183 51.9512 18.5869 52.2817 18.7935C52.6123 18.9863 53.0186 19.0827 53.5006 19.0827C53.9964 19.0827 54.4027 18.9863 54.7194 18.7935C55.0362 18.5869 55.2978 18.3183 55.5044 17.9878C55.7799 17.5884 55.9727 17.0995 56.0829 16.5211C56.193 15.9289 56.2481 15.2816 56.2481 14.5792C56.2481 13.8768 56.193 13.2364 56.0829 12.658C55.9727 12.0658 55.7799 11.57 55.5044 11.1706C55.2978 10.8401 55.0362 10.5784 54.7194 10.3856C54.4027 10.179 53.9964 10.0757 53.5006 10.0757C53.0186 10.0757 52.6123 10.179 52.2817 10.3856C51.9512 10.5784 51.6827 10.8401 51.4761 11.1706C51.2144 11.57 51.0285 12.0658 50.9183 12.658C50.8081 13.2364 50.753 13.8768 50.753 14.5792ZM47.9022 14.5792C47.9022 13.7115 47.9848 12.8783 48.1501 12.0795C48.3154 11.267 48.6252 10.5095 49.0797 9.80714C49.5204 9.14608 50.1057 8.60897 50.8357 8.1958C51.5656 7.76887 52.4539 7.5554 53.5006 7.5554C54.5473 7.5554 55.4287 7.76887 56.1448 8.1958C56.8748 8.60897 57.4601 9.14608 57.9008 9.80714C58.3553 10.5095 58.6651 11.267 58.8304 12.0795C59.0094 12.8783 59.099 13.7115 59.099 14.5792C59.099 15.4468 59.0094 16.2869 58.8304 17.0995C58.6651 17.8983 58.3553 18.6489 57.9008 19.3512C57.4601 20.0123 56.8748 20.5563 56.1448 20.9832C55.4287 21.3964 54.5473 21.603 53.5006 21.603C52.4539 21.603 51.5656 21.3964 50.8357 20.9832C50.1057 20.5563 49.5204 20.0123 49.0797 19.3512C48.6252 18.6489 48.3154 17.8983 48.1501 17.0995C47.9848 16.2869 47.9022 15.4468 47.9022 14.5792Z\",\n fill: \"white\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M54.8395 32.8436C54.1505 33.6961 52.8509 33.6961 52.1618 32.8436L48.2826 28.0443H58.7188L54.8395 32.8436Z\",\n fill: \"#292D3C\"\n})));\nexport default SvgNoDocumentIcon;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoFormsFoundIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 108 121\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip0)\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 54.5,\n cy: 58.4492,\n r: 52.5,\n fill: \"#F3F3FE\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M61.1099 58.4224C61.1099 55.2404 63.6894 52.6609 66.8714 52.6609H94.2387C97.4207 52.6609 100 55.2404 100 58.4224V92.9916C100 96.1736 97.4207 98.7532 94.2387 98.7532H66.8714C63.6894 98.7532 61.1099 96.1736 61.1099 92.9916V58.4224Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M94.2387 54.1013H66.8714C64.4849 54.1013 62.5502 56.0359 62.5502 58.4224V92.9916C62.5502 95.3781 64.4849 97.3128 66.8714 97.3128H94.2387C96.6252 97.3128 98.5598 95.3781 98.5598 92.9916V58.4224C98.5598 56.0359 96.6252 54.1013 94.2387 54.1013ZM66.8714 52.6609C63.6894 52.6609 61.1099 55.2404 61.1099 58.4224V92.9916C61.1099 96.1736 63.6894 98.7532 66.8714 98.7532H94.2387C97.4207 98.7532 100 96.1736 100 92.9916V58.4224C100 55.2404 97.4207 52.6609 94.2387 52.6609H66.8714Z\",\n fill: \"#B1C3E9\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.3403 68.2993C69.3403 66.9356 70.4458 65.8301 71.8096 65.8301H89.9172C91.281 65.8301 92.3865 66.9356 92.3865 68.2993C92.3865 69.663 91.281 70.7685 89.9172 70.7685H71.8096C70.4458 70.7685 69.3403 69.663 69.3403 68.2993Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.3403 76.5298C69.3403 75.1661 70.4458 74.0605 71.8096 74.0605H89.9172C91.281 74.0605 92.3865 75.1661 92.3865 76.5298C92.3865 77.8935 91.281 78.999 89.9172 78.999H71.8096C70.4458 78.999 69.3403 77.8935 69.3403 76.5298Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.3403 84.7607C69.3403 83.397 70.4458 82.2915 71.8096 82.2915H89.9172C91.281 82.2915 92.3865 83.397 92.3865 84.7607C92.3865 86.1245 91.281 87.23 89.9172 87.23H71.8096C70.4458 87.23 69.3403 86.1245 69.3403 84.7607Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37.1431 8.13654C37.1431 4.95453 39.7226 2.375 42.9046 2.375H70.2719C73.4539 2.375 76.0334 4.95453 76.0334 8.13654V42.7057C76.0334 45.8878 73.4539 48.4673 70.2719 48.4673H42.9046C39.7226 48.4673 37.1431 45.8878 37.1431 42.7057V8.13654Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M70.2719 3.81538H42.9046C40.5181 3.81538 38.5835 5.75003 38.5835 8.13654V42.7057C38.5835 45.0923 40.5181 47.0269 42.9046 47.0269H70.2719C72.6584 47.0269 74.593 45.0923 74.593 42.7057V8.13654C74.593 5.75003 72.6584 3.81538 70.2719 3.81538ZM42.9046 2.375C39.7226 2.375 37.1431 4.95453 37.1431 8.13654V42.7057C37.1431 45.8878 39.7226 48.4673 42.9046 48.4673H70.2719C73.4539 48.4673 76.0334 45.8878 76.0334 42.7057V8.13654C76.0334 4.95453 73.4539 2.375 70.2719 2.375H42.9046Z\",\n fill: \"#B1C3E9\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M45.3735 18.0134C45.3735 16.6497 46.479 15.5442 47.8428 15.5442H65.9504C67.3142 15.5442 68.4197 16.6497 68.4197 18.0134C68.4197 19.3771 67.3142 20.4826 65.9504 20.4826H47.8428C46.479 20.4826 45.3735 19.3771 45.3735 18.0134Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M45.3735 26.2439C45.3735 24.8802 46.479 23.7747 47.8428 23.7747H65.9504C67.3142 23.7747 68.4197 24.8802 68.4197 26.2439C68.4197 27.6076 67.3142 28.7131 65.9504 28.7131H47.8428C46.479 28.7131 45.3735 27.6076 45.3735 26.2439Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M45.3735 34.4748C45.3735 33.1111 46.479 32.0056 47.8428 32.0056H65.9504C67.3142 32.0056 68.4197 33.1111 68.4197 34.4748C68.4197 35.8386 67.3142 36.9441 65.9504 36.9441H47.8428C46.479 36.9441 45.3735 35.8386 45.3735 34.4748Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 58.4224C12 55.2404 14.5795 52.6609 17.7615 52.6609H45.1288C48.3108 52.6609 50.8904 55.2404 50.8904 58.4224V92.9916C50.8904 96.1736 48.3108 98.7532 45.1288 98.7532H17.7615C14.5795 98.7532 12 96.1736 12 92.9916V58.4224Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M45.1288 54.1013H17.7615C15.375 54.1013 13.4404 56.0359 13.4404 58.4224V92.9916C13.4404 95.3781 15.375 97.3128 17.7615 97.3128H45.1288C47.5153 97.3128 49.45 95.3781 49.45 92.9916V58.4224C49.45 56.0359 47.5153 54.1013 45.1288 54.1013ZM17.7615 52.6609C14.5795 52.6609 12 55.2404 12 58.4224V92.9916C12 96.1736 14.5795 98.7532 17.7615 98.7532H45.1288C48.3108 98.7532 50.8904 96.1736 50.8904 92.9916V58.4224C50.8904 55.2404 48.3108 52.6609 45.1288 52.6609H17.7615Z\",\n fill: \"#B1C3E9\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.2305 68.2993C20.2305 66.9356 21.336 65.8301 22.6997 65.8301H40.8074C42.1711 65.8301 43.2766 66.9356 43.2766 68.2993C43.2766 69.663 42.1711 70.7685 40.8074 70.7685H22.6997C21.336 70.7685 20.2305 69.663 20.2305 68.2993Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.2305 76.5298C20.2305 75.1661 21.336 74.0605 22.6997 74.0605H40.8074C42.1711 74.0605 43.2766 75.1661 43.2766 76.5298C43.2766 77.8935 42.1711 78.999 40.8074 78.999H22.6997C21.336 78.999 20.2305 77.8935 20.2305 76.5298Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.2305 84.7607C20.2305 83.397 21.336 82.2915 22.6997 82.2915H40.8074C42.1711 82.2915 43.2766 83.397 43.2766 84.7607C43.2766 86.1245 42.1711 87.23 40.8074 87.23H22.6997C21.336 87.23 20.2305 86.1245 20.2305 84.7607Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.5,\n d: \"M53.4659 100.228C60.6527 99.0526 65.526 92.2739 64.3508 85.0871C63.1756 77.9003 56.3969 73.027 49.2101 74.2022C42.0233 75.3774 37.15 82.1561 38.3252 89.3429C39.5004 96.5297 46.2791 101.403 53.4659 100.228Z\",\n fill: \"url(#paint0_linear)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56.6883 100.626L59.2301 99.3097L64.5955 109.657L62.0567 110.975L56.6883 100.626Z\",\n fill: \"#0A1551\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.649 74.3221C42.1006 75.6452 40.0015 77.6942 38.6174 80.21C37.2334 82.7257 36.6265 85.5953 36.8732 88.456C37.1199 91.3168 38.2092 94.0401 40.0035 96.2818C41.7978 98.5235 44.2166 100.183 46.9539 101.05C49.6911 101.917 52.6239 101.954 55.3817 101.154C58.1395 100.355 60.5985 98.7553 62.4476 96.5585C64.2966 94.3617 65.4527 91.6659 65.7698 88.8121C66.0869 85.9583 65.5508 83.0746 64.2292 80.5255C62.4551 77.1072 59.396 74.5335 55.7247 73.3701C52.0534 72.2068 48.0705 72.549 44.6515 74.3217L44.649 74.3221ZM56.836 97.7931C54.7413 98.8817 52.371 99.3247 50.0246 99.0659C47.6782 98.807 45.461 97.8581 43.654 96.3391C41.8469 94.8201 40.531 92.7993 39.8726 90.5323C39.2142 88.2653 39.2429 85.854 39.9551 83.6033C40.6673 81.3527 42.0311 79.3638 43.8738 77.8883C45.7165 76.4128 47.9554 75.517 50.3073 75.3141C52.6593 75.1112 55.0186 75.6105 57.0867 76.7486C59.1549 77.8868 60.8391 79.6128 61.9262 81.7083C63.3813 84.516 63.6623 87.7866 62.7078 90.8016C61.7532 93.8165 59.6411 96.3293 56.8352 97.788L56.836 97.7931Z\",\n fill: \"#0A1551\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M67.435 118.328C67.1874 118.457 66.9168 118.536 66.6387 118.56C66.3605 118.585 66.0804 118.554 65.8142 118.469C65.548 118.385 65.301 118.249 65.0875 118.069C64.8739 117.889 64.6982 117.669 64.57 117.421L57.2159 103.261L60.9853 101.301L68.3419 115.461C68.4713 115.708 68.5506 115.979 68.5751 116.257C68.5995 116.536 68.5689 116.816 68.4846 117.083C68.4003 117.349 68.2641 117.597 68.084 117.81C67.9039 118.024 67.6833 118.2 67.435 118.328Z\",\n fill: \"#0A1551\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear\",\n x1: 49.2101,\n y1: 74.2022,\n x2: 53.4659,\n y2: 100.228,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#92B0EC\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#92B0EC\",\n stopOpacity: 0.51\n})), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip0\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 108,\n height: 120,\n fill: \"white\",\n transform: \"translate(0 0.375)\"\n})))));\nexport default SvgNoFormsFoundIcon;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoAppsFoundIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 108 120\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip0)\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 54.5,\n cy: 55.5,\n r: 52.5,\n fill: \"#F3F3FE\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 38.25,\n y: 3.67578,\n width: 37.5,\n height: 37.5,\n rx: 2.75,\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42 11.1758C42 9.10471 43.6789 7.42578 45.75 7.42578H68.25C70.3211 7.42578 72 9.10471 72 11.1758V33.6758C72 35.7468 70.3211 37.4258 68.25 37.4258H45.75C43.6789 37.4258 42 35.7468 42 33.6758V11.1758Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.2489 24.4626C62.9735 24.4626 62.7501 24.6861 62.7501 24.9615V27.892H59.8196C59.5442 27.892 59.3208 28.1154 59.3208 28.3908C59.3208 28.6662 59.5442 28.8896 59.8196 28.8896H62.7501V31.8201C62.7501 32.0955 62.9735 32.3189 63.2489 32.3189C63.5243 32.3189 63.7477 32.0955 63.7477 31.8201V28.8896H66.6782C66.9536 28.8896 67.177 28.6662 67.177 28.3908C67.177 28.1154 66.9536 27.892 66.6782 27.892H63.7477V24.9615C63.7477 24.6861 63.5243 24.4626 63.2489 24.4626Z\",\n fill: \"#97ACDA\",\n stroke: \"#97ACDA\",\n strokeWidth: 0.651698\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M58.3838 11.994C58.3838 11.5421 58.7502 11.1757 59.2021 11.1757H67.3857C67.8377 11.1757 68.2041 11.5421 68.2041 11.994V20.1776C68.2041 20.6296 67.8377 20.9959 67.3857 20.9959H59.2021C58.7502 20.9959 58.3838 20.6296 58.3838 20.1776V11.994Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M45.751 11.994C45.751 11.5421 46.1174 11.1757 46.5693 11.1757H54.7529C55.2049 11.1757 55.5713 11.5421 55.5713 11.994V20.1776C55.5713 20.6296 55.2049 20.9959 54.7529 20.9959H46.5693C46.1174 20.9959 45.751 20.6296 45.751 20.1776V11.994Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M45.751 24.6268C45.751 24.1749 46.1174 23.8085 46.5693 23.8085H54.7529C55.2049 23.8085 55.5713 24.1749 55.5713 24.6268V32.8104C55.5713 33.2624 55.2049 33.6288 54.7529 33.6288H46.5693C46.1174 33.6288 45.751 33.2624 45.751 32.8104V24.6268Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 13.25,\n y: 53.6758,\n width: 37.5,\n height: 37.5,\n rx: 2.75,\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17 61.1758C17 59.1047 18.6789 57.4258 20.75 57.4258H43.25C45.3211 57.4258 47 59.1047 47 61.1758V83.6758C47 85.7468 45.3211 87.4258 43.25 87.4258H20.75C18.6789 87.4258 17 85.7468 17 83.6758V61.1758Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M38.2489 74.4626C37.9735 74.4626 37.7501 74.6861 37.7501 74.9615V77.892H34.8196C34.5442 77.892 34.3208 78.1154 34.3208 78.3908C34.3208 78.6662 34.5442 78.8896 34.8196 78.8896H37.7501V81.8201C37.7501 82.0955 37.9735 82.3189 38.2489 82.3189C38.5243 82.3189 38.7477 82.0955 38.7477 81.8201V78.8896H41.6782C41.9536 78.8896 42.177 78.6662 42.177 78.3908C42.177 78.1154 41.9536 77.892 41.6782 77.892H38.7477V74.9615C38.7477 74.6861 38.5243 74.4626 38.2489 74.4626Z\",\n fill: \"#97ACDA\",\n stroke: \"#97ACDA\",\n strokeWidth: 0.651698\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M33.3838 61.994C33.3838 61.5421 33.7502 61.1757 34.2021 61.1757H42.3857C42.8377 61.1757 43.2041 61.5421 43.2041 61.994V70.1776C43.2041 70.6296 42.8377 70.9959 42.3857 70.9959H34.2021C33.7502 70.9959 33.3838 70.6296 33.3838 70.1776V61.994Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.751 61.994C20.751 61.5421 21.1174 61.1757 21.5693 61.1757H29.7529C30.2049 61.1757 30.5713 61.5421 30.5713 61.994V70.1776C30.5713 70.6296 30.2049 70.9959 29.7529 70.9959H21.5693C21.1174 70.9959 20.751 70.6296 20.751 70.1776V61.994Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.751 74.6267C20.751 74.1747 21.1174 73.8083 21.5693 73.8083H29.7529C30.2049 73.8083 30.5713 74.1747 30.5713 74.6267V82.8103C30.5713 83.2622 30.2049 83.6286 29.7529 83.6286H21.5693C21.1174 83.6286 20.751 83.2622 20.751 82.8103V74.6267Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 62.25,\n y: 53.6758,\n width: 37.5,\n height: 37.5,\n rx: 2.75,\n fill: \"white\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M66 61.1758C66 59.1047 67.6789 57.4258 69.75 57.4258H92.25C94.3211 57.4258 96 59.1047 96 61.1758V83.6758C96 85.7468 94.3211 87.4258 92.25 87.4258H69.75C67.6789 87.4258 66 85.7468 66 83.6758V61.1758Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M87.2489 74.4626C86.9735 74.4626 86.7501 74.6861 86.7501 74.9615V77.892H83.8196C83.5442 77.892 83.3208 78.1154 83.3208 78.3908C83.3208 78.6662 83.5442 78.8896 83.8196 78.8896H86.7501V81.8201C86.7501 82.0955 86.9735 82.3189 87.2489 82.3189C87.5243 82.3189 87.7477 82.0955 87.7477 81.8201V78.8896H90.6782C90.9536 78.8896 91.177 78.6662 91.177 78.3908C91.177 78.1154 90.9536 77.892 90.6782 77.892H87.7477V74.9615C87.7477 74.6861 87.5243 74.4626 87.2489 74.4626Z\",\n fill: \"#97ACDA\",\n stroke: \"#97ACDA\",\n strokeWidth: 0.651698\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M82.3838 61.994C82.3838 61.5421 82.7502 61.1757 83.2021 61.1757H91.3857C91.8377 61.1757 92.2041 61.5421 92.2041 61.994V70.1776C92.2041 70.6296 91.8377 70.9959 91.3857 70.9959H83.2021C82.7502 70.9959 82.3838 70.6296 82.3838 70.1776V61.994Z\",\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.751 61.994C69.751 61.5421 70.1174 61.1757 70.5693 61.1757H78.7529C79.2049 61.1757 79.5713 61.5421 79.5713 61.994V70.1776C79.5713 70.6296 79.2049 70.9959 78.7529 70.9959H70.5693C70.1174 70.9959 69.751 70.6296 69.751 70.1776V61.994Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.751 74.6267C69.751 74.1747 70.1174 73.8083 70.5693 73.8083H78.7529C79.2049 73.8083 79.5713 74.1747 79.5713 74.6267V82.8103C79.5713 83.2622 79.2049 83.6286 78.7529 83.6286H70.5693C70.1174 83.6286 69.751 83.2622 69.751 82.8103V74.6267Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.5,\n d: \"M53.4659 97.2786C60.6527 96.1034 65.526 89.3246 64.3508 82.1379C63.1756 74.9511 56.3969 70.0777 49.2101 71.2529C42.0233 72.4282 37.15 79.2069 38.3252 86.3937C39.5004 93.5805 46.2791 98.4538 53.4659 97.2786Z\",\n fill: \"url(#paint0_linear)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56.6883 97.6764L59.2301 96.3605L64.5955 106.708L62.0567 108.026L56.6883 97.6764Z\",\n fill: \"#0A1551\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.649 71.3729C42.1006 72.6959 40.0015 74.745 38.6174 77.2607C37.2334 79.7765 36.6265 82.6461 36.8732 85.5068C37.1199 88.3675 38.2092 91.0909 40.0035 93.3326C41.7978 95.5743 44.2166 97.2337 46.9539 98.1009C49.6911 98.9682 52.6239 99.0043 55.3817 98.2048C58.1395 97.4053 60.5985 95.8061 62.4476 93.6093C64.2966 91.4125 65.4527 88.7167 65.7698 85.8629C66.0869 83.0091 65.5508 80.1254 64.2292 77.5763C62.4551 74.158 59.396 71.5843 55.7247 70.4209C52.0534 69.2576 48.0705 69.5998 44.6515 71.3725L44.649 71.3729ZM56.836 94.8439C54.7413 95.9325 52.371 96.3755 50.0246 96.1166C47.6782 95.8578 45.461 94.9089 43.654 93.3899C41.8469 91.8709 40.531 89.8501 39.8726 87.5831C39.2142 85.3161 39.2429 82.9048 39.9551 80.6541C40.6673 78.4034 42.0311 76.4146 43.8738 74.9391C45.7165 73.4636 47.9554 72.5677 50.3073 72.3649C52.6593 72.162 55.0186 72.6612 57.0867 73.7994C59.1549 74.9376 60.8391 76.6636 61.9262 78.759C63.3813 81.5668 63.6623 84.8374 62.7078 87.8524C61.7532 90.8673 59.6411 93.3801 56.8352 94.8388L56.836 94.8439Z\",\n fill: \"#0A1551\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M67.435 115.379C67.1874 115.508 66.9168 115.587 66.6387 115.611C66.3605 115.635 66.0804 115.604 65.8142 115.52C65.548 115.436 65.301 115.3 65.0875 115.12C64.8739 114.94 64.6982 114.72 64.57 114.472L57.2159 100.312L60.9853 98.3516L68.3419 112.511C68.4713 112.759 68.5506 113.03 68.5751 113.308C68.5995 113.587 68.5689 113.867 68.4846 114.134C68.4003 114.4 68.2641 114.647 68.084 114.861C67.9039 115.075 67.6833 115.251 67.435 115.379Z\",\n fill: \"#0A1551\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear\",\n x1: 49.2101,\n y1: 71.2529,\n x2: 53.4659,\n y2: 97.2786,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#92B0EC\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#92B0EC\",\n stopOpacity: 0.51\n})), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip0\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 108,\n height: 120,\n fill: \"white\"\n})))));\nexport default SvgNoAppsFoundIcon;","var _circle, _path, _rect, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _rect2, _path11, _rect3, _path12, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _path20, _rect4, _path21, _rect5, _path22, _path23, _path24, _path25, _path26, _path27, _path28, _path29, _path30, _rect6, _path31, _path32, _path33, _path34, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoTablesFoundIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 105 118\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 52.5,\n cy: 52.875,\n r: 52.5,\n fill: \"#F3F3FE\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39.5867 37.8002C37.5562 37.8002 37.0021 37.2532 37.0019 35.2137C36.9993 16.9246 36.9995 22.6352 37.0017 4.34606C37.0019 2.39955 37.587 1.80482 39.5449 1.80438C57.8487 1.79958 52.1526 1.79958 70.4564 1.80438C72.3869 1.80482 72.997 2.42289 72.9974 4.36111C73.0009 22.6503 73.0007 16.9396 72.9979 35.2288C72.9974 37.2453 72.4258 37.7999 70.3892 37.8002C61.2374 37.8012 64.0854 37.8006 54.9336 37.8006C45.818 37.8006 48.7023 37.8012 39.5867 37.8002ZM69.7774 35.2294C70.137 35.2294 70.4286 34.9378 70.4286 34.5781V27.5652C70.4286 27.2055 70.137 26.914 69.7774 26.914H62.7644C62.4047 26.914 62.1132 27.2055 62.1132 27.5652V34.5781C62.1132 34.9378 62.4047 35.2294 62.7644 35.2294H69.7774ZM51.4935 35.2294H58.5065C58.8661 35.2294 59.1577 34.9378 59.1577 34.5781V27.5652C59.1577 27.2055 58.8661 26.914 58.5065 26.914H51.4935C51.1338 26.914 50.8423 27.2055 50.8423 27.5652V34.5781C50.8423 34.9378 51.1338 35.2294 51.4935 35.2294ZM40.2226 35.2294H47.2356C47.5953 35.2294 47.8868 34.9378 47.8868 34.5781V27.5652C47.8868 27.2055 47.5953 26.914 47.2356 26.914H40.2226C39.863 26.914 39.5714 27.2055 39.5714 27.5652V34.5781C39.5714 34.9378 39.863 35.2294 40.2226 35.2294ZM62.7644 23.9585H69.7774C70.137 23.9585 70.4286 23.6669 70.4286 23.3073V16.2943C70.4286 15.9346 70.137 15.6431 69.7774 15.6431H62.7644C62.4047 15.6431 62.1132 15.9346 62.1132 16.2943V23.3073C62.1132 23.6669 62.4047 23.9585 62.7644 23.9585ZM51.4935 23.9585H58.5065C58.8661 23.9585 59.1577 23.6669 59.1577 23.3073V16.2943C59.1577 15.9346 58.8661 15.6431 58.5065 15.6431H51.4935C51.1338 15.6431 50.8423 15.9346 50.8423 16.2943V23.3073C50.8423 23.6669 51.1338 23.9585 51.4935 23.9585ZM40.2226 23.9585H47.2356C47.5953 23.9585 47.8868 23.6669 47.8868 23.3073V16.2943C47.8868 15.9346 47.5953 15.6431 47.2356 15.6431H40.2226C39.863 15.6431 39.5714 15.9346 39.5714 16.2943V23.3073C39.5714 23.6669 39.863 23.9585 40.2226 23.9585ZM51.4935 12.6876H58.5065C58.8661 12.6876 59.1577 12.5115 59.1577 12.2943V8.05883C59.1577 7.84162 58.8661 7.66554 58.5065 7.66554H51.4935C51.1338 7.66554 50.8423 7.84162 50.8423 8.05883V12.2943C50.8423 12.5115 51.1338 12.6876 51.4935 12.6876ZM62.7435 12.6876H69.7565C70.1161 12.6876 70.4077 12.5115 70.4077 12.2943V8.05883C70.4077 7.84162 70.1161 7.66554 69.7565 7.66554H62.7435C62.3839 7.66554 62.0923 7.84162 62.0923 8.05883V12.2943C62.0923 12.5115 62.3839 12.6876 62.7435 12.6876ZM40.2226 12.6876H47.2356C47.5953 12.6876 47.8868 12.5115 47.8868 12.2943V8.05883C47.8868 7.84162 47.5953 7.66554 47.2356 7.66554H40.2226C39.863 7.66554 39.5714 7.84162 39.5714 8.05883V12.2943C39.5714 12.5115 39.863 12.6876 40.2226 12.6876Z\",\n fill: \"white\"\n})), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 39,\n y: 4.80078,\n width: 32,\n height: 31,\n fill: \"white\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M62 7.80078C62 7.2485 62.4477 6.80078 63 6.80078H69.4077C69.96 6.80078 70.4077 7.2485 70.4077 7.80078V11.8008C70.4077 12.3531 69.96 12.8008 69.4077 12.8008H63C62.4477 12.8008 62 12.3531 62 11.8008V7.80078Z\",\n fill: \"#0D953B\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M62 16.8008C62 16.2485 62.4477 15.8008 63 15.8008H69C69.5523 15.8008 70 16.2485 70 16.8008V22.8008C70 23.3531 69.5523 23.8008 69 23.8008H63C62.4477 23.8008 62 23.3531 62 22.8008V16.8008Z\",\n fill: \"#FFB629\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M62 27.8008C62 27.2485 62.4477 26.8008 63 26.8008H69C69.5523 26.8008 70 27.2485 70 27.8008V33.8008C70 34.3531 69.5523 34.8008 69 34.8008H63C62.4477 34.8008 62 34.3531 62 33.8008V27.8008Z\",\n fill: \"#FFB629\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M50.8437 7.80078C50.8437 7.2485 51.2914 6.80078 51.8437 6.80078H58.4085C58.9608 6.80078 59.4085 7.2485 59.4085 7.80078V11.8008C59.4085 12.3531 58.9608 12.8008 58.4085 12.8008H51.8437C51.2914 12.8008 50.8437 12.3531 50.8437 11.8008V7.80078Z\",\n fill: \"#0D953B\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M51 16.8008C51 16.2485 51.4477 15.8008 52 15.8008H58C58.5523 15.8008 59 16.2485 59 16.8008V22.8008C59 23.3531 58.5523 23.8008 58 23.8008H52C51.4477 23.8008 51 23.3531 51 22.8008V16.8008Z\",\n fill: \"#FF6100\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M51 27.8008C51 27.2485 51.4477 26.8008 52 26.8008H58C58.5523 26.8008 59 27.2485 59 27.8008V33.8008C59 34.3531 58.5523 34.8008 58 34.8008H52C51.4477 34.8008 51 34.3531 51 33.8008V27.8008Z\",\n fill: \"#FF6100\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39.5 7.80078C39.5 7.2485 39.9477 6.80078 40.5 6.80078H47C47.5523 6.80078 48 7.2485 48 7.80078V11.8008C48 12.3531 47.5523 12.8008 47 12.8008H40.5C39.9477 12.8008 39.5 12.3531 39.5 11.8008V7.80078Z\",\n fill: \"#0D953B\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39.5 16.8008C39.5 16.2485 39.9477 15.8008 40.5 15.8008H47C47.5523 15.8008 48 16.2485 48 16.8008V22.8008C48 23.3531 47.5523 23.8008 47 23.8008H40.5C39.9477 23.8008 39.5 23.3531 39.5 22.8008V19.8008V16.8008Z\",\n fill: \"#0099FF\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39.5 27.8008C39.5 27.2485 39.9477 26.8008 40.5 26.8008H47C47.5523 26.8008 48 27.2485 48 27.8008V33.8008C48 34.3531 47.5523 34.8008 47 34.8008H40.5C39.9477 34.8008 39.5 34.3531 39.5 33.8008V30.8008V27.8008Z\",\n fill: \"#0099FF\"\n})), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 36.25,\n y: 1.05078,\n width: 37.5,\n height: 37.5,\n rx: 2.75,\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.5867 87.8002C12.5562 87.8002 12.0021 87.2532 12.0019 85.2137C11.9993 66.9246 11.9995 72.6352 12.0017 54.3461C12.0019 52.3995 12.587 51.8048 14.5449 51.8044C32.8487 51.7996 27.1526 51.7996 45.4564 51.8044C47.3869 51.8048 47.997 52.4229 47.9974 54.3611C48.0009 72.6503 48.0007 66.9396 47.9979 85.2288C47.9974 87.2453 47.4258 87.7999 45.3892 87.8002C36.2374 87.8012 39.0854 87.8006 29.9336 87.8006C20.818 87.8006 23.7023 87.8012 14.5867 87.8002ZM44.7774 85.2294C45.137 85.2294 45.4286 84.9378 45.4286 84.5781V77.5652C45.4286 77.2055 45.137 76.914 44.7774 76.914H37.7644C37.4047 76.914 37.1132 77.2055 37.1132 77.5652V84.5781C37.1132 84.9378 37.4047 85.2294 37.7644 85.2294H44.7774ZM26.4935 85.2294H33.5065C33.8661 85.2294 34.1577 84.9378 34.1577 84.5781V77.5652C34.1577 77.2055 33.8661 76.914 33.5065 76.914H26.4935C26.1338 76.914 25.8423 77.2055 25.8423 77.5652V84.5781C25.8423 84.9378 26.1338 85.2294 26.4935 85.2294ZM15.2226 85.2294H22.2356C22.5953 85.2294 22.8868 84.9378 22.8868 84.5781V77.5652C22.8868 77.2055 22.5953 76.914 22.2356 76.914H15.2226C14.863 76.914 14.5714 77.2055 14.5714 77.5652V84.5781C14.5714 84.9378 14.863 85.2294 15.2226 85.2294ZM37.7644 73.9585H44.7774C45.137 73.9585 45.4286 73.6669 45.4286 73.3073V66.2943C45.4286 65.9346 45.137 65.6431 44.7774 65.6431H37.7644C37.4047 65.6431 37.1132 65.9346 37.1132 66.2943V73.3073C37.1132 73.6669 37.4047 73.9585 37.7644 73.9585ZM26.4935 73.9585H33.5065C33.8661 73.9585 34.1577 73.6669 34.1577 73.3073V66.2943C34.1577 65.9346 33.8661 65.6431 33.5065 65.6431H26.4935C26.1338 65.6431 25.8423 65.9346 25.8423 66.2943V73.3073C25.8423 73.6669 26.1338 73.9585 26.4935 73.9585ZM15.2226 73.9585H22.2356C22.5953 73.9585 22.8868 73.6669 22.8868 73.3073V66.2943C22.8868 65.9346 22.5953 65.6431 22.2356 65.6431H15.2226C14.863 65.6431 14.5714 65.9346 14.5714 66.2943V73.3073C14.5714 73.6669 14.863 73.9585 15.2226 73.9585ZM26.4935 62.6876H33.5065C33.8661 62.6876 34.1577 62.5115 34.1577 62.2943V58.0588C34.1577 57.8416 33.8661 57.6655 33.5065 57.6655H26.4935C26.1338 57.6655 25.8423 57.8416 25.8423 58.0588V62.2943C25.8423 62.5115 26.1338 62.6876 26.4935 62.6876ZM37.7435 62.6876H44.7565C45.1161 62.6876 45.4077 62.5115 45.4077 62.2943V58.0588C45.4077 57.8416 45.1161 57.6655 44.7565 57.6655H37.7435C37.3839 57.6655 37.0923 57.8416 37.0923 58.0588V62.2943C37.0923 62.5115 37.3839 62.6876 37.7435 62.6876ZM15.2226 62.6876H22.2356C22.5953 62.6876 22.8868 62.5115 22.8868 62.2943V58.0588C22.8868 57.8416 22.5953 57.6655 22.2356 57.6655H15.2226C14.863 57.6655 14.5714 57.8416 14.5714 58.0588V62.2943C14.5714 62.5115 14.863 62.6876 15.2226 62.6876Z\",\n fill: \"white\"\n})), _rect3 || (_rect3 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 14,\n y: 54.8008,\n width: 32,\n height: 31,\n fill: \"white\"\n})), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37 57.8008C37 57.2485 37.4477 56.8008 38 56.8008H44.4077C44.96 56.8008 45.4077 57.2485 45.4077 57.8008V61.8008C45.4077 62.3531 44.96 62.8008 44.4077 62.8008H38C37.4477 62.8008 37 62.3531 37 61.8008V57.8008Z\",\n fill: \"#0D953B\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37 66.8008C37 66.2485 37.4477 65.8008 38 65.8008H44C44.5523 65.8008 45 66.2485 45 66.8008V72.8008C45 73.3531 44.5523 73.8008 44 73.8008H38C37.4477 73.8008 37 73.3531 37 72.8008V66.8008Z\",\n fill: \"#FFB629\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37 77.8008C37 77.2485 37.4477 76.8008 38 76.8008H44C44.5523 76.8008 45 77.2485 45 77.8008V83.8008C45 84.3531 44.5523 84.8008 44 84.8008H38C37.4477 84.8008 37 84.3531 37 83.8008V77.8008Z\",\n fill: \"#FFB629\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25.8437 57.8008C25.8437 57.2485 26.2914 56.8008 26.8437 56.8008H33.4085C33.9608 56.8008 34.4085 57.2485 34.4085 57.8008V61.8008C34.4085 62.3531 33.9608 62.8008 33.4085 62.8008H26.8437C26.2914 62.8008 25.8437 62.3531 25.8437 61.8008V57.8008Z\",\n fill: \"#0D953B\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26 66.8008C26 66.2485 26.4477 65.8008 27 65.8008H33C33.5523 65.8008 34 66.2485 34 66.8008V72.8008C34 73.3531 33.5523 73.8008 33 73.8008H27C26.4477 73.8008 26 73.3531 26 72.8008V66.8008Z\",\n fill: \"#FF6100\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26 77.8008C26 77.2485 26.4477 76.8008 27 76.8008H33C33.5523 76.8008 34 77.2485 34 77.8008V83.8008C34 84.3531 33.5523 84.8008 33 84.8008H27C26.4477 84.8008 26 84.3531 26 83.8008V77.8008Z\",\n fill: \"#FF6100\"\n})), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.5 57.8008C14.5 57.2485 14.9477 56.8008 15.5 56.8008H22C22.5523 56.8008 23 57.2485 23 57.8008V61.8008C23 62.3531 22.5523 62.8008 22 62.8008H15.5C14.9477 62.8008 14.5 62.3531 14.5 61.8008V57.8008Z\",\n fill: \"#0D953B\"\n})), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.5 66.8008C14.5 66.2485 14.9477 65.8008 15.5 65.8008H22C22.5523 65.8008 23 66.2485 23 66.8008V72.8008C23 73.3531 22.5523 73.8008 22 73.8008H15.5C14.9477 73.8008 14.5 73.3531 14.5 72.8008V69.8008V66.8008Z\",\n fill: \"#0099FF\"\n})), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.5 77.8008C14.5 77.2485 14.9477 76.8008 15.5 76.8008H22C22.5523 76.8008 23 77.2485 23 77.8008V83.8008C23 84.3531 22.5523 84.8008 22 84.8008H15.5C14.9477 84.8008 14.5 84.3531 14.5 83.8008V80.8008V77.8008Z\",\n fill: \"#0099FF\"\n})), _rect4 || (_rect4 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 11.25,\n y: 51.0508,\n width: 37.5,\n height: 37.5,\n rx: 2.75,\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.5867 87.8002C61.5562 87.8002 61.0021 87.2532 61.0019 85.2137C60.9993 66.9246 60.9995 72.6352 61.0017 54.3461C61.0019 52.3995 61.587 51.8048 63.5449 51.8044C81.8487 51.7996 76.1526 51.7996 94.4564 51.8044C96.3869 51.8048 96.997 52.4229 96.9974 54.3611C97.0009 72.6503 97.0007 66.9396 96.9979 85.2288C96.9974 87.2453 96.4258 87.7999 94.3892 87.8002C85.2374 87.8012 88.0854 87.8006 78.9336 87.8006C69.818 87.8006 72.7023 87.8012 63.5867 87.8002ZM93.7774 85.2294C94.137 85.2294 94.4286 84.9378 94.4286 84.5781V77.5652C94.4286 77.2055 94.137 76.914 93.7774 76.914H86.7644C86.4047 76.914 86.1132 77.2055 86.1132 77.5652V84.5781C86.1132 84.9378 86.4047 85.2294 86.7644 85.2294H93.7774ZM75.4935 85.2294H82.5065C82.8661 85.2294 83.1577 84.9378 83.1577 84.5781V77.5652C83.1577 77.2055 82.8661 76.914 82.5065 76.914H75.4935C75.1338 76.914 74.8423 77.2055 74.8423 77.5652V84.5781C74.8423 84.9378 75.1338 85.2294 75.4935 85.2294ZM64.2226 85.2294H71.2356C71.5953 85.2294 71.8868 84.9378 71.8868 84.5781V77.5652C71.8868 77.2055 71.5953 76.914 71.2356 76.914H64.2226C63.863 76.914 63.5714 77.2055 63.5714 77.5652V84.5781C63.5714 84.9378 63.863 85.2294 64.2226 85.2294ZM86.7644 73.9585H93.7774C94.137 73.9585 94.4286 73.6669 94.4286 73.3073V66.2943C94.4286 65.9346 94.137 65.6431 93.7774 65.6431H86.7644C86.4047 65.6431 86.1132 65.9346 86.1132 66.2943V73.3073C86.1132 73.6669 86.4047 73.9585 86.7644 73.9585ZM75.4935 73.9585H82.5065C82.8661 73.9585 83.1577 73.6669 83.1577 73.3073V66.2943C83.1577 65.9346 82.8661 65.6431 82.5065 65.6431H75.4935C75.1338 65.6431 74.8423 65.9346 74.8423 66.2943V73.3073C74.8423 73.6669 75.1338 73.9585 75.4935 73.9585ZM64.2226 73.9585H71.2356C71.5953 73.9585 71.8868 73.6669 71.8868 73.3073V66.2943C71.8868 65.9346 71.5953 65.6431 71.2356 65.6431H64.2226C63.863 65.6431 63.5714 65.9346 63.5714 66.2943V73.3073C63.5714 73.6669 63.863 73.9585 64.2226 73.9585ZM75.4935 62.6876H82.5065C82.8661 62.6876 83.1577 62.5115 83.1577 62.2943V58.0588C83.1577 57.8416 82.8661 57.6655 82.5065 57.6655H75.4935C75.1338 57.6655 74.8423 57.8416 74.8423 58.0588V62.2943C74.8423 62.5115 75.1338 62.6876 75.4935 62.6876ZM86.7435 62.6876H93.7565C94.1161 62.6876 94.4077 62.5115 94.4077 62.2943V58.0588C94.4077 57.8416 94.1161 57.6655 93.7565 57.6655H86.7435C86.3839 57.6655 86.0923 57.8416 86.0923 58.0588V62.2943C86.0923 62.5115 86.3839 62.6876 86.7435 62.6876ZM64.2226 62.6876H71.2356C71.5953 62.6876 71.8868 62.5115 71.8868 62.2943V58.0588C71.8868 57.8416 71.5953 57.6655 71.2356 57.6655H64.2226C63.863 57.6655 63.5714 57.8416 63.5714 58.0588V62.2943C63.5714 62.5115 63.863 62.6876 64.2226 62.6876Z\",\n fill: \"white\"\n})), _rect5 || (_rect5 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 63,\n y: 54.8008,\n width: 32,\n height: 31,\n fill: \"white\"\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M86 57.8008C86 57.2485 86.4477 56.8008 87 56.8008H93.4077C93.96 56.8008 94.4077 57.2485 94.4077 57.8008V61.8008C94.4077 62.3531 93.96 62.8008 93.4077 62.8008H87C86.4477 62.8008 86 62.3531 86 61.8008V57.8008Z\",\n fill: \"#0D953B\"\n})), _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M86 66.8008C86 66.2485 86.4477 65.8008 87 65.8008H93C93.5523 65.8008 94 66.2485 94 66.8008V72.8008C94 73.3531 93.5523 73.8008 93 73.8008H87C86.4477 73.8008 86 73.3531 86 72.8008V66.8008Z\",\n fill: \"#FFB629\"\n})), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M86 77.8008C86 77.2485 86.4477 76.8008 87 76.8008H93C93.5523 76.8008 94 77.2485 94 77.8008V83.8008C94 84.3531 93.5523 84.8008 93 84.8008H87C86.4477 84.8008 86 84.3531 86 83.8008V77.8008Z\",\n fill: \"#FFB629\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M74.8437 57.8008C74.8437 57.2485 75.2914 56.8008 75.8437 56.8008H82.4085C82.9608 56.8008 83.4085 57.2485 83.4085 57.8008V61.8008C83.4085 62.3531 82.9608 62.8008 82.4085 62.8008H75.8437C75.2914 62.8008 74.8437 62.3531 74.8437 61.8008V57.8008Z\",\n fill: \"#0D953B\"\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M75 66.8008C75 66.2485 75.4477 65.8008 76 65.8008H82C82.5523 65.8008 83 66.2485 83 66.8008V72.8008C83 73.3531 82.5523 73.8008 82 73.8008H76C75.4477 73.8008 75 73.3531 75 72.8008V66.8008Z\",\n fill: \"#FF6100\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M75 77.8008C75 77.2485 75.4477 76.8008 76 76.8008H82C82.5523 76.8008 83 77.2485 83 77.8008V83.8008C83 84.3531 82.5523 84.8008 82 84.8008H76C75.4477 84.8008 75 84.3531 75 83.8008V77.8008Z\",\n fill: \"#FF6100\"\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.5 57.8008C63.5 57.2485 63.9477 56.8008 64.5 56.8008H71C71.5523 56.8008 72 57.2485 72 57.8008V61.8008C72 62.3531 71.5523 62.8008 71 62.8008H64.5C63.9477 62.8008 63.5 62.3531 63.5 61.8008V57.8008Z\",\n fill: \"#0D953B\"\n})), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.5 66.8008C63.5 66.2485 63.9477 65.8008 64.5 65.8008H71C71.5523 65.8008 72 66.2485 72 66.8008V72.8008C72 73.3531 71.5523 73.8008 71 73.8008H64.5C63.9477 73.8008 63.5 73.3531 63.5 72.8008V69.8008V66.8008Z\",\n fill: \"#0099FF\"\n})), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M63.5 77.8008C63.5 77.2485 63.9477 76.8008 64.5 76.8008H71C71.5523 76.8008 72 77.2485 72 77.8008V83.8008C72 84.3531 71.5523 84.8008 71 84.8008H64.5C63.9477 84.8008 63.5 84.3531 63.5 83.8008V80.8008V77.8008Z\",\n fill: \"#0099FF\"\n})), _rect6 || (_rect6 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 60.25,\n y: 51.0508,\n width: 37.5,\n height: 37.5,\n rx: 2.75,\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5\n})), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.5,\n d: \"M51.4659 94.6536C58.6527 93.4784 63.526 86.6996 62.3508 79.5129C61.1756 72.3261 54.3969 67.4527 47.2101 68.6279C40.0233 69.8032 35.15 76.5819 36.3252 83.7687C37.5004 90.9555 44.2791 95.8288 51.4659 94.6536Z\",\n fill: \"url(#paint0_linear_624:11312)\"\n})), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M54.6883 95.0506L57.2301 93.7347L62.5955 104.082L60.0567 105.4L54.6883 95.0506Z\",\n fill: \"#0A1551\"\n})), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42.648 68.7479C40.0996 70.0709 38.0005 72.12 36.6164 74.6357C35.2324 77.1515 34.6255 80.0211 34.8722 82.8818C35.1189 85.7425 36.2082 88.4659 38.0025 90.7076C39.7969 92.9493 42.2156 94.6087 44.9529 95.4759C47.6901 96.3432 50.6229 96.3793 53.3808 95.5798C56.1386 94.7803 58.5976 93.1811 60.4466 90.9843C62.2956 88.7875 63.4517 86.0917 63.7688 83.2379C64.086 80.3841 63.5499 77.5004 62.2282 74.9513C60.4542 71.533 57.395 68.9593 53.7237 67.7959C50.0524 66.6326 46.0695 66.9748 42.6505 68.7475L42.648 68.7479ZM54.835 92.2189C52.7403 93.3075 50.3701 93.7505 48.0236 93.4916C45.6772 93.2328 43.4601 92.2839 41.653 90.7649C39.846 89.2459 38.5301 87.2251 37.8717 84.9581C37.2132 82.6911 37.2419 80.2798 37.9541 78.0291C38.6664 75.7784 40.0301 73.7896 41.8728 72.3141C43.7156 70.8386 45.9544 69.9427 48.3064 69.7399C50.6583 69.537 53.0176 70.0362 55.0858 71.1744C57.1539 72.3126 58.8381 74.0386 59.9252 76.134C61.3804 78.9418 61.6614 82.2124 60.7068 85.2274C59.7523 88.2423 57.6401 90.7551 54.8342 92.2138L54.835 92.2189Z\",\n fill: \"#0A1551\"\n})), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M65.435 112.755C65.1874 112.884 64.9168 112.963 64.6387 112.987C64.3605 113.011 64.0804 112.98 63.8142 112.896C63.548 112.812 63.301 112.676 63.0875 112.496C62.8739 112.316 62.6982 112.096 62.57 111.848L55.2159 97.6875L58.9853 95.7275L66.3419 109.887C66.4713 110.135 66.5506 110.406 66.5751 110.684C66.5995 110.963 66.5689 111.243 66.4846 111.51C66.4003 111.776 66.2641 112.023 66.084 112.237C65.9039 112.451 65.6833 112.627 65.435 112.755Z\",\n fill: \"#0A1551\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear_624:11312\",\n x1: 47.2101,\n y1: 68.6279,\n x2: 51.4659,\n y2: 94.6536,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#92B0EC\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#92B0EC\",\n stopOpacity: 0.51\n})))));\nexport default SvgNoTablesFoundIcon;","var _circle, _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _path12, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoReportsFoundIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 105 119\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 52.5,\n cy: 56.4492,\n r: 52.5,\n fill: \"#F3F3FE\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M35.1426 6.13654C35.1426 2.95453 37.7221 0.375 40.9041 0.375H68.2714C71.4534 0.375 74.0329 2.95453 74.0329 6.13654V40.7057C74.0329 43.8878 71.4534 46.4673 68.2714 46.4673H40.9041C37.7221 46.4673 35.1426 43.8878 35.1426 40.7057V6.13654Z\",\n fill: \"white\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M68.2714 1.81538H40.9041C38.5176 1.81538 36.583 3.75003 36.583 6.13654V40.7057C36.583 43.0923 38.5176 45.0269 40.9041 45.0269H68.2714C70.6579 45.0269 72.5926 43.0923 72.5926 40.7057V6.13654C72.5926 3.75003 70.6579 1.81538 68.2714 1.81538ZM40.9041 0.375C37.7221 0.375 35.1426 2.95453 35.1426 6.13654V40.7057C35.1426 43.8878 37.7221 46.4673 40.9041 46.4673H68.2714C71.4534 46.4673 74.0329 43.8878 74.0329 40.7057V6.13654C74.0329 2.95453 71.4534 0.375 68.2714 0.375H40.9041Z\",\n fill: \"#B1C3E9\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.6875 12.4062C41.6875 11.5433 42.3871 10.8438 43.25 10.8438H46.375C47.2379 10.8438 47.9375 11.5433 47.9375 12.4062V35.8438H41.6875V12.4062Z\",\n fill: \"#0099FF\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M51.2812 19.4375C51.2812 18.5746 51.9808 17.875 52.8438 17.875H55.9688C56.8317 17.875 57.5312 18.5746 57.5312 19.4375V35.8438H51.2812V19.4375Z\",\n fill: \"#FF6100\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M60.875 13.1875C60.875 12.3246 61.5746 11.625 62.4375 11.625H65.5625C66.4254 11.625 67.125 12.3246 67.125 13.1875V35.8438H60.875V13.1875Z\",\n fill: \"#FFB629\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10 56.1365C10 52.9545 12.5795 50.375 15.7615 50.375H43.1288C46.3108 50.375 48.8904 52.9545 48.8904 56.1365V90.7057C48.8904 93.8878 46.3108 96.4673 43.1288 96.4673H15.7615C12.5795 96.4673 10 93.8878 10 90.7057V56.1365Z\",\n fill: \"white\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M43.1288 51.8154H15.7615C13.375 51.8154 11.4404 53.75 11.4404 56.1365V90.7057C11.4404 93.0923 13.375 95.0269 15.7615 95.0269H43.1288C45.5153 95.0269 47.45 93.0923 47.45 90.7057V56.1365C47.45 53.75 45.5153 51.8154 43.1288 51.8154ZM15.7615 50.375C12.5795 50.375 10 52.9545 10 56.1365V90.7057C10 93.8878 12.5795 96.4673 15.7615 96.4673H43.1288C46.3108 96.4673 48.8904 93.8878 48.8904 90.7057V56.1365C48.8904 52.9545 46.3108 50.375 43.1288 50.375H15.7615Z\",\n fill: \"#B1C3E9\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.5449 62.4062C16.5449 61.5433 17.2445 60.8438 18.1074 60.8438H21.2324C22.0954 60.8438 22.7949 61.5433 22.7949 62.4062V85.8438H16.5449V62.4062Z\",\n fill: \"#0099FF\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26.1387 69.4375C26.1387 68.5746 26.8382 67.875 27.7012 67.875H30.8262C31.6891 67.875 32.3887 68.5746 32.3887 69.4375V85.8438H26.1387V69.4375Z\",\n fill: \"#FF6100\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M35.7324 63.1875C35.7324 62.3246 36.432 61.625 37.2949 61.625H40.4199C41.2829 61.625 41.9824 62.3246 41.9824 63.1875V85.8438H35.7324V63.1875Z\",\n fill: \"#FFB629\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M59 56.1365C59 52.9545 61.5795 50.375 64.7615 50.375H92.1288C95.3108 50.375 97.8904 52.9545 97.8904 56.1365V90.7057C97.8904 93.8878 95.3108 96.4673 92.1288 96.4673H64.7615C61.5795 96.4673 59 93.8878 59 90.7057V56.1365Z\",\n fill: \"white\"\n})), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M92.1288 51.8154H64.7615C62.375 51.8154 60.4404 53.75 60.4404 56.1365V90.7057C60.4404 93.0923 62.375 95.0269 64.7615 95.0269H92.1288C94.5153 95.0269 96.45 93.0923 96.45 90.7057V56.1365C96.45 53.75 94.5153 51.8154 92.1288 51.8154ZM64.7615 50.375C61.5795 50.375 59 52.9545 59 56.1365V90.7057C59 93.8878 61.5795 96.4673 64.7615 96.4673H92.1288C95.3108 96.4673 97.8904 93.8878 97.8904 90.7057V56.1365C97.8904 52.9545 95.3108 50.375 92.1288 50.375H64.7615Z\",\n fill: \"#B1C3E9\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M65.5449 62.4062C65.5449 61.5433 66.2445 60.8438 67.1074 60.8438H70.2324C71.0954 60.8438 71.7949 61.5433 71.7949 62.4062V85.8438H65.5449V62.4062Z\",\n fill: \"#0099FF\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M75.1387 69.4375C75.1387 68.5746 75.8382 67.875 76.7012 67.875H79.8262C80.6891 67.875 81.3887 68.5746 81.3887 69.4375V85.8438H75.1387V69.4375Z\",\n fill: \"#FF6100\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M84.7324 63.1875C84.7324 62.3246 85.432 61.625 86.2949 61.625H89.4199C90.2829 61.625 90.9824 62.3246 90.9824 63.1875V85.8438H84.7324V63.1875Z\",\n fill: \"#FFB629\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.5,\n d: \"M51.4659 98.2278C58.6527 97.0526 63.526 90.2739 62.3508 83.0871C61.1756 75.9003 54.3969 71.027 47.2101 72.2022C40.0233 73.3774 35.15 80.1561 36.3252 87.3429C37.5004 94.5297 44.2791 99.403 51.4659 98.2278Z\",\n fill: \"url(#paint0_linear_624:15640)\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M54.6883 98.6248L57.2301 97.309L62.5955 107.656L60.0567 108.974L54.6883 98.6248Z\",\n fill: \"#0A1551\"\n})), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42.648 72.3221C40.0996 73.6452 38.0005 75.6942 36.6164 78.21C35.2324 80.7257 34.6255 83.5953 34.8722 86.456C35.1189 89.3168 36.2082 92.0401 38.0025 94.2818C39.7969 96.5235 42.2156 98.183 44.9529 99.0502C47.6901 99.9174 50.6229 99.9535 53.3808 99.154C56.1386 98.3545 58.5976 96.7553 60.4466 94.5585C62.2956 92.3617 63.4517 89.6659 63.7688 86.8121C64.086 83.9583 63.5499 81.0746 62.2282 78.5255C60.4542 75.1072 57.395 72.5335 53.7237 71.3701C50.0524 70.2068 46.0695 70.549 42.6505 72.3217L42.648 72.3221ZM54.835 95.7931C52.7403 96.8817 50.3701 97.3247 48.0236 97.0659C45.6772 96.807 43.4601 95.8581 41.653 94.3391C39.846 92.8201 38.5301 90.7993 37.8717 88.5323C37.2132 86.2653 37.2419 83.854 37.9541 81.6033C38.6664 79.3527 40.0301 77.3638 41.8728 75.8883C43.7156 74.4128 45.9544 73.517 48.3064 73.3141C50.6583 73.1112 53.0176 73.6105 55.0858 74.7486C57.1539 75.8868 58.8381 77.6128 59.9252 79.7083C61.3804 82.516 61.6614 85.7866 60.7068 88.8016C59.7523 91.8165 57.6401 94.3293 54.8342 95.788L54.835 95.7931Z\",\n fill: \"#0A1551\"\n})), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M65.435 116.329C65.1874 116.458 64.9168 116.537 64.6387 116.561C64.3605 116.586 64.0804 116.555 63.8142 116.47C63.548 116.386 63.301 116.25 63.0875 116.07C62.8739 115.89 62.6982 115.67 62.57 115.422L55.2159 101.262L58.9853 99.3018L66.3419 113.462C66.4713 113.709 66.5506 113.98 66.5751 114.258C66.5995 114.537 66.5689 114.817 66.4846 115.084C66.4003 115.35 66.2641 115.598 66.084 115.811C65.9039 116.025 65.6833 116.201 65.435 116.329Z\",\n fill: \"#0A1551\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear_624:15640\",\n x1: 47.2101,\n y1: 72.2022,\n x2: 51.4659,\n y2: 98.2278,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#92B0EC\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#92B0EC\",\n stopOpacity: 0.51\n})))));\nexport default SvgNoReportsFoundIcon;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoApprovalsFoundIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 108 120\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip0_2531_6757)\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 54.5,\n cy: 58.0742,\n r: 52.5,\n fill: \"#F3F3FE\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M61.1098 58.0474C61.1098 54.8654 63.6893 52.2859 66.8713 52.2859H94.2386C97.4206 52.2859 100 54.8654 100 58.0474V92.6166C100 95.7986 97.4206 98.3782 94.2386 98.3782H66.8713C63.6893 98.3782 61.1098 95.7986 61.1098 92.6166V58.0474Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M94.2386 53.7263H66.8713C64.4848 53.7263 62.5502 55.6609 62.5502 58.0474V92.6166C62.5502 95.0031 64.4848 96.9378 66.8713 96.9378H94.2386C96.6251 96.9378 98.5598 95.0031 98.5598 92.6166V58.0474C98.5598 55.6609 96.6251 53.7263 94.2386 53.7263ZM66.8713 52.2859C63.6893 52.2859 61.1098 54.8654 61.1098 58.0474V92.6166C61.1098 95.7986 63.6893 98.3782 66.8713 98.3782H94.2386C97.4206 98.3782 100 95.7986 100 92.6166V58.0474C100 54.8654 97.4206 52.2859 94.2386 52.2859H66.8713Z\",\n fill: \"#B1C3E9\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M80.505 65.802V69.573M80.505 69.573H72.7126C72.0498 69.573 71.5126 70.1102 71.5126 70.773V71.7485M80.505 69.573H88.0073C88.67 69.573 89.2073 70.1102 89.2073 70.773V71.7485\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M80.505 83.8884L80.505 79.581M80.505 79.581L72.7126 79.581C72.0498 79.581 71.5126 79.0437 71.5126 78.381L71.5126 77.4054M80.505 79.581L88.0073 79.581C88.67 79.581 89.2073 79.0437 89.2073 78.381L89.2073 77.4054\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M66.0005 74.5047C66.0005 72.9026 67.2992 71.6039 68.9012 71.6039H74.7028C76.3048 71.6039 77.6035 72.9026 77.6035 74.5047C77.6035 76.1067 76.3048 77.4054 74.7028 77.4054H68.9012C67.2992 77.4054 66.0005 76.1067 66.0005 74.5047Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M83.3989 74.5047C83.3989 72.9026 84.6976 71.6039 86.2997 71.6039H92.1012C93.7033 71.6039 95.002 72.9026 95.002 74.5047C95.002 76.1067 93.7033 77.4054 92.1012 77.4054H86.2997C84.6976 77.4054 83.3989 76.1067 83.3989 74.5047Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M74.6997 86.7891C74.6997 85.1871 75.9984 83.8883 77.6005 83.8883H83.4021C85.0041 83.8883 86.3028 85.1871 86.3028 86.7891C86.3028 88.3911 85.0041 89.6898 83.4021 89.6898H77.6005C75.9984 89.6898 74.6997 88.3911 74.6997 86.7891Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 74.6997,\n y: 60,\n width: 11.6031,\n height: 5.80154,\n rx: 2.90077,\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37.0004 7.76154C37.0004 4.57953 39.5799 2 42.7619 2H70.1292C73.3112 2 75.8907 4.57953 75.8907 7.76154V42.3307C75.8907 45.5128 73.3112 48.0923 70.1292 48.0923H42.7619C39.5799 48.0923 37.0004 45.5128 37.0004 42.3307V7.76154Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M70.2698 3.44038H42.9025C40.516 3.44038 38.5814 5.37503 38.5814 7.76154V42.3307C38.5814 44.7173 40.516 46.6519 42.9025 46.6519H70.2698C72.6563 46.6519 74.591 44.7173 74.591 42.3307V7.76154C74.591 5.37503 72.6563 3.44038 70.2698 3.44038ZM42.9025 2C39.7205 2 37.141 4.57953 37.141 7.76154V42.3307C37.141 45.5128 39.7205 48.0923 42.9025 48.0923H70.2698C73.4518 48.0923 76.0314 45.5128 76.0314 42.3307V7.76154C76.0314 4.57953 73.4518 2 70.2698 2H42.9025Z\",\n fill: \"#B1C3E9\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56.5047 15.802V19.573M56.5047 19.573H48.7123C48.0496 19.573 47.5123 20.1102 47.5123 20.773V21.7485M56.5047 19.573H64.007C64.6698 19.573 65.207 20.1102 65.207 20.773V21.7485\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56.5047 33.8883L56.5047 29.581M56.5047 29.581L48.7123 29.581C48.0496 29.581 47.5123 29.0437 47.5123 28.381L47.5123 27.4054M56.5047 29.581L64.007 29.581C64.6698 29.581 65.207 29.0437 65.207 28.381L65.207 27.4054\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42.0002 24.5047C42.0002 22.9026 43.2989 21.6039 44.9009 21.6039H50.7025C52.3046 21.6039 53.6033 22.9026 53.6033 24.5047C53.6033 26.1067 52.3046 27.4054 50.7025 27.4054H44.9009C43.2989 27.4054 42.0002 26.1067 42.0002 24.5047Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M59.3986 24.5047C59.3986 22.9026 60.6973 21.6039 62.2994 21.6039H68.101C69.703 21.6039 71.0017 22.9026 71.0017 24.5047C71.0017 26.1067 69.703 27.4054 68.101 27.4054H62.2994C60.6973 27.4054 59.3986 26.1067 59.3986 24.5047Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M50.6994 36.7891C50.6994 35.187 51.9981 33.8883 53.6002 33.8883H59.4018C61.0038 33.8883 62.3025 35.187 62.3025 36.7891C62.3025 38.3911 61.0038 39.6898 59.4018 39.6898H53.6002C51.9981 39.6898 50.6994 38.3911 50.6994 36.7891Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 50.6994,\n y: 9.99999,\n width: 11.6031,\n height: 5.80154,\n rx: 2.90077,\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 58.0474C12 54.8654 14.5795 52.2859 17.7615 52.2859H45.1288C48.3108 52.2859 50.8904 54.8654 50.8904 58.0474V92.6166C50.8904 95.7986 48.3108 98.3782 45.1288 98.3782H17.7615C14.5795 98.3782 12 95.7986 12 92.6166V58.0474Z\",\n fill: \"white\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M45.1288 53.7263H17.7615C15.375 53.7263 13.4404 55.6609 13.4404 58.0474V92.6166C13.4404 95.0031 15.375 96.9378 17.7615 96.9378H45.1288C47.5153 96.9378 49.45 95.0031 49.45 92.6166V58.0474C49.45 55.6609 47.5153 53.7263 45.1288 53.7263ZM17.7615 52.2859C14.5795 52.2859 12 54.8654 12 58.0474V92.6166C12 95.7986 14.5795 98.3782 17.7615 98.3782H45.1288C48.3108 98.3782 50.8904 95.7986 50.8904 92.6166V58.0474C50.8904 54.8654 48.3108 52.2859 45.1288 52.2859H17.7615Z\",\n fill: \"#B1C3E9\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31.505 65.802V69.573M31.505 69.573H23.7126C23.0498 69.573 22.5126 70.1102 22.5126 70.773V71.7485M31.505 69.573H39.0073C39.67 69.573 40.2073 70.1102 40.2073 70.773V71.7485\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31.505 83.8884L31.505 79.581M31.505 79.581L23.7126 79.581C23.0498 79.581 22.5126 79.0437 22.5126 78.381L22.5126 77.4054M31.505 79.581L39.0073 79.581C39.67 79.581 40.2073 79.0437 40.2073 78.381L40.2073 77.4054\",\n stroke: \"#97ACDA\",\n strokeWidth: 1.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.0005 74.5047C17.0005 72.9026 18.2992 71.6039 19.9012 71.6039H25.7028C27.3048 71.6039 28.6035 72.9026 28.6035 74.5047C28.6035 76.1067 27.3048 77.4054 25.7028 77.4054H19.9012C18.2992 77.4054 17.0005 76.1067 17.0005 74.5047Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M34.3989 74.5047C34.3989 72.9026 35.6976 71.6039 37.2997 71.6039H43.1012C44.7033 71.6039 46.002 72.9026 46.002 74.5047C46.002 76.1067 44.7033 77.4054 43.1012 77.4054H37.2997C35.6976 77.4054 34.3989 76.1067 34.3989 74.5047Z\",\n fill: \"#FFB629\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25.6997 86.7891C25.6997 85.1871 26.9984 83.8883 28.6005 83.8883H34.4021C36.0041 83.8883 37.3028 85.1871 37.3028 86.7891C37.3028 88.3911 36.0041 89.6898 34.4021 89.6898H28.6005C26.9984 89.6898 25.6997 88.3911 25.6997 86.7891Z\",\n fill: \"#0099FF\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n x: 25.6997,\n y: 60,\n width: 11.6031,\n height: 5.80154,\n rx: 2.90077,\n fill: \"#FF6100\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.5,\n d: \"M53.463 99.8529C60.6498 98.6777 65.5231 91.899 64.3479 84.7122C63.1727 77.5254 56.3939 72.6521 49.2072 73.8273C42.0204 75.0025 37.147 81.7812 38.3222 88.968C39.4975 96.1548 46.2762 101.028 53.463 99.8529Z\",\n fill: \"url(#paint0_linear_2531_6757)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56.6854 100.25L59.2272 98.9346L64.5926 109.282L62.0538 110.6L56.6854 100.25Z\",\n fill: \"#0A1551\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.646 73.9471C42.0976 75.2702 39.9985 77.3192 38.6145 79.835C37.2304 82.3507 36.6236 85.2203 36.8703 88.081C37.117 90.9418 38.2063 93.6651 40.0006 95.9068C41.7949 98.1485 44.2136 99.808 46.9509 100.675C49.6882 101.542 52.621 101.579 55.3788 100.779C58.1366 99.9795 60.5956 98.3803 62.4446 96.1835C64.2936 93.9867 65.4498 91.2909 65.7669 88.4371C66.084 85.5833 65.5479 82.6996 64.2263 80.1505C62.4522 76.7322 59.3931 74.1585 55.7218 72.9951C52.0505 71.8318 48.0676 72.174 44.6486 73.9467L44.646 73.9471ZM56.8331 97.4181C54.7384 98.5067 52.3681 98.9497 50.0217 98.6909C47.6752 98.432 45.4581 97.4831 43.6511 95.9641C41.844 94.4451 40.5281 92.4243 39.8697 90.1573C39.2113 87.8903 39.24 85.479 39.9522 83.2283C40.6644 80.9777 42.0282 78.9888 43.8709 77.5133C45.7136 76.0378 47.9525 75.142 50.3044 74.9391C52.6563 74.7362 55.0156 75.2355 57.0838 76.3736C59.152 77.5118 60.8362 79.2378 61.9233 81.3333C63.3784 84.141 63.6594 87.4116 62.7049 90.4266C61.7503 93.4415 59.6382 95.9543 56.8322 97.413L56.8331 97.4181Z\",\n fill: \"#0A1551\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M67.432 117.953C67.1844 118.082 66.9139 118.161 66.6357 118.185C66.3576 118.21 66.0775 118.179 65.8113 118.094C65.5451 118.01 65.298 117.874 65.0845 117.694C64.871 117.514 64.6952 117.294 64.5671 117.046L57.213 102.886L60.9824 100.926L68.339 115.086C68.4684 115.333 68.5477 115.604 68.5721 115.882C68.5966 116.161 68.566 116.441 68.4817 116.708C68.3974 116.974 68.2612 117.222 68.0811 117.435C67.901 117.649 67.6804 117.825 67.432 117.953Z\",\n fill: \"#0A1551\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear_2531_6757\",\n x1: 49.2072,\n y1: 73.8273,\n x2: 53.463,\n y2: 99.8529,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#92B0EC\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#92B0EC\",\n stopOpacity: 0.51\n})), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip0_2531_6757\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 108,\n height: 120,\n fill: \"white\"\n})))));\nexport default SvgNoApprovalsFoundIcon;","var _circle, _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _path12, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _path20, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoSignDocumentsFoundIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 104 120\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 52,\n cy: 63,\n r: 52,\n fill: \"#F3F3FE\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M32.5 46.334V11.666a6.5 6.5 0 0 1 6.5-6.5h21.218c.287 0 .563.114.766.317l5.1 5.1 5.099 5.099c.203.203.317.479.317.766v29.884a6.5 6.5 0 0 1-6.5 6.5H39a6.5 6.5 0 0 1-6.5-6.5Z\",\n fill: \"#fff\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M40.083 24.97a2.47 2.47 0 0 1 2.47-2.47h18.894a2.47 2.47 0 0 1 0 4.94H42.553a2.47 2.47 0 0 1-2.47-2.47Z\",\n fill: \"#09F\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M40.083 33.463a2.47 2.47 0 0 1 2.47-2.47h18.894a2.47 2.47 0 1 1 0 4.94H42.553a2.47 2.47 0 0 1-2.47-2.47Z\",\n fill: \"#FF6100\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M46.165 42.22c0-.16-.062-.127-.153-.125-.12.002-2.394 1.416-2.394 1.416s-.994.428-1.262.645c-1.554 1.5-2.075.216-2.167 0-.308-.731.103-1.393.613-1.937.265-.213 1.553-1.313 2.939-1.974.712-.34 1.325-.707 2.152-.726.325-.033 1.273-.128 1.88.303.449.32.491 1.492.582 1.705.169.394.297.484.297 1.243 0 .371-.696 1.592-.878 2.458.089-.05.74-.264 1.132-.392.567-.185.895-.155 1.467-.426l.446-.211c2.266-1.075 5.62-2.21 6.602-2.497.288-.084 1.54-.23 2.268.287.674.478 1.019 1.854 1.019 1.854s.064.313.919 0v1.98c-.472-.142-.832-.161-1.112-.367-.61-.641-.971-1.6-1.258-1.517-1.932.567-2.818 1.3-7.153 2.795-.864.298-1.49.778-2.165.888-.946.156-1.66.313-2.413.238-.534-.053-.749-.189-1.084-.517-.452-.44-.368-.915-.549-1.52-.192-.641-.418-1.007-.395-1.667.019-.553.395-1.386.395-1.386s.272-.392.272-.55Z\",\n fill: \"#FFB629\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M32.5 11.667a6.5 6.5 0 0 1 6.5-6.5h22.75c.287 0 .563.114.766.317l8.667 8.667c.203.203.317.479.317.766v31.416a6.5 6.5 0 0 1-6.5 6.5H39a6.5 6.5 0 0 1-6.5-6.5V11.668ZM39 7.333a4.333 4.333 0 0 0-4.333 4.334v34.666A4.333 4.333 0 0 0 39 50.668h26a4.333 4.333 0 0 0 4.333-4.334V16h-5.416a3.25 3.25 0 0 1-3.25-3.25V7.333H39Z\",\n fill: \"#C8CEED\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M75.504 30.215a1.809 1.809 0 0 0-2.559 0l-4.631 4.631-5.911 5.911-.972 3.887a.905.905 0 0 0 1.097 1.097l3.887-.972 5.91-5.91 4.632-4.633a1.81 1.81 0 0 0 0-2.558l-1.453-1.453Z\",\n fill: \"#0A1551\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.5 98.334V63.666a6.5 6.5 0 0 1 6.5-6.5h21.218c.287 0 .563.114.766.317l5.1 5.1 5.099 5.099c.203.203.317.479.317.766v29.885a6.5 6.5 0 0 1-6.5 6.499H13a6.5 6.5 0 0 1-6.5-6.5Z\",\n fill: \"#fff\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.083 76.97a2.47 2.47 0 0 1 2.47-2.47h18.894a2.47 2.47 0 0 1 0 4.94H16.553a2.47 2.47 0 0 1-2.47-2.47Z\",\n fill: \"#09F\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.083 85.463a2.47 2.47 0 0 1 2.47-2.47h18.894a2.47 2.47 0 1 1 0 4.94H16.553a2.47 2.47 0 0 1-2.47-2.47Z\",\n fill: \"#FF6100\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.165 94.22c0-.16-.062-.127-.153-.125-.12.002-2.394 1.416-2.394 1.416s-.994.428-1.262.645c-1.554 1.5-2.075.216-2.167 0-.308-.731.103-1.393.613-1.937.265-.213 1.553-1.313 2.939-1.974.712-.34 1.325-.707 2.152-.726.325-.033 1.273-.128 1.88.303.449.32.491 1.492.582 1.705.168.394.297.484.297 1.243 0 .371-.696 1.592-.878 2.458.089-.05.74-.264 1.132-.392.567-.185.895-.155 1.467-.426l.446-.211c2.266-1.075 5.62-2.21 6.602-2.497.288-.084 1.54-.23 2.268.287.674.478 1.019 1.854 1.019 1.854s.064.313.919 0v1.98c-.472-.142-.832-.161-1.112-.367-.61-.641-.971-1.6-1.258-1.517-1.932.567-2.818 1.3-7.153 2.795-.864.298-1.49.778-2.165.888-.946.156-1.66.313-2.413.238-.534-.053-.749-.189-1.084-.517-.451-.44-.368-.915-.549-1.52-.192-.641-.418-1.007-.395-1.667.018-.553.395-1.386.395-1.386s.272-.392.272-.55Z\",\n fill: \"#FFB629\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M6.5 63.667a6.5 6.5 0 0 1 6.5-6.5h22.75c.287 0 .563.114.766.317l8.667 8.667c.203.203.317.478.317.766v31.416a6.5 6.5 0 0 1-6.5 6.5H13a6.5 6.5 0 0 1-6.5-6.5V63.668Zm6.5-4.334a4.333 4.333 0 0 0-4.333 4.334v34.666A4.333 4.333 0 0 0 13 102.668h26a4.333 4.333 0 0 0 4.333-4.334V68h-5.416a3.25 3.25 0 0 1-3.25-3.25v-5.416H13Z\",\n fill: \"#C8CEED\"\n})), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M49.504 82.215a1.809 1.809 0 0 0-2.559 0l-4.632 4.631-5.91 5.911-.972 3.887a.905.905 0 0 0 1.097 1.097l3.886-.972 5.911-5.91 4.632-4.632a1.81 1.81 0 0 0 0-2.559l-1.453-1.454Z\",\n fill: \"#0A1551\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M58.5 98.334V63.666a6.5 6.5 0 0 1 6.5-6.5h21.218c.287 0 .563.114.766.317l5.1 5.1 5.099 5.099c.203.203.317.479.317.766v29.885a6.5 6.5 0 0 1-6.5 6.499H65a6.5 6.5 0 0 1-6.5-6.5Z\",\n fill: \"#fff\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M66.083 76.97a2.47 2.47 0 0 1 2.47-2.47h18.894a2.47 2.47 0 0 1 0 4.94H68.553a2.47 2.47 0 0 1-2.47-2.47Z\",\n fill: \"#09F\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M66.083 85.463a2.47 2.47 0 0 1 2.47-2.47h18.894a2.47 2.47 0 1 1 0 4.94H68.553a2.47 2.47 0 0 1-2.47-2.47Z\",\n fill: \"#FF6100\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M72.165 94.22c0-.16-.062-.127-.153-.125-.12.002-2.394 1.416-2.394 1.416s-.994.428-1.262.645c-1.554 1.5-2.075.216-2.167 0-.308-.731.103-1.393.613-1.937.265-.213 1.553-1.313 2.939-1.974.712-.34 1.325-.707 2.152-.726.325-.033 1.273-.128 1.88.303.449.32.491 1.492.582 1.705.168.394.297.484.297 1.243 0 .371-.696 1.592-.878 2.458.089-.05.74-.264 1.132-.392.567-.185.895-.155 1.467-.426l.446-.211c2.266-1.075 5.62-2.21 6.602-2.497.288-.084 1.54-.23 2.268.287.674.478 1.019 1.854 1.019 1.854s.064.313.919 0v1.98c-.472-.142-.832-.161-1.112-.367-.61-.641-.972-1.6-1.258-1.517-1.932.567-2.818 1.3-7.153 2.795-.864.298-1.49.778-2.165.888-.946.156-1.66.313-2.413.238-.534-.053-.749-.189-1.084-.517-.451-.44-.368-.915-.549-1.52-.192-.641-.418-1.007-.395-1.667.018-.553.395-1.386.395-1.386s.272-.392.272-.55Z\",\n fill: \"#FFB629\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M58.5 63.667a6.5 6.5 0 0 1 6.5-6.5h22.75c.287 0 .563.114.766.317l8.667 8.667c.203.203.317.478.317.766v31.416a6.5 6.5 0 0 1-6.5 6.5H65a6.5 6.5 0 0 1-6.5-6.5V63.668Zm6.5-4.334a4.333 4.333 0 0 0-4.333 4.334v34.666A4.333 4.333 0 0 0 65 102.668h26a4.333 4.333 0 0 0 4.333-4.334V68h-5.416a3.25 3.25 0 0 1-3.25-3.25v-5.416H65Z\",\n fill: \"#C8CEED\"\n})), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M101.504 82.215a1.81 1.81 0 0 0-2.559 0l-4.631 4.631-5.911 5.911-.972 3.887a.905.905 0 0 0 1.097 1.097l3.886-.972 5.911-5.91 4.632-4.632a1.808 1.808 0 0 0 0-2.559l-1.453-1.454Z\",\n fill: \"#0A1551\"\n})), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.5,\n d: \"M44.518 99.71c7.283 0 13.186-5.904 13.186-13.186 0-7.283-5.903-13.186-13.186-13.186-7.282 0-13.185 5.903-13.185 13.186 0 7.282 5.903 13.185 13.185 13.185Z\",\n fill: \"url(#a)\"\n})), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M37.83 73.63a14.52 14.52 0 0 0 12.074 26.372l1.153 2.224-.66.343 7.354 14.16a2.114 2.114 0 0 0 2.068 1.14c.278-.024.549-.103.796-.232a2.115 2.115 0 0 0 1.05-1.246 2.12 2.12 0 0 0-.143-1.622l-7.356-14.16-.57.296-1.152-2.222a14.518 14.518 0 0 0-3.539-26.004 14.524 14.524 0 0 0-11.073.951h-.002Zm12.187 23.472a11.933 11.933 0 0 1-12.963-19.905 11.933 11.933 0 0 1 18.053 3.82 11.934 11.934 0 0 1-5.091 16.08v.005Z\",\n fill: \"#0A1551\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"a\",\n x1: 44.518,\n y1: 73.338,\n x2: 44.518,\n y2: 99.709,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#92B0EC\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#92B0EC\",\n stopOpacity: 0.51\n})))));\nexport default SvgNoSignDocumentsFoundIcon;","\n \n\n","\n \n\n","var _circle, _rect, _path, _rect2, _path2, _path3, _path4;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgTeamselectionNoteam = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 47 61\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 23.5,\n cy: 37.5,\n r: 23.5,\n fill: \"#E3E5F5\"\n})), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 13,\n y: 24,\n width: 21.86,\n height: 26.91,\n rx: 3,\n fill: \"#fff\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31.72 42.56a3.44 3.44 0 1 1-6.87 0 3.44 3.44 0 0 1 6.87 0M26.82 36.87h2.95c1.07 0 1.95-.87 1.95-1.97v-2.93c0-1.1-.88-1.97-1.97-1.97h-2.93c-1.1 0-1.97.87-1.97 1.97v2.95c0 1.08.87 1.95 1.97 1.95ZM20.9 39.13h-2.93c-1.1 0-1.97.87-1.97 1.97v2.95c0 1.08.87 1.95 1.97 1.95h2.95c1.08 0 1.95-.87 1.95-1.97V41.1c0-1.1-.87-1.97-1.97-1.97ZM19.06 30.23a.4.4 0 0 1 .74 0l3.02 6.04a.4.4 0 0 1-.37.6h-6.04a.4.4 0 0 1-.37-.6l3.02-6.04Z\",\n fill: \"#6F76A7\"\n})), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 9,\n y: 0.49,\n width: 29.7,\n height: 16.14,\n rx: 4,\n fill: \"#343C6A\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.5 14.02a1 1 0 0 0-1.4 0l-1.63 1.6a1 1 0 0 0-.09 1.33l1.64 2.06a1 1 0 0 0 1.56 0l1.64-2.06a1 1 0 0 0-.09-1.34l-1.63-1.6Z\",\n fill: \"#343C6A\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M13.4 6a2.07 2.07 0 1 0 4.15 0 2.07 2.07 0 0 0-4.15 0Zm5.25 1.07a1.75 1.75 0 1 0 3.5 0 1.75 1.75 0 0 0-3.5 0Zm.47 5.87h-7.3a.37.37 0 0 1-.36-.37 4.03 4.03 0 0 1 4-4.01h.01c2.22 0 4.02 1.8 4.02 4.01 0 .2-.16.37-.37.37Zm4.37 0h-3.2l.02-.16a4.9 4.9 0 0 0-1.25-3.28 3.4 3.4 0 0 1 4.74 3.12.3.3 0 0 1-.31.32Z\",\n fill: \"#fff\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M33.6 8.46c0-1.14-.2-2.03-.65-2.59-.3-.4-.74-.67-1.4-.67-.66 0-1.08.27-1.4.67-.43.56-.63 1.45-.63 2.6 0 1.14.2 2.02.63 2.58.32.41.74.68 1.4.68.66 0 1.1-.27 1.4-.68.44-.56.65-1.44.65-2.59Zm1.66 0c0 1.2-.2 2.34-.8 3.27a3.31 3.31 0 0 1-2.9 1.48c-1.37 0-2.3-.6-2.9-1.48a5.78 5.78 0 0 1-.8-3.27c0-1.2.2-2.33.8-3.26a3.29 3.29 0 0 1 2.9-1.48c1.35 0 2.3.6 2.89 1.48.62.93.81 2.06.81 3.26Z\",\n fill: \"#fff\"\n})));\nexport default SvgTeamselectionNoteam;","var _defs, _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgEmptyFormList = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n viewBox: \"0 0 180 180\"\n}, props), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.47 1.916L.423 60.092c-.049.93.644 1.722 1.545 1.769l45.738 2.397c.902.047 1.673-.668 1.722-1.597l3.049-58.178c.048-.928-.643-1.72-1.545-1.767L5.192.32C5.164.317 5.135.317 5.107.317c-.865 0-1.589.7-1.636 1.599z\",\n id: \"a\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.47 1.916L.423 60.092c-.049.93.644 1.722 1.545 1.769l45.738 2.397c.902.047 1.673-.668 1.722-1.597l3.049-58.178c.048-.928-.643-1.72-1.545-1.767L5.192.32C5.164.317 5.135.317 5.107.317c-.865 0-1.589.7-1.636 1.599z\",\n id: \"c\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.569 1.405L.5 2.685a1.263 1.263 0 001.196 1.327l19.258 1.01a1.263 1.263 0 001.328-1.196l.067-1.28a1.264 1.264 0 00-1.196-1.327L1.897.209A1.263 1.263 0 00.569 1.405z\",\n id: \"e\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.347 1.666L.279 2.945a1.264 1.264 0 001.196 1.328l19.258 1.01a1.263 1.263 0 001.328-1.196l.067-1.28a1.264 1.264 0 00-1.196-1.328L1.674.47A1.263 1.263 0 00.347 1.666v.001z\",\n id: \"g\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.205 1.676L.14 2.956c-.037.696.482 1.29 1.159 1.325l39.85 2.09c.676.034 1.255-.502 1.291-1.199l.067-1.28c.037-.696-.482-1.29-1.159-1.325L1.497.478a1.14 1.14 0 00-.063-.001C.784.477.24 1 .205 1.677z\",\n id: \"i\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.205 1.676L.14 2.956c-.037.696.482 1.29 1.159 1.325l39.85 2.09c.676.034 1.255-.502 1.291-1.199l.067-1.28c.037-.696-.482-1.29-1.159-1.325L1.497.478a1.161 1.161 0 00-.064-.001C.784.477.241 1 .205 1.677z\",\n id: \"k\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.562 1.292l-.067 1.28c-.037.697.483 1.29 1.159 1.326l39.85 2.089c.677.035 1.255-.501 1.292-1.198l.067-1.28c.036-.696-.482-1.29-1.16-1.326L1.854.095A1.161 1.161 0 001.79.093c-.648 0-1.192.525-1.228 1.2z\",\n id: \"m\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.562 1.292l-.067 1.28c-.037.697.483 1.29 1.159 1.326l39.85 2.089c.677.035 1.255-.501 1.292-1.198l.067-1.28c.036-.696-.482-1.29-1.16-1.326L1.854.095A1.161 1.161 0 001.79.093c-.649 0-1.192.525-1.228 1.2z\",\n id: \"o\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M47.788.244L2.013 1.79c-.903.031-1.61.81-1.578 1.74l1.97 58.223c.032.93.788 1.66 1.691 1.629l45.775-1.548c.903-.03 1.61-.81 1.578-1.74l-1.97-58.223c-.03-.91-.757-1.63-1.635-1.63-.019 0-.037 0-.056.002z\",\n id: \"q\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.11.274L2.046 1.594c-.904.032-1.61.81-1.578 1.74L.845 14.5c.031.93.789 1.659 1.692 1.63l39.064-1.323c.904-.03 1.61-.809 1.578-1.739l-.377-11.164c-.031-.912-.76-1.63-1.638-1.63h-.054z\",\n id: \"s\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.005.213L1.732.864A1.264 1.264 0 00.512 2.17l.043 1.28A1.264 1.264 0 001.86 4.67l19.274-.65a1.264 1.264 0 001.22-1.307l-.043-1.28A1.263 1.263 0 0021.05.213h-.045z\",\n id: \"u\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.989.485h-.044l-19.273.652a1.264 1.264 0 00-1.22 1.306l.043 1.28a1.263 1.263 0 001.306 1.22l19.273-.652a1.263 1.263 0 001.22-1.305l-.043-1.28A1.263 1.263 0 0020.99.486h-.001z\",\n id: \"w\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.208.37L1.326 1.719C.65 1.742.12 2.326.143 3.023l.043 1.28c.023.698.592 1.245 1.269 1.222l39.882-1.349c.677-.022 1.207-.606 1.184-1.304l-.043-1.28c-.024-.684-.57-1.223-1.229-1.223h-.04z\",\n id: \"y\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.146.574L1.263 1.922C.586 1.945.057 2.529.08 3.227l.044 1.28c.023.698.591 1.244 1.269 1.222l39.882-1.35c.677-.022 1.207-.606 1.183-1.304l-.043-1.28c-.023-.683-.569-1.222-1.228-1.222h-.041z\",\n id: \"A\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.133.14a4.001 4.001 0 10.27 7.999A4.002 4.002 0 004.271.138c-.046 0-.092 0-.138.002z\",\n id: \"C\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"E\",\n d: \"M.17 9.045l17.162-.58L8.466.335z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"G\",\n d: \"M.417 8.813l17.163-.581L8.714.102z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.537 89.938c0 49.483 40.114 89.597 89.596 89.597 49.484 0 89.597-40.114 89.597-89.597S139.617.342 90.133.342C40.651.342.537 40.455.537 89.938\",\n id: \"I\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.537 89.938c0 49.483 40.114 89.597 89.596 89.597 49.484 0 89.597-40.114 89.597-89.597S139.617.342 90.133.342C40.651.342.537 40.455.537 89.938\",\n id: \"K\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.537 89.938c0 49.483 40.114 89.597 89.596 89.597 49.484 0 89.597-40.114 89.597-89.597S139.617.342 90.133.342C40.651.342.537 40.455.537 89.938\",\n id: \"M\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.537 89.938c0 49.483 40.114 89.597 89.596 89.597 49.484 0 89.597-40.114 89.597-89.597S139.617.342 90.133.342C40.651.342.537 40.455.537 89.938\",\n id: \"O\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.537 89.938c0 49.483 40.114 89.597 89.596 89.597 49.484 0 89.597-40.114 89.597-89.597S139.617.342 90.133.342C40.651.342.537 40.455.537 89.938\",\n id: \"Q\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.537 89.938c0 49.483 40.114 89.597 89.596 89.597 49.484 0 89.597-40.114 89.597-89.597S139.617.342 90.133.342C40.651.342.537 40.455.537 89.938z\",\n id: \"S\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.537 89.938c0 49.483 40.114 89.597 89.596 89.597 49.484 0 89.597-40.114 89.597-89.597S139.617.342 90.133.342C40.651.342.537 40.455.537 89.938\",\n id: \"U\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.537 89.938c0 49.483 40.114 89.597 89.596 89.597 49.484 0 89.597-40.114 89.597-89.597S139.617.342 90.133.342C40.651.342.537 40.455.537 89.938\",\n id: \"W\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.537 89.938c0 49.483 40.114 89.597 89.596 89.597 49.484 0 89.597-40.114 89.597-89.597S139.617.342 90.133.342C40.651.342.537 40.455.537 89.938\",\n id: \"Y\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.537 89.938c0 49.483 40.114 89.597 89.596 89.597 49.484 0 89.597-40.114 89.597-89.597S139.617.342 90.133.342C40.651.342.537 40.455.537 89.938\",\n id: \"aa\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.537 89.938c0 49.483 40.114 89.597 89.596 89.597 49.484 0 89.597-40.114 89.597-89.597S139.617.342 90.133.342C40.651.342.537 40.455.537 89.938\",\n id: \"ac\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.537 89.938c0 49.483 40.114 89.597 89.596 89.597 49.484 0 89.597-40.114 89.597-89.597S139.617.342 90.133.342C40.651.342.537 40.455.537 89.938\",\n id: \"ae\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.537 89.938c0 49.483 40.114 89.597 89.596 89.597 49.484 0 89.597-40.114 89.597-89.597S139.617.342 90.133.342C40.651.342.537 40.455.537 89.938z\",\n id: \"ag\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.537 89.938c0 49.483 40.114 89.597 89.596 89.597 49.484 0 89.597-40.114 89.597-89.597S139.617.342 90.133.342C40.651.342.537 40.455.537 89.938z\",\n id: \"ai\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.537 89.938c0 49.483 40.114 89.597 89.596 89.597 49.484 0 89.597-40.114 89.597-89.597S139.617.342 90.133.342C40.651.342.537 40.455.537 89.938z\",\n id: \"ak\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.537 89.938c0 49.483 40.114 89.597 89.596 89.597 49.484 0 89.597-40.114 89.597-89.597S139.617.342 90.133.342C40.651.342.537 40.455.537 89.938\",\n id: \"am\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.537 89.938c0 49.483 40.114 89.597 89.596 89.597 49.484 0 89.597-40.114 89.597-89.597S139.617.342 90.133.342C40.651.342.537 40.455.537 89.938z\",\n id: \"ao\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.537 89.938c0 49.483 40.114 89.597 89.596 89.597 49.484 0 89.597-40.114 89.597-89.597S139.617.342 90.133.342C40.651.342.537 40.455.537 89.938\",\n id: \"aq\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.537 89.938c0 49.483 40.114 89.597 89.596 89.597 49.484 0 89.597-40.114 89.597-89.597S139.617.342 90.133.342C40.651.342.537 40.455.537 89.938\",\n id: \"as\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.537 89.938c0 49.483 40.114 89.597 89.596 89.597 49.484 0 89.597-40.114 89.597-89.597S139.617.342 90.133.342C40.651.342.537 40.455.537 89.938z\",\n id: \"au\"\n}))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M179.73 90.097c0 49.483-40.114 89.597-89.596 89.597C40.65 179.694.537 139.58.537 90.097.537 40.613 40.65.5 90.134.5c49.482 0 89.597 40.113 89.597 89.597\",\n fill: \"#FFEADC\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M161.213 130.865l-44.848-5.165a3.373 3.373 0 01-2.965-3.737l5.904-51.262a3.372 3.372 0 013.737-2.964l44.848 5.165a3.372 3.372 0 012.964 3.737L164.95 127.9a3.373 3.373 0 01-3.737 2.964\",\n fill: \"#F2F4F9\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M163.254 94.92l-48.93-5.636a1.319 1.319 0 01-1.159-1.46l.25-2.162a1.319 1.319 0 011.46-1.159l48.93 5.636a1.319 1.319 0 011.158 1.46l-.248 2.161a1.318 1.318 0 01-1.461 1.16M162.204 104.035l-48.93-5.635a1.319 1.319 0 01-1.159-1.46l.25-2.162a1.319 1.319 0 011.46-1.159l48.93 5.636a1.319 1.319 0 011.158 1.46l-.248 2.161a1.318 1.318 0 01-1.46 1.16\",\n fill: \"#D6DDED\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M162.38 131l-47.181-5.435a2.199 2.199 0 01-1.933-2.436l.867-7.528 51.557 5.873-.875 7.593A2.199 2.199 0 01162.38 131\",\n fill: \"#597CC1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M106.982 48.21l45.738 2.396c.902.047 1.594.84 1.545 1.768l-3.05 58.177c-.047.929-.818 1.644-1.72 1.597l-45.738-2.397c-.903-.047-1.594-.839-1.546-1.769l3.049-58.176c.049-.93.82-1.645 1.722-1.597\",\n fill: \"#F8FAFF\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(101.79 47.89)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"b\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#a\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F8FAFF\",\n mask: \"url(#b)\",\n d: \"M-282.161 287.274l588.06 30.82 21.803-416.027-588.06-30.82z\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(101.79 47.89)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"d\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#c\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F8FAFF\",\n mask: \"url(#d)\",\n d: \"M-1.818 63.771l53.088 2.783L54.716.805 1.628-1.977z\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(106.965 69.743)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"f\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#e\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C6CDD9\",\n mask: \"url(#f)\",\n d: \"M-1.778 5.94L24.21 7.3l.42-8.01L-1.358-2.07z\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(106.39 84.695)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"h\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#g\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C6CDD9\",\n mask: \"url(#h)\",\n d: \"M-2 6.2l25.988 1.362.42-8.01L-1.58-1.81z\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M108.462 76.548l39.85 2.088c.677.035 1.196.63 1.16 1.326l-.068 1.28c-.036.696-.615 1.233-1.291 1.197l-39.85-2.088c-.677-.035-1.197-.629-1.16-1.326l.067-1.28c.037-.696.615-1.233 1.292-1.197\",\n fill: \"#EDF0F9\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(106.965 76.07)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"j\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#i\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EDF0F9\",\n mask: \"url(#j)\",\n d: \"M-287.297 259.097l588.185 30.826 21.803-416.026-588.185-30.826z\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(106.965 76.07)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"l\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#k\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EDF0F9\",\n mask: \"url(#l)\",\n d: \"M-2.08 6.213l46.385 2.432.42-8.01-46.386-2.431z\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M107.668 91.691l39.85 2.089c.677.035 1.196.629 1.16 1.325l-.068 1.28c-.036.697-.614 1.234-1.29 1.198l-39.851-2.089c-.677-.035-1.196-.628-1.16-1.325l.067-1.28c.037-.697.615-1.233 1.292-1.198\",\n fill: \"#EDF0F9\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(105.815 91.596)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"n\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#m\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EDF0F9\",\n mask: \"url(#n)\",\n d: \"M-286.147 243.57l588.186 30.826L323.84-141.63l-588.185-30.826z\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(105.815 91.596)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"p\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#o\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EDF0F9\",\n mask: \"url(#p)\",\n d: \"M-1.724 5.83L44.662 8.26l.42-8.01-46.386-2.43z\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M148.847 53.778l-9.155-.48a1.992 1.992 0 00-2.095 1.886l-.48 9.156a1.994 1.994 0 001.886 2.095l9.156.48a1.993 1.993 0 002.095-1.887l.48-9.155a1.994 1.994 0 00-1.887-2.095\",\n fill: \"#F78D3E\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(80.511 36.389)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"r\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#q\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n mask: \"url(#r)\",\n d: \"M.49 65.612l53.13-1.797-2.224-65.801L-1.736-.189z\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(83.962 39.84)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"t\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#s\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#4675E2\",\n mask: \"url(#t)\",\n d: \"M-1.071 18.357l46.423-1.57-.634-18.742-46.423 1.57z\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(84.537 58.817)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"v\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#u\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C6CDD9\",\n mask: \"url(#v)\",\n d: \"M-1.436 6.89l26.01-.88-.272-8.016-26.01.88z\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(85.112 73.769)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"x\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#w\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C6CDD9\",\n mask: \"url(#x)\",\n d: \"M-1.496 7.163l26.009-.88-.271-8.016-26.01.88z\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(85.112 64.568)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"z\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#y\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#A7B1C0\",\n mask: \"url(#z)\",\n d: \"M-1.744 7.74L44.68 6.171l-.272-8.017-46.422 1.57z\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(85.687 79.52)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"B\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#A\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#A7B1C0\",\n mask: \"url(#B)\",\n d: \"M-1.807 7.944l46.423-1.57-.271-8.016-46.423 1.57z\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M116.477 88.721l8.056-.169c.677-.023 1.245.524 1.269 1.222l.043 1.28c.023.698-.506 1.281-1.184 1.304l-8.055.17c-.677.023-1.245-.524-1.269-1.222l-.043-1.28c-.024-.697.506-1.282 1.183-1.305\",\n fill: \"#35DC86\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(88.562 44.44)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"D\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#C\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FED049\",\n mask: \"url(#D)\",\n d: \"M-1.63 10.45l12.208-.413-.412-12.208-12.209.413z\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(108.69 46.165)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"F\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#E\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#2EBC70\",\n mask: \"url(#F)\",\n d: \"M-1.864 11.222l21.373-.723-.428-12.63-21.372.723z\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(98.339 46.74)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"H\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#G\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#35DC86\",\n mask: \"url(#H)\",\n d: \"M-1.616 10.989l21.372-.724-.427-12.629-21.373.723z\"\n})), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .159)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"J\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#I\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M59.267 92.03s-6.544 1.596 1.783 11.027c5.322 6.026 38.14 33.119 46.186 26.327 10.474-8.842 16.97-20.834 22.218-27.042l-5.62-3.114-21.096 17.395C87.09 111.419 70.465 83.2 59.268 92.03\",\n fill: \"#F6B595\",\n mask: \"url(#J)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .159)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"L\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#K\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M28.979 103.426s-2.163-6.574-10.91 3.202c-5.591 6.248-19.14 47.811-11.634 55.3 9.77 9.747 14.269 11.546 20.948 16.21l2.864-7.676-14.573-16.994c3.877-16.83 23.125-39.543 13.305-50.042\",\n fill: \"#F6B595\",\n mask: \"url(#L)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .159)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"N\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#M\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M71.842 270.689c-2.63 9.033-5.654 49.496-6.794 69.573H52.425c-.555-7.92-.913-22.373-1.655-27.408-2.396-16.265-.71-32.738.858-48.994 1.002-10.39 1.26-20.83 1.436-31.263.075-4.474.532-8.931.602-13.404.036-2.235-.015-4.476-.27-6.698-.153-1.333-.191-4.506-1.573-5.295-3.46-1.978-5.005 9.65-5.399 11.748-4.577 24.408-14.313 46.201-20.817 70.012-4.643 16.999-8.884 34.114-12.769 51.302H.768c1.004-9.318 1.93-25.606 2.094-31.54.46-16.62 3.008-30.674 9.71-45.822 7.06-15.96 2.861-36.764 4.175-53.949 1.43-18.707 5.543-37.69 16.82-53.091l40.17-.528s15.948 33.914 6.666 76.344c-3.495 17.192-7.023 33.733-8.56 39.013\",\n fill: \"#042499\",\n mask: \"url(#N)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .159)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"P\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#O\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M55.34 155.574l-21.774.286c-11.276 15.401-15.389 34.384-16.818 53.09-1.315 17.186 2.884 37.99-4.177 53.95-6.701 15.148-9.249 29.202-9.709 45.822-.163 5.934-1.089 22.222-2.094 31.54h12.07c3.885-17.188 8.126-34.303 12.77-51.303 6.503-23.81 16.24-45.603 20.817-70.01.393-2.1 1.938-13.727 5.398-11.75.158.091.297.216.422.362.144-.976.289-1.952.427-2.929 1.408-9.937 4.44-19.46 3.818-29.596-.334-5.445-2.071-10.826-1.548-16.309.04-.429.205-1.61.399-3.153\",\n fill: \"#0F2AB2\",\n mask: \"url(#P)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .159)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"R\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#Q\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.402 69.556c-3.133-10.404-5.064-28.193 8.11-40.36 10.07-9.297 37.27-10.234 46.733 10.043 1.579 3.385-.58 8.69-4.828 8.497-1.67-.076-2.704 5.213-3.67 8.496 1.352 13.324 13.396 13.57 19.505 23.752 7.531 12.553-1.738 31.09-23.945 31.09-22.208 0-34.939-18.382-41.905-41.518\",\n fill: \"#13235D\",\n mask: \"url(#R)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .159)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"T\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#S\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M43.32 85.812c3.287 1.802 6.443 2.703 9.467 2.703 3.024 0 5.708-.62 8.731-2.423l.34-8.777c1.157.206 2.043.176 2.953.176 9.264-.002 12.757-13.496 10.952-29.914-1.16 0-3.863 0-7.725-5.408.966 7.532-10.234 6.373-14.483.387 2.125 7.145-3.475 11.973-8.303 9.076-9.467-5.68-11.595 11.635-1.931 11.78v22.4z\",\n fill: \"#F6B595\",\n mask: \"url(#T)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .159)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"V\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#U\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M64.672 56.656c-.57 0-1.034-.93-1.034-2.077 0-1.148.463-2.079 1.034-2.079.572 0 1.035.931 1.035 2.079 0 1.147-.463 2.077-1.035 2.077\",\n fill: \"#343B48\",\n mask: \"url(#V)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .159)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"X\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#W\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M73.482 55.617c-.571 0-1.034-.93-1.034-2.077 0-1.148.463-2.079 1.034-2.079s1.034.931 1.034 2.079c0 1.147-.463 2.077-1.034 2.077\",\n fill: \"#343B48\",\n mask: \"url(#X)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .159)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"Z\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#Y\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M58.54 64.636c-3.426 0-6.203-1.516-6.203-3.384 0-1.869 2.777-3.383 6.203-3.383s6.203 1.514 6.203 3.383c0 1.868-2.777 3.384-6.203 3.384\",\n fill: \"#F4A48D\",\n mask: \"url(#Z)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .159)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"ab\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#aa\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M74.28 60.255c0 .848.576 1.62 1.521 2.215.192-1.478.322-3.03.38-4.65-1.17.616-1.9 1.478-1.9 2.435\",\n fill: \"#F4A48D\",\n mask: \"url(#ab)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .159)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"ad\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#ac\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M68.675 52.041c.727 3.168 1.735 4.236 3.693 6.562 1.657 1.966-2.185 3.608-3.484 2.356\",\n stroke: \"#EA9581\",\n mask: \"url(#ad)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .159)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"af\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#ae\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M72.591 66c-1.076.592-3.793 1.643-7.45-.12-.172-.084-.384.024-.365.189.132 1.155.76 4.494 3.618 4.824 2.8.325 4.147-3.284 4.56-4.679.053-.176-.181-.315-.363-.215\",\n fill: \"#D15A5A\",\n mask: \"url(#af)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .159)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"ah\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#ag\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M60.918 85.816s-7.089 7.849-16.326 0l-8.573.577s-9.962 66.189-12.54 70.7c0 0 35.224 13.62 54.772 2.02 0 0-2.742-26.235-5.574-46.586-1.28-9.198-4.561-17.753-4.154-23.204l-7.605-3.507z\",\n fill: \"#FAB62D\",\n mask: \"url(#ah)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .159)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"aj\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#ai\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M61.86 77.315s-6.803-.492-12.787-5.978c0 0 2.706 8.883 12.68 9.88l.106-3.902z\",\n fill: \"#F4A48D\",\n mask: \"url(#aj)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .159)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"al\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#ak\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M74.165 105.029s5.039 6.088 5.878 11.126c.84 5.038-5.668 12.805-5.668 12.805l-15.114-5.458 14.904-18.473z\",\n fill: \"#FAB62D\",\n mask: \"url(#al)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .159)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"an\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#am\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M61.518 86.092c.05.162 1.926.321 2.182.363.795.13 1.589.269 2.371.458 1.53.371 2.983.987 4.39 1.687 3.736 1.86 7.153 4.345 10.364 6.993 2.71 2.235 5.286 4.63 7.768 7.116l-15.631 20.176-11.444-36.793\",\n fill: \"#FAB62D\",\n mask: \"url(#an)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .159)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"ap\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#ao\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M116.051 107.113l9.666-10.71s-.652-3.942-.525-9.547-.281-9.524.719-8.227c1 1.296 1.739 9.657 3.786 9.137 2.047-.52 13.618-13.067 14.157-11.99.54 1.079-7.737 9.725-7.978 11.085-.241 1.36 7.971-8.22 8.035-6.978.064 1.24-7 9.068-7.263 10.014-.262.948 8.574-8.042 8.525-6.311-.05 1.73-7.08 6.825-7.75 8.588-.67 1.762 7.753-5.824 7.838-4.17.084 1.655-9.09 8.761-12.783 11.543-3.693 2.781-9.69 11.018-9.69 11.018l-6.737-3.452z\",\n fill: \"#F6B595\",\n mask: \"url(#ap)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .159)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"ar\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#aq\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M32.618 87.32c.034.1.01.204-.039.312l.039-.312s-9.256 1.815-13.907 12.127l-.013.034c-.173.317-.346.634-.517.956-.653 1.23-7.33 16.384-6.84 16.61l19.736 7.884s7.359-21.884 1.541-37.611\",\n fill: \"#FAB62D\",\n mask: \"url(#ar)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .159)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"at\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#as\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M43.32 85.135s-18.298-1.31-25.138 15.301c-6.84 16.611 32.683 10.638 32.683 10.638s-7.544-22.351-7.544-25.939\",\n fill: \"#FAB62D\",\n mask: \"url(#at)\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 .159)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"av\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#au\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M61.519 86.092s.13 7.083-8.745 6.729c-8.876-.355-9.453-7.686-9.453-7.686l3.063-3.32 6.922-1.217 8.213 5.494z\",\n fill: \"#F6B595\",\n mask: \"url(#av)\"\n}))))));\nexport default SvgEmptyFormList;","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconHipaa = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 34 40\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M30.5792 5.24699L18.8622 1.56902C18.8621 1.56898 18.8619 1.56893 18.8618 1.56889C17.5151 1.14372 16.0487 1.1437 14.702 1.56883C14.7018 1.5689 14.7016 1.56896 14.7014 1.56902L2.97788 5.24905C1.95095 5.56416 1.25 6.53412 1.25 7.58947V11.9744C1.25 22.2598 6.30408 31.9055 14.7898 37.8108C15.3703 38.2388 16.1006 38.4387 16.7545 38.4387C17.3776 38.4387 18.1238 38.2805 18.7285 37.8046C22.9927 34.8672 26.3665 30.9904 28.682 26.5341C31.0301 22.1216 32.2864 17.1024 32.2864 11.9744V7.62709C32.3882 6.51107 31.6311 5.55041 30.5792 5.24699Z\",\n fill: \"#0C8FF2\",\n stroke: \"#51B4FF\",\n strokeWidth: 1.5\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.6364 8.91578C20.8454 8.26615 20.2727 8.42856 19.4818 9.83608C18.9636 10.7834 18.1182 10.8917 17.6 10.8646V10.6752C18.2 10.3774 18.6363 9.78194 18.6363 9.07818C18.6363 8.07668 17.8182 7.26465 16.8091 7.26465C15.8 7.26465 14.9818 8.07668 14.9818 9.07818C14.9818 9.78194 15.4182 10.3774 16.0182 10.6752V10.8646C15.5 10.8917 14.6545 10.7834 14.1363 9.83608C13.3454 8.40149 12.7727 8.26615 11.9818 8.91578C11.1636 9.5654 7.99999 13.3278 4.12726 12.9759C4.12726 12.9759 4.89089 14.7083 6.99089 14.3293C6.99089 14.3293 8.10908 15.4932 9.90908 14.6812C9.90908 14.6812 10.8636 15.5203 12.3636 14.7624C12.3636 14.7624 13.4818 15.6015 14.6545 14.8707C14.6545 14.8707 15.3364 15.3579 16.0727 15.2225L16.1273 19.5804C16.0454 19.5534 15.9636 19.5534 15.8818 19.5263C15.8818 19.5263 14.5727 19.2556 13.2091 18.8767C11.9 18.5248 10.4545 17.9834 10.2363 17.6857C10.2636 17.6586 10.2909 17.6586 10.3182 17.6316C10.4273 17.5774 10.6454 17.4962 10.8636 17.4692C11.3545 17.3609 12.0091 17.3338 12.6636 17.3068C13.9727 17.2526 14.2182 17.3068 14.2454 17.3338C14.2454 17.2797 15.0091 17.415 15.2 16.6571C15.2 16.6571 15.2273 16.6301 15.2 16.603C15.1454 16.0887 14.7363 16.0616 14.4091 15.9804C13.8636 15.8992 14.1363 15.9263 13.4273 15.9534C12.2273 16.0346 8.51817 15.7368 8.05453 17.6857C8.05453 17.7398 8.05453 17.7669 8.05453 17.821C8.21817 19.4992 11.7091 20.2301 14.2727 20.7443C13.4 21.3398 12.9363 22.0977 12.7727 23.0722C12.6909 24.1278 13.5363 25.1293 15.4727 26.2391C14 27.2947 13.0182 28.2692 13.1 29.4331C13.2363 30.4075 14.1091 31.6797 15.7727 32.4917C15.7727 32.4917 14.6 30.7052 14.5182 29.7308C14.4363 29.1624 14.7636 28.3233 16.2091 27.2947L16.2636 30.8677C16.2636 31.1654 16.5091 31.409 16.8091 31.409C17.1091 31.409 17.3545 31.1654 17.3545 30.8677L17.4091 27.3759C18.7182 28.3504 19.0182 29.1624 18.9636 29.7037C18.8818 30.6782 17.7091 32.4646 17.7091 32.4646C19.4 31.6526 20.2454 30.3534 20.3818 29.406C20.4636 28.215 19.4818 27.2406 18.0091 26.212C19.9727 25.1022 20.7909 24.1007 20.7091 23.0451C20.5182 22.0707 20.0545 21.2857 19.2091 20.7173C21.7454 20.203 25.2636 19.4722 25.4273 17.794C25.4273 17.7398 25.4273 17.7128 25.4273 17.6586C24.9636 15.7368 21.2545 16.0346 20.0545 15.9263C19.3182 15.9263 19.6182 15.8992 19.0727 15.9534C18.7454 16.0075 18.3364 16.0346 18.2818 16.5759C18.2818 16.603 18.2818 16.6301 18.2818 16.6301C18.5 17.388 19.2364 17.2526 19.2364 17.3068C19.2636 17.3068 19.4818 17.2526 20.8182 17.2797C21.4727 17.3068 22.1273 17.3609 22.6182 17.4421C22.8636 17.4962 23.0545 17.5504 23.1636 17.6045C23.1909 17.6316 23.2454 17.6316 23.2454 17.6586C23.0273 17.9564 21.5818 18.4977 20.2727 18.8496C18.9091 19.2286 17.6 19.4992 17.6 19.4992C17.5727 19.4992 17.5454 19.4992 17.5182 19.5263L17.5727 15.2225C18.3364 15.3579 18.9909 14.8707 18.9909 14.8707C20.1636 15.6015 21.2818 14.7624 21.2818 14.7624C22.7818 15.5203 23.7091 14.6812 23.7091 14.6812C25.5091 15.4932 26.6273 14.3293 26.6273 14.3293C28.7273 14.7083 29.4909 12.9759 29.4909 12.9759C25.5909 13.3278 22.4273 9.5654 21.6364 8.91578ZM15.0636 24.3173C14.5727 24.0195 14.3545 23.6135 14.4091 23.3428C14.4363 22.9639 14.3 22.0707 16.1 21.394L16.1545 24.994C15.8 24.7774 15.4454 24.5338 15.0636 24.3173ZM18.9909 23.3428C19.0454 23.6135 18.8 24.0195 18.3363 24.3173C18.0091 24.5068 17.7091 24.7233 17.4091 24.9128L17.4636 21.4752C19.0727 22.0977 18.9636 22.9639 18.9909 23.3428Z\",\n fill: \"white\"\n})));\nexport default SvgIconHipaa;","import { getAssetPath } from './index';\n\n// eslint-disable-next-line no-undef, camelcase\n__webpack_public_path__ = `${getAssetPath()}/`;\n","import TrackingManager from './index';\nimport { getActiveApp } from '@jotforminc/router-bridge'; // eslint-disable-line\n\nconst activeApp = getActiveApp();\nexport default TrackingManager.enableErrorTracking(activeApp);\n","import { makeAsyncActions } from '../utils';\n\n// Sync action definitions\nexport const syncActions = {\n SET_LITE_MODE: 'SET_LITE_MODE',\n FORM_CHANGE: 'FORM_CHANGE',\n SET_IS_ALL_SENTBOX: 'SET_IS_ALL_SENTBOX',\n UPDATE_SENTBOX: 'UPDATE_SENTBOX',\n PREV_SUBMISSION: 'PREV_SUBMISSION',\n NEXT_SUBMISSION: 'NEXT_SUBMISSION',\n SET_ACTIVE_SUBMISSION: 'SET_ACTIVE_SUBMISSION',\n SET_EDIT_MODE: 'SET_EDIT_MODE',\n SET_VIEW_MODE: 'SET_VIEW_MODE',\n FORM_UPDATE_SYNC: 'FORM_UPDATE_SYNC',\n FORM_UNDO: 'FORM_UNDO',\n FORM_REDO: 'FORM_REDO',\n SET_REPLY_VISIBILITY: 'SET_REPLY_VISIBILITY',\n SET_FLAG: 'SET_FLAG',\n SET_SUBMISSION_NEW: 'SET_SUBMISSION_NEW',\n ASSIGN_TAG: 'ASSIGN_TAG',\n UPDATE_TAG: 'UPDATE_TAG',\n SET_FILTER_TEXT: 'SET_FILTER_TEXT',\n SELECT_BULK_SUBMISSIONS: 'SELECT_BULK_SUBMISSIONS',\n SELECT_SUBMISSION: 'SELECT_SUBMISSION',\n SUBMISSIONS_FETCH_LIVE: 'SUBMISSIONS_FETCH_LIVE',\n BULK_SUBMISSION_UPDATE_SYNC: 'BULK_SUBMISSION_UPDATE_SYNC',\n PREPARE_PRINT: 'PREPARE_PRINT',\n PRINT_COMPLETE: 'PRINT_COMPLETE',\n PREPARE_MULTIPLE_DOWNLOAD: 'PREPARE_MULTIPLE_DOWNLOAD',\n MULTIPLE_DOWNLOAD_BATCH: 'MULTIPLE_DOWNLOAD_BATCH',\n SET_FILTER_OBJECT: 'SET_FILTER_OBJECT',\n UPDATE_FILTER_OBJECT: 'UPDATE_FILTER_OBJECT',\n SET_FILTERED_IDS: 'SET_FILTERED_IDS',\n SET_SINGLE: 'SET_SINGLE',\n SHOW_UI_ERROR: 'SHOW_UI_ERROR',\n SET_ACTIVE_TAB: 'SET_ACTIVE_TAB',\n SET_HIGHLIGHT_PENDING_APPROVAL: 'SET_HIGHLIGHT_PENDING_APPROVAL',\n SET_SUBMISSION_PENDING_APPROVAL: 'SET_SUBMISSION_PENDING_APPROVAL',\n REMOVE_SUBMISSION_FROM_LIST: 'REMOVE_SUBMISSION_FROM_LIST',\n PENDING_APPROVAL_STATUS_CHANGED: 'PENDING_APPROVAL_STATUS_CHANGED',\n SET_VIEWS: 'SET_VIEWS',\n SET_SIGN_WAITING_COUNTS: 'SET_SIGN_WAITING_COUNTS',\n RENEW_FORM: 'RENEW_FORM',\n RENEW_QUESTIONS: 'RENEW_QUESTIONS',\n SET_EMPTY_ALLSENTBOX: 'SET_EMPTY_ALLSENTBOX',\n SET_OPEN_INTRO_MODAL: 'SET_OPEN_INTRO_MODAL',\n SET_PWA_MODE: 'SET_PWA_MODE',\n INIT_TEAM: 'INIT_TEAM',\n SET_USER_PERMISSIONS: 'SET_USER_PERMISSIONS',\n INITIALIZE_ENCRYPTION_WORKERS: 'INITIALIZE_ENCRYPTION_WORKERS',\n SET_MESSAGE: 'SET_MESSAGE',\n CLOSE_MESSAGE: 'CLOSE_MESSAGE',\n SET_DECRYPTION_MODAL: 'SET_DECRYPTION_MODAL',\n SET_CAMPAIGN_ACTIVE: 'SET_CAMPAIGN_ACTIVE',\n SET_CAMPAIGN_SUBMISSION_CONTENT_VISIBILITY: 'SET_CAMPAIGN_SUBMISSION_CONTENT_VISIBILITY',\n SET_SETTINGS_PANEL: 'SET_SETTINGS_PANEL',\n SET_SUBMISSION_VIEW_LOADING: 'SET_SUBMISSION_VIEW_LOADING',\n SET_AI_HISTORY_VISIBILITY: 'SET_AI_HISTORY_VISIBILITY',\n SET_AI_AVATAR_ICON_URL: 'SET_AI_AVATAR_ICON_URL',\n SET_AI_AGENT_NAME: 'SET_AI_AGENT_NAME',\n SET_IS_FULLSTORY_SESSION_URL_SAVED: 'SET_IS_FULLSTORY_SESSION_URL_SAVED'\n};\n\nexport const asyncActionTypes = {\n FORM_FETCH: 'FORM_FETCH',\n FORM_THEME_FETCH: 'FORM_THEME_FETCH',\n FORM_UPDATE: 'FORM_UPDATE',\n USER_FETCH: 'USER_FETCH',\n SUBMISSION_RENEW: 'SUBMISSION_RENEW',\n SUBMISSIONS_FETCH: 'SUBMISSIONS_FETCH',\n SUBMISSION_UPDATE: 'SUBMISSION_UPDATE',\n AGENT_SUBMISSION_HISTORY_FETCH: 'AGENT_SUBMISSION_HISTORY_FETCH',\n UNFILTERED_QUESTIONS_FETCH: 'UNFILTERED_QUESTIONS_FETCH',\n QUESTIONS_FETCH: 'QUESTIONS_FETCH',\n FILTERED_SUBMISSIONS_FETCH: 'FILTERED_SUBMISSIONS_FETCH',\n SUBMISSION_DELETE: 'SUBMISSION_DELETE',\n USER_FORMS_FETCH: 'USER_FORMS_FETCH',\n QUESTIONS_ADD: 'QUESTIONS_ADD',\n QUESTION_UPDATE: 'QUESTION_UPDATE',\n ADD_DUMMY_QUESTIONS: 'ADD_DUMMY_QUESTIONS',\n BULK_SUBMISSION_UPDATE: 'BULK_SUBMISSION_UPDATE',\n BULK_SUBMISSION_DELETE: 'BULK_SUBMISSION_DELETE',\n BULK_SUBMISSION_SELECTION: 'BULK_SUBMISSION_SELECTION',\n QUESTION_VALUES_FETCH: 'QUESTION_VALUES_FETCH',\n DOWNLOAD_ATTACHMENTS: 'DOWNLOAD_ATTACHMENTS',\n PENDING_SUBMISSION_DELETE: 'PENDING_SUBMISSION_DELETE',\n TEAM_PROPERTIES_FETCH: 'TEAM_PROPERTIES_FETCH',\n USER_TEAM_ROLES_FETCH: 'USER_TEAM_ROLES_FETCH',\n SUBMISSIONS_DECRYPT: 'SUBMISSIONS_DECRYPT',\n SYSTEM_PLANS_FETCH: 'SYSTEM_PLANS_FETCH',\n FETCH_AI_AGENTS: 'FETCH_AI_AGENTS',\n CREATE_AI_AGENT: 'CREATE_AI_AGENT'\n};\n\n// Async action definitions\nexport const asyncActions = Object.values(asyncActionTypes).reduce((prev, curr) => ({\n ...prev,\n [curr]: makeAsyncActions(curr)\n}), {});\n","export const { RECAPTCHA_CHECKBOX } = window;\n\ndelete window.RECAPTCHA_CHECKBOX;\n","import { getUrlParameter } from '@jotforminc/utils';\nimport { syncActions, asyncActions } from '../actions/actionTypes';\nimport { RECAPTCHA_CHECKBOX } from '../constants/recaptcha';\n\nconst {\n SET_LITE_MODE,\n SET_EDIT_MODE,\n MULTIPLE_DOWNLOAD_BATCH,\n SHOW_UI_ERROR,\n SET_ACTIVE_TAB,\n SET_HIGHLIGHT_PENDING_APPROVAL,\n SET_REPLY_VISIBILITY,\n SET_EMPTY_ALLSENTBOX,\n SET_OPEN_INTRO_MODAL,\n SET_PWA_MODE,\n SET_MESSAGE,\n CLOSE_MESSAGE,\n SET_DECRYPTION_MODAL,\n SET_CAMPAIGN_ACTIVE,\n SET_CAMPAIGN_SUBMISSION_CONTENT_VISIBILITY,\n SET_FILTER_TEXT,\n SET_FILTER_OBJECT,\n SET_SETTINGS_PANEL,\n SET_SUBMISSION_VIEW_LOADING,\n SET_AI_HISTORY_VISIBILITY,\n SET_AI_AVATAR_ICON_URL,\n SET_AI_AGENT_NAME,\n SET_IS_FULLSTORY_SESSION_URL_SAVED\n} = syncActions;\n\nconst {\n FORM_FETCH,\n QUESTIONS_FETCH,\n USER_FETCH,\n USER_FORMS_FETCH,\n SUBMISSIONS_FETCH,\n FILTERED_SUBMISSIONS_FETCH,\n BULK_SUBMISSION_DELETE,\n SUBMISSION_DELETE,\n PENDING_SUBMISSION_DELETE,\n SUBMISSIONS_DECRYPT,\n DOWNLOAD_ATTACHMENTS,\n CREATE_AI_AGENT\n} = asyncActions;\n\nconst initialState = {\n percentage: '-1',\n liteMode: false,\n filterText: '',\n activeTab: 'inbox',\n filterObject: {},\n filterResultCount: 0,\n selectedSubmissions: [],\n loading: false,\n errored: false,\n userLoading: false,\n formLoading: false,\n userFormsLoading: false,\n questionsLoading: false,\n submissionsLoading: false,\n submissionViewLoading: true,\n userLoaded: false,\n formLoaded: false,\n isReplyVisibilityCustom: false,\n userFormsLoaded: false,\n questionsLoaded: false,\n submissionsLoaded: false,\n submissionEditMode: false,\n submissionsDeleting: false,\n highlightPendingApproval: false,\n filteredSubmissionsLoading: false,\n openIntroModal: false,\n isPreviousOrders: false,\n previousOrdersType: '',\n isPwa: false,\n message: {\n isOpened: false\n },\n settingsPanel: {\n isOpened: false,\n activeTab: 'general'\n },\n encryptionStatus: {},\n openDecryptionModal: false,\n attachmentDownloading: false,\n campaignActive: false,\n campaignSubmissionContentVisible: false,\n recaptchaSite: RECAPTCHA_CHECKBOX,\n isAIHistoryViewVisible: false,\n isAiConversationsEnable: getUrlParameter('aiConversations') === '1',\n aiAvatarIconUrl: '',\n isFullStorySessionUrlSaved: false,\n aiAgentCreatingStatus: ''\n};\n\nconst requestActions = Object.values(asyncActions).map(({ REQUEST }) => REQUEST);\nconst failureActions = [\n FORM_FETCH.FAILURE,\n QUESTIONS_FETCH.FAILURE,\n USER_FETCH.FAILURE,\n USER_FORMS_FETCH.FAILURE,\n SHOW_UI_ERROR\n]; // unrecoverable errors\nconst successActions = Object.values(asyncActions).map(({ SUCCESS }) => SUCCESS);\nconst pendingActions = Object.values(asyncActions).map(({ PENDING }) => PENDING);\n\n// eslint-disable-next-line\nconst uiReducer = (state = initialState, action) => {\n const { type } = action;\n\n // General request action\n if (requestActions.indexOf(type) > -1) {\n const baseStateChange = {\n ...state,\n loading: true\n };\n\n switch (type) {\n case USER_FETCH.REQUEST: {\n return {\n ...baseStateChange,\n userLoading: true,\n userLoaded: false\n };\n }\n\n case USER_FORMS_FETCH.REQUEST: {\n return {\n ...baseStateChange,\n userFormsLoading: true,\n userFormsLoaded: false\n };\n }\n\n case DOWNLOAD_ATTACHMENTS.PENDING: {\n return {\n ...baseStateChange,\n attachmentDownloading: true\n };\n }\n\n case FORM_FETCH.REQUEST: {\n return {\n ...baseStateChange,\n formLoading: true,\n formLoaded: false,\n submissionsLoaded: false,\n questionsLoaded: false,\n submissionEditMode: false\n };\n }\n\n case QUESTIONS_FETCH.REQUEST: {\n return {\n ...baseStateChange,\n questionsLoading: true,\n questionsLoaded: false\n };\n }\n\n case BULK_SUBMISSION_DELETE.REQUEST: {\n return {\n ...baseStateChange,\n submissionsDeleting: true\n };\n }\n\n case FILTERED_SUBMISSIONS_FETCH.REQUEST: {\n const { filterObject, filterText } = state;\n\n const numberOfFilters = Object.keys(filterObject).length;\n\n if (numberOfFilters === 0 && filterText === '') {\n return baseStateChange;\n }\n\n return {\n ...baseStateChange,\n filteredSubmissionsLoading: true\n };\n }\n\n case SUBMISSIONS_DECRYPT.REQUEST:\n const { submissions } = action;\n const encryptionStatus = submissions?.reduce((acc, id) => {\n acc[id] = 'decrypting';\n return acc;\n }, {});\n return {\n ...baseStateChange,\n encryptionStatus\n };\n\n case CREATE_AI_AGENT.REQUEST: {\n return {\n ...baseStateChange,\n aiAgentCreatingStatus: 'CREATING'\n };\n }\n case CREATE_AI_AGENT.SUCCESS: {\n return {\n ...baseStateChange,\n aiAgentCreatingStatus: 'DONE'\n };\n }\n\n default:\n return baseStateChange;\n }\n }\n\n // Critical failure actions\n if (failureActions.indexOf(type) > -1) {\n return {\n ...state,\n loading: false,\n errored: true\n };\n }\n\n if (pendingActions.indexOf(type) > -1) {\n const baseStateChange = {\n ...state\n };\n\n switch (type) {\n case DOWNLOAD_ATTACHMENTS.PENDING: {\n return {\n ...baseStateChange,\n attachmentDownloading: true\n };\n }\n default: return baseStateChange;\n }\n }\n\n // Only handle success actions at here\n if (successActions.indexOf(type) > -1) {\n const baseStateChange = {\n ...state,\n loading: false\n };\n\n switch (type) {\n case USER_FETCH.SUCCESS: {\n return {\n ...baseStateChange,\n userLoading: false,\n userLoaded: true\n };\n }\n\n case USER_FORMS_FETCH.SUCCESS: {\n return {\n ...baseStateChange,\n userFormsLoading: false,\n userFormsLoaded: true\n };\n }\n\n case DOWNLOAD_ATTACHMENTS.SUCCESS: {\n return {\n ...baseStateChange,\n attachmentDownloading: false\n };\n }\n\n case FORM_FETCH.SUCCESS: {\n const { form: { type: formType, checkoutType: previousOrdersType = '' } = {} } = action;\n\n return {\n ...baseStateChange,\n isPreviousOrders: formType === 'PAYMENT',\n previousOrdersType,\n formLoaded: true,\n formLoading: false\n };\n }\n\n case QUESTIONS_FETCH.SUCCESS: {\n return {\n ...baseStateChange,\n questionsLoaded: true,\n questionsLoading: false\n };\n }\n\n case SUBMISSIONS_FETCH.SUCCESS: {\n return {\n ...baseStateChange,\n submissionsLoaded: true,\n submissionsLoading: false,\n loading: false,\n filteredSubmissionsLoading: false,\n filterResultCount: action.totalCount\n };\n }\n\n case FILTERED_SUBMISSIONS_FETCH.SUCCESS: {\n return {\n ...baseStateChange,\n filterResultCount: action.totalCount,\n submissionsLoaded: true,\n submissionsLoading: false,\n filteredSubmissionsLoading: false\n };\n }\n\n case BULK_SUBMISSION_DELETE.SUCCESS: {\n const { submissionIDs = [] } = action;\n return {\n ...baseStateChange,\n submissionsDeleting: false,\n filterResultCount: state.filterResultCount - submissionIDs.length\n };\n }\n\n case SUBMISSION_DELETE.SUCCESS: {\n return {\n ...baseStateChange,\n filterResultCount: state.filterResultCount - 1\n };\n }\n\n case PENDING_SUBMISSION_DELETE.SUCCESS: {\n return {\n ...baseStateChange,\n filterResultCount: state.filterResultCount - 1\n };\n }\n\n case SUBMISSIONS_DECRYPT.SUCCESS: {\n const { submission } = action;\n const { encryptionStatus } = state;\n\n if (!submission?.id) {\n return {\n ...baseStateChange\n };\n }\n encryptionStatus[submission.id] = 'decrypted';\n\n return {\n ...baseStateChange,\n encryptionStatus\n };\n }\n\n default:\n return baseStateChange;\n }\n }\n\n // General handling\n switch (type) {\n case SET_EDIT_MODE: {\n const { submissionEditMode } = action;\n\n return {\n ...state,\n submissionEditMode\n };\n }\n\n case SET_LITE_MODE: {\n return {\n ...state,\n liteMode: true\n };\n }\n\n case SET_PWA_MODE: {\n return {\n ...state,\n isPwa: true\n };\n }\n\n case SET_MESSAGE: {\n const { message } = action;\n return {\n ...state,\n message: { ...state.message, isOpened: true, ...message }\n };\n }\n\n case SET_SETTINGS_PANEL: {\n const { settingsPanel } = action;\n return {\n ...state,\n settingsPanel: { ...state.settingsPanel, ...settingsPanel }\n };\n }\n\n case CLOSE_MESSAGE: {\n return {\n ...state,\n message: {\n ...state.message,\n isOpened: false\n }\n };\n }\n\n case SET_FILTER_TEXT:\n case SET_FILTER_OBJECT:\n case SET_ACTIVE_TAB: {\n const { filterText = '' } = action;\n\n if (type === SET_FILTER_TEXT && filterText && filterText.length < 2) {\n return state;\n }\n\n return {\n ...state,\n filteredSubmissionsLoading: true,\n loading: true,\n submissionsLoaded: false,\n submissionsLoading: true\n };\n }\n\n case MULTIPLE_DOWNLOAD_BATCH: {\n const { percentage } = action;\n\n return {\n ...state,\n percentage\n };\n }\n\n case SET_EMPTY_ALLSENTBOX: {\n return {\n ...state,\n loading: false,\n errored: false,\n userLoading: false,\n formLoading: false,\n userFormsLoading: false,\n questionsLoading: false,\n submissionsLoading: false,\n userLoaded: true,\n formLoaded: true,\n isReplyVisibilityCustom: false,\n userFormsLoaded: true,\n questionsLoaded: true,\n submissionsLoaded: true,\n submissionEditMode: false,\n submissionsDeleting: false,\n highlightPendingApproval: false,\n filteredSubmissionsLoading: false\n };\n }\n\n case SET_REPLY_VISIBILITY: {\n const { visibility } = action;\n\n return {\n ...state,\n isReplyVisibilityCustom: visibility\n };\n }\n\n case SET_HIGHLIGHT_PENDING_APPROVAL: {\n const { highlightPendingApproval } = action;\n return {\n ...state,\n highlightPendingApproval\n };\n }\n\n case SET_OPEN_INTRO_MODAL: {\n const { modalKey } = action;\n return {\n ...state,\n openIntroModal: modalKey\n };\n }\n\n case SET_DECRYPTION_MODAL: {\n const { modalKey } = action;\n return {\n ...state,\n openDecryptionModal: modalKey\n };\n }\n\n case SET_CAMPAIGN_SUBMISSION_CONTENT_VISIBILITY: {\n const { visible = false } = action;\n return {\n ...state,\n campaignSubmissionContentVisible: visible\n };\n }\n\n case SET_CAMPAIGN_ACTIVE: {\n const { active = false } = action;\n return {\n ...state,\n campaignActive: active\n };\n }\n\n case SET_SUBMISSION_VIEW_LOADING: {\n const { submissionViewLoading = false } = action;\n return {\n ...state,\n submissionViewLoading\n };\n }\n\n case SET_AI_HISTORY_VISIBILITY:\n const { isAIHistoryViewVisible } = action;\n return {\n ...state,\n isAIHistoryViewVisible\n };\n\n case SET_AI_AVATAR_ICON_URL:\n const { aiAvatarIconUrl } = action;\n return {\n ...state,\n aiAvatarIconUrl\n };\n\n case SET_AI_AGENT_NAME:\n const { aiAgentName } = action;\n return {\n ...state,\n aiAgentName\n };\n\n case SET_IS_FULLSTORY_SESSION_URL_SAVED:\n const { isFullStorySessionUrlSaved } = action;\n\n return {\n ...state,\n isFullStorySessionUrlSaved\n };\n\n default:\n return state;\n }\n};\n\nexport default uiReducer;\n","import { asyncActions, syncActions } from '../actions/actionTypes';\n\nconst {\n USER_FETCH,\n USER_FORMS_FETCH,\n SYSTEM_PLANS_FETCH\n} = asyncActions;\n\nconst {\n SET_USER_PERMISSIONS\n} = syncActions;\n\nconst initialState = {\n forms: [],\n username: '',\n language: '',\n time_zone: false,\n account_type: {\n name: ''\n },\n userType: 'user',\n role: '',\n permissions: {},\n systemPlans: {}\n};\n\nconst userReducer = (state = initialState, action) => {\n const { user, type } = action;\n\n switch (type) {\n case USER_FETCH.SUCCESS:\n return {\n ...state,\n ...user\n };\n case USER_FORMS_FETCH.SUCCESS: {\n const { forms } = action;\n\n return {\n ...state,\n forms\n };\n }\n\n case SET_USER_PERMISSIONS: {\n const { role, permissions } = action;\n\n return {\n ...state,\n role,\n permissions\n };\n }\n\n case SYSTEM_PLANS_FETCH.SUCCESS: {\n const { systemPlans } = action;\n return {\n ...state,\n systemPlans\n };\n }\n\n default:\n return state;\n }\n};\n\nexport default userReducer;\n","import { safeJSONParse } from '@jotforminc/utils';\n\nimport { asyncActions, syncActions } from '../actions/actionTypes';\nimport {\n prepareSubmissionWidgets, assert, preparePrimaryAvailableQuestionIDs, prepareSecondaryAvailableQuestionIDs\n} from '../utils';\nimport { DEFAULT_DATE_FORMAT } from '../constants';\n\nconst {\n FORM_UPDATE_SYNC,\n SUBMISSIONS_FETCH_LIVE,\n RENEW_FORM\n} = syncActions;\n\nconst {\n QUESTIONS_ADD,\n FORM_FETCH,\n FORM_UPDATE,\n QUESTIONS_FETCH,\n QUESTION_UPDATE,\n ADD_DUMMY_QUESTIONS,\n SUBMISSION_DELETE,\n SUBMISSION_UPDATE,\n FORM_THEME_FETCH,\n QUESTION_VALUES_FETCH,\n UNFILTERED_QUESTIONS_FETCH\n} = asyncActions;\n\nexport const initialState = {\n id: '',\n title: '',\n count: 0,\n new: 0,\n flag: 0,\n loading: true,\n questions: {},\n questionOrders: [],\n paymentStrings: [],\n products: [],\n last_submission: '',\n submissionWidgets: {\n tags: { qid: '', type: 'control_checkbox', options_array: {} }\n },\n primaryAvailableQuestionIDs: preparePrimaryAvailableQuestionIDs({}),\n secondaryAvailableQuestionIDs: prepareSecondaryAvailableQuestionIDs({}),\n hideNonInputSubmissionFields: 'Yes',\n hideEmptySubmissionFields: 'Yes',\n hideSubmissionHeader: 'No',\n submissionSpacingPreference: 'compact',\n submissionLayoutPreference: 'left',\n submissionDateFormat: DEFAULT_DATE_FORMAT,\n submissionDateUseAmPm: 'Yes',\n styleJSON: {},\n pdfTemplates: [],\n questionValues: {}\n};\n\nconst formReducer = (state = initialState, action) => {\n assert(action, new Error('formReducer: no action provided!'));\n\n const { type } = action;\n\n switch (type) {\n case FORM_FETCH.REQUEST: {\n return initialState;\n }\n\n case FORM_FETCH.SUCCESS: {\n const { form } = action;\n return {\n ...state,\n ...form\n };\n }\n\n case RENEW_FORM:\n case FORM_UPDATE_SYNC:\n case FORM_UPDATE.REQUEST: {\n const { formProperties } = action;\n\n return {\n ...state,\n ...formProperties\n };\n }\n case UNFILTERED_QUESTIONS_FETCH.SUCCESS: {\n const { unfilteredQuestions } = action;\n return {\n ...state,\n unfilteredQuestions\n };\n }\n\n case QUESTIONS_FETCH.SUCCESS: {\n const {\n questions,\n submissionWidgets,\n primaryAvailableQuestionIDs,\n secondaryAvailableQuestionIDs\n } = action;\n\n // Temporary solution for to filter unexpected questions saved on jingle submission project\n const getFilteredQuestions = questionArray => questionArray && questionArray.filter(qid => Object.keys(questions).indexOf(qid) !== -1);\n const stateOrders = state.questionOrders === '[]' ? safeJSONParse(state.questionOrders) : state.questionOrders;\n\n return {\n ...state,\n questions,\n submissionWidgets,\n primaryAvailableQuestionIDs,\n secondaryAvailableQuestionIDs,\n questionOrders: getFilteredQuestions(stateOrders)\n };\n }\n\n case QUESTION_UPDATE.REQUEST: {\n const { questions, submissionWidgets } = state;\n const { qid, data } = action;\n const question = questions[qid];\n\n const updatedQuestion = {\n ...question,\n ...data\n };\n const updatedQuestions = {\n ...questions,\n [qid]: updatedQuestion\n };\n\n const widgetName = updatedQuestion.name.toLowerCase();\n const updatedSubmissionWidgets = question.submissionWidget === 'Yes'\n ? { ...submissionWidgets, [widgetName === 'labels' ? 'tags' : widgetName]: updatedQuestion }\n : submissionWidgets;\n\n return {\n ...state,\n questions: updatedQuestions,\n submissionWidgets: updatedSubmissionWidgets\n };\n }\n\n case ADD_DUMMY_QUESTIONS.REQUEST: {\n return state;\n }\n\n case SUBMISSION_UPDATE.REQUEST: {\n const { data } = action;\n\n if (data.new) {\n const { new: unreadSubmissionCount, count } = state;\n\n return {\n ...state,\n new: data.new !== '0' ? Math.min(unreadSubmissionCount + 1, count) : Math.max(unreadSubmissionCount - 1, 0)\n };\n }\n\n return state;\n }\n\n case SUBMISSION_DELETE.REQUEST: {\n const { count } = state;\n\n return {\n ...state,\n count: count - 1\n };\n }\n\n case FORM_THEME_FETCH.SUCCESS: {\n const { themeInfo } = action;\n\n return {\n ...state,\n styleJSON: {\n ...themeInfo.styleJSON,\n ...state.styleJSON\n }\n };\n }\n\n case QUESTIONS_ADD.SUCCESS: {\n const { questions } = action;\n const { questions: currentQuestions, submissionWidgets } = state;\n\n let questionList = currentQuestions;\n const isDummyTagQuestion = Object.values(questions).some(item => item.name === 'tags' && item.qid !== 'tags');\n if (isDummyTagQuestion) {\n // remove old tags question to prevent double dummy tag question\n questionList = Object.values(currentQuestions).filter(question => question.qid !== 'tags').reduce((prev, curr) => {\n return {\n ...prev,\n [curr.qid]: curr\n };\n }, {});\n }\n\n return {\n ...state,\n questions: {\n ...questionList,\n ...questions\n },\n submissionWidgets: {\n ...submissionWidgets,\n ...prepareSubmissionWidgets(questions)\n }\n };\n }\n\n case SUBMISSIONS_FETCH_LIVE: {\n const { count, new: newCount } = state;\n const { submissions } = action;\n return {\n ...state,\n count: count + submissions.length,\n new: newCount + submissions.length\n };\n }\n\n case QUESTION_VALUES_FETCH.SUCCESS: {\n const { qid, questionValues } = action;\n\n return {\n ...state,\n questionValues: {\n ...state.questionValues,\n [qid]: questionValues\n }\n };\n }\n\n default:\n return state;\n }\n};\n\nexport default formReducer;\n","import { syncActions, asyncActions } from '../actions/actionTypes';\nimport { match, ANY } from '../vendor/pampy';\n\nimport { collateBy, findIndexByID } from '../utils';\nimport { submissionIndexSelector } from '../selectors';\n\nconst {\n FORM_FETCH,\n SUBMISSIONS_FETCH,\n FILTERED_SUBMISSIONS_FETCH,\n SUBMISSION_UPDATE,\n SUBMISSION_DELETE,\n SUBMISSION_RENEW,\n BULK_SUBMISSION_DELETE,\n SUBMISSIONS_DECRYPT,\n AGENT_SUBMISSION_HISTORY_FETCH\n} = asyncActions;\n\nconst {\n BULK_SUBMISSION_UPDATE_SYNC,\n SET_ACTIVE_SUBMISSION,\n SUBMISSIONS_FETCH_LIVE,\n SET_FILTERED_IDS,\n SET_SINGLE,\n SET_ACTIVE_TAB,\n SET_SUBMISSION_PENDING_APPROVAL,\n REMOVE_SUBMISSION_FROM_LIST,\n SET_FILTER_TEXT,\n SET_FILTER_OBJECT\n} = syncActions;\n\nexport const initialState = {\n submissions: [],\n labelQuestion: null,\n checklistQuestion: null,\n activeSubmissionID: '',\n agentSubmissionHistory: []\n};\n\nconst concatSubmissions = (oldSubmissions, action) => {\n const { offset, submissions } = action;\n\n const dummyItemLength = Math.max(offset - oldSubmissions.length, 0);\n const dummyItems = new Array(dummyItemLength);\n\n const nextStart = offset + submissions.length;\n\n const nextItems = oldSubmissions.slice(nextStart);\n const prevItems = oldSubmissions.slice(0, offset);\n\n const newSubmissions = [...prevItems, ...dummyItems, ...submissions, ...nextItems];\n\n return newSubmissions;\n};\n\n/* eslint-disable max-statements */\nconst submissionReducer = (state = initialState, action) => {\n const { type } = action;\n\n switch (type) {\n case SET_ACTIVE_SUBMISSION: {\n const { sid } = action;\n\n return {\n ...state,\n activeSubmissionID: sid\n };\n }\n\n case SET_SINGLE: {\n return {\n ...state,\n submissions: [action.submission],\n activeSubmissionID: action.submission.id\n };\n }\n\n case AGENT_SUBMISSION_HISTORY_FETCH.SUCCESS: {\n return {\n ...state,\n agentSubmissionHistory: action.history\n };\n }\n\n case FORM_FETCH.REQUEST: {\n // Do not loose state if initial fetch request\n return action.initial ? state : initialState;\n }\n\n case SUBMISSIONS_FETCH.SUCCESS: {\n const { submissions: oldSubmissions } = state;\n const { clean } = action;\n\n const submissions = concatSubmissions(clean ? [] : oldSubmissions, action);\n\n return {\n ...state,\n submissions,\n filteredSubmissionIDs: undefined\n };\n }\n\n case SUBMISSIONS_DECRYPT.SUCCESS: {\n const { submissions: oldSubmissions } = state;\n const { submission } = action;\n const submissions = oldSubmissions.filter(Boolean).map(sub => (sub.id === submission.id ? submission : sub));\n return {\n ...state,\n submissions\n };\n }\n\n case FILTERED_SUBMISSIONS_FETCH.SUCCESS: {\n const { submissions } = action;\n const { submissions: oldSubmissions, filteredSubmissionIDs } = state;\n\n const filledSubmissions = submissions.reduce((prev, curr) => {\n const index = findIndexByID(prev, curr.id);\n if (index > -1 && !oldSubmissions[index].answers) {\n return [\n ...prev.slice(0, index),\n curr,\n ...prev.slice(index + 1)\n ];\n }\n\n return prev;\n }, oldSubmissions);\n\n return {\n ...state,\n submissions: filledSubmissions,\n filteredSubmissionIDs: {\n ...(filteredSubmissionIDs || {}),\n ...submissions.reduce((accum, val) => ({\n ...accum,\n [val.id]: true\n }), {})\n }\n };\n }\n\n case SET_FILTERED_IDS: {\n const { filteredSubmissionIDs } = action;\n\n return {\n ...state,\n filteredSubmissionIDs\n };\n }\n\n case SUBMISSION_UPDATE.REQUEST: {\n const { submissions } = state;\n const { sid, data, tags } = action;\n const index = submissionIndexSelector(state)(sid);\n const submission = submissions[index];\n if (!submission) return state;\n\n // Seperate meta and answer updates based on their key values. If key is integer than it is probably for question answer update; otherwise it is meta data of answer\n const collateByType = collateBy(val => Number.isNaN(val) || Number.isNaN(parseFloat(val)));\n const collation = collateByType(Object.keys(data));\n const reduceByType = collationType => (collation.get(collationType) || []).reduce((prev, curr) => ({ ...prev, [curr]: data[curr] }), {});\n const metaUpdates = reduceByType(true);\n const answerUpdates = reduceByType(false);\n\n const newAnswers = Object.keys(answerUpdates).reduce((prev, qid) => {\n const questionAnswer = submission.answers[qid];\n return {\n ...prev,\n [qid]: {\n ...questionAnswer,\n ...tags,\n answer: answerUpdates[qid] ? answerUpdates[qid] : questionAnswer.answer\n }\n };\n }, submission.answers);\n\n return {\n ...state,\n submissions: [\n ...submissions.slice(0, index),\n {\n ...submission,\n ...metaUpdates,\n answers: newAnswers\n },\n ...submissions.slice(index + 1)\n ]\n };\n }\n\n case REMOVE_SUBMISSION_FROM_LIST:\n case SUBMISSION_DELETE.REQUEST: {\n const { sid } = action;\n const { submissions, count } = state;\n\n const index = submissionIndexSelector(state)(sid);\n const newSubmissions = submissions.filter(s => s?.id !== sid);\n const activeSubmissionID = match(\n index,\n // In case current index still exists\n currIndex => !!newSubmissions[currIndex], currIndex => newSubmissions[currIndex].id,\n // In case previous index still exists (case for last submission to be deleted)\n currIndex => !!newSubmissions[currIndex - 1], currIndex => newSubmissions[currIndex - 1].id,\n ANY, 0 // Fallback\n );\n return {\n ...state,\n submissions: newSubmissions,\n activeSubmissionID,\n ...(type === REMOVE_SUBMISSION_FROM_LIST ? (\n { count: Math.max(count - 1, 0) }\n ) : {})\n };\n }\n\n case BULK_SUBMISSION_UPDATE_SYNC: {\n const { submissions } = state;\n const { submissionIDs, data } = action;\n\n const findInSIDs = submission => submission && submissionIDs.indexOf(submission.id) > -1;\n\n // just remove submission from list if updated prop is \"status\"\n if (data.prop === 'status') {\n return {\n ...state,\n submissions: submissions.filter(submission => !findInSIDs(submission))\n };\n }\n\n // TODO: we should compare with the present filter here too\n return {\n ...state,\n submissions: submissions.map(submission => (findInSIDs(submission) ? { ...submission, [data.prop]: data.value } : submission))\n };\n }\n\n case BULK_SUBMISSION_DELETE.SUCCESS: {\n const { submissions, activeSubmissionID } = state;\n const { submissionIDs } = action;\n\n const index = submissionIndexSelector(state)(activeSubmissionID);\n const newSubmissions = submissions.filter(({ id }) => submissionIDs.indexOf(id) === -1);\n\n const newActiveSubmissionID = match(\n index,\n // In case current index still exists\n currIndex => !!newSubmissions[currIndex], currIndex => newSubmissions[currIndex].id,\n // In case previous index still exists (case for last submission to be deleted)\n currIndex => !!newSubmissions[currIndex - 1], currIndex => newSubmissions[currIndex - 1].id,\n ANY, 0 // Fallback\n );\n\n return {\n ...state,\n submissions: newSubmissions,\n activeSubmissionID: newActiveSubmissionID\n };\n }\n\n case SUBMISSIONS_FETCH_LIVE: {\n const { submissions } = state;\n const { submissions: newSubmissions } = action;\n\n return {\n ...state,\n submissions: [\n ...newSubmissions.map((s, index) => (\n {\n ...s,\n index: newSubmissions.length + submissions.length - index\n }\n )),\n ...submissions\n ]\n };\n }\n\n case SUBMISSION_RENEW.SUCCESS: {\n const { submissions } = state;\n const { submission } = action;\n const newSubmissions = submissions.map(tempSubmission => {\n if (tempSubmission?.id === submission.id) {\n if (tempSubmission?.form && !submission?.form) {\n return {\n ...submission,\n form: tempSubmission.form\n };\n } return submission;\n }\n return tempSubmission;\n });\n return {\n ...state,\n submissions: newSubmissions\n };\n }\n\n case SET_FILTER_TEXT:\n case SET_FILTER_OBJECT:\n case SET_ACTIVE_TAB: {\n const { filterText = '' } = action;\n\n if (type === SET_FILTER_TEXT && filterText && filterText.length < 2) {\n return state;\n }\n\n return {\n ...state,\n filteredSubmissionIDs: null,\n submissions: [],\n totalCount: 0,\n limit: 20,\n offset: 0\n };\n }\n\n case SET_SUBMISSION_PENDING_APPROVAL: {\n const { submissions } = state;\n const { sid, hasPendingApproval } = action;\n const workflowStatus = hasPendingApproval ? 'Active' : 'Completed';\n const newSubmissions = submissions.map(submission => (submission.id === sid ? ({ ...submission, hasPendingApproval, workflowStatus }) : submission));\n return {\n ...state,\n submissions: newSubmissions\n };\n }\n\n default:\n return state;\n }\n};\n\nexport default submissionReducer;\n","/* eslint-disable max-statements */\nimport { syncActions, asyncActions } from '../actions/actionTypes';\nimport { parseLocationParams } from '../utils';\n\nconst {\n SET_ACTIVE_TAB,\n SELECT_SUBMISSION,\n SET_FILTER_TEXT,\n SET_FILTER_OBJECT,\n UPDATE_FILTER_OBJECT,\n FORM_UPDATE_SYNC,\n REMOVE_SUBMISSION_FROM_LIST,\n PENDING_APPROVAL_STATUS_CHANGED,\n SET_VIEWS,\n SET_SIGN_WAITING_COUNTS,\n SET_IS_ALL_SENTBOX\n} = syncActions;\n\nconst {\n FORM_FETCH,\n SUBMISSION_UPDATE,\n BULK_SUBMISSION_SELECTION,\n SUBMISSIONS_FETCH\n} = asyncActions;\n\nconst { tab: initialActiveTab } = parseLocationParams();\n\nconst initialTabs = {\n tabs: {\n inbox: {\n count: 0\n },\n archive: {\n count: 0\n },\n incompleteSubmissions: {\n count: 0\n },\n trash: {\n count: 0\n },\n sentbox: {\n count: 0\n },\n drafts: {\n count: 0\n },\n pendingApprovals: {\n count: 0\n },\n completed: {\n count: 0\n },\n signAllDocuments: {\n count: 0\n },\n signCompleted: {\n count: 0\n },\n signWaitingMySignature: {\n count: 0\n },\n signWaitingOthers: {\n count: 0\n },\n signDeclined: {\n count: 0\n },\n signCanceled: {\n count: 0\n }\n },\n activeTabID: initialActiveTab,\n isAllSentbox: false\n};\n\nconst reduceTabData = (state, activeTabID, data) => {\n const { tabs } = state;\n const activeTab = tabs[activeTabID];\n\n return {\n ...state,\n tabs: {\n ...tabs,\n [activeTabID]: {\n ...activeTab,\n ...data\n }\n }\n };\n};\n\nconst tabsReducer = (state = initialTabs, action) => {\n const { activeTabID, tabs } = state;\n const activeTab = tabs[activeTabID];\n\n switch (action.type) {\n case SET_ACTIVE_TAB: {\n const { tab } = action;\n\n return {\n ...state,\n activeTabID: tab\n };\n }\n\n case SET_IS_ALL_SENTBOX: {\n const { isAllSentbox } = action;\n if (!isAllSentbox) {\n document.body.classList.remove('jfInbox--isAllSentBox');\n }\n return {\n ...state,\n isAllSentbox: isAllSentbox\n };\n }\n case BULK_SUBMISSION_SELECTION.SUCCESS: {\n const { selectedSubmissions: selectedSubmissionIDs, allSelected } = action;\n return reduceTabData(state, activeTabID, { selectedSubmissionIDs, allSelected });\n }\n\n case SELECT_SUBMISSION: {\n const { sid } = action;\n const { selectedSubmissionIDs: selectedSubmissionIDsOld = [] } = activeTab;\n const isSubmissionSelected = selectedSubmissionIDsOld.indexOf(sid) > -1;\n const selectedSubmissionIDs = !isSubmissionSelected ? [...selectedSubmissionIDsOld, sid] : selectedSubmissionIDsOld.filter(id => id !== sid);\n\n return reduceTabData(state, activeTabID, { selectedSubmissionIDs });\n }\n\n case SET_FILTER_TEXT: {\n const { filterText } = action;\n return reduceTabData(state, activeTabID, { filterText });\n }\n\n case SET_FILTER_OBJECT: {\n const { filters: filterObject } = action;\n return reduceTabData(state, activeTabID, { filterObject });\n }\n\n case UPDATE_FILTER_OBJECT: {\n const { filters: filterObject } = action;\n\n return reduceTabData(state, activeTabID, {\n filterObject: { ...activeTab.filterObject, ...filterObject }\n });\n }\n\n case FORM_FETCH.SUCCESS: {\n const {\n form: {\n new: unreadCount, pendingApproval = 0, completedApproval = 0\n }\n } = action;\n\n const stateWithNewCount = reduceTabData(state, 'inbox', { count: unreadCount });\n const stateWithPendingApprovalCount = reduceTabData(stateWithNewCount, 'pendingApprovals', { count: pendingApproval });\n const stateWithCompletedCount = reduceTabData(stateWithPendingApprovalCount, 'completed', { count: completedApproval });\n return stateWithCompletedCount;\n }\n\n case FORM_UPDATE_SYNC: {\n const { formProperties: { new: unreadCount } } = action;\n return reduceTabData(state, 'inbox', { count: unreadCount });\n }\n\n case SUBMISSION_UPDATE.REQUEST: {\n const { data } = action;\n const { tabs: { [activeTabID]: { count: oldCount = 0 } } } = state;\n\n if (activeTabID === 'inbox' && data.new) {\n const count = data.new === '0' ? Math.max(oldCount - 1, 0) : oldCount + 1;\n return reduceTabData(state, 'inbox', { count });\n }\n\n return state;\n }\n\n case PENDING_APPROVAL_STATUS_CHANGED: {\n const { hasPendingApproval } = action;\n const tabToChange = 'pendingApprovals';\n const {\n tabs: {\n completed: { count: completedCount },\n [tabToChange]: { count: activeTabApprovalsCount }\n }\n } = state;\n\n const activeTabCountChange = hasPendingApproval ? 1 : -1;\n const changedTabCount = activeTabApprovalsCount + activeTabCountChange;\n\n const stateWithCompletedCount = reduceTabData(state, 'completed', { count: completedCount - activeTabCountChange });\n return reduceTabData(stateWithCompletedCount, tabToChange, { count: changedTabCount > 0 ? changedTabCount : 0 });\n }\n\n case REMOVE_SUBMISSION_FROM_LIST: {\n if (action.forApproval) {\n return state;\n }\n\n const { tabs: { [activeTabID]: { count: oldCount } } } = state;\n const count = Math.max(oldCount - 1, 0);\n return reduceTabData(state, activeTabID, { count });\n }\n\n case SUBMISSIONS_FETCH.SUCCESS: {\n if (activeTabID === 'inbox') {\n return state;\n }\n\n return reduceTabData(state, activeTabID, { count: action.totalCount });\n }\n\n case SET_VIEWS: {\n const standartTabs = Object.keys(state.tabs).reduce((acc, key) => {\n const tab = state.tabs[key];\n if (tab.type === 'additionalTab') return acc;\n\n acc[key] = tab;\n return acc;\n }, {});\n\n const additionalTabs = action.views.reduce((acc, view) => {\n const { viewID, ...settings } = view;\n acc[viewID] = { ...settings, id: viewID, type: 'additionalTab' };\n return acc;\n }, {});\n\n const newTabs = { ...standartTabs, ...additionalTabs };\n\n return { ...state, tabs: newTabs };\n }\n\n case SET_SIGN_WAITING_COUNTS: {\n const { counts } = action;\n\n const stateWithWaitingMySignatureCount = reduceTabData(state, 'signWaitingMySignature', { count: counts?.waitingMySignature || 0 });\n return reduceTabData(stateWithWaitingMySignatureCount, 'signWaitingOthers', { count: counts?.waitingOthers || 0 });\n }\n\n default: {\n return state;\n }\n }\n};\n\nexport default tabsReducer;\n","import { asyncActions } from '../actions/actionTypes';\nimport { getTeamInfo } from '../utils';\n\nconst {\n TEAM_PROPERTIES_FETCH,\n USER_TEAM_ROLES_FETCH\n} = asyncActions;\n\nconst { isTeamMember, TEAM_ID } = getTeamInfo();\n\nconst initialState = {\n id: TEAM_ID,\n isTeamMember,\n properties: {},\n roles: []\n};\n\nconst teamReducer = (state = initialState, action) => {\n switch (action.type) {\n case TEAM_PROPERTIES_FETCH.SUCCESS: {\n const { properties } = action;\n return {\n ...state,\n properties\n };\n }\n case USER_TEAM_ROLES_FETCH.SUCCESS: {\n const { roles } = action;\n return {\n ...state,\n roles\n };\n }\n default:\n return state;\n }\n};\n\nexport default teamReducer;\n","import { asyncActions } from '../actions/actionTypes';\n\nconst {\n FETCH_AI_AGENTS\n} = asyncActions;\n\nconst initialState = {};\n\nconst aiAgentsReducer = (state = initialState, action) => {\n const { agents, type } = action;\n\n switch (type) {\n case FETCH_AI_AGENTS.SUCCESS:\n return {\n ...state,\n ...agents\n };\n default:\n return state;\n }\n};\n\nexport default aiAgentsReducer;\n","import { combineReducers } from 'redux';\nimport undoable from 'redux-undo';\nimport ui from './ui';\nimport user from './user';\nimport form from './form';\nimport submission from './submission';\nimport tabs from './tabs';\nimport team from './team';\nimport aiAgents from './aiAgents';\nimport { assert } from '../utils';\nimport { syncActions } from '../actions/actionTypes';\n\nconst {\n FORM_UNDO,\n FORM_REDO\n} = syncActions;\n\nconst appReducer = combineReducers({\n ui,\n user,\n form: undoable(form, {\n undoType: FORM_UNDO,\n redoType: FORM_REDO\n }),\n tabs,\n submission,\n team,\n aiAgents\n});\n\nconst rootReducer = (state, action) => {\n const newState = appReducer(state, action);\n\n assert(!action.type || (action.type.indexOf('@@') === -1 && newState !== state, new Error(`rootReducer: Unused action ${action.type}.`)));\n return newState;\n};\n\nexport default rootReducer;\n","import { RequestLayer } from '@jotforminc/request-layer';\nimport {\n getTeamInfo\n} from '../utils';\n\nconst { isTeamMember, TEAM_ID } = getTeamInfo();\n\nexport const requestLayer = new RequestLayer(\n '/API/inbox', {\n interceptorConfig: {\n isTeamMember,\n disableResponseNormalizer: true,\n shouldCache: true,\n logCachePayload: {\n projectName: 'inbox'\n },\n ...((isTeamMember && TEAM_ID)\n ? {\n teamID: TEAM_ID\n }\n : {})\n }\n }\n);\n","import { getUrlParameter } from '@jotforminc/utils';\n\nconst isDevelopment = () => {\n return ['.jotform.pro', '.jotform.biz', '.jotform.dev'].indexOf(window.location.hostname.substr(-12)) > -1;\n};\n\nconst isRC = () => {\n return window.location.hostname === 'www.jotform.ooo';\n};\n\nexport const getSocketURL = () => {\n let socketUrl = `wss://${window.location.hostname}/ws`;\n\n if (isDevelopment()) {\n socketUrl = `wss://${window.location.hostname}/socket`;\n }\n\n if (isRC()) {\n socketUrl = 'wss://www.jotform.ooo/socket';\n }\n\n if (getUrlParameter('ws')) {\n socketUrl = getUrlParameter('ws');\n }\n\n return socketUrl;\n};\n\nexport const getChannelNamespace = () => {\n if (window.JOTFORM_ENV === 'ENTERPRISE') {\n return `/${window.COMPANY_SLUG}`;\n }\n\n return '';\n};\n","import { getUrlParameter } from '@jotforminc/utils';\n\nconst heartbeatInterval = Number.parseInt(getUrlParameter('heartbeatInterval'), 10) || 30000;\nconst lastHeartbeatResponseAcceptanceDuration = Number.parseInt(getUrlParameter('lastHeartbeatResponseAcceptanceDuration'), 10) || 65000;\n\nexport class CustomWebSocket {\n constructor(\n socketUrl,\n {\n socketSecret,\n onMessage,\n onOpen\n } = {}\n ) {\n this.baseSocketUrl = socketUrl;\n this.counter = 0;\n this.socketSecret = socketSecret;\n this.initTimeoutCounter = 2;\n this.lastHeartbeatResponse = 0;\n this.lastActivity = Date.now();\n this.useReconnectFromNowOn = false;\n this.reconnect = true;\n\n if (onMessage) {\n this.onMessage(onMessage);\n }\n if (onOpen) {\n this.onOpen(onOpen);\n }\n\n window.addEventListener('beforeunload', this.handleWindowBeforeUnload);\n\n this.initWS();\n }\n\n initWS = () => {\n this.reconnectTimer = null;\n\n if (this.initTimeoutCounter === 10) {\n return;\n }\n\n this.counter++;\n this.ws = new global.WebSocket(this.socketUrl);\n\n this.ws.addEventListener('open', this.handleOpen);\n this.ws.addEventListener('error', this.handleClose);\n this.ws.addEventListener('close', this.handleClose);\n this.ws.addEventListener('message', this.handleMessage);\n };\n\n handleOpen = () => {\n this.initTimeoutCounter = 2;\n this.lastHeartbeatResponse = Date.now();\n\n if (this.onOpenFunction) this.onOpenFunction();\n\n // Start heartbeating\n this.heartbeat();\n };\n\n handleClose = (e = {}) => {\n const { type = null } = e;\n if (type === 'error') {\n this.initTimeoutCounter++;\n }\n this.useReconnectFromNowOn = true;\n\n // Remove event listeners immediately\n this.ws.removeEventListener('open', this.handleOpen);\n this.ws.removeEventListener('error', this.handleClose);\n this.ws.removeEventListener('close', this.handleClose);\n this.ws.removeEventListener('message', this.handleMessage);\n if (typeof this.heartbeatTimer === 'number') {\n this.heartbeatTimer = clearTimeout(this.heartbeatTimer);\n }\n\n // Start trying to reconnect with a new ws after 1000ms\n if (this.reconnect) {\n this.reconnectTimer = setTimeout(this.initWS, this.initTimeoutCounter * 1000);\n }\n };\n\n handleMessage = event => {\n const message = JSON.parse(event.data);\n const { action, payload } = message;\n\n if (action === 'heartbeat') {\n this.lastHeartbeatResponse = payload.timestamp;\n } else if (this.onMessageFunction) {\n this.lastActivity = payload?.timestamp || Date.now();\n this.onMessageFunction(event);\n }\n };\n\n handleUnsubscribed = () => {\n this.reconnect = false;\n this.ws.close();\n };\n\n heartbeat = () => {\n if (this.ws.readyState !== 1) {\n return;\n }\n\n const now = Date.now();\n // If we did not receive any heartbeatResponse within lastHeartbeatResponseAcceptanceDuration\n // we assume that socket server died - even though we did not receive on('close') message somehow\n if (\n now - this.lastHeartbeatResponse\n > lastHeartbeatResponseAcceptanceDuration\n ) {\n this.handleClose();\n return;\n }\n\n // Send heartbeat message to socket\n this.sendJSON({\n action: 'heartbeat',\n payload: {\n timestamp: now\n }\n });\n\n // As long as socket is connected, heartbeat continues every heartbeatInterval\n this.heartbeatTimer = setTimeout(this.heartbeat, heartbeatInterval);\n };\n\n // Users of this class can use this function to pass a callback function\n // that will be called when socket receives a new message\n onMessage = callback => {\n this.onMessageFunction = callback;\n };\n\n // Users of this class can use this function to pass a callback function\n // that will be called when socket successfully establishes connection\n onOpen = callback => {\n this.onOpenFunction = callback;\n };\n\n send = data => {\n if (this.ws.readyState === 1 && global.navigator.onLine) {\n this.ws.lastActivity = Date.now();\n this.ws.send(data);\n }\n };\n\n sendJSON = data => {\n try {\n this.send(JSON.stringify(data));\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n };\n\n get socketUrl() {\n const url = new URL(this.baseSocketUrl);\n\n url.searchParams.set('referer', window.location.pathname);\n url.searchParams.set('counter', this.counter);\n url.searchParams.set('socketSecret', this.socketSecret);\n\n return url;\n }\n\n handleWindowBeforeUnload = () => {\n this.reconnect = false;\n if (typeof this.reconnectTimer === 'number') {\n this.reconnectTimer = clearTimeout(this.reconnectTimer);\n }\n\n const { ws } = this;\n if (ws && ws.readyState === global.WebSocket.OPEN) {\n ws.close();\n }\n };\n}\n","import { makeActionCreator } from '../utils';\nimport { syncActions, asyncActions } from './actionTypes';\n\nconst {\n USER_FETCH,\n FORM_FETCH,\n FORM_UPDATE,\n SUBMISSION_RENEW,\n SUBMISSIONS_FETCH,\n SUBMISSION_UPDATE,\n SUBMISSION_DELETE,\n USER_FORMS_FETCH,\n QUESTIONS_FETCH,\n QUESTION_UPDATE,\n ADD_DUMMY_QUESTIONS,\n BULK_SUBMISSION_UPDATE,\n BULK_SUBMISSION_DELETE,\n BULK_SUBMISSION_SELECTION,\n QUESTION_VALUES_FETCH,\n DOWNLOAD_ATTACHMENTS,\n TEAM_PROPERTIES_FETCH,\n USER_TEAM_ROLES_FETCH,\n SYSTEM_PLANS_FETCH,\n CREATE_AI_AGENT\n} = asyncActions;\n\nconst {\n SET_LITE_MODE,\n SET_EDIT_MODE,\n SET_ACTIVE_SUBMISSION,\n PREV_SUBMISSION,\n NEXT_SUBMISSION,\n FORM_UPDATE_SYNC,\n SET_FLAG,\n SET_SUBMISSION_NEW,\n ASSIGN_TAG,\n UPDATE_TAG,\n SET_FILTER_TEXT,\n SELECT_SUBMISSION,\n PREPARE_PRINT,\n PRINT_COMPLETE,\n PREPARE_MULTIPLE_DOWNLOAD,\n SET_FILTER_OBJECT,\n UPDATE_FILTER_OBJECT,\n SET_SINGLE,\n SET_ACTIVE_TAB,\n SET_HIGHLIGHT_PENDING_APPROVAL,\n SET_SUBMISSION_PENDING_APPROVAL,\n REMOVE_SUBMISSION_FROM_LIST,\n SET_VIEWS,\n SET_REPLY_VISIBILITY,\n RENEW_FORM,\n RENEW_QUESTIONS,\n UPDATE_SENTBOX,\n SET_IS_ALL_SENTBOX,\n SET_OPEN_INTRO_MODAL,\n INIT_TEAM,\n SET_USER_PERMISSIONS,\n SET_MESSAGE,\n CLOSE_MESSAGE,\n SET_DECRYPTION_MODAL,\n SET_CAMPAIGN_ACTIVE,\n SET_CAMPAIGN_SUBMISSION_CONTENT_VISIBILITY,\n SET_SETTINGS_PANEL,\n SET_SUBMISSION_VIEW_LOADING,\n SET_AI_HISTORY_VISIBILITY,\n SET_AI_AVATAR_ICON_URL,\n SET_AI_AGENT_NAME,\n SET_IS_FULLSTORY_SESSION_URL_SAVED\n} = syncActions;\n\n// User actions\nexport const fetchUser = makeActionCreator(USER_FETCH.REQUEST);\nexport const fetchSystemPlans = makeActionCreator(SYSTEM_PLANS_FETCH.REQUEST);\nexport const fetchUserForms = makeActionCreator(USER_FORMS_FETCH.REQUEST);\nexport const setUserPermissions = makeActionCreator(SET_USER_PERMISSIONS, 'permissions', 'role');\n\n// Form actions\nexport const fetchForm = makeActionCreator(FORM_FETCH.REQUEST, 'formID', 'initial');\nexport const updateForm = makeActionCreator(FORM_UPDATE.REQUEST, 'formID', 'formProperties');\nexport const renewForm = makeActionCreator(RENEW_FORM, 'formProperties');\n\n// Use sync method if you do not need to update api\nexport const updateFormSync = makeActionCreator(FORM_UPDATE_SYNC, 'formProperties');\n\n// Question actions\nexport const fetchQuestions = makeActionCreator(QUESTIONS_FETCH.REQUEST, 'formID');\nexport const updateQuestion = makeActionCreator(QUESTION_UPDATE.REQUEST, 'formID', 'qid', 'data');\nexport const addDummyQuestions = makeActionCreator(ADD_DUMMY_QUESTIONS.REQUEST, 'formID', 'questions');\nexport const updateTag = makeActionCreator(UPDATE_TAG, 'data');\nexport const fetchQuestionValues = makeActionCreator(QUESTION_VALUES_FETCH.REQUEST, 'qid');\nexport const renewQuestions = makeActionCreator(RENEW_QUESTIONS, 'formID', 'questionsObj');\n\n// Submission actions\nexport const nextSubmission = makeActionCreator(NEXT_SUBMISSION);\nexport const prevSubmission = makeActionCreator(PREV_SUBMISSION);\nexport const setActiveSubmission = makeActionCreator(SET_ACTIVE_SUBMISSION, 'sid');\nexport const setSubmissionFlag = makeActionCreator(SET_FLAG, 'sid', 'status');\nexport const setSubmissionNew = makeActionCreator(SET_SUBMISSION_NEW, 'status');\nexport const assignTag = makeActionCreator(ASSIGN_TAG, 'status');\nexport const updateSentbox = makeActionCreator(UPDATE_SENTBOX);\nexport const updateSubmission = makeActionCreator(SUBMISSION_UPDATE.REQUEST, 'sid', 'data');\nexport const fetchSubmission = makeActionCreator(SUBMISSIONS_FETCH.REQUEST, 'offset', 'limit');\nexport const deleteSubmission = makeActionCreator(SUBMISSION_DELETE.REQUEST, 'sid');\nexport const updateBulkSubmission = makeActionCreator(BULK_SUBMISSION_UPDATE.REQUEST, 'submissionIDs', 'data');\nexport const deleteBulkSubmission = makeActionCreator(BULK_SUBMISSION_DELETE.REQUEST, 'submissionIDs');\nexport const renewSubmission = makeActionCreator(SUBMISSION_RENEW.REQUEST, 'sid', 'showToast');\nexport const setSingleSubmission = makeActionCreator(SET_SINGLE, 'submission');\nexport const setSubmissionPendingApproval = makeActionCreator(SET_SUBMISSION_PENDING_APPROVAL, 'sid', 'hasPendingApproval');\nexport const removeSubmissionFromList = makeActionCreator(REMOVE_SUBMISSION_FROM_LIST, 'sid');\nexport const downloadAttachments = makeActionCreator(DOWNLOAD_ATTACHMENTS.REQUEST, 'filter');\n\n// Ui actions\nexport const setReplyVisibilityCustom = makeActionCreator(SET_REPLY_VISIBILITY, 'visibility');\nexport const setLiteMode = makeActionCreator(SET_LITE_MODE);\nexport const setEditMode = makeActionCreator(SET_EDIT_MODE, 'submissionEditMode');\nexport const setFilterText = makeActionCreator(SET_FILTER_TEXT, 'filterText');\nexport const preparePrint = makeActionCreator(PREPARE_PRINT, 'layout', 'spacing', 'thread');\nexport const setMessage = makeActionCreator(SET_MESSAGE, 'message');\nexport const closeMessage = makeActionCreator(CLOSE_MESSAGE);\nexport const setSettings = makeActionCreator(SET_SETTINGS_PANEL, 'settingsPanel');\nexport const setSubmissionViewLoading = makeActionCreator(SET_SUBMISSION_VIEW_LOADING, 'submissionViewLoading');\n\nexport const printComplete = makeActionCreator(PRINT_COMPLETE);\nexport const prepareMultipleDownload = makeActionCreator(PREPARE_MULTIPLE_DOWNLOAD, 'pdfID', 'actionType', 'activeTab');\nexport const setHighlightPendingApproval = makeActionCreator(SET_HIGHLIGHT_PENDING_APPROVAL, 'highlightPendingApproval');\nexport const setOpenIntroModal = makeActionCreator(SET_OPEN_INTRO_MODAL, 'modalKey');\nexport const setDecryptionModal = makeActionCreator(SET_DECRYPTION_MODAL, 'modalKey');\nexport const setCampaignActive = makeActionCreator(SET_CAMPAIGN_ACTIVE, 'active');\nexport const setCampaignSubmissionContentVisiblity = makeActionCreator(SET_CAMPAIGN_SUBMISSION_CONTENT_VISIBILITY, 'visible');\n\n// TABS actions\nexport const setActiveTab = makeActionCreator(SET_ACTIVE_TAB, 'tab');\nexport const setIsAllSentbox = makeActionCreator(SET_IS_ALL_SENTBOX, 'isAllSentbox');\nexport const selectSubmission = makeActionCreator(SELECT_SUBMISSION, 'sid');\nexport const selectBulkSubmissions = makeActionCreator(BULK_SUBMISSION_SELECTION.REQUEST, 'filter');\nexport const setFilterObject = makeActionCreator(SET_FILTER_OBJECT, 'filters');\nexport const updateFilterObject = makeActionCreator(UPDATE_FILTER_OBJECT, 'filters');\nexport const setViews = makeActionCreator(SET_VIEWS, 'views');\n\nexport const setAIHistoryVisibility = makeActionCreator(SET_AI_HISTORY_VISIBILITY, 'isAIHistoryViewVisible');\nexport const setAiAvatarIconUrl = makeActionCreator(SET_AI_AVATAR_ICON_URL, 'aiAvatarIconUrl');\nexport const setAiAgentName = makeActionCreator(SET_AI_AGENT_NAME, 'aiAgentName');\n\nexport const setIsFullStorySessionUrlSaved = makeActionCreator(SET_IS_FULLSTORY_SESSION_URL_SAVED, 'isFullStorySessionUrlSaved');\n\n// Team actions\nexport const initTeam = makeActionCreator(INIT_TEAM);\nexport const setTeamProperties = makeActionCreator(TEAM_PROPERTIES_FETCH.SUCCESS, 'properties');\nexport const setUserTeamRoles = makeActionCreator(USER_TEAM_ROLES_FETCH.SUCCESS, 'roles');\n\n// AI Agent Actions\nexport const createAIAgent = makeActionCreator(CREATE_AI_AGENT.REQUEST);\n","import { CustomWebSocket, getChannelNamespace, getSocketURL } from '@jotforminc/custom-socket-client';\nimport React, { useEffect } from 'react';\nimport { connect } from 'react-redux';\nimport { func, node, string } from 'prop-types';\nimport { useFeatures } from '@paralleldrive/react-feature-toggles';\nimport { fetchSubmission } from '../actions';\nimport { getTeamID, userSelector, userTypeSelector } from '../selectors';\n\nlet _clientID = null;\n\nexport const getSocketClientID = () => _clientID;\n\nexport const setSocketClientID = clientID => {\n _clientID = clientID;\n};\n\nconst createMessage = ({ channel, action, payload }) => {\n const namespace = getChannelNamespace();\n\n return JSON.stringify({\n channel: `${namespace}${channel}`,\n action,\n payload\n });\n};\n\nconst SocketProvider = ({\n children,\n email,\n formID,\n onSubmissionRequest,\n teamID,\n username,\n userType\n}) => {\n const features = useFeatures();\n const refreshSubmissions = () => {\n onSubmissionRequest();\n };\n\n useEffect(() => {\n const handleSocketConnection = async () => {\n if (!formID || !features.includes('useSocket')) return;\n\n const channel = `/forms/${formID}/submissions`;\n let socket = { send: () => { } };\n const onMessage = event => {\n const message = JSON.parse(event.data);\n const { action } = message;\n switch (action) {\n case 'set-client-id': {\n const { id } = message.payload;\n setSocketClientID(id);\n socket.send(\n createMessage({\n channel,\n action: socket.useReconnectFromNowOn ? 'reconnect-channel' : 'join-channel',\n payload: {\n product: 'inbox',\n productID: formID,\n teamID,\n timestamp: socket.lastActivity,\n user: {\n username: username || email,\n type: userType === 'user' ? 'USER' : 'FORM_USER'\n }\n }\n })\n );\n break;\n }\n case 'update-submission':\n case 'new-submission': {\n refreshSubmissions();\n break;\n }\n default:\n break;\n }\n };\n let socketSecret = null;\n try {\n const response = await fetch('/API/share/socketChannel/createSocketSecret').then(res => res.json());\n socketSecret = response.content;\n } catch (e) {\n console.log('error', e);\n }\n socket = new CustomWebSocket(getSocketURL(), { onMessage, socketSecret });\n\n return () => {\n socket.handleUnsubscribed();\n };\n };\n\n handleSocketConnection();\n }, [formID]);\n\n return <>{children};\n};\n\nSocketProvider.propTypes = {\n children: node.isRequired,\n formID: string.isRequired,\n onSubmissionRequest: func.isRequired,\n username: string.isRequired,\n email: string.isRequired,\n userType: string.isRequired,\n teamID: string.isRequired\n};\n\nconst mapDispatchToProps = {\n onSubmissionRequest: fetchSubmission\n};\n\nconst mapStateToProps = stateProps => {\n const { username, email } = userSelector(stateProps);\n const userType = userTypeSelector(stateProps);\n const teamID = getTeamID(stateProps);\n\n return ({\n email,\n teamID,\n username,\n userType\n });\n};\n\nconst ConnectedSocketProvider = connect(mapStateToProps, mapDispatchToProps)(SocketProvider);\n\nexport default ConnectedSocketProvider;\n","import { toast } from 'react-toastify';\nimport { saveBlobAsFile } from '@jotforminc/utils';\nimport { getPreparedFilters } from '@jotforminc/search-filter';\nimport { requestLayer } from './requestLayer';\nimport {\n getQueryParameter, createAxiosParams\n} from '../utils';\n\nimport t from '../constants/texts';\nimport { getSocketClientID } from '../contexts/Socket';\n\nconst activeTabFilter = {\n inbox: ['DELETED', 'ARCHIVED', 'CUSTOM'],\n archive: ['ACTIVE', 'DELETED'],\n trash: ['ACTIVE', 'ARCHIVED']\n};\n\nconst apiKey = getQueryParameter('apiKey');\n\n// Core api call function with request layer\nconst apiCallWithLayer = ({\n path,\n options = {},\n params = {},\n data = {},\n isFormData = true,\n method = 'get',\n callback = ({ data: { content } = {} }) => content,\n error = err => {\n if (err.response) {\n console.log(err.response.data);\n console.log(err.response.status);\n console.log(err.response.headers);\n } else if (err.request) {\n console.log(err.request);\n } else {\n // eslint-disable-next-line no-console\n console.log('Error', err.message);\n }\n }\n}) => {\n const extraQueryParameter = {};\n if (window.useFromPortal) {\n extraQueryParameter.usePortal = window.portalID;\n }\n if (apiKey) {\n extraQueryParameter.apiKey = apiKey;\n }\n\n return requestLayer[method.toLowerCase()](path, data, {\n params: { ...params, ...extraQueryParameter },\n ...options,\n headers: {\n ...options?.headers,\n ...(getSocketClientID() && { 'jf-client-id': getSocketClientID() })\n },\n isFormData: isFormData\n }).then(callback).catch(error);\n};\nconst addSubmittedVia = '&addSubmittedVia=1';\n// Temporarily closed\n// eslint-disable-next-line no-constant-condition\nexport const downloadSubmissions = (formID, type, data, isHIPAA = false) => apiCallWithLayer({\n path: `inbox/${formID}/download`,\n method: 'post',\n data: { type, data },\n params: { next: 1, inbox: 1, ...(isHIPAA && { tempTables: 'sync' }) }\n});\nexport const getUser = () => apiCallWithLayer({ path: 'user/combinedinfo', params: { campaign: 1, loc: 1 }, callback: ({ data: { content = {} } = {} }) => content });\nexport const getSystemPlans = () => apiCallWithLayer({ path: 'system/plans', callback: ({ data: { content = {} } = {} }) => content });\nexport const getEnv = () => apiCallWithLayer({ path: 'env' });\nexport const getUserForms = (userType, offset, limit) => apiCallWithLayer({ path: `${userType}/forms`, params: { offset, limit } });\nexport const getUserFilledForms = () => apiCallWithLayer({ path: 'filledforms' });\nexport const getForm = id => apiCallWithLayer({\n path: `form/${id}`,\n params: {\n next: 1,\n getPendingApprovalCount: 1,\n sheets: 1,\n getCompletedApprovalCount: 1,\n hasAnySignSubmission: 1\n }\n});\nexport const getFormPDFTemplates = id => apiCallWithLayer({ path: `form/${id}/pdf` });\nexport const getFormProperties = id => apiCallWithLayer({\n path: `form/${id}/properties`,\n params: {\n parseJSON: 1,\n next: 1,\n addSubmittedVia: 1\n }\n});\nexport const getAIAgentChatMessages = (formID, chatID) => apiCallWithLayer({\n path: `/API/ai-agent/${formID}/chat/${chatID}`\n});\n\nexport const getAIAgentProps = agentId => apiCallWithLayer({\n path: `/API/ai-agent-builder/agents/${agentId}/properties`\n});\n\nexport const getAiAgents = formId => apiCallWithLayer({\n path: `ai-agent-builder/agents/resources/form/${formId}`\n});\n\nexport const getAIAgent = agentId => apiCallWithLayer({\n path: `/API/ai-agent-builder/agents/${agentId}`\n});\n\nexport const saveAgentFSSession = (agentId, data) => apiCallWithLayer({\n path: `ai-agent-builder/${agentId}/save-agent-session`, method: 'post', data\n});\n\nexport const createAiAgent = data => apiCallWithLayer({\n path: 'ai-agent-builder/agent', method: 'post', data\n});\n\nexport const getFormQuestions = id => apiCallWithLayer({\n path: `form/${id}/questions`,\n params: {\n next: 1,\n parseJSON: 1,\n inbox: 1,\n workflow: 1,\n addSubmittedViaNew: 1,\n addViaApprovalFlow: 1\n }\n});\nexport const downloadAgentHistory = (formID, chatID) => apiCallWithLayer({\n path: `/API/ai-agent/${formID}/chat/${chatID}/download`,\n options: { responseType: 'arraybuffer' },\n callback: response => response\n});\nexport const getTheme = themeID => apiCallWithLayer({ path: `theme/${themeID}` });\nexport const updateFormProperties = (formID, data) => apiCallWithLayer({ path: `form/${formID}/properties`, method: 'post', data });\nexport const addQuestion = (formID, data) => apiCallWithLayer({\n path: `form/${formID}/questions`, method: 'post', data, isFormData: true\n});\nexport const removeQuestion = (formID, id) => apiCallWithLayer({ path: `sheet/${formID}/${id}`, method: 'delete' });\nexport const updateQuestion = (formID, qid, data) => apiCallWithLayer({ path: `form/${formID}/question/${qid}`, method: 'post', data });\nexport const updateSubmission = (sid, data) => apiCallWithLayer({\n path: `submission/${sid}`, method: 'post', data, params: { inbox: 1 }\n});\nexport const updateBulkSubmission = (formID, data) => apiCallWithLayer({ path: `form/${formID}/submissions/bulk_update`, method: 'post', data });\nexport const deleteSubmission = sid => apiCallWithLayer({ path: `submission/${sid}`, method: 'delete' });\nexport const deletePendingSubmission = sid => apiCallWithLayer({ path: `user/pendingsubmission/${sid}`, method: 'delete' });\nexport const deleteBulkPendingSubmission = (formID, data) => apiCallWithLayer({ path: `form/${formID}/pendingsubmissions/bulk_delete`, method: 'post', data });\nexport const deleteBulkSubmission = (formID, data) => apiCallWithLayer({ path: `form/${formID}/submissions/bulk_delete`, method: 'post', data });\nexport const getAllSubmissions = ({ filter = {} }) => {\n const preparedFilter = getPreparedFilters(filter);\n\n return apiCallWithLayer({\n path: 'mysubmissions',\n params: {\n addForm: 1,\n orderby: 'created_at',\n addRequestDelete: 1,\n addSubmitter: 1,\n addSubmittedVia: 1,\n next: 1,\n filter: JSON.stringify(preparedFilter)\n },\n callback: response => response?.data\n });\n};\n\nexport const directDownloadUploads = (formID, email, filter, customName) => apiCallWithLayer({\n path: '/server.php',\n callback: response => response,\n params: {\n action: 'directDownloadableUploads',\n project: 'inbox',\n formID: formID,\n type: 'ATTACHMENTS',\n email: email,\n customZipName: customName,\n selections: filter\n },\n error: err => err?.response\n});\n\nexport const downloadUploads = (formID, username, email, filter, selectOrExcludeParamKey) => apiCallWithLayer({\n path: '/server.php',\n params: {\n action: 'exportData',\n project: 'inbox',\n formID: formID,\n type: 'ATTACHMENTS',\n email: email,\n username: username,\n [selectOrExcludeParamKey]: filter\n },\n callback: response => response,\n error: err => err?.response\n});\n\nexport const checkDownloadStatus = (formID, id) => apiCallWithLayer({ path: `form/${formID}/submissions/export/status`, params: { id } });\n\nexport const getSubmissions = ({\n endpoint = '',\n offset = 0,\n limit = 20,\n filter = {},\n activeTab,\n cancelToken = null,\n orderby = 'created_at',\n sort = 'desc',\n isHIPAA = false,\n callback = ({ data: { content, resultSet } }) => ({ content, resultSet }),\n isSign = false,\n checkSigns = false,\n onlySubmissionIndex = null,\n includeAIIncompleteSubmissions = false\n} = {}) => {\n const baseFilter = { 'status:ne': activeTabFilter[activeTab] ?? ['DELETED', 'ARCHIVED', 'CUSTOM'] };\n const mergedFilter = getPreparedFilters(filter ? { ...baseFilter, ...filter } : baseFilter);\n const params = createAxiosParams({\n isHIPAA,\n isSign,\n checkSigns,\n limit,\n offset,\n filter: JSON.stringify(mergedFilter),\n orderby,\n sort,\n onlySubmissionIndex,\n ...includeAIIncompleteSubmissions && { includeAIIncompleteSubmissions: true }\n });\n const options = cancelToken ? { cancelToken } : null;\n return apiCallWithLayer({\n options,\n path: endpoint,\n callback,\n params\n });\n};\n\nexport const getConversationSubmissions = ({ id = -1, ...query }) => getSubmissions({\n endpoint: `ai-agent/form/${id}/conversations`,\n ...query\n});\n\nexport const getFormSubmissionsGenerator = isFormUser => ({ id = -1, ...query } = {}) => getSubmissions({\n endpoint: `${isFormUser ? 'formuser/' : ''}form/${id}/submissions${addSubmittedVia}`,\n ...query\n});\nexport const getFormSubmissions = getFormSubmissionsGenerator(false);\nexport const getFormUserSubmissions = getFormSubmissionsGenerator(true);\nexport const getSubmissionIndex = (formID, sid, filter, activeTab, checkSigns) => getFormSubmissions({\n id: formID,\n limit: 0,\n filter: { 'id:gt': sid, ...filter },\n activeTab,\n checkSigns,\n callback: res => res?.data?.resultSet?.count || 0\n});\n\nexport const getFormUserFormProperties = id => apiCallWithLayer({\n path: `formuser/form/${id}/properties`,\n params: {\n parseJSON: 1,\n next: 1,\n addSubmittedVia: 1\n }\n});\nexport const updateFormUserFormProperties = (formID, data) => apiCallWithLayer({ path: `formuser/form/${formID}/properties`, method: 'post', data: data });\nexport const getPendingSubmissions = ({ id = -1, ...query } = {}) => getSubmissions({\n endpoint: 'formuser/submissions/drafts',\n ...query,\n filter: { ...query.filter, 'form_id:eq': id }\n});\nexport const getArchivedSubmissions = ({ id = -1, filter = {}, ...query } = {}) => getSubmissions({\n endpoint: `form/${id}/submissions`,\n filter: {\n ...filter, status: ['ARCHIVED'], 'status:ne': []\n },\n ...query\n});\n\nexport const getIncompleteSubmissions = ({ id = -1, ...query }) => getSubmissions({\n endpoint: `incompleteSubmissions/${id}/inbox`,\n filter: {\n ...query.filter\n },\n ...query\n});\n\nexport const getTrash = ({ id = -1, filter = {}, ...query } = {}) => getSubmissions({\n endpoint: `form/${id}/submissions/trash`,\n filter: {\n ...filter, 'status:ne': []\n },\n ...query\n});\n\nexport const getNotes = ({ submissionID } = {}) => apiCallWithLayer({ path: `submission/${submissionID}/notes` });\nexport const getUploadFields = ({ formID, submissionID } = {}) => apiCallWithLayer({\n path: `form/${formID}/files`,\n params: {\n filter: `{\"submission_id\":\"${submissionID}\"}`\n }\n});\n\nexport const addNote = ({\n submissionID, isContactOwner, content, parentID, parentType, uploadNames\n} = {}) => apiCallWithLayer({\n path: `submission/${submissionID}/notes`,\n params: { isContactOwner },\n method: 'POST',\n data: {\n content: JSON.stringify(content), parentID, parentType, attachments: JSON.stringify(uploadNames)\n }\n});\nexport const removeNoteAttachment = ({ id, submission_id: submissionID, newAttachments }) => apiCallWithLayer({\n path: `submission/${submissionID}/threadAttachment/${id}`,\n method: 'POST',\n data: {\n attachments: JSON.stringify(newAttachments)\n }\n});\nexport const updateNote = ({\n id, submissionID, content, parentID, parentType, uploadNames\n} = {}) => apiCallWithLayer({\n path: `submission/${submissionID}/notes/${id}`,\n method: 'POST',\n data: {\n id,\n content: JSON.stringify(content),\n parentID,\n parentType,\n attachments: JSON.stringify(uploadNames)\n }\n});\nexport const deleteNote = ({ id, submissionID } = {}) => apiCallWithLayer({\n path: `submission/${submissionID}/notes/${id}`,\n method: 'DELETE'\n});\n\nexport const generatePDF = (formID, reportID, submissionID, username, filename, liteMode, isHIPAA, tab) => {\n const params = {\n type: 'PDFv2',\n ...(liteMode && { liteMode: 1 }),\n formid: formID,\n submissionid: submissionID,\n ...(reportID ? { reportid: reportID } : { inbox: 1 }),\n ...(isHIPAA && { hipaa: 1 }),\n pdfName: filename,\n username: username,\n useNew: 1,\n tab: tab\n };\n\n return apiCallWithLayer({\n path: 'generatePDF',\n params,\n options: {\n responseType: isHIPAA ? 'arraybuffer' : 'json'\n },\n callback: response => {\n const { headers: responseHeaders } = response;\n if (responseHeaders['content-type'].indexOf('application/pdf') > -1) {\n const fileName = responseHeaders['content-disposition'].match(/filename=([\"']?)([^\"']*)\\1/)?.[2];\n saveBlobAsFile(new global.Blob([response.data], { type: 'application/pdf' }), `${fileName || submissionID}.pdf`);\n return null;\n }\n\n const { data: { content } = {} } = response;\n return content;\n }\n });\n};\n\nexport const generatePrintVersionPDF = (formID, submissionID, { liteMode = false, tabID = 'inbox' } = {}) => {\n const params = {};\n if (liteMode) {\n params.liteMode = '1';\n }\n\n return apiCallWithLayer({\n path: `inbox/${formID}/${tabID}/${submissionID}/print-version-pdf`,\n params,\n options: { responseType: 'arraybuffer' },\n callback: response => {\n const { headers: responseHeaders } = response;\n if (responseHeaders['content-type'].indexOf('application/pdf') > -1) {\n saveBlobAsFile(new global.Blob([response.data], { type: 'application/pdf' }), `${submissionID}.pdf`);\n return null;\n }\n\n const { data: { content } = {} } = response;\n return content;\n }\n });\n};\n\nexport const generatePDFFilled = (formID, submissionID) => apiCallWithLayer({\n path: `pdf-converter/${formID}/fill-pdf`,\n options: { responseType: 'arraybuffer' },\n params: {\n submissionID: submissionID,\n download: 1\n },\n callback: response => {\n const { headers: responseHeaders } = response;\n if (responseHeaders['content-type'].indexOf('application/pdf') > -1) {\n let fileName = `${submissionID}.pdf`;\n if (responseHeaders['content-disposition'] && responseHeaders['content-disposition'].indexOf('filename=')) {\n fileName = window.decodeURI(responseHeaders['content-disposition'].split('filename=')[1])\n .replace(new RegExp('\"', 'g'), '');\n }\n saveBlobAsFile(new global.Blob([response.data], { type: 'application/pdf' }), fileName);\n }\n return null;\n }\n});\n\nexport const generateFillablePDF = (formID, pdfID) => {\n const data = new global.FormData();\n data.append('pdfid', pdfID);\n data.append('formid', formID);\n data.append('pageSize', '210,297');\n return apiCallWithLayer({\n data,\n method: 'post',\n params: {\n type: 'PDFv2'\n },\n isFormData: false,\n options: { responseType: 'arraybuffer' },\n path: 'generateFillablePDF',\n callback: response => {\n const { headers: responseHeaders, data: responseData } = response;\n if (responseHeaders['content-type'].indexOf('application/json') > -1) {\n throw new Error('Unable to download fillable PDF!');\n }\n saveBlobAsFile(new global.Blob([responseData], { type: 'application/pdf' }), `${pdfID}.pdf`);\n return null;\n }\n });\n};\n\nexport const isFormUser = () => apiCallWithLayer({\n path: '/server.php',\n method: 'post',\n data: { action: 'isLoggedIn' },\n callback: ({ data = {} }) => data\n});\n\nexport const generateMultiplePDF = data => {\n const params = { ...data };\n\n return apiCallWithLayer({\n path: 'generateMultiplePDFs', method: 'post', data: params\n });\n};\nexport const generateMultiplePDFFilled = data => {\n const baseFilter = { 'status:ne': activeTabFilter[data?.activeTab] ?? ['DELETED', 'ARCHIVED', 'CUSTOM'] };\n const mergedFilter = getPreparedFilters(baseFilter);\n\n return apiCallWithLayer({\n path: `pdf-converter/${data?.formID}/download-all`,\n method: 'get',\n params: {\n submissionIDs: data?.submissionIDs ? data?.submissionIDs : null,\n filter: JSON.stringify(mergedFilter)\n }\n });\n};\nexport const generateShortURL = url => apiCallWithLayer({ path: 'shorturl', method: 'post', data: url });\nexport const getSubmission = submissionID => apiCallWithLayer({\n path: `submission/${submissionID}`,\n params: {\n addSubmitter: 1,\n addWorkflowStatus: 1,\n addPendingApprovals: 1,\n addThread: 1,\n addRequestDelete: 1,\n addSubmittedVia: 1\n },\n method: 'get'\n});\nexport const createSubmissionAccess = submissionID => apiCallWithLayer({\n path: 'submission/create-access',\n params: {\n sid: submissionID,\n email: 'JOTFORM_PUBLIC'\n }\n});\nexport const getQuestionValues = (formID, qid, activeTab) => apiCallWithLayer({ path: `form/${formID}/question/${qid}/values`, params: { activeTab } });\nexport const getSubmittedViaAppValues = formID => apiCallWithLayer({ path: `form/${formID}/portals` });\n\nexport const getShareLink = formID => apiCallWithLayer({\n path: `share/inbox/${formID}/link`,\n // in order to prevent to Sentry\n error: () => {}\n});\n\nexport const generateShareLink = (formID, options = {}) => apiCallWithLayer({ path: `share/inbox/${formID}/link`, method: 'post', data: options });\nexport const getAssignees = formID => apiCallWithLayer({ path: `share/inbox/${formID}` });\nexport const bulkShare = (formID, options = {}) => apiCallWithLayer({\n path: `share/inbox/${formID}/bulkShare`,\n method: 'post',\n data: options\n});\n\nexport const getFormPermissions = formID => apiCallWithLayer({ path: `permissions/${formID}/inbox`, params: { new: 1 } });\n\nexport const revokeUsers = (resourceShareIDs = []) => apiCallWithLayer({\n path: 'share/bulkDelete',\n method: 'post',\n data: { resourceShareIDs }\n});\n\nexport const requestEditAccess = (formID, options = {}, project = 'inbox') => apiCallWithLayer({\n path: `share/request-access/${project}/${formID}`,\n method: 'post',\n data: options,\n callback: ({ data: { message, content } = {} }) => {\n if (message === 'success' && !options.preventToast) {\n toast.success(t.REQUEST_SENT, {\n type: toast.TYPE.SUCCESS,\n position: toast.POSITION.TOP_RIGHT,\n className: 'success',\n autoClose: true\n });\n }\n\n return options.preventToast ? message : content;\n }\n});\n\nexport const deleteRequest = requestID => apiCallWithLayer({\n path: `share/request-access/${requestID}`,\n method: 'delete',\n callback: ({ data: { message } = {} }) => {\n return message;\n }\n});\n\nexport const removeAccessRequest = requestID => apiCallWithLayer({\n path: `share/request-access/${requestID}`,\n method: 'delete'\n});\n\nexport const approveAccessRequest = requestID => apiCallWithLayer({\n path: `share/request-access/${requestID}/approve`\n});\n\nexport const resendShareInvitationEmail = resourceShareID => apiCallWithLayer({\n path: `share/${resourceShareID}/resendInvitation`,\n callback: ({ data }) => data\n});\n\nexport const updatePermissions = (resourceShareID, permissions) => apiCallWithLayer({\n path: `share/${resourceShareID}/update`,\n method: 'post',\n data: { permissions: permissions }\n});\n\nexport const getPendingApprovalSubmissions = ({ id = -1, filter = {}, ...query } = {}) => getSubmissions({\n endpoint: `workflow/form/${id}/submissions/pending`,\n filter,\n ...query\n});\n\nexport const getSnoozedApprovalSubmissions = ({ id = -1, filter = {}, ...query } = {}) => getSubmissions({\n endpoint: `workflow/form/${id}/submissions/snoozed`,\n filter,\n ...query\n});\n\nexport const getCompletedSubmissions = ({ id = -1, filter = {}, ...query } = {}) => getSubmissions({\n endpoint: `workflow/form/${id}/submissions/completed`,\n filter,\n ...query\n});\n\nexport const getApprovalSubmissions = ({ id = -1, filter = {}, ...query } = {}) => getSubmissions({\n endpoint: `workflow/form/${id}/submissions`,\n filter,\n ...query\n});\n\nexport const terminateWorkflow = async instanceID => (instanceID\n ? apiCallWithLayer({\n method: 'post',\n path: `/API/workflow/instance/${instanceID}/cancel`\n })\n : undefined);\n\nexport const startOverWorkflow = async instanceID => (instanceID\n ? apiCallWithLayer({\n method: 'post',\n path: `/API/workflow/instance/${instanceID}/restart`\n })\n : undefined);\n\nexport const requestMoreInfoTask = (taskID, content) => apiCallWithLayer({\n path: `/API/workflow/task/${taskID}/requestMoreInfo`,\n method: 'post',\n data: content,\n isFormData: false\n});\n\n// SIGN #BEGIN\nexport const cancelSignDocument = (documentID, reason = '') => apiCallWithLayer({\n path: `sign/${documentID}/cancel`,\n method: 'post',\n data: { reason }\n});\n\nexport const sendSignReminderEmail = documentID => apiCallWithLayer({\n path: `sign/${documentID}/reminder`,\n method: 'post',\n callback: ({ data: { message } }) => { return message; }\n});\n\nexport const getSignAllDocumentsIndex = ({\n id = -1, filter = {}, status = 'allDocument', sid, ...query\n} = {}) => {\n return getSubmissions({\n endpoint: `sign/form/${id}/submissions/${status}`,\n filter,\n ...query,\n isSign: true,\n onlySubmissionIndex: sid,\n callback: res => res?.data?.content || 0\n });\n};\n\nexport const getSignAllDocuments = ({\n id = -1, filter = {}, status = 'allDocument', ...query\n} = {}) => {\n return getSubmissions({\n endpoint: `sign/form/${id}/submissions/${status}`, filter, ...query, isSign: true\n });\n};\n\nexport const getSignForms = (filter, limit, offset = 0) => apiCallWithLayer({\n path: 'sign',\n params: {\n limit,\n offset,\n filter: JSON.stringify(filter)\n },\n method: 'get'\n});\n\nexport const getSignWaitingCounts = formId => apiCallWithLayer({\n path: `sign/${formId}/waitingCounts`,\n method: 'get'\n});\n// SIGN #END\n\n/* eslint-disable camelcase */\nexport const gpt3Completion = ({\n prompt,\n temprature = 1,\n top_p = 0.2,\n stop = '',\n max_tokens = 100,\n engine = 'davinci',\n frequency_penalty = 0\n}) => {\n if (!prompt) {\n throw Error('prompt must be set');\n }\n\n const formData = new global.FormData();\n formData.append('prompt', prompt);\n formData.append('temprature', temprature);\n formData.append('top_p', top_p);\n formData.append('stop', stop);\n formData.append('max_tokens', max_tokens);\n formData.append('engine', engine);\n formData.append('frequency_penalty', frequency_penalty);\n\n return apiCallWithLayer({\n path: 'gpt3/completion',\n method: 'post',\n data: formData,\n isFormData: false,\n callback: ({ data: { content } = {} }) => {\n const text = content?.[0]?.text || '';\n return text;\n }\n });\n};\n/* eslint-enable camelcase */\n\nexport const getFilter = (formID, q) => {\n return apiCallWithLayer({\n path: `/API/marvel/${formID}/getFilter`,\n params: { query: JSON.stringify(q) },\n callback: ({ data }) => data\n });\n};\n\nexport const getInboxViews = formID => apiCallWithLayer({\n path: `form/${formID}/inboxviews`\n});\n\nexport const saveInboxView = (formID, { filterObject, name, color } = {}) => {\n const data = new global.FormData();\n data.append('filterObject', JSON.stringify(filterObject));\n data.append('name', name);\n\n if (color) {\n data.append('color', color);\n }\n\n return apiCallWithLayer({\n path: `form/${formID}/inboxviews`,\n method: 'post',\n data,\n isFormData: false\n });\n};\n\nexport const updateInboxView = (formID, viewID, { filterObject, name, color } = {}) => {\n const data = new global.FormData();\n\n if (filterObject) {\n data.append('filterObject', JSON.stringify(filterObject));\n }\n\n if (name) {\n data.append('name', name);\n }\n\n if (color) {\n data.append('color', color);\n }\n\n return apiCallWithLayer({\n path: `form/${formID}/inboxviews/${viewID}`,\n method: 'post',\n data,\n isFormData: false\n });\n};\n\nexport const deleteInboxView = (formID, viewID) => apiCallWithLayer({\n path: `form/${formID}/inboxviews/${viewID}`,\n method: 'delete'\n});\n\nexport const fetchUserTeamRoles = () => apiCallWithLayer({\n path: 'team/roles/me',\n method: 'get'\n});\n\nexport const fetchTeamProperties = teamID => apiCallWithLayer({\n path: `team/${teamID}/properties`,\n params: { memberEmails: 1 },\n method: 'get'\n});\n\nexport const setEpUserSetting = (key, value) => {\n return apiCallWithLayer({\n path: 'ep/user/settings',\n method: 'post',\n data: new URLSearchParams({\n [key]: value\n })\n });\n};\n","import EventQueue from './EventQueue';\n\nexport const NO_ACTOR = 'unknown';\n\nclass WatchmanRecorder extends EventQueue {\n _actor = null;\n\n handlerSet = false;\n\n constructor() {\n super('watchman-recorder');\n\n this.recordEvent = this.recordEvent.bind(this);\n }\n\n get actor() {\n return this._actor;\n }\n\n set actor(actor) {\n this._actor = actor;\n }\n\n recordEvent(action, target, { isBeacon, extraValue } = { isBeacon: false, extraValue: undefined }) {\n // watchman initialized & actor set\n if (global.window.inboxEvents && this._actor && !this.handlerSet) {\n const handler = isBeacon ? global.window.inboxEvents.tickWithBeacon : global.window.inboxEvents.tick;\n this.setHandler(obj => {\n if (handler) {\n handler(obj);\n }\n // Also send GA event\n if (global.window.gtag) {\n if (obj.action === 'activeTime') {\n global.window.gtag('event', 'activeTime', {\n event_category: 'JotForm Inbox',\n value: Math.round(obj.target * 1000)\n });\n } else if (obj.action === 'numberOfVisibleFields') {\n global.window.gtag('event', 'numberOfVisibleFields', {\n event_category: 'JotForm Inbox',\n value: obj.target\n });\n } else {\n global.window.gtag('event', `${obj.target} - ${obj.action}`, {\n event_category: 'JotForm Inbox',\n event_label: extraValue\n });\n }\n }\n });\n this.handlerSet = true;\n }\n\n this.registerEvent({\n actor: this._actor, // Copy current actor\n action,\n target\n });\n }\n}\n\nconst instance = new WatchmanRecorder();\nexport default instance;\n\nexport const withWatchMan = (action, target, fn) => {\n return (...args) => {\n instance.recordEvent(action, target);\n return fn(...args);\n };\n};\n","import {\n put, call, select, take\n} from 'redux-saga/effects';\nimport { isEnterprise as isEnterpriseFunc } from '@jotforminc/enterprise-utils';\nimport { translation } from '@jotforminc/translation';\nimport { capitalizeFirstLetter } from '@jotforminc/utils';\n\nimport {\n getUser, getUserForms, getSignForms, getUserFilledForms, getSystemPlans\n} from '../api';\nimport { asyncActions, syncActions } from '../actions/actionTypes';\n\nimport WatchmanRecorder from '../utils/WatchmanRecorder';\n\nimport {\n parseLocationParams, filterSignForms, getLocalStorageWithExpiry\n} from '../utils';\n\nimport { FORM_API_LIMIT, MOBILE_MAX_WIDTH } from '../constants';\nimport { activeTabIDSelector, userLoadedSelector, userTypeSelector } from '../selectors';\n\nconst {\n USER_FETCH,\n USER_FORMS_FETCH,\n SYSTEM_PLANS_FETCH\n} = asyncActions;\n\nconst { SET_CAMPAIGN_ACTIVE } = syncActions;\n\nexport function* addTranslationDictionary(userLanguage) {\n try {\n yield call(translation.addDictionary, userLanguage);\n } catch (e) {\n // No translation\n return null;\n }\n}\n\nfunction* initCampaignFlow(user) {\n try {\n const { campaign = {} } = (user || {});\n\n const isEnterprise = isEnterpriseFunc();\n const isTestingEnv = window.JOTFORM_ENV === 'TESTING';\n\n const { editMode, liteMode } = parseLocationParams();\n const modeCampaignAvailable = !editMode && !liteMode;\n const campaignDismissed = getLocalStorageWithExpiry(`dismiss-${campaign?.utm_campaign}-campaign-submission`) !== null;\n\n const isMobile = window.innerWidth <= MOBILE_MAX_WIDTH;\n const inboxCampaigns = [\n { campaignName: 'SUMMER' },\n { campaignName: 'BLACKFRIDAY' },\n { campaignName: 'EOY' },\n { campaignName: 'ONEDOLLARSILVER' },\n { campaignName: 'REGULARFIFTYDISCOUNT' }\n ];\n\n const campaignIsAvailableForInbox = (campaignName = '') => {\n if (campaign?.type === 'REGULARFIFTYDISCOUNT' && campaign?.assetsVersion !== 'v2') {\n inboxCampaigns.splice(inboxCampaigns.findIndex(campaignItem => campaignItem?.campaignName === 'REGULARFIFTYDISCOUNT'), 1);\n }\n const campaignObj = inboxCampaigns.find(campaignItem => campaignItem?.campaignName === campaignName);\n if (!campaignObj) return false;\n const { devOnly = false, active = true } = campaignObj;\n if (!active) return false;\n\n return !devOnly || window.JOTFORM_ENV === 'DEVELOPMENT';\n };\n\n const campaignActive = modeCampaignAvailable\n && !isEnterprise\n && !isTestingEnv\n && campaign?.status\n && campaign?.assetsAvailable\n && campaignIsAvailableForInbox(campaign?.type)\n && !campaignDismissed\n && !isMobile;\n\n if (campaignActive) {\n const systemPlans = yield call(getSystemPlans);\n if (Object.keys(systemPlans || {}).length > 0) {\n yield put({\n type: SYSTEM_PLANS_FETCH.SUCCESS,\n systemPlans\n });\n yield put({\n type: SET_CAMPAIGN_ACTIVE,\n active: true\n });\n }\n }\n } catch (error) {\n yield put({\n type: SYSTEM_PLANS_FETCH.FAILURE,\n error\n });\n }\n}\n\nexport function* getUserSaga() {\n try {\n const { credentials: user, type } = yield call(getUser);\n\n const userTypes = { FORM_USER: 'formuser', USER: 'user' };\n const userType = userTypes[type];\n\n global.document.body.classList.add(`jfInbox--is${capitalizeFirstLetter(userType)}`);\n\n if (user.username || user.id) {\n WatchmanRecorder.actor = user.username || user.id;\n }\n\n yield call(addTranslationDictionary, user.language);\n\n yield put({\n type: USER_FETCH.SUCCESS,\n user: {\n ...user,\n userType\n }\n });\n\n yield call(initCampaignFlow, user);\n return user;\n } catch (error) {\n console.log('USER_FETCH.FAILURE', typeof error, error?.message, error?.constructor?.prototype?.name, JSON.stringify(error?.stack || ''));\n yield put({\n type: USER_FETCH.FAILURE,\n error\n });\n }\n}\n\nexport function* getUserFormsSaga() {\n try {\n const userLoaded = yield select(userLoadedSelector);\n if (!userLoaded) {\n yield take(USER_FETCH.SUCCESS);\n }\n\n const { tab } = parseLocationParams();\n const userType = yield select(userTypeSelector);\n\n const activeTab = yield select(activeTabIDSelector);\n\n let forms;\n if (activeTab === 'sentbox') {\n forms = yield call(getUserFilledForms);\n } else {\n forms = yield call(getUserForms, userType, 0, FORM_API_LIMIT);\n }\n\n const filteredForms = /^sign/g.test(tab)\n ? filterSignForms(yield call(getSignForms, { status: 'DRAFT' }, FORM_API_LIMIT), forms)\n : forms.filter(({ status }) => ['ENABLED', 'DISABLED'].includes(status));\n\n yield put({\n type: USER_FORMS_FETCH.SUCCESS,\n forms: filteredForms\n });\n\n return filteredForms;\n } catch {\n yield put({\n type: USER_FORMS_FETCH.FAILURE\n });\n }\n}\n","/* eslint-disable react/prop-types */\nimport React, {\n createContext, useState, useContext, useEffect\n} from 'react';\nimport PropTypes from 'prop-types';\n\nexport const Permissions = {\n value: {\n permissions: {},\n role: null\n }\n};\n\nconst PermissionsContext = createContext(Permissions.value);\n\nPermissions.context = PermissionsContext;\n\nconst PermissionToggle = ({ name, activeComponent, inActiveComponent = null }) => {\n const cntext = useContext(PermissionsContext);\n const { loading, checkPermission } = cntext;\n\n if (loading) return null;\n\n if (checkPermission(name)) {\n return activeComponent;\n }\n\n return inActiveComponent;\n};\n\nPermissions.toggle = PermissionToggle;\n\nconst PermissionsProvider = ({ children, fetcher, formID }) => {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(false);\n const [permissions, setPermissions] = useState({});\n const [role, setRole] = useState();\n\n const load = async () => {\n setLoading(true);\n setError(false);\n\n try {\n const { permissions: newPermissions, role: newRole } = await fetcher(formID);\n setPermissions(newPermissions);\n setRole(newRole);\n } catch (e) {\n setError(e);\n }\n\n setLoading(false);\n };\n\n useEffect(() => {\n if (formID) load();\n }, [formID]);\n\n const checkPermission = name => {\n return permissions[name];\n };\n\n Permissions.value = {\n loading, reload: load, error, permissions, checkPermission, role\n };\n\n return (\n \n {children}\n \n );\n};\n\nPermissions.provider = PermissionsProvider;\n\nPermissionsProvider.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.any),\n PropTypes.node,\n PropTypes.element\n ]),\n fetcher: PropTypes.func.isRequired,\n formID: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]).isRequired\n};\n\nPermissionsProvider.defaultProps = {\n children: null\n};\n","/**\n * Functions that modify and act on HTML-related objects.\n */\n\n/**\n * Convert a string with HTML entities in it to a\n * raw text version.\n * @param {any} html string that may contain html entities,\n * such as >\n * @returns {string} String with HTML entities decoded, if html param\n * is not a string, returns ''.\n */\nexport function decodeEntities(html) {\n if (typeof html !== 'string') {\n return '';\n }\n return html.replace(/>/g, '>')\n .replace(/</g, '<')\n .replace(/&/g, '&')\n .replace(/"/g, '\"');\n}\n\n/**\n * Updates document title with the new resource name\n *\n * @param {string} newResourceName\n * @returns void\n */\nexport const updateTitleWithNewResourceName = newResourceName => {\n try {\n /**\n * Our common document title scheme:\n * BSG: `{resourceName} - Jotform {productName}`\n * Ent: `{resourceName} - {productName}`\n */\n if (document.title.includes(' - ')) {\n document.title = document.title.replace(/^.*(\\s-.*)$/, `${newResourceName}$1`);\n } else {\n // Means that we dont have a resource name at title yet - only the product name\n document.title = `${newResourceName} - ${document.title}`;\n }\n } catch (e) {\n // Could not update the window title\n }\n};\n\n/**\n * IMPORTANT :: This will not prevent XSS\n * Use this for trusted values\n * */\nexport const stripHTML = string => {\n if (\n string.indexOf\n && (\n string.indexOf('<') !== -1\n || string.indexOf('>') !== -1\n )\n ) {\n const tmp = document.createElement('DIV');\n tmp.innerHTML = string;\n return tmp.textContent || tmp.innerText || string;\n }\n return string;\n};\n","import {\n call,\n fork,\n cancel,\n cancelled,\n spawn,\n delay\n} from 'redux-saga/effects';\nimport { toast } from 'react-toastify';\n\nimport t from '../constants/texts';\n\nfunction* innerDelay(saga, delayAmount, ...args) {\n yield delay(delayAmount);\n yield call(saga, ...args);\n}\n\nexport function* delayed(...args) {\n yield fork(innerDelay, ...args);\n}\n\nlet openToast = null;\nfunction* timeOutInner(timeoutMs) {\n try {\n yield delay(timeoutMs);\n if (openToast === null) {\n openToast = toast.warn(t.LOADING_TAKES_TOO_LONG, {\n position: toast.POSITION.TOP_RIGHT,\n autoClose: false,\n onClose: () => {\n openToast = null;\n }\n });\n }\n } finally {\n if (yield cancelled() && openToast) {\n toast.dismiss(openToast);\n }\n }\n}\n\n// This is a higher order effect\nexport function* timeout(effect, timeoutMs = 5000) {\n const timeoutTask = yield spawn(timeOutInner, timeoutMs);\n try {\n const result = yield effect;\n yield cancel(timeoutTask);\n return result;\n } catch (e) {\n yield cancel(timeoutTask);\n }\n}\n\n// Will discard thrown errors in callable\nexport const withTimeout = (callable, timeoutMs = 5000) => function* generatorWithTimeout(...args) {\n return yield timeout(call(callable, ...args), timeoutMs);\n};\n","import {\n call,\n select,\n take,\n all,\n put\n} from 'redux-saga/effects';\nimport { toast } from 'react-toastify';\nimport { t } from '@jotforminc/translation';\nimport { Permissions } from '@jotforminc/permissions';\nimport { updateTitleWithNewResourceName } from '@jotforminc/utils';\n\nimport SentryRecorder from '../utils/SentryRecorder';\n\nimport { asyncActions, syncActions } from '../actions/actionTypes';\n\nimport { match, ANY } from '../vendor/pampy';\n\nimport {\n getForm,\n getFormProperties,\n getTheme,\n updateFormProperties,\n updateFormUserFormProperties,\n getFormPDFTemplates,\n getFormUserFormProperties,\n getInboxViews,\n getSignWaitingCounts\n} from '../api';\n\nimport {\n timeout\n} from './sagaHelpers';\n\nimport texts from '../constants/texts';\nimport { userLoadedSelector } from '../selectors';\nimport { redirectToHIPAA } from '../utils';\n\nconst { FORM_UNDO, SET_VIEWS, SET_SIGN_WAITING_COUNTS } = syncActions;\nconst {\n FORM_FETCH,\n FORM_UPDATE,\n FORM_THEME_FETCH,\n USER_FETCH,\n FETCH_AI_AGENTS\n} = asyncActions;\n\nexport function* getFormThemeSaga({ themeID }) {\n try {\n const themeInfo = yield call(getTheme, themeID);\n\n yield put({\n type: FORM_THEME_FETCH.SUCCESS,\n themeInfo\n });\n\n return themeInfo;\n } catch {\n yield put({\n type: FORM_THEME_FETCH.FAILURE\n });\n }\n}\n\nfunction* getFormPropertiesMethod() {\n const userLoaded = yield select(userLoadedSelector);\n if (!userLoaded) {\n yield take(USER_FETCH.SUCCESS);\n }\n\n const userRole = Permissions?.value?.role;\n if (userRole === 'assignee') {\n return getFormUserFormProperties;\n }\n\n return getFormProperties;\n}\n\nexport function* getFormSaga({ formID }) {\n try {\n const getFormProps = yield getFormPropertiesMethod();\n const [form, formProperties, formPdfTemplates, views] = yield timeout(all([\n call(getForm, formID),\n call(getFormProps, formID, Permissions?.value?.permissions?.completed),\n call(getFormPDFTemplates, formID),\n call(getInboxViews, formID)\n ]));\n\n const sanitizedForm = {\n ...form,\n ...formProperties,\n id: formID,\n pdfTemplates: formPdfTemplates,\n new: parseInt(form.new, 10),\n count: parseInt(form.count, 10),\n flag: parseInt(form.flag, 10)\n };\n\n if (sanitizedForm?.title) {\n updateTitleWithNewResourceName(form?.title);\n }\n\n const trueValues = ['1', true];\n\n if (trueValues.indexOf(sanitizedForm.isHIPAA) >= 0 || trueValues.indexOf(sanitizedForm.isHipaaForm) >= 0) {\n redirectToHIPAA();\n }\n\n yield put({\n type: SET_VIEWS,\n views\n });\n\n yield put({\n type: FORM_FETCH.SUCCESS,\n form: sanitizedForm\n });\n\n SentryRecorder.setFormID(formID);\n\n if (form.type === 'SIGN') {\n const signWaitingCounts = yield call(getSignWaitingCounts, formID);\n yield put({\n type: SET_SIGN_WAITING_COUNTS,\n counts: signWaitingCounts\n });\n }\n\n yield put({ type: FETCH_AI_AGENTS.REQUEST });\n\n return sanitizedForm;\n } catch (e) {\n yield put({\n type: FORM_FETCH.FAILURE\n });\n }\n}\n\nfunction updateFormPropertiesMethod() {\n const userRole = Permissions?.value?.role;\n\n if (userRole === 'assignee') {\n return updateFormUserFormProperties;\n }\n\n return updateFormProperties;\n}\n\nexport function* updateFormSaga({ formID, formProperties }) {\n const propsToEncode = ['questionOrders'];\n const properties = Object.keys(formProperties).reduce((prev, propKey) => ({\n ...prev,\n [propKey]: (\n propsToEncode.indexOf(propKey) > -1\n ? JSON.stringify(formProperties[propKey])\n : formProperties[propKey]\n )\n }), {});\n const onActionFailure = () => {\n const changedPropKey = Object.keys(formProperties)[0];\n const fieldText = match(\n changedPropKey,\n 'hideNonInputSubmissionFields', () => t(texts.SHOW_HEADERS_AND_TEXT),\n 'hideEmptySubmissionFields', () => t(texts.HIDE_EMPTY_FIELDS_TEXT),\n ANY, () => ''\n );\n\n toast.error(`${t(texts.THERE_WAS_AN_ERROR_UPDATING)}${fieldText ? ` \"${fieldText}\" ${t(texts.FIELD)}` : ''}. ${t(texts.PLEASE_TRY_AGAIN)}`, {\n position: toast.POSITION.TOP_RIGHT,\n className: 'error'\n });\n return put({ type: FORM_UNDO });\n };\n\n try {\n const updateProps = yield updateFormPropertiesMethod();\n\n const result = yield call(updateProps, formID, { properties });\n if (result) {\n yield put({\n type: FORM_UPDATE.SUCCESS\n });\n } else {\n yield onActionFailure();\n }\n } catch {\n yield onActionFailure();\n }\n}\n","import {\n put,\n call,\n all,\n select,\n take\n} from 'redux-saga/effects';\n\nimport { asyncActions } from '../actions/actionTypes';\nimport {\n DEFAULT_TAG_QUESTION_PROPERTIES,\n NON_INPUT_QUESTIONS,\n INITIAL_QUESTIONS,\n ADDRESS_FIELD_LABEL_MAP\n} from '../constants';\nimport {\n formIDSelector, tagQuestionSelector, questionValuesSelector, questionsSelector, activeTabIDSelector\n} from '../selectors';\n\nimport {\n addQuestion,\n getFormQuestions,\n updateQuestion,\n getQuestionValues\n} from '../api';\n\nimport {\n addPrefixToObjectKeys,\n getDummyQuestionKeys,\n preparePrimaryAvailableQuestionIDs,\n prepareSecondaryAvailableQuestionIDs\n} from '../utils';\n\nconst {\n QUESTIONS_ADD,\n QUESTIONS_FETCH,\n QUESTION_UPDATE,\n QUESTION_VALUES_FETCH\n} = asyncActions;\n\nexport function* getQuestionsSaga({ formID, questionsObj }) {\n try {\n const rawQuestions = questionsObj || (yield call(getFormQuestions, formID));\n const questions = Object.values(rawQuestions)\n .filter(({ type }) => NON_INPUT_QUESTIONS.indexOf(type) === -1)\n .reduce((prev, curr) => {\n let newCurr = curr;\n if (curr.type === 'control_address' && !curr.sublabels) {\n newCurr = { ...curr, sublabels: Object.fromEntries(ADDRESS_FIELD_LABEL_MAP) };\n }\n return {\n ...prev,\n [curr.qid]: newCurr\n };\n }, INITIAL_QUESTIONS);\n\n const questionsArray = Object.values(questions);\n\n const primaryAvailableQuestionIDs = yield call(preparePrimaryAvailableQuestionIDs, questions);\n const secondaryAvailableQuestionIDs = yield call(prepareSecondaryAvailableQuestionIDs, questions);\n\n // Seperate submission widgets from questions by using their text prop as key. This process help us to maintain store\n const submissionWidgetQuestions = questionsArray.filter(({ submissionWidget }) => submissionWidget === 'Yes');\n // Prepending dummy widgets to prevent breaking app\n\n const defaultTag = {\n [DEFAULT_TAG_QUESTION_PROPERTIES.name]: { ...DEFAULT_TAG_QUESTION_PROPERTIES, qid: DEFAULT_TAG_QUESTION_PROPERTIES.name }\n };\n\n const submissionWidgets = {\n ...defaultTag,\n ...submissionWidgetQuestions.reduce((prev, curr) => {\n return {\n ...prev,\n ...curr?.qid ? { [curr.name.toLocaleLowerCase()]: curr } : {}\n };\n }, {})\n };\n\n // Initialize question related data to store\n yield put({\n formID,\n type: QUESTIONS_FETCH.SUCCESS,\n questions: {\n ...questions,\n ...(submissionWidgetQuestions.length > 0 ? {} : defaultTag) // Appending dummy questions which will be added via api at a later time\n },\n submissionWidgets,\n primaryAvailableQuestionIDs,\n secondaryAvailableQuestionIDs\n });\n\n return questions;\n } catch {\n yield put({\n type: QUESTIONS_FETCH.FAILURE\n });\n }\n}\n\nexport function* updateQuestionSaga({ formID, qid, data }) {\n try {\n const questionData = addPrefixToObjectKeys('question', data);\n const result = yield call(updateQuestion, formID, qid, questionData);\n\n if (result) {\n yield put({\n qid,\n data,\n type: QUESTION_UPDATE.SUCCESS\n });\n }\n } catch {\n yield put({\n qid,\n data,\n type: QUESTION_UPDATE.FAILURE\n });\n }\n}\n\nexport function* updateTagSaga({ data }) {\n const formID = yield select(formIDSelector);\n const { qid } = yield select(tagQuestionSelector);\n\n yield put({\n type: QUESTION_UPDATE.REQUEST,\n formID,\n qid,\n data\n });\n}\n\nexport function* addDummyQuestionsSaga({ formID, questions }) {\n const rawQuestions = yield call(getFormQuestions, formID);\n const isDummyTagsExist = Object.values(rawQuestions).some(item => item.name === 'tags' && item.qid !== 'tags');\n\n const dummyQuestions = getDummyQuestionKeys(questions).map(key => questions[key]);\n\n if (dummyQuestions.length > 0 && !isDummyTagsExist) {\n const questionsForAPI = dummyQuestions.map(({ qid, ...question }) => addPrefixToObjectKeys('question', question));\n\n const apiResponses = yield all(questionsForAPI.map(question => addQuestion(formID, question)));\n\n // TODO: Fallback for failed question add calls\n const addedQuestions = apiResponses.filter(response => response?.qid);\n\n yield put({\n type: QUESTIONS_ADD.SUCCESS,\n questions: {\n ...addedQuestions.reduce((prev, curr) => ({ ...prev, [curr.qid]: curr }), {})\n }\n });\n }\n}\n\nexport function* questionValuesFlow() {\n while (true) {\n try {\n const { qid } = yield take(QUESTION_VALUES_FETCH.REQUEST);\n const [formID, currentQuestionValues, questions, activeTab] = yield all([select(formIDSelector), select(questionValuesSelector), select(questionsSelector), select(activeTabIDSelector)]);\n\n // Fetching only once is enough atm\n if (currentQuestionValues[qid]) {\n continue;\n }\n\n let questionValues = {};\n\n const isSubmittedViaField = qid === 'submittedVia';\n const isDocumentsViaApproval = qid === 'wfd_docsViaApproval';\n switch (true) {\n case isSubmittedViaField:\n const portals = questions[qid]?.portals;\n if (portals) {\n questionValues = Object.entries(portals).map(([portalID, portal]) => {\n return {\n id: portalID,\n title: portal.title,\n icon: {\n backgroundColor: portal.appIconBackground,\n iconColor: portal.appIconColor,\n type: portal.appIconType,\n url: portal.appIconURL\n }\n };\n });\n }\n break;\n case isDocumentsViaApproval:\n break;\n default:\n questionValues = yield call(getQuestionValues, formID, qid, activeTab);\n break;\n }\n\n yield put({ type: QUESTION_VALUES_FETCH.SUCCESS, qid, questionValues });\n } catch {\n continue;\n }\n }\n}\n","export class SingletonOldEngine {\n constructor(loadScriptFunc) {\n this.loadScriptFunc = loadScriptFunc;\n this.initialize();\n }\n\n async initialize() {\n try {\n await this.loadScriptFunc();\n // eslint-disable-next-line no-undef\n this.oldEngine = new JSEncrypt();\n } catch (e) {\n this.oldEngine = null;\n }\n }\n\n async getInstance() {\n if (this.oldEngine) {\n return this.oldEngine;\n }\n await this.initialize();\n return this.oldEngine;\n }\n}\n","import forge, { pki } from 'node-forge';\nimport { safeJSONParse } from '@jotforminc/utils';\nimport showdown from 'showdown';\nimport { SingletonOldEngine } from './SingletonOldEngine';\n\nforge.options.usePureJavaScript = true;\n// TODO: handle existence of global/window methods\nexport class Decryptor {\n constructor(loadScriptFunc) {\n this.oldEngine = new SingletonOldEngine(loadScriptFunc);\n this.mdConverter = new showdown.Converter();\n }\n\n async decryptAnswer(answer, privateKey) {\n if (!answer) {\n return answer;\n }\n const oldEngine = await this.oldEngine.getInstance();\n if (!oldEngine) {\n return answer;\n }\n const key = privateKey || global?.JotEncrypted?.getPrivateKey();\n oldEngine.setPrivateKey(key);\n\n const engine = key && pki.privateKeyFromPem(key);\n\n function decryptSingleString(str) {\n if (!engine) return str;\n // It may be base64 encoded\n if (/^[A-Za-z0-9+/=]*$/.test(str)) {\n try {\n const raw = atob(str);\n const rawLength = raw.length;\n const array = new Uint8Array(new ArrayBuffer(rawLength));\n for (let i = 0; i < rawLength; i++) {\n array[i] = raw.charCodeAt(i);\n }\n return engine.decrypt(array);\n } catch (e) {\n return oldEngine.decrypt(str) || str;\n }\n }\n const strJSON = safeJSONParse(str, { err: true });\n if (strJSON && typeof strJSON === 'object' && !strJSON.err) {\n return JSON.stringify(Object.keys(strJSON).reduce((accum, k) => {\n // eslint-disable-next-line no-use-before-define\n return { ...accum, [k]: getDecryptedSplitString(strJSON[k]) };\n }, strJSON));\n }\n return str;\n }\n\n function getDecryptedSplitString(answerSplitString) {\n let temporaryResult;\n if (typeof answerSplitString === 'string' && answerSplitString.length > 0) {\n const answerParts = answerSplitString.split('#Jot#');\n temporaryResult = answerParts.map(decryptSingleString).join('');\n } else {\n temporaryResult = decryptSingleString(answerSplitString);\n }\n\n // May be URL encoded - is this really necessary?\n if (/%/.test(temporaryResult)) {\n try {\n const decoded = decodeURIComponent(temporaryResult);\n if (/#Jot#/.test(decoded)) {\n return getDecryptedSplitString(decoded);\n }\n return decryptSingleString(decoded);\n } catch (e) {\n return temporaryResult;\n }\n } else if (/[[\\]{}:\"]/.test(temporaryResult)) {\n try {\n const parsed = JSON.parse(temporaryResult);\n if (Array.isArray(parsed)) {\n // eslint-disable-next-line no-use-before-define\n return getDecryptedObjectAnswer(parsed);\n }\n } catch (e) {\n return temporaryResult;\n }\n }\n\n return temporaryResult;\n }\n\n function getDecryptedObjectAnswer(answerObj) {\n if (Array.isArray(answerObj)) {\n return answerObj.map(getDecryptedSplitString);\n }\n\n return Object.keys(answerObj).reduce((accum, k) => {\n return { ...accum, [k]: getDecryptedSplitString(answerObj[k]) };\n }, {});\n }\n\n function getDecryptedPrettyFormat(answerPretty) {\n const answerParts = answerPretty.split(' ');\n return answerParts.map(getDecryptedSplitString).join(' ');\n }\n\n const getDecryptedInnerAnswer = (innerAnswer, type) => {\n if (!innerAnswer) {\n return innerAnswer;\n }\n if (typeof innerAnswer === 'object') {\n return getDecryptedObjectAnswer(innerAnswer);\n }\n if (typeof innerAnswer === 'string') {\n const decryptedText = getDecryptedSplitString(innerAnswer);\n const isMarkdownTextarea = (type === 'control_textarea') && (decryptedText.indexOf('jotform_untitled_markdown') !== -1);\n if (!isMarkdownTextarea) {\n return decryptedText;\n }\n const mdText = decryptedText.replace('jotform_untitled_markdown', '');\n const cleanText = mdText.replace(/<[^>]+>/g, ''); // clear html tags\n return this.mdConverter.makeHtml(cleanText);\n }\n return innerAnswer;\n };\n return {\n ...answer,\n answer: getDecryptedInnerAnswer(answer.answer, answer.type),\n ...(answer.prettyFormat && { prettyFormat: getDecryptedPrettyFormat(answer.prettyFormat) })\n };\n }\n\n async decryptSubmission(submission, privateKey) {\n const decryptedAnswersPromises = Object.keys(submission.answers)\n .map(async key => {\n const decryptedAnswer = await this.decryptAnswer(submission.answers[key], privateKey);\n // Keep key with the answer\n return { key, decryptedAnswer };\n });\n const decryptedAnswersArray = await Promise.all(decryptedAnswersPromises);\n const decryptedAnswers = decryptedAnswersArray.reduce((accum, { key, decryptedAnswer }) => {\n return { ...accum, [key]: decryptedAnswer };\n }, {});\n\n return { ...submission, answers: decryptedAnswers };\n }\n\n async decryptSubmissions(submissions) {\n return Promise.all(submissions.map(sub => this.decryptSubmission(sub)));\n }\n}\n","import { Decryptor } from '../components';\n\nconst IDLE = 'IDLE';\nconst LOADING = 'LOADING';\nconst LOADED = 'LOADED';\nconst ERROR = 'ERROR';\nlet scriptState = IDLE;\n\nconst loadScript = (success, error) => {\n scriptState = LOADING;\n const head = global.document.querySelector('head');\n const script = global.document.createElement('script');\n script.src = '//cdn.jotfor.ms/static/encryptedForms.js';\n function onLoad(event) {\n scriptState = LOADED;\n success(event);\n }\n function onError(event) {\n scriptState = ERROR;\n error(event);\n }\n script.onload = onLoad;\n script.onerror = onError;\n head.appendChild(script);\n};\n\nexport function loadEncryptedFormsScript() {\n return new Promise((resolve, reject) => {\n switch (scriptState) {\n case LOADING:\n const intervalId = setInterval(() => {\n if (scriptState !== LOADING) {\n clearInterval(intervalId);\n if (scriptState === LOADED) {\n resolve();\n } else {\n reject();\n }\n }\n }, 300);\n break;\n case LOADED:\n resolve();\n break;\n case ERROR:\n reject();\n break;\n case IDLE:\n default:\n return loadScript(resolve, reject);\n }\n });\n}\n\nconst decryptor = new Decryptor(loadEncryptedFormsScript);\nconst decryptAnswer = decryptor.decryptAnswer.bind(decryptor);\nconst decryptSubmission = decryptor.decryptSubmission.bind(decryptor);\nconst decryptSubmissions = decryptor.decryptSubmissions.bind(decryptor);\n\nexport { decryptAnswer, decryptSubmission, decryptSubmissions };\n","export class UnavailableClass {\n constructor() {\n throw new Error(`The class ${new.target.name} is not available in this browser.`);\n }\n}\n","import { UnavailableClass } from './UnavailableClass';\n\nconst WorkerSafe = globalThis.Worker || UnavailableClass;\n\n/**\n * A Worker that can be run on a different origin by respecting CORS\n * By default, a Worker constructor that uses an url as its parameters ignores CORS\n * and fails on a different origin.\n * This way we can run web worker on scripts served by a CDN\n *\n * @see https://github.com/webpack/webpack/discussions/14648#discussioncomment-7844340\n */\nexport class CorsWorker extends WorkerSafe {\n constructor(url: string|URL, options: WorkerOptions = {}) {\n const absoluteUrl = new URL(url, window.location.href).toString();\n const workerSource = `\\\n const urlString = ${JSON.stringify(absoluteUrl)}\n const originURL = new URL(urlString)\n const isValidUrl = (urlString) => { \n try { return Boolean(new URL(urlString, originURL)) } catch(e){ return false } \n }\n const originalImportScripts = self.importScripts\n self.importScripts = (url) => {\n /** NOTE: 1 */\n if (url.startsWith(\"blob:\") && isValidUrl(url.replace(\"blob:\", \"\"))){\n const urlWithoutBlob = url.replace(\"blob:\", \"\")\n const { pathname } = new URL(urlWithoutBlob, originURL)\n url = pathname && pathname.substring(1) /** NOTE: 2 */\n } else if (url.startsWith(\"/static/js/\") && originURL.pathname.startsWith(\"/\")) { /** NOTE: 3 */\n url = originURL.pathname.split(\"/\").slice(0, -3).join(\"/\") + url;\n }\n originalImportScripts.call(self, new URL(url, originURL).toString())\n }\n importScripts(urlString);\n`;\n const blob = new Blob([workerSource], { type: 'application/javascript' });\n const objectURL = URL.createObjectURL(blob);\n super(objectURL, options);\n URL.revokeObjectURL(objectURL);\n }\n\n /**\n * The notes here are outside workerSource to not increase the ObjectURL size with\n * long explanations as comments\n */\n\n /**\n * Note 1\n *\n * Sometimes Webpack will try to import url with \"blob:\" prefixed and with relative\n * path as absolute path.\n *\n * Not only this will cause a security error due to different url, such as a \"blob:\"\n * protocol (meaning a CORS error), the path will be wrong. Any of those 2 problems\n * fails the importScripts. Since we can import JS with blobs, lets just remove \"blob:\"\n * prefix and fix the URL its content is a valid URL\n */\n\n /**\n * Note 2\n * URL#pathname always starts with \"/\", we want to remove the / to be a relative path\n * to the Worker file URL\n */\n\n /**\n * Note 3\n * When the application imports something that is also used in the worker, the worker\n * script imports this chunk too. In that case we need to prepend base path.\n */\n}\n","import { CorsWorker as Worker } from '@jotforminc/cors-worker';\n\nexport class JFWorker {\n constructor(workerUrl, name) {\n this.counter = 0;\n this.promises = {};\n this.worker = new Worker(workerUrl, {\n name\n });\n this.isTerminated = false;\n this.taskId = 0;\n\n this.worker.onmessage = event => {\n if (typeof event.data !== 'object' || !event.data) {\n return;\n }\n\n if (!('id' in event.data)) {\n return;\n }\n\n if (!(this.promises[event.data.id])) {\n return;\n }\n\n const promise = this.promises[event.data.id];\n delete this.promises[event.data.id];\n\n if (!('type' in event.data)) {\n promise.reject(new Error(`Invalid reponse is sent: ${JSON.stringify(event.data)}`));\n } else if (event.data.type === 'result') {\n promise.resolve(event.data.content);\n } else if (event.data.type === 'error') {\n const error = new Error(event.data.content.message);\n error.name = event.data.content.error || error.name;\n error.stack = event.data.content.stack || error.stack;\n promise.reject(error);\n } else {\n promise.reject(new Error('Illegal state occurred!'));\n }\n };\n }\n\n async executeTask(...args) {\n if (this.isTerminated) {\n throw new Error('The worker is terminated!');\n }\n\n const message = {\n id: ++this.taskId,\n payload: [...args]\n };\n\n const promise = new Promise((resolve, reject) => {\n this.promises[message.id] = { resolve, reject };\n }).finally(() => {\n this.counter--;\n });\n\n this.worker.postMessage(message);\n this.counter++;\n\n return promise;\n }\n\n terminate() {\n this.worker.terminate();\n this.isTerminated = true;\n }\n\n get isBusy() {\n return this.counter !== 0;\n }\n}\n","import { JFWorker } from './JfWorker';\n\nexport class WorkerPool {\n constructor(poolSize, workerUrl, name) {\n if (typeof poolSize !== 'number') {\n throw new Error('The parameter poolSize must be number.');\n }\n\n if (poolSize < 1) {\n throw new Error('The parameter poolSize must be positive number.');\n }\n\n this.taskQueue = [];\n this.listeners = [];\n this.workers = Array.from(\n { length: poolSize },\n () => new JFWorker(workerUrl, name)\n );\n }\n\n queue(...args) {\n this.taskQueue.push([...args]);\n this._runLoop();\n }\n\n subscribe(listener) {\n this.listeners.push(listener);\n }\n\n terminate() {\n this.workers.forEach(worker => worker.terminate());\n }\n\n _runLoop() {\n const onTaskSuccess = result => {\n this.listeners.forEach(listener => {\n const event = new window.CustomEvent('result', { detail: result });\n listener(event);\n });\n };\n\n const onTaskFailure = error => {\n this.listeners.forEach(listener => {\n const event = new window.CustomEvent('error', { detail: error });\n listener(event);\n });\n };\n\n const runNextTask = worker => {\n const task = this.taskQueue.shift();\n if (!task) {\n return;\n }\n\n worker.executeTask(...task)\n .then(onTaskSuccess)\n .catch(onTaskFailure)\n .finally(() => runNextTask(worker));\n };\n\n for (let index = 0; index < this.workers.length - 1; index++) {\n const worker = this.workers[index];\n\n if (worker.isBusy) {\n continue;\n }\n\n runNextTask(worker);\n }\n }\n}\n","import { WorkerPool } from '@jotforminc/worker-pool';\n\nexport class DecryptSubmissionWorkerPool extends WorkerPool {\n constructor(poolSize) {\n super(poolSize, new URL('./DecryptSubmissionWorkerBridge', import.meta.url), 'DecryptSubmissionWorkerBridge');\n }\n}\n","export const FILENAME_ALLOWED_FIELDS = ['control_fullname', 'control_textbox', 'control_date', 'control_datetime', 'control_dropdown', 'control_radio', 'control_number'];\n","import { safeJSONParse } from '@jotforminc/utils';\nimport { FILENAME_ALLOWED_FIELDS } from '../constants';\n\n/**\n * Checks whether the given array is empty or not.\n * A array is considered empty if it has no elements or all of its elements are empty strings.\n * Ex;\n * [{}]\n * ['{}']\n * []\n * ['[]', '[]', '[]', '[]']\n * [['', '', ''], ['', '', ''], ['', '', '']]\n *\n * @function\n * @param {Array>} arr - The array to check\n * @returns {Boolean} Returns true if the array is empty, false otherwise\n *\n */\nexport const isArrayEmpty = arr => {\n if (arr.length === 0) return true;\n return !arr.some(item => {\n if (Array.isArray(item)) {\n return !isArrayEmpty(item);\n }\n if (typeof item === 'string') {\n const parsed = safeJSONParse(item, item);\n if (Array.isArray(parsed)) {\n return !isArrayEmpty(parsed);\n }\n if (typeof parsed === 'object' && parsed !== null) {\n // only {} case covered\n return Object.keys(parsed).length > 0;\n }\n }\n if (typeof item === 'object' && item !== null) {\n // only {} case covered\n return Object.keys(item).length > 0;\n }\n return !!item;\n });\n};\n\n/**\n * Check whether given question answer counts as empty or not\n * @function\n * @param {String} type Question type\n * @param {Object|Number|String} answer Questions' answer field\n */\nexport const isQuestionAnswerEmpty = (type, answer, selectedField = '') => { // eslint-disable-line complexity\n switch (true) {\n case (type === 'control_rating'): // Show always rating field as filled\n return false;\n case (type === 'control_widget' && typeof answer === 'string' && selectedField === '52961c97e3e5266570000004'):\n // Controls if user select any option in Checklist widget.\n const checkboxs = answer.match(/^CHECKED:/gm);\n if (!checkboxs) {\n const answerNotEmpty = answer && !answer.match(/^UNCHECKED:/gm);\n if (answerNotEmpty) {\n return false;\n }\n return true;\n }\n return false;\n case (!answer && answer !== 0): // If answer is falsifiable and not equal to zero\n case typeof answer === 'string' && !answer.trim(): // If answer data is string and not empty\n case (typeof answer === 'object' && Object.values(answer).filter(val => {\n if (type === 'control_time' && (val === 'PM' || val === 'AM')) {\n return false;\n }\n if (typeof val === 'string') {\n const trimmedValue = val.trim();\n return trimmedValue && trimmedValue.match(/\\[(\"\",?)+\\]/) === null;\n }\n return val;\n }).length === 0): // If answer data is object and every key it contains is empty\n case (type === 'control_payment' && (!answer.paymentArray || !safeJSONParse(answer.paymentArray).product)):\n case (type === 'control_phone' && typeof answer === 'string' && !/^[0-9]*$/.test(answer)): // If it is specifically phone field and does not contain any number\n case (type === 'control_widget' && selectedField === '538dddaa976bf61129000004' && answer.split(/\\r\\n|\\r|\\n/g).filter(ans => {\n const keyValueArray = ans.match('^.*?:(.*)$');\n return keyValueArray && keyValueArray[1] !== ' ';\n }).length === 0):\n case (type === 'control_mixed' && typeof answer === 'string' && answer === '
'):\n return true;\n case (type === 'control_appointment' && (typeof answer !== 'object' || !answer.date)):\n return true;\n case (type === 'control_inline'):\n if (typeof answer === typeof {}) {\n const fields = Object.keys(answer);\n // after editing a submission that includes empty fill in the blanks field that has a date field,\n // this date field comes like that: {day: \"\", month: \"\", year: \"\"}\n // since lots of submissions already have such data,\n // we have to cover this case on runtime.\n // see #8651261\n const dateBoxFields = fields.filter((field = '') => field.match(/^date/));\n const justHasDate = dateBoxFields.length === fields.length;\n // if fill in the blanks field has at least one element which is not a datebox,\n // it means that the question has been answered.\n if (!justHasDate) {\n return false;\n }\n if (dateBoxFields.length) {\n const getDateAnswer = fieldID => safeJSONParse(answer[fieldID], {}, true);\n const dateAnswers = dateBoxFields.map(getDateAnswer);\n const checkValidDateAnswer = dateAnswer => Object.values(dateAnswer).some(value => value);\n const hasValidDateAnswer = dateAnswers.some(checkValidDateAnswer);\n return !hasValidDateAnswer;\n }\n return true;\n }\n return true;\n case type === 'control_matrix':\n if (typeof answer !== 'object') {\n return true;\n }\n return Array.isArray(answer) && isArrayEmpty(answer);\n default:\n return false;\n }\n};\n\n/**\n * Generate a meaningful filename from form & question properties\n * @function\n * @param {{ questions: Array(<{ type: String, hidden: 'Yes'|'No', text: String, qid: String}>)}} questions Question type\n * @param {Boolean|'Yes'|'No'} checkHiddenFields\n */\nexport const generateFileName = (qs, checkHiddenFields = false) => {\n const questions = qs.filter(q => {\n if (FILENAME_ALLOWED_FIELDS.indexOf(q.type) === -1) {\n return false;\n }\n\n if (!checkHiddenFields && q.hidden === 'Yes') return false;\n\n if (q.type === 'control_date' || q.type === 'control_datetime') {\n if (!q.text) { return true; }\n const text = q.text.toString().toLocaleLowerCase();\n if (text.indexOf('birth') > -1 || text.indexOf('dob') > -1) { return false; }\n }\n\n return true;\n });\n\n if (questions.length) {\n const firstNameIndex = questions.findIndex(t => t.type === 'control_fullname' || (t.text && t.text.toString().toLocaleLowerCase().indexOf('name') > -1));\n const firstDateIndex = questions.findIndex(t => t.type === 'control_date' || t.type === 'control_datetime');\n\n const firstName = (firstNameIndex > -1) ? questions[firstNameIndex] : false;\n const firstDate = (firstDateIndex > -1) ? questions[firstDateIndex] : false;\n\n if (firstDateIndex === 0) {\n const pdfName = `{q_${firstDate.qid}}`;\n\n if (firstName) {\n return `{q_${firstName.qid}} ${pdfName}`;\n }\n\n if (questions[1]) {\n return `${pdfName} {q_${questions[1].qid}}`;\n }\n }\n\n if (firstNameIndex === 0) {\n const pdfName = `{q_${firstName.qid}}`;\n\n if (firstDate) {\n return `${pdfName} {q_${firstDate.qid}}`;\n }\n\n if (questions[1]) {\n return `${pdfName} {q_${questions[1].qid}}`;\n }\n }\n\n if (questions[1] && ['control_textbox', 'control_dropdown', 'control_radio'].indexOf(questions[0].type) > -1) {\n const pdfName = `{q_${questions[0].qid}}`;\n\n if (firstName) {\n return `{q_${firstName.qid}} ${pdfName}`;\n }\n\n if (firstDate) {\n return `${pdfName} {q_${firstDate.qid}}`;\n }\n\n return `${pdfName} {q_${questions[1].qid}}`;\n }\n\n if (questions[0].type === 'control_number') {\n const pdfName = `{q_${questions[0].qid}}`;\n if (firstName) {\n return `{q_${firstName.qid}} ${pdfName}`;\n } if (firstDate) {\n return `${pdfName} {q_${firstDate.qid}}`;\n }\n }\n\n if (firstName) {\n const pdfName = `{q_${firstName.qid}}`;\n if (firstDate) {\n return `${pdfName} {q_${firstDate.qid}}`;\n }\n\n return pdfName;\n }\n }\n\n if (!checkHiddenFields) {\n return generateFileName(qs, true);\n }\n\n return '{sid} {formTitle}';\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport {\n IconEllipsisHorizontalCircleFilled,\n IconBoxArchiveFilled,\n IconBoxArchiveArrowUpFilled,\n IconTrashFilled,\n IconStarFilled,\n IconStar,\n IconPencilToSquare,\n IconTagsFilled,\n IconMessageFilled,\n IconArrowDownToLine,\n IconArrowDown,\n IconArrowUpToLine,\n IconArrowUp,\n IconDocumentPdfFilled,\n IconEnvelopeFormFilled,\n IconBars,\n IconEnvelopeClosedFilled,\n IconFunnelFilled,\n IconPrinterFilled,\n IconGearFilled,\n IconFormFilled,\n IconDocumentCsvFilled,\n IconFilePaperclipFilled,\n IconDocumentXlsFilled,\n IconTrashClockFilled,\n IconUsersFilled,\n IconArrowUpRightFromSquare,\n IconEllipsisVertical,\n IconMagnifyingGlass,\n IconDropletFilled,\n IconKey,\n IconXmark,\n IconUserFilled,\n IconProductInboxFilled,\n IconProductInboxColorBorder,\n IconBasketShoppingFilled,\n IconTurnArrowLeftFilled as IconReply,\n IconTurnArrowRightFilled as IconForward,\n IconPaperPlaneFilled,\n IconCheckSquareFilled,\n IconCheck,\n IconFilePencilFilled,\n IconExclamationCircleFilled,\n IconExclamationCircle,\n IconPaperclipDiagonal,\n IconPaperclipVertical,\n IconAngleDown,\n IconExclamationTriangleFilled,\n IconArrowsSwitchHorizontal,\n IconAngleLeft,\n IconAngleRight,\n IconAngleUp,\n IconChevronRight,\n IconChevronLeft,\n IconChevronUp,\n IconChevronDown,\n IconCalendarPlus,\n IconCalendarFilled,\n IconTurnArrowShortRightFilled,\n IconClock,\n IconFileArrowFlipRightFilled,\n IconPencilFilled,\n IconPlusSm,\n IconDocumentListBulletFilled,\n IconEnvelopeOpenedFilled,\n IconStarMinusFilled,\n IconCopyFilled,\n IconPencilLineFilled,\n IconCalendarEventCheckFilled,\n IconAt,\n IconText,\n IconArrowUpRightFromSquareSm,\n IconPencilLine,\n IconConditionalBranchFilled,\n IconMessageCheckFilled,\n IconBellDiagonalFilled,\n IconAnnotationInfoFilled,\n IconAlignTextLeft,\n IconArrowsUpDown,\n IconArrowsToCenter,\n IconGridDotsVertical,\n IconProductSentboxColorBorder,\n IconAiFilled,\n IconCircleFilled,\n IconCircleLgFilled\n} from '@jotforminc/svg-icons';\nimport { capitalizeFirstLetter } from '@jotforminc/utils';\n\nimport IconTabSignDeclined from '../../assets/svg/tabs/iconTabSignDeclined.svg';\nimport IconTabSignWaiting from '../../assets/svg/tabs/iconTabSignWaiting.svg';\nimport IconTabSignCompleted from '../../assets/svg/tabs/iconTabSignCompleted.svg';\nimport IconTabSignAll from '../../assets/svg/tabs/iconTabSignAll.svg';\nimport IconTabSignWaitingMySignature from '../../assets/svg/tabs/IconTabSignWaitingMySignature.svg';\nimport IconTabSignCanceled from '../../assets/svg/tabs/IconTabSignCanceled.svg';\nimport IconLogoGrey from '../../assets/svg/logoGrey.svg';\nimport IconQuestionAlignmentLeft from '../../assets/svg/iconQuestionAlignmentLeft.svg';\nimport IconQuestionAlignmentTop from '../../assets/svg/iconQuestionAlignmentTop.svg';\nimport IconSpacingWide from '../../assets/svg/iconWide.svg';\nimport IconSpacingDefault from '../../assets/svg/iconNormal.svg';\nimport IconSpacingCompact from '../../assets/svg/iconCompact.svg';\n\nimport IconEmptyScreen from '../../assets/svg/branding/commonIcons/empty-screen.svg';\nimport IconEmptyFilter from '../../assets/svg/branding/commonIcons/empty-filter.svg';\nimport IconNoPermission from '../../assets/svg/iconNoPermission.svg';\nimport IconEmptyState from '../../assets/svg/iconEmptyState.svg';\nimport IconPermissions from '../../assets/svg/iconPermissions.svg';\nimport IconApprovalHeader from '../../assets/svg/iconApprovalHeader.svg';\nimport IconPendingApproval from '../../assets/svg/iconPendingApproval.svg';\nimport IconTerminateFlow from '../../assets/svg/iconTerminateFlow.svg';\nimport IconRestartFlow from '../../assets/svg/iconRestartFlow.svg';\nimport IconWFApprovalFlow from '../../assets/svg/workflow/iconApprovalFlow.svg';\nimport IconWFTakeover from '../../assets/svg/workflow/iconTakeover.svg';\nimport IconWFReassign from '../../assets/svg/workflow/iconReassign.svg';\nimport IconWarningDelete from '../../assets/svg/branding/commonIcons/warning-delete-icon.svg';\nimport IconWarningWarn from '../../assets/svg/branding/commonIcons/warning-warn-icon.svg';\nimport IconIncomplete from '../../assets/svg/iconIncomplete.svg';\n\n// sign icons\nimport IconSignClose from '../../assets/svg/sign/iconClose.svg';\nimport IconSignInfo from '../../assets/svg/sign/iconInfo.svg';\nimport IconSignDuplicate from '../../assets/svg/sign/iconDuplicate.svg';\nimport IconSignSignedDoc from '../../assets/svg/sign/iconSignedDoc.svg';\nimport IconSignWarning from '../../assets/svg/sign/iconWarning.svg';\nimport IconReminderEmail from '../../assets/svg/sign/iconReminderEmail.svg';\nimport IconReminder from '../../assets/svg/sign/iconReminder.svg';\n\nconst SVGComponents = {\n IconEllipsisHorizontalCircleFilled,\n IconBoxArchiveFilled,\n IconBoxArchiveArrowUpFilled,\n IconPaperPlaneFilled,\n IconEnvelopeClosedFilled,\n IconDocumentXlsFilled,\n IconEmptyScreen,\n IconCopyFilled,\n IconDocumentCsvFilled,\n IconDocumentPdfFilled,\n IconPencilLine,\n IconArrowDownToLine,\n IconPrinterFilled,\n IconTagsFilled,\n IconChevronRight,\n IconChevronLeft,\n IconBellDiagonalFilled,\n IconStarMinusFilled,\n IconPencilToSquare,\n IconProductInboxColorBorder,\n IconProductInboxFilled,\n IconEnvelopeFormFilled,\n IconFilePencilFilled,\n IconStar,\n IconStarFilled,\n IconReply,\n IconEmptyFilter,\n IconDropletFilled,\n IconForward,\n IconMessageFilled,\n IconGridDotsVertical,\n IconCheckSquareFilled,\n IconTabSignDeclined,\n IconTabSignCanceled,\n IconTabSignWaiting,\n IconTabSignWaitingMySignature,\n IconTabSignCompleted,\n IconTabSignAll,\n IconWFReassign,\n IconWFTakeover,\n IconWFApprovalFlow,\n IconKey,\n IconCheck,\n IconArrowDown,\n IconArrowUpToLine,\n IconArrowUp,\n IconSpacingWide,\n IconSpacingDefault,\n IconMagnifyingGlass,\n IconGearFilled,\n IconSpacingCompact,\n IconEmptyState,\n IconBars,\n IconExclamationCircleFilled,\n IconExclamationCircle,\n IconPaperclipDiagonal,\n IconArrowUpRightFromSquareSm,\n IconPaperclipVertical,\n IconAngleDown,\n IconAlignTextLeft,\n IconArrowsUpDown,\n IconArrowsToCenter,\n IconNoPermission,\n IconArrowsSwitchHorizontal,\n IconAngleLeft,\n IconAngleRight,\n IconCalendarPlus,\n IconTurnArrowShortRightFilled,\n IconClock,\n IconTrashFilled,\n IconEllipsisVertical,\n IconPencilFilled,\n IconFilePaperclipFilled,\n IconPermissions,\n IconExclamationTriangleFilled,\n IconApprovalHeader,\n IconEnvelopeOpenedFilled,\n IconPendingApproval,\n IconPlusSm,\n IconLogoGrey,\n IconFormFilled,\n IconArrowUpRightFromSquare,\n IconChevronDown,\n IconChevronUp,\n IconUsersFilled,\n IconTerminateFlow,\n IconRestartFlow,\n IconMessageCheckFilled,\n IconXmark,\n IconAngleUp,\n IconSignClose,\n IconSignInfo,\n IconSignDuplicate,\n IconSignSignedDoc,\n IconSignSignedDocWithAudit: IconDocumentListBulletFilled,\n IconSignWarning,\n IconReminderEmail,\n IconReminder,\n IconUserFilled,\n IconWarningDelete,\n IconWarningWarn,\n IconFunnelFilled,\n IconConditionalBranchFilled,\n IconCalendarEventCheckFilled,\n IconAt,\n IconText,\n IconBasketShoppingFilled,\n IconTrashClockFilled,\n IconCalendarFilled,\n IconFileArrowFlipRightFilled,\n IconPencilLineFilled,\n IconAnnotationInfoFilled,\n IconProductSentboxColorBorder,\n IconQuestionAlignmentLeft,\n IconQuestionAlignmentTop,\n IconAiFilled,\n IconCircleFilled,\n IconIncomplete,\n IconCircleLgFilled\n};\n\nconst SVG = React.forwardRef(({\n name,\n className,\n ...remainingProps\n}, ref) => {\n const SVGComponent = SVGComponents[capitalizeFirstLetter(name)];\n if (!SVGComponent) {\n return null;\n }\n\n return (\n \n );\n});\n\nSVG.propTypes = {\n name: PropTypes.string.isRequired,\n className: PropTypes.string\n};\n\nSVG.defaultProps = {\n className: null\n};\n\nexport default SVG;\n","import React, { useMemo } from 'react';\nimport { oneOf, string } from 'prop-types';\nimport SVG from '../SVG';\nimport { ANSWER_TAG_FIELDS, PAYMENT_FIELDS } from '../../constants';\n\nconst iconMap = {\n control_fileupload: 'IconPaperclipVertical',\n payment: 'IconBasketShoppingFilled',\n control_datetime: 'IconCalendarFilled',\n control_appointment: 'IconCalendarFilled'\n};\n\nconst getAnswerIcon = type => {\n if (PAYMENT_FIELDS.includes(type)) return () => ;\n return () => {\n if (!iconMap[type]) return null;\n return (\n
\n \n
\n );\n };\n};\n\nconst AnswerTag = ({ answerType, content, customImageURL }) => {\n const Icon = useMemo(() => {\n if (answerType === 'source_app') {\n return () => (\n
\n submittedAppIcon\n
\n );\n }\n return getAnswerIcon(answerType);\n }, [answerType]);\n\n return (\n
\n \n {content}\n
\n );\n};\n\nAnswerTag.propTypes = {\n answerType: oneOf(ANSWER_TAG_FIELDS),\n content: string,\n customImageURL: string\n};\n\nAnswerTag.defaultProps = {\n answerType: '',\n content: '',\n customImageURL: string\n};\n\nexport default AnswerTag;\n","import React from 'react';\nimport isEmpty from 'lodash/isEmpty';\nimport { isQuestionAnswerEmpty } from '@jotforminc/answer-utils';\nimport { safeJSONParse } from '@jotforminc/utils';\n\nimport moment from 'moment';\nimport { getAnswerFromHeaderField } from '.';\nimport AnswerTag from '../components/AnswerTag';\nimport { ANSWER_TAG_FIELDS, PAYMENT_FIELDS } from '../constants';\n\nexport const getPrimaryAnswer = (primary, answers, formatOptions) => {\n if (Object.keys(primary).includes('field')) {\n return getAnswerFromHeaderField(primary.field, answers, formatOptions);\n }\n\n return primary;\n};\n\nexport const getSecondaryAnswer = (secondary, answers, formatOptions) => {\n let isSecondEmpty;\n\n const field = getPrimaryAnswer(secondary, answers, formatOptions);\n\n // BUGFIX #3653913 :: Do not break the app if the answers are shifted\n if (typeof field === 'object') return false;\n\n const subheaderFieldJson = safeJSONParse(field, field);\n\n // eslint-disable-next-line\n if (subheaderFieldJson == field) {\n isSecondEmpty = !field;\n } else {\n const subheaderFieldQID = subheaderFieldJson ? subheaderFieldJson.qid : '' || subheaderFieldJson;\n const subheaderFieldAnswer = answers[subheaderFieldQID] || {};\n const {\n type,\n answer,\n selectedField\n } = subheaderFieldAnswer;\n isSecondEmpty = isQuestionAnswerEmpty(type, answer, selectedField);\n }\n\n return !isSecondEmpty ? field : null;\n};\n\nconst getSignPrimaryAnswer = document => document && document.participants\n .filter(p => (\n p.fields && (p.fields.length > 0 || p.status === 'DELEGATED')\n ))\n .map(p => p.name || p.role)\n .join(', ');\n\nexport const getPrimaryAndSecondaryAnswer = ({\n submission,\n primary,\n secondary,\n submissionIndex,\n t,\n formatOptions\n}) => {\n const { answers } = submission;\n\n if (submission?.aiIncompleteSubmission && submission?.aiAgentChatFirstMessage) {\n return [submission?.aiAgentChatFirstMessage, ''];\n }\n\n const primaryAnswer = (submission && submission.signDocument)\n ? getSignPrimaryAnswer(submission.signDocument) || 'Sign Document'\n : getPrimaryAnswer(primary, answers, formatOptions);\n\n const secondaryAnswer = getSecondaryAnswer(secondary, answers, formatOptions);\n\n const submissionNumber = submissionIndex + 1;\n let submissionInfo = '';\n if (submissionNumber === 0) {\n submissionInfo = t.NO_SUBMISSIONS;\n } else {\n submissionInfo = primaryAnswer || t.SUBMISSION_INDEX.replace('{submissionIndex}', submissionNumber);\n }\n\n // https://www.jotform.com/answers/17154041-approval-flow-error-an-unexpected-error-occured, I do not know how this happened, And i am too scared to ask\n const getValue = info => (typeof info?.text === 'string' ? info?.text : info);\n return [getValue(submissionInfo), getValue(secondaryAnswer)];\n};\n\nexport const getAnswerTag = ({ answers }) => {\n const answerList = Object.values(answers);\n const taggedAnswer = answerList.reduce((prev, answerObj) => {\n const { type: prevType } = prev;\n // eslint-disable-next-line prefer-const\n let { answer, type: currentType } = answerObj;\n\n if (answer && !isEmpty(answer) && answer.resourceType === 'APP') currentType = 'source_app';\n\n if (!answer || isEmpty(answer) || !ANSWER_TAG_FIELDS.includes(currentType)) {\n return prev;\n }\n\n if (answer.resourceType === 'APP') currentType = 'source_app';\n\n if (!prevType || ANSWER_TAG_FIELDS.indexOf(currentType) < ANSWER_TAG_FIELDS.indexOf(prevType)) {\n if (currentType === 'control_appointment' && !answer?.date) return prev;\n return answerObj;\n }\n return prev;\n }, {});\n\n if (taggedAnswer && !isEmpty(taggedAnswer)) {\n let content;\n const { type, prettyFormat, answer } = taggedAnswer;\n\n if (answer.resourceType === 'APP') {\n return ;\n }\n\n if (PAYMENT_FIELDS.includes(type)) {\n const paymentData = JSON.parse(answer.paymentArray);\n content = `${paymentData.total} ${paymentData.currency}`;\n } else if (type === 'control_datetime') {\n content = prettyFormat;\n } else if (type === 'control_appointment') {\n content = prettyFormat;\n } else if (type === 'control_fileupload') {\n const regexp = /[^/\\\\&?]+\\.\\w{3,4}(?=([?&].*$|$))/;\n const { answer: [ans] } = taggedAnswer;\n [content] = ans.match(regexp);\n } else if (type === 'control_fullname') {\n content = prettyFormat;\n } else {\n content = answer;\n }\n\n return ;\n }\n\n return false;\n};\n\nexport const getFixedTimeFilters = (filters, timezone = '') => {\n const regexForMatchesFilters = /^(\\w+):matches:(datetime|appointment)$/;\n const regexForCreatedAtQuestion = /^(created_at:)(?!matches)([a-z]*)(:datetime)$/;\n\n if (!filters) return filters;\n if (typeof filters !== 'object') return filters;\n if (Object.keys(filters).length < 1) return filters;\n\n const fixedTimeFilters = [];\n Object.entries(filters).forEach(([key, value]) => {\n if (key.match(regexForMatchesFilters) !== null) {\n const [question, , field] = key.split(':');\n const date = value.split(' ');\n fixedTimeFilters.push([`${question}:gte:${field}`, date[0].concat(' 00:00:00')]);\n fixedTimeFilters.push([`${question}:lte:${field}`, date[0].concat(' 23:59:59')]);\n } else if (key.match(regexForCreatedAtQuestion) && (typeof timezone === 'string' && timezone !== '')) {\n const [, operator] = key.split(':');\n const userTimezone = moment.tz(value, timezone);\n const serverTimezone = moment.tz(userTimezone, 'America/New_York');\n fixedTimeFilters.push([`created_at:${operator}:datetime`, serverTimezone.format('YYYY-MM-DD HH:mm:00')]);\n } else {\n fixedTimeFilters.push([key, value]);\n }\n });\n\n return Object.fromEntries(fixedTimeFilters);\n};\n\nexport const getTimeZonedFilters = (filters, userTimeZone) => {\n const defaultStorageFormat = 'YYYY-MM-DD HH:mm:ss';\n const serverTimeZone = 'America/New_York';\n const offsetOfEST = '-05:00';\n\n const timeZonedFilters = filters;\n const dateKeys = [\n 'created_at:gte:datetime',\n 'created_at:lte:datetime',\n 'created_at:lt:datetime',\n 'created_at:gt:datetime',\n 'updated_at:gte:datetime',\n 'updated_at:lte:datetime',\n 'updated_at:lt:datetime',\n 'updated_at:gt:datetime'\n ];\n\n dateKeys.forEach(key => {\n if (timeZonedFilters[key]) {\n const dateStr = timeZonedFilters[key];\n let dateObj = userTimeZone ? moment.tz(dateStr, userTimeZone) : moment.parseZone(`${dateStr} ${offsetOfEST}`, `${defaultStorageFormat} ZZ`);\n dateObj = dateObj.tz(serverTimeZone);\n timeZonedFilters[key] = dateObj.format(defaultStorageFormat);\n }\n });\n return timeZonedFilters;\n};\n","/* eslint-disable max-lines */\nimport React from 'react';\nimport {\n put,\n all,\n call,\n select,\n take,\n fork,\n cancel,\n takeLatest,\n race,\n delay,\n spawn\n} from 'redux-saga/effects';\nimport { eventChannel } from 'redux-saga';\nimport { toast } from 'react-toastify';\nimport { t } from '@jotforminc/translation';\nimport { decryptSubmission } from '@jotforminc/decryptor';\nimport { Permissions } from '@jotforminc/permissions';\nimport { DecryptSubmissionWorkerPool } from '@jotforminc/decryption-worker';\nimport { arrayMove, capitalizeFirstLetter, handleCustomNavigation } from '@jotforminc/utils';\nimport { prepareAgentHistory } from '@jotforminc/agent-utils';\nimport { decryptSubmission as decryptSubmissionV2, getEncryptionKey, widgetDecryptionMiddleware } from '@jotforminc/form-encryption';\nimport { getPreparedFilters } from '@jotforminc/search-filter';\nimport isEmpty from 'lodash/isEmpty';\nimport { delayed } from './sagaHelpers';\nimport WatchmanRecorder from '../utils/WatchmanRecorder';\nimport { match } from '../vendor/pampy';\n\nimport {\n addPrefixToObjectKeys,\n addSubmitterAnswerReducer,\n addSubmittedViaInfo,\n parseLocationParams,\n createFilter,\n findIndexByID,\n generateApiFilterObject,\n filterObjectQuestionControl\n} from '../utils';\nimport { syncActions, asyncActions } from '../actions/actionTypes';\nimport {\n SUBMISSION_API_LIMIT,\n DELETE_BATCH_SIZE,\n ACTIVE_TAB_FILTER\n} from '../constants';\n\nimport {\n getFormSubmissions,\n getAIAgentChatMessages,\n getIncompleteSubmissions,\n updateSubmission,\n deleteSubmission,\n updateBulkSubmission,\n deleteBulkSubmission,\n getSubmission,\n getFormUserSubmissions,\n getPendingSubmissions,\n getTrash,\n deleteBulkPendingSubmission,\n deletePendingSubmission,\n getSubmissionIndex,\n getArchivedSubmissions,\n getPendingApprovalSubmissions,\n getApprovalSubmissions,\n getCompletedSubmissions,\n getSignAllDocuments,\n directDownloadUploads,\n downloadUploads,\n getAllSubmissions,\n getSignAllDocumentsIndex,\n getFormQuestions,\n getConversationSubmissions\n} from '../api';\n\nimport {\n submissionsSelector,\n activeSubmissionSelector,\n activeSubmissionIDSelector,\n tagQuestionSelector,\n formIDSelector,\n isEncryptedSelector,\n apiFilterObjectSelector,\n filteredActiveSubmissionIndexSelector,\n filteredSubmissionCountSelector,\n filteredSubmissionsSelector,\n formSelector,\n filterObjectSelector,\n activeTabIDSelector,\n filterTextSelector,\n allSubmissionsSelectedSelector,\n userSelector,\n submissionByIDSelector,\n activeSubmissionIndexSelector,\n submissionCountSelector,\n liteModeSelector,\n questionsSelector,\n isMessageContainerVisibleSelector,\n encryptionProtocolSelector,\n getIsSubmissionsIncludeEncryptedEntry,\n isAttachmentsDownloadingSelector,\n campaignActiveSelector,\n allSubmissionIDsSelector,\n userTimezoneSelector\n} from '../selectors';\n\nimport texts from '../constants/texts';\n\nimport { getQuestionsSaga } from './questionSagas';\nimport { getFixedTimeFilters, getTimeZonedFilters } from '../utils/Submissions';\nimport { setAIHistoryVisibility } from '../actions';\n\nconst {\n SUBMISSIONS_FETCH_LIVE,\n NEXT_SUBMISSION,\n PREV_SUBMISSION,\n SET_ACTIVE_SUBMISSION,\n SET_FILTER_TEXT,\n BULK_SUBMISSION_UPDATE_SYNC,\n FORM_UPDATE_SYNC,\n SET_FILTER_OBJECT,\n SET_ACTIVE_TAB,\n PENDING_APPROVAL_STATUS_CHANGED,\n REMOVE_SUBMISSION_FROM_LIST,\n RENEW_QUESTIONS,\n RENEW_FORM,\n SET_EMPTY_ALLSENTBOX,\n INITIALIZE_ENCRYPTION_WORKERS,\n CLOSE_MESSAGE\n} = syncActions;\n\nconst {\n SUBMISSIONS_FETCH,\n FILTERED_SUBMISSIONS_FETCH,\n SUBMISSION_UPDATE,\n SUBMISSION_DELETE,\n BULK_SUBMISSION_UPDATE,\n BULK_SUBMISSION_DELETE,\n SUBMISSION_RENEW,\n FORM_FETCH,\n PENDING_SUBMISSION_DELETE,\n QUESTIONS_FETCH,\n SUBMISSIONS_DECRYPT,\n DOWNLOAD_ATTACHMENTS,\n AGENT_SUBMISSION_HISTORY_FETCH,\n UNFILTERED_QUESTIONS_FETCH\n} = asyncActions;\n\nfunction* downloadAttachments(action) {\n const {\n formID, user, filter, selectOrExcludeParamKey\n } = action.payload;\n\n const toastData = {\n position: toast.POSITION.TOP_RIGHT,\n autoClose: 5000,\n hideProgressBar: false,\n closeOnClick: true,\n pauseOnHover: false,\n draggable: false\n };\n try {\n const { email, username } = user;\n const hasFilter = typeof filter === 'object';\n const { data: { success, error } } = yield call(downloadUploads, formID, username, email, filter, hasFilter ? 'filters' : selectOrExcludeParamKey);\n\n if (success) {\n toast.success(t(texts.WILL_SEND_EMAIL_ON_EXPORT_READY.replace('{email}', email)), toastData);\n } else {\n toast.error(t(error), toastData);\n }\n } catch (err) {\n toast.success(t(texts.SOMETHING_WENT_WRONG), toastData);\n }\n}\n\nfunction* directDownloadAttachments(action) {\n const { formID, user } = action.payload;\n const toastData = {\n position: toast.POSITION.TOP_RIGHT,\n autoClose: 5000,\n hideProgressBar: false,\n closeOnClick: true,\n pauseOnHover: false,\n draggable: false\n };\n try {\n const [activeSubmission] = yield all([select(activeSubmissionIDSelector)]);\n const folderName = activeSubmission;\n const singleSubmissionID = JSON.stringify([activeSubmission]);\n const { email } = user;\n\n const { data: { success, error, downloadLink } } = yield call(directDownloadUploads, formID, email, singleSubmissionID, folderName);\n if (success) {\n if (downloadLink) {\n handleCustomNavigation(downloadLink, '_self', true);\n } else {\n toast.success(t(texts.WILL_SEND_EMAIL_ON_EXPORT_READY.replace('{email}', email)), toastData);\n }\n } else {\n toast.error(t(error), toastData);\n }\n } catch (err) {\n toast.error(t(texts.SOMETHING_WENT_WRONG), toastData);\n }\n}\n\nexport function* downloadAttachmentsSaga({ filter = 'activeSubmission' }) {\n const toastData = {\n position: toast.POSITION.TOP_RIGHT,\n autoClose: 5000,\n hideProgressBar: false,\n closeOnClick: true,\n pauseOnHover: false,\n draggable: false\n };\n try {\n const [formID, user, isAttachmentAlreadyDownloading] = yield all([select(formIDSelector), select(userSelector), select(isAttachmentsDownloadingSelector)]);\n\n if (isAttachmentAlreadyDownloading) {\n toast.error(t('An export has been requested already'), toastData);\n return;\n }\n yield put({ type: DOWNLOAD_ATTACHMENTS.PENDING });\n\n if (filter === 'activeSubmission') {\n yield directDownloadAttachments({ payload: { formID, user } });\n } else if (filter === 'all') {\n let _filter = '';\n const filterObject = yield select(filterObjectSelector);\n const preparedFilters = getPreparedFilters(filterObject);\n\n if (!isEmpty(preparedFilters)) {\n const activeTab = yield select(activeTabIDSelector);\n const userTimeZone = yield select(userTimezoneSelector);\n let filterPayload = {\n 'status:ne': ACTIVE_TAB_FILTER[activeTab] ?? ['DELETED', 'ARCHIVED', 'CUSTOM']\n };\n\n let sanitizedFilters = getFixedTimeFilters(preparedFilters, userTimeZone);\n sanitizedFilters = getTimeZonedFilters(sanitizedFilters, userTimeZone);\n filterPayload = { ...filterPayload, ...sanitizedFilters };\n _filter = filterPayload;\n }\n\n yield downloadAttachments({\n payload: {\n formID, user, filter: _filter, selectOrExcludeParamKey: 'selections'\n }\n });\n } else {\n const [isAllSubmissionsSelected] = yield all([select(allSubmissionsSelectedSelector)]);\n const selectOrExcludeParamKey = isAllSubmissionsSelected ? 'excludes' : 'selections';\n const selectionsOrExcludes = JSON.stringify(filter);\n\n yield downloadAttachments({\n payload: {\n formID, user, filter: selectionsOrExcludes, selectOrExcludeParamKey\n }\n });\n }\n\n yield put({ type: DOWNLOAD_ATTACHMENTS.SUCCESS });\n } catch (err) {\n toast.error(t(texts.SOMETHING_WENT_WRONG), toastData);\n yield put({ type: DOWNLOAD_ATTACHMENTS.SUCCESS });\n }\n}\n\nexport function* getAgentSubmissionHistory() {\n const [formID, activeSubmission, form] = yield all([\n select(formIDSelector),\n select(activeSubmissionSelector),\n select(formSelector)\n ]);\n let unfilteredQuestions = form?.unfilteredQuestions;\n\n if (activeSubmission?.aiIncompleteSubmission) {\n yield put(setAIHistoryVisibility(false));\n }\n\n if (!unfilteredQuestions) {\n unfilteredQuestions = yield call(getFormQuestions, formID);\n yield put({\n type: UNFILTERED_QUESTIONS_FETCH.SUCCESS,\n unfilteredQuestions\n });\n }\n\n let history;\n\n if (activeSubmission?.aiAgentChatID) {\n const { chatHistory } = yield call(getAIAgentChatMessages, formID, activeSubmission.aiAgentChatID);\n\n history = prepareAgentHistory({ chatHistory, questions: unfilteredQuestions });\n\n yield put({\n type: AGENT_SUBMISSION_HISTORY_FETCH.SUCCESS,\n history\n });\n }\n}\n\nexport const sanitizeSubmissions = (submissions, includeSubmitter) => {\n return submissions\n .filter(submission => (typeof submission === 'object' && submission.id) || (typeof submission === 'string' && submission))\n .reduce(includeSubmitter ? addSubmitterAnswerReducer : (acc, i) => [...acc, i], [])\n .reduce(!includeSubmitter ? addSubmittedViaInfo : (acc, i) => [...acc, i], []);\n};\n// TODO: this functions is no more used, but it has test. Remove\nexport function* decryptSubmissionsSaga(action = {}) {\n if (!global.JotEncrypted || !global.JotEncrypted.getPrivateKey || !global.JotEncrypted.getPrivateKey()) {\n yield delay(500);\n return yield call(decryptSubmissionsSaga, action);\n }\n\n const privateKey = global.JotEncrypted.getPrivateKey();\n const { submissions } = action;\n\n const numberOfProcessors = Math.min(((global.navigator && global.navigator.hardwareConcurrency) || 4), 5);\n const numberOfChunks = Math.ceil(submissions.length / numberOfProcessors);\n\n try {\n const decryptedSubmissions = yield all([...Array(numberOfChunks)].reduce((prev, curr, index) => {\n const chunkStart = index * numberOfProcessors;\n const chunkEnd = chunkStart + numberOfProcessors;\n const decryptedSubmissionChunkPromises = submissions.slice(chunkStart, chunkEnd).map(submission => (submission.answers ? call(decryptSubmission, submission, privateKey) : submission));\n return prev.concat(decryptedSubmissionChunkPromises);\n }, []));\n\n return decryptedSubmissions;\n } catch (e) {\n // If there is a key in storage but not the correct one, try to flush the keys and request new from user.\n try {\n global.JotEncrypted.flushKeys();\n yield delay(1000);\n global.window.location.reload();\n } catch (err) {\n return submissions;\n }\n }\n}\n\nconst getSignSubmissions = status => {\n return function* getDocuments(p) {\n return yield call(getSignAllDocuments, { ...p, status });\n };\n};\n\nconst getSignSubmissionsIndex = status => {\n return function* getDocuments(id, sid, filter) {\n return yield call(getSignAllDocumentsIndex, {\n id, sid, filter, status\n });\n };\n};\n\n// INFO: will handle incomplete submissions too\nfunction* getAIAgentSubmissions({ id, filter }) {\n try {\n const response = yield call(getConversationSubmissions, { id, filter });\n return response;\n } catch (e) {\n console.error(e);\n }\n}\n\nfunction* getSubmissionsMethod(forIndex) {\n const activeTab = yield select(activeTabIDSelector);\n const { value: { role, permissions: { pendingApprovals } } } = Permissions;\n\n if (/[0-9]/.test(activeTab)) {\n return getFormSubmissions;\n }\n\n let isAllSentbox = false;\n\n if (activeTab === 'sentbox') {\n if (window.location.pathname.indexOf('/sentbox/all') > -1) {\n isAllSentbox = true;\n }\n }\n\n if (role === 'workflowApprover' && pendingApprovals && activeTab === 'inbox') {\n return getApprovalSubmissions;\n }\n\n // TODO: add sign end point requests by active tab (pending, waiting my signature etc.)\n\n if (forIndex) {\n return match(\n activeTab,\n 'myforms', () => getSubmissionIndex,\n 'listings', () => getSubmissionIndex,\n 'mySubmissions', () => getSubmissionIndex,\n // 'allSubmissions', () => getSubmissionIndex,\n 'inbox', () => getSubmissionIndex,\n 'incompleteSubmissions', () => getSubmissionIndex,\n 'archive', () => getSubmissionIndex,\n 'trash', () => getSubmissionIndex,\n 'sentbox', () => getSubmissionIndex,\n 'pendingApprovals', () => getSubmissionIndex,\n 'completed', () => getSubmissionIndex,\n 'signAllDocuments', () => getSignSubmissionsIndex('allDocument'),\n 'signCompleted', () => getSignSubmissionsIndex('completed'),\n 'signWaitingMySignature', () => getSignSubmissionsIndex('waitingMySignature'),\n 'signWaitingOthers', () => getSignSubmissionsIndex('waitingOthers'),\n 'signDeclined', () => getSignSubmissionsIndex('declined'),\n 'signCanceled', () => getSignSubmissionsIndex('canceled'),\n 'conversations', () => getAIAgentSubmissions\n );\n }\n\n return match(\n activeTab,\n 'myforms', () => getFormSubmissions,\n 'listings', () => getFormSubmissions,\n 'mySubmissions', { getFormUserSubmissions, getPendingSubmissions },\n // 'allSubmissions', () => getAllSubmissions,\n 'inbox', () => getFormSubmissions,\n 'incompleteSubmissions', () => getIncompleteSubmissions,\n 'archive', () => getArchivedSubmissions,\n 'trash', () => getTrash,\n 'sentbox', isAllSentbox ? () => getAllSubmissions : { getPendingSubmissions, getFormUserSubmissions },\n 'pendingApprovals', () => getPendingApprovalSubmissions,\n 'completed', () => getCompletedSubmissions,\n 'signAllDocuments', () => getSignSubmissions('allDocument'),\n 'signCompleted', () => getSignSubmissions('completed'),\n 'signWaitingMySignature', () => getSignSubmissions('waitingMySignature'),\n 'signWaitingOthers', () => getSignSubmissions('waitingOthers'),\n 'signDeclined', () => getSignSubmissions('declined'),\n 'signCanceled', () => getSignSubmissions('canceled'),\n 'conversations', () => getAIAgentSubmissions\n );\n}\n\nexport function* getSubmissionsSaga({\n filter,\n offset = 0,\n limit = SUBMISSION_API_LIMIT\n} = {}) {\n try {\n const [formID, filterObject, user] = yield all([\n select(formIDSelector),\n select(apiFilterObjectSelector),\n select(userSelector)\n ]);\n\n const userTimeZone = user.time_zone || '';\n const requestFilter = filter || filterObject;\n const fixedTimeFilter = getFixedTimeFilters(requestFilter, userTimeZone);\n const type = SUBMISSIONS_FETCH.SUCCESS;\n const baseResult = { type, offset, limit };\n\n const { fullText = '', ...filterObjectRest } = fixedTimeFilter || {};\n\n const processedFilterObject = generateApiFilterObject(filterObjectRest, fullText) || '';\n\n const form = yield select(formSelector);\n const { hasAnySignSubmission = false } = form || {};\n const requestQuery = {\n id: formID,\n offset,\n limit,\n filter: processedFilterObject,\n isHIPAA: user.isHIPAA === '1',\n checkSigns: hasAnySignSubmission\n };\n let submissions = [];\n let totalCount = 0;\n const method = yield getSubmissionsMethod();\n\n if (typeof method !== 'function') {\n const arrayedMethods = Object.values(method);\n\n for (let i = 0; i < arrayedMethods.length; i = i + 1) {\n const { content, resultSet: { count } } = yield call(arrayedMethods[i], requestQuery);\n\n submissions = [...submissions, ...content];\n totalCount += count;\n }\n } else {\n const { content, resultSet: { count } } = yield call(method, requestQuery);\n submissions = content;\n totalCount = count;\n }\n\n const { hasSubmitterInfo } = form;\n const sanitizedSubmissions = sanitizeSubmissions(submissions, hasSubmitterInfo);\n\n const isEncrypted = yield select(isEncryptedSelector);\n const isSubmissionsIncludeEncryptedEntry = getIsSubmissionsIncludeEncryptedEntry(sanitizedSubmissions);\n if (isEncrypted) {\n const ids = sanitizedSubmissions?.map(sub => sub.id);\n yield put({ type: SUBMISSIONS_DECRYPT.REQUEST, submissions: ids });\n } else if (isSubmissionsIncludeEncryptedEntry) {\n const ids = sanitizedSubmissions?.filter(sub => sub?.encryptionProtocol === 'JF-CSE-V2')?.map(sub => sub.id);\n yield put({ type: SUBMISSIONS_DECRYPT.REQUEST, submissions: ids });\n }\n\n return { ...baseResult, submissions: sanitizedSubmissions, totalCount };\n } catch (error) {\n console.log(error);\n yield put({\n type: FILTERED_SUBMISSIONS_FETCH.FAILURE,\n error\n });\n }\n}\n\nlet encryptionWorkerPool = null;\nexport function* initializeEncryptionWorkers() {\n const decryptWorkerChannel = eventChannel(emit => {\n const poolSize = (global.navigator && global.navigator.hardwareConcurrency) || 4;\n\n encryptionWorkerPool = new DecryptSubmissionWorkerPool(poolSize);\n encryptionWorkerPool.subscribe(async event => {\n if (event.type === 'result') {\n emit({\n type: SUBMISSIONS_DECRYPT.SUCCESS,\n submission: event.detail\n });\n }\n });\n\n return () => {\n encryptionWorkerPool.terminate();\n };\n });\n\n while (true) {\n yield put(yield take(decryptWorkerChannel));\n }\n}\n\nfunction* _decryptSubmissions2(submission, privateKey) {\n try {\n const decrypted = yield decryptSubmissionV2(privateKey)(submission);\n // There are existing v1 encrypted widget answers on our database.\n // Fallback decryption method is implemented for L3 Cluster :: #18341.\n // Core problem is fixed and we now encrypt widget answers with v2.\n widgetDecryptionMiddleware(submission?.answers, decrypted?.answers, privateKey);\n\n yield put({ type: SUBMISSIONS_DECRYPT.SUCCESS, submission: decrypted });\n } catch (error) {\n console.log(error);\n }\n}\n\n// eslint-disable-next-line require-yield\nfunction* _decryptSubmissions(submissions) {\n const encryptionProtocol = yield select(encryptionProtocolSelector);\n if (!encryptionWorkerPool && encryptionProtocol !== 'JF-CSE-V2') {\n throw new Error('Encryption workers are not initialized.');\n }\n const activeSubmissionId = yield select(activeSubmissionIDSelector);\n const formID = yield select(formIDSelector);\n const privateKey = getEncryptionKey(encryptionProtocol, formID);\n const activeSubmissionIndex = submissions.findIndex(submission => submission.id === activeSubmissionId);\n const prioritizedSubmissions = submissions.length > 0 ? arrayMove(submissions, activeSubmissionIndex, 0) : [];\n if (!privateKey) {\n return;\n }\n\n const ids = prioritizedSubmissions.map(s => (s.id));\n yield put({ type: SUBMISSIONS_DECRYPT.REQUEST, submissions: ids });\n\n if (encryptionProtocol === 'JF-CSE-V2') {\n yield all(prioritizedSubmissions.map(s => {\n return call(_decryptSubmissions2, s, privateKey);\n }));\n } else {\n prioritizedSubmissions.forEach(s => {\n encryptionWorkerPool.queue(s, privateKey);\n });\n }\n}\n\nexport function* decryptSubmissions(action) {\n const isEncrypted = yield select(isEncryptedSelector);\n const { submissions } = action;\n const isSubmissionsIncludeEncryptedEntry = getIsSubmissionsIncludeEncryptedEntry(submissions);\n\n if (!isEncrypted && !isSubmissionsIncludeEncryptedEntry) return;\n\n const encryptionProtocol = yield select(encryptionProtocolSelector);\n const formID = yield select(formIDSelector);\n const privateKey = getEncryptionKey(encryptionProtocol, formID);\n\n if (!privateKey) {\n yield delay(500);\n return yield call(decryptSubmissions, action);\n }\n\n yield spawn(_decryptSubmissions, submissions);\n}\n\nexport function* putSubmissionsSaga({ type, ...action } = {}) {\n const { type: resultType, ...result } = yield call(getSubmissionsSaga, action);\n\n yield put({\n ...action,\n ...result,\n type: type || resultType\n });\n\n return result;\n}\n\nexport function* updateSubmissionSaga({\n sid,\n data\n}) {\n const submissionData = addPrefixToObjectKeys('submission', data);\n\n try {\n const result = yield call(updateSubmission, sid, { ...submissionData, replace: 1 });\n yield put({ type: result ? SUBMISSION_UPDATE.SUCCESS : SUBMISSION_UPDATE.FAILURE });\n } catch (e) {\n yield put({ type: SUBMISSION_UPDATE.FAILURE });\n }\n}\n\nexport const updateActiveSubmissionActionSaga = key => function* updateSubmissionKeySaga({ status }) {\n const sid = yield select(activeSubmissionIDSelector);\n const questions = yield select(questionsSelector);\n const tags = (questions && Object.values(questions)?.find(q => q?.text === 'Tags')) || {};\n yield put({\n type: SUBMISSION_UPDATE.REQUEST, sid, data: { [key]: status }, tags\n });\n};\n\nexport function* updateSubmissionTagSaga({\n status\n}) {\n const { qid } = yield select(tagQuestionSelector);\n const updateActiveSubmission = yield call(updateActiveSubmissionActionSaga, qid);\n\n yield call(updateActiveSubmission, { status });\n}\n\nexport function* getDeleteMethod(isBulk = false) {\n const activeTab = yield select(activeTabIDSelector);\n\n return match(\n activeTab,\n 'trash', () => (isBulk ? deleteBulkSubmission : deleteSubmission),\n 'inbox', () => deleteSubmission,\n 'mySubmissions', () => deletePendingSubmission,\n 'incompleteSubmissions', () => (isBulk ? deleteBulkPendingSubmission : deletePendingSubmission),\n // only pending submission can be deleted.\n 'sentbox', () => (isBulk ? deleteBulkPendingSubmission : deletePendingSubmission)\n );\n}\n\nexport function* deleteSubmissionSaga({\n sid\n}) {\n try {\n const deleteMethod = yield getDeleteMethod();\n const activeTab = yield select(activeTabIDSelector);\n const result = yield call(deleteMethod, sid);\n let toastMessage = '';\n switch (activeTab) {\n case 'inbox':\n toastMessage = texts.SUBMISSION_PURGED;\n break;\n case 'mySubmissions':\n toastMessage = texts.SUBMISSION_SUCCESSFULLY_DELETED;\n break;\n default:\n toastMessage = texts.SUBMISSIONS_SUCCESSFULLY_DELETED;\n break;\n }\n\n if (result) {\n toast.success(t(toastMessage), {\n position: toast.POSITION.TOP_RIGHT,\n autoClose: 2525,\n hideProgressBar: true,\n closeOnClick: false,\n pauseOnHover: false,\n draggable: false,\n className: activeTab === 'mySubmissions' ? 'inboxDeleteToast' : ''\n });\n }\n const successType = (activeTab === 'incompleteSubmissions' || activeTab === 'mySubmissions') ? PENDING_SUBMISSION_DELETE.SUCCESS : SUBMISSION_DELETE.SUCCESS;\n yield put({ type: result ? successType : SUBMISSION_DELETE.FAILURE });\n } catch (e) {\n yield put({ type: SUBMISSION_DELETE.FAILURE });\n }\n}\n\nexport function* readSubmission() {\n const { id: sid, new: isUnread } = yield select(activeSubmissionSelector);\n const filterObject = yield select(filterObjectSelector);\n const hasFilter = Object.keys(filterObject).length === 0;\n const timeOut = hasFilter ? 1500 : 500;\n\n if (sid && isUnread !== '0') {\n yield delay(timeOut);\n yield put({\n type: SUBMISSION_UPDATE.REQUEST,\n data: { new: '0' },\n sid\n });\n }\n}\n\nexport function* deleteBulkSubmissionSaga({ submissionIDs }) {\n let canceled = false;\n const formID = yield select(formIDSelector);\n\n const submissions = yield select(filteredSubmissionsSelector);\n const updatedSubmissionIDs = submissionIDs.length > 0 ? submissionIDs : submissions.map(({ id }) => id);\n const allSelected = yield select(allSubmissionsSelectedSelector);\n const filterObject = yield select(filterObjectSelector);\n\n try {\n const count = updatedSubmissionIDs.length;\n\n const toastID = count > DELETE_BATCH_SIZE ? toast.info(t(texts.DELETING_SUBMISSIONS), {\n position: toast.POSITION.TOP_RIGHT,\n autoClose: false,\n hideProgressBar: false,\n closeOnClick: false,\n pauseOnHover: false,\n draggable: false,\n onClose: () => { canceled = true; }\n }) : null;\n\n let errored = false;\n\n for (let i = 0; i < count; i = i + DELETE_BATCH_SIZE) {\n if (canceled) {\n break;\n }\n\n const submissionIDsBatch = updatedSubmissionIDs.slice(i, Math.min(i + DELETE_BATCH_SIZE, count));\n const bulkDeleteMethod = yield getDeleteMethod(true);\n const conditions = allSelected ? { excludes: submissionIDs } : { includes: submissionIDsBatch };\n const result = yield call(bulkDeleteMethod, formID, {\n conditions: JSON.stringify({ filter: { 'status:eq': 'DELETED', ...filterObject }, ...conditions })\n });\n\n if (result) {\n if (toastID !== null) {\n toast.update(toastID, {\n progress: i / updatedSubmissionIDs.length\n });\n }\n } else {\n toast.error(t(texts.ERROR_DELETING_SUBMISSIONS), {\n position: toast.POSITION.TOP_RIGHT\n });\n errored = true;\n break;\n }\n }\n\n if (!errored) {\n toast.success(canceled\n ? `${t(texts.CANCELED)} ${t(texts.SOME_SUBMISSIONS_DELETED)}`\n : t(`${count > 1\n ? texts.SUBMISSIONS_SUCCESSFULLY_DELETED\n : texts.SUBMISSION_SUCCESSFULLY_DELETED}`), {\n position: toast.POSITION.TOP_RIGHT,\n className: 'success',\n hideProgressBar: true\n });\n }\n\n if (toastID) {\n toast.dismiss(toastID);\n }\n yield put({\n type: errored ? BULK_SUBMISSION_DELETE.FAILURE : BULK_SUBMISSION_DELETE.SUCCESS,\n submissionIDs: updatedSubmissionIDs\n });\n } catch (error) {\n yield put({\n type: BULK_SUBMISSION_DELETE.FAILURE,\n error\n });\n }\n}\n\nexport function* liveSubmissionFlow() {\n while (true) {\n try {\n yield delay(5000);\n const [formID, isEncrypted] = yield all([select(formIDSelector), select(isEncryptedSelector)]);\n\n if (!formID) {\n continue;\n }\n\n const submissions = yield select(submissionsSelector);\n const submissionIDs = submissions.map(({ id }) => id);\n\n const method = yield getSubmissionsMethod();\n\n const { content: lastSubmissions } = yield call(method, {\n id: formID,\n offset: submissions.length,\n limit: 5,\n sort: 'asc'\n });\n\n const newSubmissions = lastSubmissions.filter(({ id }) => submissionIDs.indexOf(id) === -1);\n\n if (newSubmissions.length === 0) {\n continue;\n }\n\n const decryptedSubmissions = isEncrypted ? yield call(decryptSubmissionsSaga, { submissions: newSubmissions }) : newSubmissions;\n\n yield put({\n type: SUBMISSIONS_FETCH_LIVE,\n submissions: decryptedSubmissions.reverse()\n });\n\n if (global.Notification && global.Notification.permission === 'granted') {\n const notification = new global.Notification(t(texts.YOU_HAVE_NEW_SUBMISSION), {\n renotify: true,\n tag: `newSubmission-${formID}`,\n body: window.JOTFORM_ENV === 'ENTERPRISE' ? t(texts.VIEW_ON_INBOX) : t(texts.VIEW_ON_JOTFORM_INBOX),\n icon: 'https://cdn.jotfor.ms/resources/assets/logo/jotform-icon-transparent-280x280.png'\n });\n\n notification.onshow = () => WatchmanRecorder.recordEvent('onNotificationShow', 'notification');\n notification.onclick = function onCloseNotification() {\n WatchmanRecorder.recordEvent('onNotificationClick', 'notification');\n global.parent.focus();\n global.window.focus();\n this.close();\n };\n setTimeout(notification.close.bind(notification), 5000);\n }\n } catch {\n continue;\n }\n }\n}\n\nexport function* liveSubmissionFlowWatcher() {\n while (true) {\n try {\n const lastTask = yield fork(liveSubmissionFlow);\n\n yield take(BULK_SUBMISSION_DELETE.REQUEST);\n yield cancel(lastTask);\n yield take(BULK_SUBMISSION_DELETE.SUCCESS);\n } catch {\n continue;\n }\n }\n}\n\nexport function* activeSubmissionChangeFlow() {\n let lastReadSubmissionTask = null;\n\n while (true) {\n try {\n const { type } = yield take([\n NEXT_SUBMISSION,\n PREV_SUBMISSION,\n SET_ACTIVE_SUBMISSION,\n CLOSE_MESSAGE,\n BULK_SUBMISSION_DELETE.SUCCESS,\n SUBMISSION_DELETE.REQUEST,\n SET_FILTER_OBJECT,\n SET_FILTER_TEXT\n ]);\n\n const [activeSubmissionIndex, submissions, submissionCount, allSubmissionsCount, isLiteMode, isMessageContainerVisible] = yield all([\n select(filteredActiveSubmissionIndexSelector),\n select(filteredSubmissionsSelector),\n select(filteredSubmissionCountSelector),\n select(submissionCountSelector),\n select(liteModeSelector),\n select(isMessageContainerVisibleSelector)\n ]);\n\n // We need to set submission indexs respecting filter status which prevents us putting this logic into reducer\n if (type === NEXT_SUBMISSION && activeSubmissionIndex < submissionCount - 1) {\n yield put({\n type: SET_ACTIVE_SUBMISSION,\n sid: submissions[activeSubmissionIndex + 1].id\n });\n }\n\n if (type === PREV_SUBMISSION && activeSubmissionIndex > 0) {\n yield put({\n type: SET_ACTIVE_SUBMISSION,\n sid: submissions[activeSubmissionIndex - 1].id\n });\n }\n\n if (isMessageContainerVisible) {\n yield put({\n type: CLOSE_MESSAGE\n });\n }\n\n // Trigger submission read action and cancel already initialized one\n if (lastReadSubmissionTask) {\n yield cancel(lastReadSubmissionTask);\n lastReadSubmissionTask = null;\n }\n\n lastReadSubmissionTask = yield fork(readSubmission);\n\n // Decide start/end index based on action type\n const [startIndex, endIndex] = match(\n type,\n PREV_SUBMISSION, () => [Math.max(activeSubmissionIndex - SUBMISSION_API_LIMIT, 0), activeSubmissionIndex],\n NEXT_SUBMISSION, () => [activeSubmissionIndex, Math.min(activeSubmissionIndex + SUBMISSION_API_LIMIT, submissionCount)],\n SET_ACTIVE_SUBMISSION, () => [Math.max(activeSubmissionIndex - Math.floor(SUBMISSION_API_LIMIT / 2), 0), Math.max(activeSubmissionIndex + Math.floor(SUBMISSION_API_LIMIT / 2), 0)]\n );\n\n // Check if there are submissions in that batch to fetch (we are expecting ID fetching already placed placeholder submissions with dummy answer)\n const submissionsBatch = submissions.slice(startIndex, endIndex);\n if (submissionsBatch.length === 0) {\n continue;\n }\n\n // fetching submissions before the last index in lite mode\n if (isLiteMode && (type === NEXT_SUBMISSION && (activeSubmissionIndex + 2 === submissionCount) && submissionCount < allSubmissionsCount)) {\n yield fork(putSubmissionsSaga, { offset: startIndex + 1, limit: SUBMISSION_API_LIMIT });\n continue;\n }\n // No need to make an api call if all the submissions in the given range already fetched\n const notFetchedSubmissionIndex = submissionsBatch.findIndex(({ answers }) => answers === false);\n if (notFetchedSubmissionIndex === -1) {\n continue;\n }\n // Fetch required submissions\n yield fork(putSubmissionsSaga, { offset: startIndex + notFetchedSubmissionIndex });\n } catch {\n continue;\n }\n }\n}\n\nexport function* submissionRenewFlow() {\n while (true) {\n const isEncrypted = yield select(isEncryptedSelector);\n const { sid, showToast = true } = yield take(SUBMISSION_RENEW.REQUEST);\n const { hasPendingApproval: oldHasPendingApproval } = yield select(submissionByIDSelector(sid));\n const submissionDetails = yield call(getSubmission, sid);\n let submission = submissionDetails || {};\n if (isEncrypted) {\n const privateKey = global.JotEncrypted.getPrivateKey();\n submission = decryptSubmission(submission, privateKey);\n }\n\n yield put({ submission, type: SUBMISSION_RENEW.SUCCESS });\n\n if (showToast) {\n toast.success(t(texts.SUBMISSION_UPDATED), {\n type: toast.TYPE.SUCCESS,\n position: toast.POSITION.TOP_RIGHT,\n className: 'success'\n });\n }\n\n const { hasPendingApproval } = submission;\n const isApprovalStatusChanged = hasPendingApproval !== undefined && oldHasPendingApproval !== hasPendingApproval;\n\n if (isApprovalStatusChanged) {\n yield put({\n sid,\n hasPendingApproval,\n type: PENDING_APPROVAL_STATUS_CHANGED\n });\n }\n\n if (isApprovalStatusChanged) {\n const activeTabID = yield select(activeTabIDSelector);\n const { submissions } = yield take(SUBMISSIONS_FETCH.SUCCESS);\n // TODO Remove the submission if its not in the renewed submission list. We should refactor this to not fetch all the submissions to renew the pending list for the active inbox session.\n if (submissions.findIndex(({ id }) => id === sid) === -1 && ['sentbox', 'myforms', 'inbox'].indexOf(activeTabID) === -1) {\n yield delay(1000);\n yield put({ sid, type: REMOVE_SUBMISSION_FROM_LIST, forApproval: true });\n }\n }\n }\n}\n\nexport function* submissionFetchFlow() {\n let lastTask = null;\n\n while (true) {\n const { type, clean, ...action } = yield take(SUBMISSIONS_FETCH.REQUEST);\n\n if (lastTask) {\n yield cancel(lastTask);\n }\n\n lastTask = yield fork(delayed, putSubmissionsSaga, 500, { ...action });\n }\n}\n\nexport function* filteredSubmissionFetchFlow() {\n const activeSubmission = yield select(activeSubmissionSelector);\n const [filterObject, filterText] = yield all([select(filterObjectSelector), select(filterTextSelector)]);\n // do not search with one character\n if (filterText && filterText.length < 2) {\n return;\n }\n\n if (filterText) {\n const activeTab = yield select(activeTabIDSelector);\n WatchmanRecorder.recordEvent('Search', capitalizeFirstLetter(activeTab));\n }\n\n const filter = createFilter(filterText, filterObject);\n\n const { submissions } = yield putSubmissionsSaga({ clean: true, filter });\n\n const index = findIndexByID(submissions, activeSubmission.id);\n const submission = index > -1 ? submissions[index] : submissions[0];\n const sid = submission ? submission.id : '';\n\n if (submission?.form && (activeSubmission?.form || !activeSubmission?.id)) {\n const { form: activeForm } = activeSubmission;\n const { form: nextForm } = submission;\n const { properties, questions, ...formData } = nextForm;\n\n let sanitizedForm;\n\n if (activeForm?.id !== nextForm?.id) {\n sanitizedForm = {\n ...formData,\n ...properties,\n id: nextForm.id,\n pdfTemplates: [],\n new: parseInt(nextForm.new, 10),\n count: parseInt(nextForm.count, 10),\n flag: parseInt('0', 10)\n };\n\n yield put({\n type: RENEW_FORM,\n formProperties: sanitizedForm\n });\n yield put({\n type: RENEW_QUESTIONS,\n formID: nextForm.id,\n questionObj: questions\n });\n\n yield take(QUESTIONS_FETCH.SUCCESS);\n }\n }\n\n yield put({\n type: SET_ACTIVE_SUBMISSION,\n sid\n });\n}\n\n// Make forkable\nexport const delayedTakeLatestFilteredSubmissionFetchFlow = function* withTakeLatest() {\n yield takeLatest([SET_FILTER_TEXT, SET_FILTER_OBJECT], delayed, filteredSubmissionFetchFlow, 200);\n};\n\nconst OFFSET_THRESHOLD = SUBMISSION_API_LIMIT * 2;\nconst isLimitUpdatedEnterprise = (/jotformers.com/.test(window.location.href)) && window.JOTFORM_ENV && window.JOTFORM_ENV === 'ENTERPRISE';\n\nexport function* mainUpdateFlow(form) {\n const questions = yield select(questionsSelector);\n const {\n filterText, filterObject, sid, tab, editMode, liteMode\n } = parseLocationParams();\n const _filterObject = filterObjectQuestionControl(filterObject, questions);\n const filter = createFilter(filterText, _filterObject);\n\n const formID = form.id ? form.id : yield select(formIDSelector);\n const submissionIndex = yield select(filteredActiveSubmissionIndexSelector);\n const activeTabID = yield select(activeTabIDSelector);\n\n const formFromStore = yield select(formSelector);\n const { hasAnySignSubmission = false } = formFromStore || {};\n const method = yield getSubmissionsMethod(true);\n const index = sid ? yield call(method, formID, sid, filter, activeTabID, hasAnySignSubmission) : 0;\n const offset = index > OFFSET_THRESHOLD ? index - OFFSET_THRESHOLD : 0;\n const limit = isLimitUpdatedEnterprise ? SUBMISSION_API_LIMIT : (OFFSET_THRESHOLD * 2);\n\n // Fetch and set initial submission batch\n const { submissions } = yield putSubmissionsSaga({\n clean: true, offset, limit, filter\n });\n\n const activeSID = (submissionIndex === -1 && sid)\n ? sid\n : submissions.length\n && (submissions[index] || submissions[submissionIndex - 1] || submissions[0]).id;\n\n const campaignActive = yield select(campaignActiveSelector);\n if (\n campaignActive\n && sid === ''\n && tab === 'inbox'\n && !liteMode\n && !editMode\n && !filterObject\n ) return;\n\n yield put({\n type: SET_ACTIVE_SUBMISSION,\n sid: activeSID\n });\n}\n\nfunction* bulkUpdateCanceler({\n data, submissionIDs, preventToast = false, aggKey, bulkUpdate\n}) {\n const { prop, value } = data;\n const activeTab = yield select(activeTabIDSelector);\n\n let cancelPayload = false;\n let updateValue = 'ACTIVE';\n\n if (prop === 'status' && !preventToast) {\n const restore = value === 'ACTIVE';\n let text;\n switch (value) {\n case 'ACTIVE':\n text = activeTab === 'archive' ? texts.MOVED_TO_INBOX : texts.SUBMISSIONS_RESTORED;\n break;\n case 'ARCHIVED':\n text = texts.ARCHIVED;\n break;\n case 'DELETED':\n text = texts.MOVED_TO_TRASH;\n break;\n default:\n break;\n }\n\n if (restore) {\n updateValue = activeTab === 'archive' ? 'ARCHIVED' : 'DELETED';\n } else if (activeTab === 'archive') { // for undo from deleted to archived\n updateValue = 'ARCHIVED';\n }\n\n const message = (\n <>\n
\n
{t(text)}
\n
\n {\n cancelPayload = { data: { prop: 'status', value: updateValue, aggKey }, submissionIDs, preventToast: true };\n }}\n >\n UNDO\n \n \n );\n\n toast.success(message, {\n position: toast.POSITION.TOP_RIGHT,\n autoClose: 10000,\n hideProgressBar: true,\n closeOnClick: true,\n pauseOnHover: false,\n draggable: false,\n pauseOnFocusLoss: false\n });\n }\n\n let attempt = 0;\n\n while (!cancelPayload && attempt < 10) {\n yield delay(1000);\n attempt += 1;\n }\n\n if (cancelPayload) {\n if (bulkUpdate) {\n yield cancel(bulkUpdate);\n }\n\n yield put({\n type: BULK_SUBMISSION_UPDATE.REQUEST,\n ...cancelPayload\n });\n }\n}\n\nexport function* bulkUpdateCaller(formid, args) {\n const { formCounts: { new: unreadCount, count: submissionCount, flag: favoriteCount } } = yield call(updateBulkSubmission, formid, args);\n yield delay(300);\n\n // Update store\n yield put({\n type: FORM_UPDATE_SYNC,\n formProperties: {\n new: unreadCount,\n flag: favoriteCount,\n count: submissionCount\n }\n });\n\n yield mainUpdateFlow(select(formSelector));\n}\n\nexport function* moveToNextSubmissionAvailableOnStatusChange(submissionIDs, data) {\n const [activeSubmissionIndex, submissions, activeSubmissionID] = yield all([\n select(activeSubmissionIndexSelector),\n select(submissionsSelector),\n select(activeSubmissionIDSelector)\n ]);\n\n if (submissionIDs.includes(activeSubmissionID) && data.prop === 'status' && submissions.length) {\n let nextSubmissionID;\n\n for (let i = activeSubmissionIndex; i >= 0; i--) {\n if (!submissionIDs.includes(submissions[i].id)) {\n nextSubmissionID = submissions[i].id;\n break;\n }\n }\n\n if (!nextSubmissionID) {\n for (let i = activeSubmissionIndex; i < submissions.length; i++) {\n if (!submissionIDs.includes(submissions[i].id)) {\n nextSubmissionID = submissions[i].id;\n break;\n }\n }\n }\n\n if (nextSubmissionID) {\n yield put({\n type: SET_ACTIVE_SUBMISSION,\n sid: nextSubmissionID\n });\n }\n }\n}\n\nexport function* bulkSubmissionUpdateFlow() {\n while (true) {\n const updateRequest = yield take(BULK_SUBMISSION_UPDATE.REQUEST);\n const { submissionIDs, data } = updateRequest;\n let { aggKey } = data;\n try {\n yield call(moveToNextSubmissionAvailableOnStatusChange, submissionIDs, data);\n\n const form = yield select(formSelector);\n const isAllSubmissionsSelected = yield select(allSubmissionsSelectedSelector);\n let willChangeSubmissionIDs = [...submissionIDs];\n\n // TODO: This code is only working for bulk updates for flags (star / unstar).\n // It could be applied for other bulk updates.\n if (isAllSubmissionsSelected && submissionIDs.length === 0 && data.prop === 'flag') {\n willChangeSubmissionIDs = yield select(allSubmissionIDsSelector);\n }\n\n // Update submissions\n yield put({\n type: BULK_SUBMISSION_UPDATE_SYNC,\n submissionIDs: willChangeSubmissionIDs,\n data\n });\n\n const fullText = yield select(filterTextSelector);\n\n const filterObject = yield select(filterObjectSelector);\n const filter = {\n ...filterObject,\n ...(fullText && { fullText })\n };\n\n if (data.status) {\n filter.status = data.status;\n }\n if (!aggKey) {\n aggKey = isAllSubmissionsSelected ? 'excludes' : 'includes';\n }\n\n const conditions = {\n ...(Object.keys(filter).length && { filter }),\n [aggKey]: submissionIDs\n };\n\n const bulkUpdate = yield fork(bulkUpdateCaller, form.id, { ...data, conditions: JSON.stringify(conditions) });\n // Make request\n yield fork(bulkUpdateCanceler, {\n ...updateRequest, submissionIDs, aggKey, bulkUpdate\n });\n } catch (error) {\n yield put({\n type: BULK_SUBMISSION_UPDATE.FAILURE,\n error\n });\n }\n }\n}\nexport function* updateSentbox() {\n yield take(FORM_FETCH.SUCCESS);\n const form = yield select(formSelector);\n yield fork(mainUpdateFlow, form.id);\n}\n//! WORK IN PROGRESS\nexport function* allSubmissionsFlow() {\n const postFlows = [\n submissionRenewFlow,\n bulkSubmissionUpdateFlow,\n delayedTakeLatestFilteredSubmissionFetchFlow\n ];\n try {\n yield spawn(activeSubmissionChangeFlow);\n\n const { filterText, filterObject, sid } = parseLocationParams();\n\n const { submissions } = yield call(getSubmissionsSaga);\n\n let submissionForm;\n\n if (submissions.length > 0) {\n const { form } = sid ? submissions.filter(submission => submission.id === sid)[0] : submissions[0];\n submissionForm = form;\n\n const { properties, questions, ...formData } = submissionForm;\n const sanitizedForm = {\n ...formData,\n ...properties,\n id: submissionForm.id,\n new: parseInt(submissionForm.new, 10),\n count: parseInt(submissionForm.count, 10),\n flag: parseInt('0', 10)\n };\n\n yield put({\n type: FORM_FETCH.SUCCESS,\n form: sanitizedForm\n });\n } else {\n yield put({\n type: SET_EMPTY_ALLSENTBOX\n });\n return;\n }\n\n yield all([\n yield call(getQuestionsSaga, { formID: submissionForm.id }),\n yield call(mainUpdateFlow, submissionForm)\n ]);\n\n yield all(postFlows.map(spawn));\n\n const { isEncrypted } = submissionForm;\n\n if (global.window._fs_namespace && global.window[global.window._fs_namespace]) {\n if (isEncrypted === 'Yes') {\n global.window[global.window._fs_namespace].shutdown();\n } else {\n global.window[global.window._fs_namespace].restart();\n }\n }\n\n if (filterText) {\n yield put({\n type: SET_FILTER_TEXT,\n filterText\n });\n }\n\n if (filterObject) {\n const { questions } = submissionForm;\n const newFilterObject = filterObjectQuestionControl(filterObject, questions);\n yield put({\n type: SET_FILTER_OBJECT,\n filters: newFilterObject\n });\n }\n } catch (e) {\n console.log('error happened', e);\n }\n}\n\nexport function* mainSubmissionFlow() {\n /**\n * Preflows => will be initialized before fetching first batch of submissions\n * PostFlows => will be initialized after settings active submission\n */\n const preFlows = [\n submissionFetchFlow,\n activeSubmissionChangeFlow\n ];\n\n const postFlows = [\n submissionRenewFlow,\n bulkSubmissionUpdateFlow,\n // liveSubmissionFlowWatcher,\n delayedTakeLatestFilteredSubmissionFetchFlow\n ];\n let formChanged = true;\n\n while (true) {\n try {\n const { form } = formChanged ? yield take(FORM_FETCH.SUCCESS) : { form: yield select(formSelector) };\n const { isEncrypted, encryptionProtocol = '' } = form;\n // We are preventing fullstory to record encrypted forms\n if (global.window._fs_namespace && global.window[global.window._fs_namespace]) {\n if (isEncrypted === 'Yes') {\n global.window[global.window._fs_namespace].shutdown();\n } else {\n global.window[global.window._fs_namespace].restart();\n }\n }\n\n if (isEncrypted === 'Yes' && encryptionProtocol !== 'JF-CSE-V2') {\n yield put({ type: INITIALIZE_ENCRYPTION_WORKERS });\n }\n\n // Fork preFlows\n const preFlowTasks = yield all(preFlows.map(fork));\n\n const mainFlowTask = yield fork(mainUpdateFlow, form);\n\n // Fork postFlows\n const postFlowTasks = yield all(postFlows.map(fork));\n\n const { filterText, filterObject } = parseLocationParams();\n\n // Post flows are running, get search from query if exists\n if (filterText) {\n yield put({\n type: SET_FILTER_TEXT,\n filterText\n });\n }\n\n if (filterObject) {\n const questions = yield select(questionsSelector);\n const newFilterObject = filterObjectQuestionControl(filterObject, questions);\n yield put({\n type: SET_FILTER_OBJECT,\n filters: newFilterObject\n });\n }\n\n // New form incoming / tab changed\n const [isFormChanged] = yield race([\n take(FORM_FETCH.REQUEST),\n take(SET_ACTIVE_TAB)\n ]);\n\n formChanged = isFormChanged;\n\n yield cancel(mainFlowTask);\n\n // Clear flows before reinitializing\n for (let i = 0; i < preFlowTasks.length; i++) {\n yield cancel(preFlowTasks[i]);\n }\n\n for (let i = 0; i < postFlowTasks.length; i++) {\n yield cancel(postFlowTasks[i]);\n }\n } catch (e) {\n console.log('error happened', e);\n continue;\n }\n }\n}\n","import matches from 'lodash/matches';\nimport {\n take,\n select,\n put,\n all,\n call\n} from 'redux-saga/effects';\n\nimport { syncActions, asyncActions } from '../actions/actionTypes';\n\nimport {\n filteredSubmissionsSelector,\n selectedSubmissionIDsSelector,\n isMessageContainerVisibleSelector,\n activeTabIDSelector,\n getIsFullStorySessionUrlSaved,\n userSelector,\n isAdminSelector,\n getAiAgents\n} from '../selectors';\nimport { setAIHistoryVisibility, setIsFullStorySessionUrlSaved } from '../actions';\nimport { getFSSessionUrl, setUserVarsFS } from '../utils';\nimport { saveAgentFSSession } from '../api';\n\nconst {\n BULK_SUBMISSION_SELECTION,\n SUBMISSIONS_FETCH\n} = asyncActions;\n\nconst {\n SET_FILTERED_IDS,\n CLOSE_MESSAGE\n} = syncActions;\n\nexport function* closeMessage() {\n const [isMessageContainerVisible] = yield all([\n select(isMessageContainerVisibleSelector)\n ]);\n if (isMessageContainerVisible) {\n yield put({\n type: CLOSE_MESSAGE\n });\n }\n}\n\nexport function* submissionSelectionFlow() {\n while (true) {\n try {\n const { filter } = yield take(BULK_SUBMISSION_SELECTION.REQUEST);\n\n // Clear selection\n if (filter === 'clear') {\n yield put({\n type: BULK_SUBMISSION_SELECTION.SUCCESS,\n selectedSubmissions: []\n });\n continue;\n }\n\n if (filter === 'all') {\n yield put({\n type: BULK_SUBMISSION_SELECTION.SUCCESS,\n allSelected: true,\n selectedSubmissions: []\n });\n\n continue;\n }\n\n const filterFunction = matches(filter);\n const submissions = yield select(filteredSubmissionsSelector);\n const selectedSubmissions = submissions.filter(filterFunction);\n const submissionIDs = selectedSubmissions.map(({ id }) => id);\n\n yield put({\n type: BULK_SUBMISSION_SELECTION.SUCCESS,\n selectedSubmissions: submissionIDs\n });\n } catch {\n continue;\n }\n }\n}\n\nexport function* fixSelectionFlow() {\n while (true) {\n yield take(SET_FILTERED_IDS);\n\n const [selectedSubmissionIDs, filteredSubmissions] = yield all([select(selectedSubmissionIDsSelector), select(filteredSubmissionsSelector)]);\n const fixedSelectedSubmissions = selectedSubmissionIDs.filter(id => filteredSubmissions.find(({ id: sid }) => id === sid));\n\n if (fixedSelectedSubmissions.length !== selectedSubmissionIDs.length) {\n yield put({\n type: BULK_SUBMISSION_SELECTION.SUCCESS,\n selectedSubmissions: fixedSelectedSubmissions\n });\n }\n }\n}\n\nexport function* saveAgentFSSessionUrl() {\n try {\n yield take(SUBMISSIONS_FETCH.SUCCESS);\n const isFullStorySessionUrlSaved = yield select(getIsFullStorySessionUrlSaved);\n if (isFullStorySessionUrlSaved) {\n return;\n }\n\n const aiAgents = yield select(getAiAgents);\n if (!aiAgents) {\n return;\n }\n\n const aiAgentIds = Object.keys(aiAgents);\n if (aiAgentIds.length === 0) {\n return;\n }\n\n const { username } = yield select(userSelector);\n const sessionUrl = getFSSessionUrl();\n yield all(aiAgentIds.map(agentId => call(saveAgentFSSession, agentId, { sessionUrl, username, type: 'inbox' })));\n yield put(setIsFullStorySessionUrlSaved(true));\n } catch (e) {\n console.error(e);\n }\n}\n\nexport function* setAiConversationsToggle() {\n const activeTabId = yield select(activeTabIDSelector);\n const isAIConversationsTab = activeTabId === 'conversations';\n const isAdmin = yield select(isAdminSelector);\n yield put(setAIHistoryVisibility(activeTabId === 'inbox'));\n\n if (isAIConversationsTab && !isAdmin) {\n yield call(setUserVarsFS, { inbox_ai_transcript: true });\n yield call(saveAgentFSSessionUrl);\n }\n}\n","/* eslint-disable max-statements */\nimport {\n select,\n take,\n put,\n all,\n call,\n fork,\n delay,\n spawn\n} from 'redux-saga/effects';\n\nimport { toast } from 'react-toastify';\nimport { t } from '@jotforminc/translation';\nimport { StorageHelper } from '@jotforminc/storage-helper';\nimport {\n moment as Moment,\n handleCustomNavigation,\n getUrlParameter\n} from '@jotforminc/utils';\nimport { getActiveAlias, getAppPath } from '@jotforminc/router-bridge';\nimport {\n formSelector,\n formIDSelector,\n selectedSubmissionIDsSelector,\n appLoadedSelector,\n uiSelector,\n liteModeSelector,\n userTimezoneSelector,\n submissionDateLanguageSelector,\n userSelector,\n userAndFormLoadedSelector,\n autoDeleteSubmissionsInterval,\n isFormOwnerSelector,\n allowAutoDeleteSubmissionsSelector,\n isSubmissionViewLoading\n} from '../selectors';\n\nimport {\n sanitizeSubmissions,\n decryptSubmissions,\n mainSubmissionFlow,\n allSubmissionsFlow\n} from './submissionSagas';\n\nimport { syncActions, asyncActions } from '../actions/actionTypes';\nimport {\n fetchUser,\n fetchUserForms,\n preparePrint,\n fetchForm,\n fetchQuestions,\n setLiteMode,\n setSingleSubmission,\n setIsAllSentbox,\n setOpenIntroModal,\n initTeam\n} from '../actions';\n\nimport {\n generateMultiplePDF,\n generateMultiplePDFFilled,\n getSubmission,\n getEnv\n} from '../api';\n\nimport texts from '../constants/texts';\n\nimport { getQueryParameter, getTeamInfo } from '../utils';\nimport {\n AUTO_DELETE_INFORMATION_MODAL,\n AUTO_DELETE_INFO_POPUP_KEY,\n LITE_MODE_PAGES,\n RIGHT_PANEL_CLASS\n} from '../constants';\n\nconst {\n PRINT_COMPLETE,\n PREPARE_PRINT,\n FORM_UPDATE_SYNC,\n MULTIPLE_DOWNLOAD_BATCH,\n SHOW_UI_ERROR,\n SET_PWA_MODE,\n INITIALIZE_ENCRYPTION_WORKERS,\n SET_SUBMISSION_VIEW_LOADING\n} = syncActions;\n\nconst {\n USER_FETCH,\n FORM_FETCH,\n FORM_UPDATE,\n SUBMISSIONS_FETCH\n} = asyncActions;\n\nexport function* submissionPrintFlow() {\n while (true) {\n const { layout, spacing, thread } = yield take(PREPARE_PRINT);\n\n const form = yield select(formSelector);\n const liteMode = yield select(liteModeSelector);\n\n let clonedNode = null;\n\n const printClass = 'jfInbox--print';\n let layoutClass = `jfInbox--print-flex-${form.submissionPrintLayoutPreference || layout || 'row'}`;\n let spacingClass = `jfInbox--print-density-${form.submissionPrintSpacingPreference || spacing || 'medium'}`;\n const threadClass = `jfInbox--print-thread-${form.submissionPrintThreadPreference || thread || 'No'}`;\n\n if (liteMode) {\n let submissionViewLoading = yield select(isSubmissionViewLoading);\n if (submissionViewLoading) {\n while (submissionViewLoading) {\n submissionViewLoading = yield take(SET_SUBMISSION_VIEW_LOADING);\n }\n }\n\n const areaToPrint = global.document.getElementsByClassName('jfInbox-submission-container')[0];\n clonedNode = areaToPrint.cloneNode(true);\n global.document.body.appendChild(clonedNode);\n global.document.body.classList.add('inboxOverlayPrint');\n\n // Opinionated layout\n layoutClass = 'jfInbox--print-flex-row';\n spacingClass = 'jfInbox--print-density-compact';\n }\n\n const inboxState = global.document.body.classList;\n const recallState = {};\n\n global.document.body.classList.add(printClass);\n global.document.body.classList.add(layoutClass);\n global.document.body.classList.add(spacingClass);\n global.document.body.classList.add(threadClass);\n\n if (inboxState.contains(RIGHT_PANEL_CLASS)) {\n inboxState.toggle(RIGHT_PANEL_CLASS);\n recallState[RIGHT_PANEL_CLASS] = 1;\n }\n\n yield take(PRINT_COMPLETE);\n\n global.document.body.classList.remove(printClass);\n global.document.body.classList.remove(layoutClass);\n global.document.body.classList.remove(spacingClass);\n global.document.body.classList.remove(threadClass);\n\n Object.keys(recallState).forEach(st => inboxState.toggle(st));\n\n if (liteMode) {\n if (clonedNode) {\n clonedNode.parentNode.removeChild(clonedNode);\n }\n clonedNode = null;\n global.document.body.classList.remove('inboxOverlayPrint');\n }\n }\n}\n\nexport function* fetchFormAndWaitLoad(formID, waitFor = appLoadedSelector) {\n yield put(fetchForm(formID, true));\n yield put(fetchQuestions(formID));\n\n let loaded = false;\n let errored = false;\n while (!(loaded || errored)) {\n yield take('*');\n loaded = yield select(waitFor);\n ({ errored } = yield select(uiSelector));\n }\n}\nexport function setReady() {\n setTimeout(() => {\n if (!window.preventReady) {\n global.document.body.classList.add('jfInbox--isReady');\n }\n }, 0);\n}\nexport function* waitFormLoad(waitFor = appLoadedSelector) {\n let loaded = false;\n let errored = false;\n while (!(loaded || errored)) {\n yield take('*');\n loaded = yield select(waitFor);\n ({ errored } = yield select(uiSelector));\n }\n}\nexport function* singleSubmissionFlow(sid) {\n try {\n const submission = yield call(getSubmission, sid);\n if (submission && submission.form_id) {\n yield put(setSingleSubmission(submission));\n yield fork(fetchFormAndWaitLoad, submission.form_id, userAndFormLoadedSelector);\n }\n\n const { form } = yield take(FORM_FETCH.SUCCESS);\n const { hasSubmitterInfo } = form;\n const sanitizedSubmissions = sanitizeSubmissions([submission], hasSubmitterInfo);\n\n if (form.isEncrypted === 'Yes') {\n const actions = {\n clean: true,\n totalCount: 1,\n offset: 0,\n type: SUBMISSIONS_FETCH.SUCCESS\n };\n\n yield put({ type: INITIALIZE_ENCRYPTION_WORKERS });\n yield spawn(decryptSubmissions, { submissions: sanitizedSubmissions, ...actions });\n }\n } catch (e) {\n yield put({\n type: SHOW_UI_ERROR\n });\n }\n}\n\nexport function* initFlow() {\n const environment = yield call(getEnv);\n window.JOTFORM_ENV = environment;\n\n yield put(fetchUser());\n yield put(fetchUserForms());\n\n const basePath = getAppPath();\n const pathName = window.location.pathname;\n\n if (pathName === '/sentbox/') {\n handleCustomNavigation('/sentbox/all', '_self');\n return;\n }\n\n const paths = pathName.replace(basePath, '').split('/');\n const firstNumberInPathIndex = paths.findIndex(f => f && /^\\d+$/.test(f));\n const pageName = getActiveAlias();\n let firstNumberInPath;\n if (firstNumberInPathIndex > 0) {\n firstNumberInPath = paths[firstNumberInPathIndex];\n }\n\n const isForm = firstNumberInPath && firstNumberInPath.length < 18;\n const isStandalone = LITE_MODE_PAGES.indexOf(pageName) === -1;\n const isAllSentbox = pathName.indexOf('/sentbox/all') > -1;\n const isApps = window?.location?.href.indexOf('jotform_pwa') > -1;\n\n if (isApps) {\n yield put({ type: SET_PWA_MODE });\n }\n\n if (paths[paths.length - 1] === 'empty') {\n const formID = getQueryParameter('formID');\n yield put(fetchForm(formID, true));\n yield take(FORM_FETCH.SUCCESS);\n yield call(setReady);\n return;\n }\n\n if (!isStandalone) {\n yield fork(mainSubmissionFlow);\n return;\n }\n\n if (isForm) {\n yield fork(mainSubmissionFlow);\n yield call(fetchFormAndWaitLoad, firstNumberInPath);\n } else if (firstNumberInPath && !isAllSentbox) { // load single submission - TODO: use this for possible quicker download\n yield call(singleSubmissionFlow, firstNumberInPath);\n } else if (isAllSentbox) {\n yield put(setIsAllSentbox(true));\n yield fork(allSubmissionsFlow);\n yield call(waitFormLoad);\n } else {\n yield take(FORM_FETCH.REQUEST);\n yield fork(mainSubmissionFlow);\n }\n\n const isForcedLiteMode = getQueryParameter('liteMode') === '1';\n if (isForcedLiteMode) {\n yield put(setLiteMode());\n }\n\n const isDownload = getQueryParameter('download') === '1';\n if (isDownload) {\n yield put(preparePrint());\n\n // Uncomment to test download mode.\n // setTimeout(global.window.print, 0);\n }\n const { isTeamMember } = getTeamInfo();\n if (isTeamMember) {\n yield put(initTeam());\n }\n\n const digestFlow = getUrlParameter('dgrf');\n if (\n environment !== 'DEVELOPMENT'\n && digestFlow\n && typeof window?.JotFormActions === 'function'\n ) {\n try {\n const [digestID, emailID] = digestFlow.split('-');\n const logger = new window.JotFormActions('digestEmailViewSubmissions');\n const user = yield select(userSelector);\n\n if (logger?.tick) {\n logger?.tick({\n actor: user?.username || '__digest__',\n action: digestID,\n target: emailID\n });\n }\n } catch (err) {\n console.log('Error occured at tracking.');\n }\n }\n\n // Wait for the commited React layout to update (for download)\n setReady();\n}\n\nexport function* momentFlow() {\n while (true) {\n try {\n yield take([USER_FETCH.SUCCESS, FORM_FETCH.SUCCESS, FORM_UPDATE_SYNC, FORM_UPDATE.REQUEST]);\n const [language, timezone] = yield all([select(submissionDateLanguageSelector), select(userTimezoneSelector)]);\n\n if (!language && !timezone) {\n continue;\n }\n\n if (timezone && Moment.timezone !== timezone) {\n Moment.setTimezone(timezone);\n }\n\n if (language && Moment.locale !== language) {\n Moment.setLocale(language);\n }\n } catch {\n continue;\n }\n }\n}\n\nexport function* multipleDownloadFlow({ pdfID, actionType = 'INCLUDES', activeTab }) {\n try {\n const formID = yield select(formIDSelector);\n const { username, email } = yield select(userSelector);\n const submissionIDs = yield select(selectedSubmissionIDsSelector);\n\n const toastID = toast.info(t(texts.YOUR_PDF_FILES_ARE_PREPARING), {\n position: toast.POSITION.TOP_RIGHT,\n className: 'success',\n autoClose: 5000\n });\n\n let selectedSubmissionsIDs = '';\n const submissionCount = submissionIDs.length;\n // generateMultiplePDFFilled api detect submissionIDs with ',' so I end-up with this solution.\n if (submissionCount === 1) {\n selectedSubmissionsIDs = `${submissionIDs[0]},`;\n } else if (submissionCount > 0) {\n selectedSubmissionsIDs = `${submissionIDs.join(',')}`;\n }\n\n while (true) {\n yield delay(3000);\n const result = (pdfID === 'importedPDF')\n ? yield call(generateMultiplePDFFilled, { formID, activeTab, submissionIDs: selectedSubmissionsIDs })\n : yield call(generateMultiplePDF, {\n formID, username, submissionIDs: JSON.stringify({ type: actionType, submissionIDs }), pdfID\n });\n\n if (result.status === 'success' && toastID !== null) {\n toast.update(toastID, {\n type: toast.TYPE.SUCCESS,\n render: t(texts.WILL_SEND_EMAIL_ON_EXPORT_READY).replace('{email}', email),\n autoClose: false\n });\n break;\n } else {\n const { percentage } = result.jobDetails;\n yield put({\n type: MULTIPLE_DOWNLOAD_BATCH,\n percentage\n });\n\n if (toastID !== null) {\n toast.update(toastID, {\n render: t(texts.YOUR_PDF_FILES_ARE_PREPARING_PERCENTAGE_ARE_READY).replace('{percentage}', percentage),\n progress: percentage / 100\n });\n }\n }\n }\n } catch {\n toast.error(t(texts.THERE_WAS_AN_ERROR_WHILE_DOWNLOADING_PDF_TRY_AGAIN), {\n position: toast.POSITION.TOP_RIGHT,\n className: 'error'\n });\n }\n}\n\nexport function* checkAndShowIntroPopups() {\n try {\n const isOwner = yield select(isFormOwnerSelector);\n\n const isAutoDeleteSubmissionsAllowed = yield select(allowAutoDeleteSubmissionsSelector);\n\n if (isAutoDeleteSubmissionsAllowed) {\n // Auto Delete Info Popup Check\n const autoDeleteInterval = yield select(autoDeleteSubmissionsInterval);\n if (isOwner && autoDeleteInterval !== 'Disabled') {\n const formID = yield select(formIDSelector);\n if (StorageHelper.getLocalStorageItem({ key: `${AUTO_DELETE_INFO_POPUP_KEY}_${formID}` }) !== '1') {\n yield put(setOpenIntroModal(AUTO_DELETE_INFORMATION_MODAL));\n }\n }\n }\n } catch (err) {\n yield put({ type: 'INTRO_POP_ERROR', payload: err.toString() });\n }\n}\n","import { call, put, select } from 'redux-saga/effects';\nimport { setTeamProperties, setUserTeamRoles } from '../actions';\nimport { fetchTeamProperties, fetchUserTeamRoles } from '../api';\nimport { getTeamID } from '../selectors';\n\nexport function* initTeam() {\n const teamID = yield select(getTeamID);\n\n if (!teamID) return;\n\n const properties = yield call(fetchTeamProperties, teamID);\n if (properties) {\n yield put(setTeamProperties(properties));\n }\n\n const userRoles = yield call(fetchUserTeamRoles, teamID);\n if (userRoles) {\n yield put(setUserTeamRoles(userRoles));\n }\n}\n","import {\n all,\n call,\n put,\n select\n} from 'redux-saga/effects';\nimport { handleCustomNavigation } from '@jotforminc/utils';\nimport { asyncActions } from '../actions/actionTypes';\nimport { formIDSelector } from '../selectors';\nimport { getAIAgentProps, getAiAgents, createAiAgent as createAiAgentAPI } from '../api';\n\nconst {\n FETCH_AI_AGENTS,\n CREATE_AI_AGENT\n} = asyncActions;\n\nexport function* fetchAiAgents() {\n try {\n const formId = yield select(formIDSelector);\n const content = yield call(getAiAgents, formId);\n\n const agents = content.reduce((acc, curr) => {\n return { ...acc, [curr.uuid]: curr };\n }, {});\n\n const agentPropsArray = yield all(Object.keys(agents).map(agentId => call(getAIAgentProps, agentId)));\n Object.keys(agents).forEach((agentId, index) => {\n const agentProps = agentPropsArray[index];\n const avatarIconProp = agentProps.find(prop => prop.prop === 'avatarIconLink');\n const avatarIconUrl = avatarIconProp ? avatarIconProp.value : null;\n\n agents[agentId] = {\n ...agents[agentId],\n avatarIconUrl\n };\n });\n\n yield put({\n type: FETCH_AI_AGENTS.SUCCESS,\n agents\n });\n } catch (e) {\n console.error(e);\n yield put({\n type: FETCH_AI_AGENTS.FAILURE\n });\n }\n}\n\nexport function* createAiAgent() {\n try {\n const formId = yield select(formIDSelector);\n yield call(createAiAgentAPI, {\n resources: [{ resource_id: formId, resource_type: 'FORM' }],\n materials: [{ type: 'TEXT', data: '' }]\n });\n\n handleCustomNavigation(`/agent/build/form/${formId}`, '_self');\n yield put({\n type: CREATE_AI_AGENT.SUCCESS\n });\n } catch (e) {\n console.error(e);\n yield put({\n type: CREATE_AI_AGENT.FAILURE\n });\n }\n}\n","import {\n all,\n takeEvery,\n put,\n fork,\n takeLatest\n} from 'redux-saga/effects';\n\nimport { syncActions, asyncActions } from '../actions/actionTypes';\n\nimport {\n getUserSaga,\n getUserFormsSaga\n} from './userSagas';\n\nimport {\n getFormSaga,\n updateFormSaga\n} from './formSagas';\n\nimport {\n getQuestionsSaga,\n updateQuestionSaga,\n updateTagSaga,\n addDummyQuestionsSaga,\n questionValuesFlow\n} from './questionSagas';\n\nimport {\n updateSubmissionSaga,\n deleteSubmissionSaga,\n updateSubmissionTagSaga,\n updateActiveSubmissionActionSaga,\n deleteBulkSubmissionSaga,\n downloadAttachmentsSaga,\n updateSentbox,\n initializeEncryptionWorkers,\n decryptSubmissions,\n getAgentSubmissionHistory\n} from './submissionSagas';\n\nimport {\n fixSelectionFlow,\n setAiConversationsToggle,\n submissionSelectionFlow\n} from './uiSagas';\n\nimport {\n initFlow,\n momentFlow,\n submissionPrintFlow,\n multipleDownloadFlow,\n checkAndShowIntroPopups\n} from './otherSagas';\n\nimport { withTimeout } from './sagaHelpers';\nimport { initTeam } from './teamSagas';\nimport { createAiAgent, fetchAiAgents } from './aiAgentsSagas';\n\n// import { getDummyQuestionKeys } from '../utils';\n\nconst {\n SET_FLAG,\n SET_SUBMISSION_NEW,\n ASSIGN_TAG,\n UPDATE_TAG,\n PREPARE_MULTIPLE_DOWNLOAD,\n RENEW_QUESTIONS,\n UPDATE_SENTBOX,\n INIT_TEAM,\n INITIALIZE_ENCRYPTION_WORKERS,\n SET_ACTIVE_SUBMISSION,\n SET_ACTIVE_TAB\n} = syncActions;\n\nconst {\n USER_FETCH,\n USER_FORMS_FETCH,\n FORM_FETCH,\n QUESTIONS_FETCH,\n FORM_UPDATE,\n SUBMISSION_UPDATE,\n ADD_DUMMY_QUESTIONS,\n SUBMISSION_DELETE,\n QUESTION_UPDATE,\n BULK_SUBMISSION_DELETE,\n DOWNLOAD_ATTACHMENTS,\n SUBMISSIONS_FETCH,\n FETCH_AI_AGENTS,\n CREATE_AI_AGENT\n} = asyncActions;\n\nfunction* watchAll() {\n const sagaWatchList = [\n takeEvery(USER_FETCH.REQUEST, withTimeout(getUserSaga)),\n takeEvery(UPDATE_SENTBOX, withTimeout(updateSentbox)),\n takeEvery(USER_FORMS_FETCH.REQUEST, withTimeout(getUserFormsSaga)),\n takeEvery(FORM_FETCH.REQUEST, withTimeout(getFormSaga)),\n takeEvery(FORM_UPDATE.REQUEST, withTimeout(updateFormSaga)),\n takeEvery(QUESTIONS_FETCH.REQUEST, withTimeout(getQuestionsSaga)),\n takeEvery(RENEW_QUESTIONS, withTimeout(getQuestionsSaga)),\n takeEvery(QUESTION_UPDATE.REQUEST, withTimeout(updateQuestionSaga)),\n takeEvery(ADD_DUMMY_QUESTIONS.REQUEST, withTimeout(addDummyQuestionsSaga)),\n takeEvery(SUBMISSION_DELETE.REQUEST, withTimeout(deleteSubmissionSaga)),\n takeEvery(SUBMISSION_UPDATE.REQUEST, withTimeout(updateSubmissionSaga)),\n takeEvery(ASSIGN_TAG, withTimeout(updateSubmissionTagSaga)),\n takeEvery(UPDATE_TAG, withTimeout(updateTagSaga)),\n takeEvery(BULK_SUBMISSION_DELETE.REQUEST, deleteBulkSubmissionSaga),\n takeEvery(PREPARE_MULTIPLE_DOWNLOAD, multipleDownloadFlow),\n takeEvery(DOWNLOAD_ATTACHMENTS.REQUEST, downloadAttachmentsSaga),\n takeEvery(FORM_FETCH.SUCCESS, checkAndShowIntroPopups),\n takeEvery(INIT_TEAM, initTeam),\n takeEvery(SET_ACTIVE_SUBMISSION, getAgentSubmissionHistory),\n\n takeLatest(INITIALIZE_ENCRYPTION_WORKERS, initializeEncryptionWorkers),\n takeLatest(SUBMISSIONS_FETCH.SUCCESS, decryptSubmissions),\n takeLatest(SET_ACTIVE_TAB, setAiConversationsToggle),\n takeEvery(FETCH_AI_AGENTS.REQUEST, fetchAiAgents),\n takeEvery(CREATE_AI_AGENT.REQUEST, createAiAgent),\n\n /**\n * PROXY SAGA CALLS\n */\n takeEvery(SET_SUBMISSION_NEW, updateActiveSubmissionActionSaga('new')),\n takeEvery(SET_FLAG, function* setFlag({ sid, status }) { yield put({ type: SUBMISSION_UPDATE.REQUEST, sid, data: { flag: status } }); })\n ];\n\n yield all([\n ...sagaWatchList,\n fork(initFlow),\n fork(submissionSelectionFlow),\n fork(fixSelectionFlow),\n fork(submissionPrintFlow),\n fork(momentFlow),\n fork(questionValuesFlow),\n fork(setAiConversationsToggle)\n ]);\n}\n\nexport default watchAll;\n","// extracted by css-extract-rspack-plugin\nexport default {\"container\":\"U7fzN3YkDMKXYNf0\",\"headerless\":\"NVNlwp69uyQwt266\",\"modal\":\"_gzlRkzxucQsPpCl\",\"icon\":\"LqfrFUT7m01kRQIn\",\"text\":\"Jr5QnyBfGXsQNwj8\",\"title\":\"KgLZSKfeHbgMeRll\",\"desc\":\"SPQbpjbGSXI_Imf8\",\"backButton\":\"sKJQQjEz2e4U4w7V\"};","import React, { Component } from 'react';\nimport PropTypes, { bool, func } from 'prop-types';\nimport classnames from 'classnames';\nimport { t } from '@jotforminc/translation';\nimport Tracking from '@jotforminc/tracking';\n\nimport SVG from '../../components/SVG';\nimport style from '../../styles/errorBoundry.module.scss';\n\nclass ErrorBoundry extends Component {\n constructor(props) {\n super(props);\n this.state = {\n hasError: false\n };\n }\n\n static getDerivedStateFromError(error) {\n return { hasError: error };\n }\n\n componentDidCatch(error, errorInfo) {\n const { setBreakingErrorState } = this.props;\n setBreakingErrorState(error);\n\n Tracking.captureException(error, scope => {\n scope.addBreadcrumb({\n type: 'error',\n level: 'error',\n category: 'inboxErrorBoundry',\n message: errorInfo.componentStack\n });\n });\n }\n\n render() {\n const { children, headerless } = this.props;\n const { hasError } = this.state;\n if (hasError) {\n return (\n
\n
\n
\n \n
\n
\n \n {t('An unexpected error occurred')}\n \n

\n {t('We’re notified about the error and will fix the issue shortly. Please try again later.')}\n

\n
\n \n {t('Back to My Forms')}\n \n
\n
\n );\n }\n return children;\n }\n}\n\nErrorBoundry.defaultProps = {\n headerless: false,\n setBreakingErrorState: f => f\n};\n\nErrorBoundry.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node\n ]).isRequired,\n headerless: bool,\n setBreakingErrorState: func\n};\n\nexport default ErrorBoundry;\n","import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport createSagaMiddleware from 'redux-saga';\nimport createInvariantMiddleware from 'redux-immutable-state-invariant';\nimport { createStore, applyMiddleware, compose } from 'redux';\nimport Tracking from '@jotforminc/tracking';\nimport ErrorBoundry from '../hocs/ErrorBoundry';\nimport { setReady } from '../sagas/otherSagas';\n\nclass SagaError extends Error {\n constructor(previousError, sagaStack) {\n super(previousError.message, { cause: previousError });\n this.stack = previousError.stack;\n this.sagaStack = sagaStack;\n }\n}\n\nconst ThrowerComponent = ({ error }) => {\n throw error;\n};\n\nlet initializedStore = null;\n/**\n * Creates a single store\n */\nfunction initiator(Sagas, reducers) {\n if (initializedStore) return initializedStore;\n\n // Saga middleware\n const sagaMiddleware = createSagaMiddleware({\n onError: (error, { sagaStack }) => {\n setReady();\n\n Tracking.captureException(error, scope => {\n scope.setTag('section', 'saga');\n\n const sagaName = (sagaStack.match(/The above error occurred in task (.*?)( |\\n)/) || [])[1];\n if (sagaName) scope.setTag('saga.name', sagaName);\n\n scope.addBreadcrumb({\n type: 'error',\n level: 'error',\n category: 'saga',\n message: sagaStack\n });\n });\n\n const root = createRoot(document.getElementById('jfInbox-root'));\n root.render((\n \n \n \n ));\n }\n });\n\n // Be sure to ONLY add this middleware in development!\n const middlewares = process.env.NODE_ENV === 'test'\n ? [createInvariantMiddleware(), sagaMiddleware] : [sagaMiddleware];\n\n // Initialize store\n const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\n const store = createStore(reducers, reducers(undefined, {}), composeEnhancers(applyMiddleware(...middlewares)));\n\n // Run saga middleware with defined sagas\n sagaMiddleware.run(Sagas);\n\n initializedStore = store;\n\n return store;\n}\n\nexport default initiator;\n","import { RequestLayer, Interceptors } from '@jotforminc/request-layer';\n\nexport const layer = new RequestLayer('/API', {\n interceptorConfig: {\n teamID: global.teamID,\n customResponseInterceptors: [Interceptors.requestManagerResponseNormalizer]\n }\n});\n\nconst getTeamHeaders = (teamInfo = {}) => {\n const { disableTeamPrefix = false, teamID = '' } = teamInfo;\n\n return {\n headers: {\n ...(teamID && !disableTeamPrefix) ? { 'jf-team-id': teamID } : {}\n },\n disableTeamIDHeader: disableTeamPrefix\n };\n};\n\nexport const completeTask = (taskID, teamInfo, body) => layer.post(`workflow/task/${taskID}/complete`, body, getTeamHeaders(teamInfo));\nexport const reassignTask = (taskID, teamInfo, body) => layer.post(`workflow/task/${taskID}/reassign`, body, getTeamHeaders(teamInfo));\nexport const getTaskOccurenceTimeByTaskID = (taskID, teamInfo) => layer.get(`workflow/task/${taskID}/occurence`, getTeamHeaders(teamInfo));\nexport const getTaskBySubmissionID = (submissionID, teamInfo) => layer.get(`workflow/submission/${submissionID}/tasks?includeHistory=1`, getTeamHeaders(teamInfo));\nexport const terminateWorkflow = async (instanceID, teamInfo, body) => (instanceID ? layer.post(`workflow/instance/${instanceID}/cancel`, body, getTeamHeaders(teamInfo)) : undefined);\nexport const onRetryActionRequest = async (taskID, teamInfo) => layer.post(`workflow/task-integration/${taskID}/retry`, getTeamHeaders(teamInfo));\nexport const startWorkflow = async (submissionID, teamInfo, body, enableWorkflow) => (submissionID\n ? layer.post(`workflow/submission/${submissionID}/start${enableWorkflow ? `?enableWorkflow=${enableWorkflow}` : ''}`, body, getTeamHeaders(teamInfo))\n : undefined);\nexport const workflowStartOver = async (instanceID, teamInfo, body) => (instanceID ? layer.post(`workflow/instance/${instanceID}/restart`, body, getTeamHeaders(teamInfo)) : undefined);\nexport const loadSubmissionThread = async ({\n submissionID, project = '', apiKey, teamInfo\n}) => {\n if (!submissionID || submissionID === -1) {\n return { thread: [], users: [] };\n }\n\n const [thread, users] = await Promise.all([\n layer.get(`${project}/submission/${submissionID}/thread${apiKey ? `?apiKey=${apiKey}` : ''}`, getTeamHeaders(teamInfo)),\n layer.get(`${project}/submission/${submissionID}/users${apiKey ? `?apiKey=${apiKey}` : ''}`, getTeamHeaders(teamInfo))\n ]);\n\n return { thread, users };\n};\nexport const getCompletedApprovalTask = (submissionID, teamInfo) => (submissionID ? layer.get(\n `workflow/submission/${submissionID}/tasks?limit=50&filter=${encodeURI(JSON.stringify({ 'status:eq': ['COMPLETED'], onlyAssignee: '1' }))}`,\n getTeamHeaders(teamInfo)\n) : []);\n\nexport const getActiveApprovalTask = (submissionID, teamInfo) => (submissionID ? layer.get(\n `workflow/submission/${submissionID}/tasks?limit=50&filter=${encodeURI(JSON.stringify({ 'status:ne': ['COMPLETED', 'CANCELED'], onlyAssignee: '1' }))}`,\n getTeamHeaders(teamInfo)\n) : []);\n","import React, {\n createContext, useContext, useEffect\n} from 'react';\nimport {\n node, oneOf, shape, string, bool, func\n} from 'prop-types';\nimport { useRequest } from '@jotforminc/hooks';\nimport { propTypes } from '@jotforminc/constants';\nimport { loadSubmissionThread } from '../api';\n\nconst ThreadContext = createContext({ });\n\nexport const useThread = () => useContext(ThreadContext);\n\nconst ThreadProvider = ({\n layout,\n submission,\n children,\n userTimeZone,\n dateFormat,\n additionalEntryTypes,\n subThreads,\n NoteEditor,\n project,\n actionHandler,\n apiKey,\n teamInfo\n}) => {\n const { id: submissionID } = submission;\n const request = useRequest(loadSubmissionThread);\n\n const reload = () => request?.load({\n submissionID, project, apiKey, teamInfo\n });\n\n const value = {\n ...request, reload, submissionID, layout, userTimeZone, dateFormat, additionalEntryTypes, subThreads, NoteEditor, actionHandler, teamInfo\n };\n\n useEffect(() => {\n reload();\n }, [submission.updated_at, submissionID]);\n\n return (\n \n {children}\n \n );\n};\n\nThreadProvider.propTypes = {\n userTimeZone: string.isRequired,\n dateFormat: string.isRequired,\n submission: propTypes.submissionPropType.isRequired,\n layout: oneOf(['narrow', 'normal', 'wide']),\n children: node.isRequired,\n additionalEntryTypes: shape({}),\n subThreads: bool,\n NoteEditor: node,\n project: string,\n actionHandler: func,\n apiKey: string,\n teamInfo: shape({\n teamID: string,\n disableTeamPrefix: bool\n })\n};\n\nThreadProvider.defaultProps = {\n layout: 'normal',\n additionalEntryTypes: {},\n subThreads: false,\n NoteEditor: false,\n project: '',\n actionHandler: f => f,\n apiKey: null,\n teamInfo: {}\n};\n\nexport default ThreadProvider;\n","export const DEFAULT_DATE_FORMAT = 'MMMM D, YYYY HH:mm';\n\nexport const SUBMISSION_DATE_FORMATS = [\n 'M/D/YYYY',\n 'D/M/YYYY',\n 'MMM D, YYYY',\n 'MMMM D, YYYY',\n 'ddd, MMM D, YYYY',\n 'dddd, MMMM D, YYYY',\n 'MMM D, YYYY HH:mm',\n DEFAULT_DATE_FORMAT,\n 'ddd, MMM D, YYYY HH:mm',\n 'dddd, MMMM D, YYYY HH:mm'\n];\n","import { WORKFLOW_SYSTEM_OUTCOMES } from '../constants/systemOutcomes';\n\nexport const getOutcomeByID = (outcomeID, outcomes) => {\n if (WORKFLOW_SYSTEM_OUTCOMES[outcomeID] > -1) {\n return { outcomeID };\n }\n\n return (outcomes.find(({ outcomeID: tempOutcomeID }) => parseInt(tempOutcomeID, 10) === parseInt(outcomeID, 10)) || {});\n};\n\nexport const isOutcomeBelongsToSystem = outcomeID => {\n return !!WORKFLOW_SYSTEM_OUTCOMES[outcomeID];\n};\n\nexport const isWorkflowSystemUser = username => {\n return username === '!workflow_system';\n};\n\nexport const didActiveSubmissionChange = submissionID => (window && window.activeSubmissionID && window.activeSubmissionID !== submissionID);\n\nexport const stripHTML = string => {\n if (\n string.indexOf\n && (string.indexOf('<') !== -1 || string.indexOf('>') !== -1)\n ) {\n const tmp = document.createElement('DIV');\n tmp.innerHTML = string;\n return tmp.textContent || tmp.innerText || string;\n }\n return string;\n};\n\nexport const decodeHTML = html => {\n const txt = document.createElement('textarea');\n txt.innerHTML = html;\n return txt.value;\n};\n","import React, {\n createContext, useContext, useMemo, useState, useEffect\n} from 'react';\nimport {\n node, bool, func, string, number, shape\n} from 'prop-types';\nimport moment from 'moment-timezone';\nimport { getPossibleTimeZone } from '@jotforminc/utils';\nimport { useRequest } from '@jotforminc/hooks';\nimport { propTypes, DEFAULT_DATE_FORMAT } from '@jotforminc/constants';\nimport {\n getActiveApprovalTask, getCompletedApprovalTask, workflowStartOver, terminateWorkflow, startWorkflow,\n onRetryActionRequest\n} from '../api';\nimport { didActiveSubmissionChange } from '../utils';\n\nconst WorkflowContext = createContext({ });\n\nexport const useWorkflow = () => useContext(WorkflowContext);\n\nconst WorkflowProvider = ({\n children,\n isFormOwner,\n user,\n submission,\n onRenewSubmission,\n activeTabID,\n formID,\n featureSubmissionThread,\n recordEvent,\n dateFormat,\n canUndo = false,\n undoTimeout = 5000,\n teamInfo = {},\n isCollaborator\n}) => {\n const [isStartOverPressed, setIsStartOverPressed] = useState(false);\n const [showFixErrorsInWorkflow, setShowFixErrorsInWorkflow] = useState(false);\n const [undoFns, setUndoFns] = useState({});\n const [completeFns, setCompleteFns] = useState({});\n const [fakeEntries, setFakeEntries] = useState({});\n const [showToastState, setshowToastState] = useState(false);\n const {\n id: submissionID,\n workflowStatusDetails,\n workflowStatus,\n workflowInstanceID,\n isWorkflowEnabled = null\n } = submission || {};\n\n const approvalRequestConditionaly = () => {\n if (featureSubmissionThread && submissionID !== -1 && workflowStatus !== 'CANCELED') {\n if (activeTabID === 'completed') return getCompletedApprovalTask(submissionID, teamInfo);\n return getActiveApprovalTask(submissionID, teamInfo);\n }\n return [];\n };\n\n const request = useRequest(approvalRequestConditionaly, 'submissionWorkFlow');\n const reload = () => request?.load(submissionID);\n const query = { ...request, reload };\n\n useEffect(() => {\n reload();\n }, [submission.updated_at, submissionID]);\n\n const ignoreHiddenSpanTag = text => {\n const spanRegExp = new RegExp(/]*>[\\s\\S]+<\\/span>/gm);\n if (user.isHIPAA === '1' && spanRegExp.test(text)) {\n return 'Hidden PHI Field';\n }\n return text;\n };\n\n const getTaskLists = (taskArray = []) => (\n taskArray.map(task => {\n const {\n element: {\n comment__commentRequired: commentRequired,\n requestMore\n },\n properties: {\n assigneeUser: {\n avatarUrl,\n name,\n email\n } = {},\n assigneeEmail: assigneeUserEmail = '',\n taskName\n },\n error: errorObj,\n status,\n team = null\n } = task;\n const subtasks = (task.subtasks || []).reduce((res, curr) => {\n const {\n assigneeUser, assigneeEmail, avatarUrl: subtaskAvatarUrl, comment, signature\n } = curr.properties;\n if (!assigneeUser) {\n return res;\n }\n res[assigneeUser.email] = {\n ...curr,\n element: task.element,\n email: assigneeEmail,\n name: assigneeUser.name || assigneeUser.username,\n avatarUrl: assigneeUser.avatarUrl || subtaskAvatarUrl,\n comment: comment,\n signature: signature?.value\n };\n return res;\n }, {});\n const isCurrentUserApprover = subtasks[user.email] ? subtasks[user.email].status === 'ACTIVE' : user.email === email;\n const isActive = status === 'ACTIVE' || status === 'PENDING' || status === 'FAILED';\n const isCommentRequired = commentRequired === 'Yes';\n return {\n isCommentRequired,\n avatarUrl,\n isActive,\n task,\n isCurrentUserApprover,\n name: ignoreHiddenSpanTag(name),\n assigneeEmail: ignoreHiddenSpanTag(email || assigneeUserEmail),\n taskName,\n errorObj,\n requestMore,\n subtasks,\n team\n };\n })\n );\n\n const taskLists = useMemo(() => {\n if (query?.data && Array.isArray(query.data)) {\n return query.data.reduce((acc, res) => [\n ...acc,\n ...getTaskLists(res?.taskList)\n ], []);\n }\n\n return [];\n }, [query?.data, user?.email]);\n\n const activeTaskList = useMemo(() => {\n return taskLists?.filter(t => t.isActive && t.taskName !== 'Merge Point') || [];\n }, [taskLists]);\n\n /* eslint-disable camelcase */\n const instanceID = useMemo(() => workflowInstanceID || (query?.data || []).find(task => task.instance_status === 'ACTIVE')?.instance_id || null, [workflowInstanceID, query?.data]);\n\n const onTaskListRenew = () => {\n // If submission changes and there's a pending request, somehow it shows the old submission's thread\n // Couldn't think of a better way this is a workaround\n if (didActiveSubmissionChange(submissionID)) {\n return;\n }\n onRenewSubmission(submissionID, false);\n };\n\n const onStartOver = () => {\n recordEvent('WF-Error-Restarted', 'workflow');\n setIsStartOverPressed(true);\n return workflowStartOver(instanceID, teamInfo);\n };\n\n const onCancelFlow = () => {\n return terminateWorkflow(instanceID, teamInfo);\n };\n\n const onStartFlow = enableWorkflow => {\n recordEvent('onStartFlow', 'workflow');\n return startWorkflow(submissionID, teamInfo, null, enableWorkflow);\n };\n\n const undoTaskToastShow = val => {\n setshowToastState(val);\n };\n\n const onRetryAction = task => {\n return onRetryActionRequest(task.id, teamInfo);\n };\n\n useEffect(() => {\n if (isStartOverPressed && submission.workflowStatus === 'ERRORED') {\n setShowFixErrorsInWorkflow(true);\n } else {\n setShowFixErrorsInWorkflow(false);\n }\n setIsStartOverPressed(false);\n }, [submission]);\n\n const userTimeZone = getPossibleTimeZone();\n const formatDate = datetime => {\n const serverTimeZone = 'America/New_York';\n const momentFormat = 'YYYY-MM-DD HH:mm ZZ';\n\n let dateObject = moment.tz(datetime, momentFormat, serverTimeZone);\n if (userTimeZone) {\n dateObject = dateObject.clone().tz(userTimeZone);\n }\n\n return dateObject.format(dateFormat);\n };\n\n const value = {\n ...query,\n submissionID,\n formID,\n user,\n onTaskListRenew,\n instanceID,\n taskLists,\n isFormOwner,\n onStartOver,\n onCancelFlow,\n onStartFlow,\n onRenewSubmission,\n workflowStatusDetails,\n workflowStatus,\n showFixErrorsInWorkflow,\n setShowFixErrorsInWorkflow,\n activeTaskList,\n userTimeZone,\n dateFormat,\n formatDate,\n undoFns,\n setUndoFns,\n undoTaskToastShow,\n showToastState,\n completeFns,\n setCompleteFns,\n fakeEntries,\n setFakeEntries,\n canUndo,\n undoTimeout,\n teamInfo,\n isCollaborator,\n isWorkflowEnabled,\n onRetryAction\n };\n\n return (\n \n {children}\n \n );\n};\n\nWorkflowProvider.propTypes = {\n submission: propTypes.submissionPropType.isRequired,\n children: node.isRequired,\n user: propTypes.userPropType.isRequired,\n isFormOwner: bool.isRequired,\n onRenewSubmission: func.isRequired,\n activeTabID: string,\n formID: string.isRequired,\n featureSubmissionThread: bool,\n recordEvent: func,\n dateFormat: string,\n canUndo: bool,\n isCollaborator: bool,\n undoTimeout: number,\n teamInfo: shape({\n teamID: string,\n disableTeamPrefix: bool\n })\n};\n\nWorkflowProvider.defaultProps = {\n isCollaborator: false,\n featureSubmissionThread: true,\n recordEvent: f => f,\n activeTabID: '',\n dateFormat: DEFAULT_DATE_FORMAT,\n canUndo: false,\n undoTimeout: 5000,\n teamInfo: {}\n};\n\nexport default WorkflowProvider;\n","import { createContext } from 'react';\n\nconst { Provider: PopoverProvider, Consumer: PopoverConsumer } = createContext();\nexport { PopoverProvider, PopoverConsumer };\n","import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\n\nimport { PopoverProvider } from './context';\n\n/**\n * Root provider for the popover\n */\nclass PopoverContainer extends Component {\n constructor(props) {\n super(props);\n\n this.handleTagEscape = this.handleTagEscape.bind(this);\n this.handleOutsideClick = this.handleOutsideClick.bind(this);\n this.registerCloseCallback = this.registerCloseCallback.bind(this);\n\n this.closeListeners = [];\n }\n\n componentDidMount() {\n global.document.addEventListener('keyup', this.handleTagEscape);\n global.document.addEventListener('click', this.handleOutsideClick, true);\n }\n\n componentWillUnmount() {\n global.document.removeEventListener('keyup', this.handleTagEscape);\n global.document.removeEventListener('click', this.handleOutsideClick, true);\n }\n\n handleTagEscape({ keyCode }) {\n if (keyCode !== 27) {\n return;\n }\n\n this.handleOutsideClick();\n }\n\n handleOutsideClick() {\n this.closeListeners.forEach(cb => {\n if (typeof cb === 'function') {\n cb();\n }\n });\n }\n\n get providerValue() {\n return {\n registerCloseCallback: this.registerCloseCallback,\n closePopovers: this.handleOutsideClick\n };\n }\n\n registerCloseCallback(cb, doRemove = false) {\n if (doRemove) {\n this.closeListeners = this.closeListeners.filter(currentCb => currentCb !== cb);\n return;\n }\n this.closeListeners.push(cb);\n }\n\n render() {\n const { id, className, children } = this.props;\n\n return (\n \n \n {children}\n \n \n );\n }\n}\n\nPopoverContainer.propTypes = {\n /** id to give to the container element */\n id: PropTypes.string,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.any),\n PropTypes.node,\n PropTypes.element\n ]),\n /** class to give to container element */\n className: PropTypes.string\n};\n\nPopoverContainer.defaultProps = {\n id: 'popover-container',\n children: [],\n className: ''\n};\nexport default PopoverContainer;\n","import { useContext } from 'react';\nimport { Permissions } from '../components/Permissions';\n\nexport const useRole = () => useContext(Permissions.context).role || '';\nexport const usePermissions = () => useContext(Permissions.context).permissions || {};\n","import React from 'react';\nimport { usePermissions } from '../hooks';\n\nexport const withPermissions = Component => props => {\n const permissions = usePermissions();\n\n return ;\n};\n","import KeyboardJS from 'keyboardjs';\n\nexport default KeyboardJS;\n","/* eslint-disable max-len */\nimport PropTypes from 'prop-types';\nimport React, { useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport axios from 'axios';\nimport { getEnterpriseLogo } from '@jotforminc/request-layer';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\nimport { setCookie, readCookie } from '@jotforminc/utils';\n\nimport './styles.scss';\n\nconst CloseIcon = ({ fill, stroke }) => (\n \n \n \n);\nCloseIcon.propTypes = {\n fill: PropTypes.string,\n stroke: PropTypes.string\n};\n\nCloseIcon.defaultProps = {\n fill: 'none',\n stroke: 'none'\n};\nconst AppIcon = () => (isEnterprise()\n ? (\n \n )\n : (\n \n \n \n \n \n \n \n ));\n\nconst isiOS = () => window.navigator.userAgent.match(/iPhone|iPad|iPod/i);\nconst isAndroid = () => window.navigator.userAgent.match(/Android/i);\nconst isMobile = () => isAndroid() || isiOS();\n\n// window.mobileDeeplink for Custom Enterprise apps.\n// and if it exists, we will show the sheet for the Enterprises which has a custom mobile app.\nconst isCustomEnterpriseApp = !!window.mobileDeeplink;\nasync function fetchTheme() {\n return axios.get('/API/enterprise/theme/current?detailed=1');\n}\nfunction MobileAppSheet({\n pages, project\n}) {\n const [shouldRender, setShouldRender] = useState(false);\n const [theme, setTheme] = useState();\n useEffect(() => {\n if (\n !isMobile() || readCookie(`mobile-app-sheet-shown-${project}`) === 'true'\n ) {\n setShouldRender(false);\n return;\n }\n\n const path = window.location.pathname;\n let match = 0;\n for (let i = 0; i < pages.length; i++) {\n const pattern = new RegExp(pages[i]);\n if (pattern.test(path)) {\n match++;\n }\n }\n\n if (!match) {\n setShouldRender(false);\n return;\n }\n // data?.content?.backgroundColor && setBgColor(data.content.backgroundColor);\n // data?.content?.textColor && setTextColor(data.content.textColor);\n // data?.content?.buttonColor && setButtonColor(data.content.buttonColor);\n\n setShouldRender(true);\n }, [pages]);\n const defaultTheme = {\n backgroundColor: '#0A1551',\n textColor: '#fff',\n buttonColor: '#0099FF',\n loginBackgroundColor: '#F3F3FE',\n loginTextColor: '#0A1551',\n loginButtonColor: '#78BB07',\n colors: {\n backgroundColor: '#0A1551',\n textColor: '#fff',\n buttonColor: '#0099FF',\n loginBackgroundColor: '#F3F3FE',\n loginTextColor: '#0A1551',\n loginButtonColor: '#78BB07'\n },\n theme: 'light'\n };\n useEffect(() => {\n if (isEnterprise()) {\n try {\n (async () => {\n const { data } = await fetchTheme();\n setTheme(data.content);\n })();\n } catch (e) {\n setTheme(defaultTheme);\n }\n } else {\n setTheme(defaultTheme);\n }\n }, []);\n\n const close = () => {\n setShouldRender(false);\n setCookie(`mobile-app-sheet-shown-${project}`, 'true', 7);\n };\n\n const title = isEnterprise() ? `${window?.companyTitle} App` : 'Jotform Mobile'.locale();\n const desc = isiOS() ? 'FREE - On the App Store'.locale() : 'FREE - On Google Play'.locale();\n const button = 'Open App'.locale();\n let deeplinkUrl = window?.user?.healthAppUser === '1' || window?.user?.isHIPAA === '1' || window?.user?.coronaFighter === '1'\n ? `https://g5qt.adj.st/?adjust_t=cwvwk2i&adj_adgroup=${project}&adjust_campaign=deep_link&adjust_deeplink=jfhealth%3A%2F%2F`\n : `https://rulm.adj.st/?adjust_t=jui72ri&adj_adgroup=${project}&adjust_campaign=deep_link&adjust_deeplink=jotform%3A%2F%2F`;\n if (isEnterprise()) {\n deeplinkUrl = `https://${window.location.hostname}/mobile?campaign=smart-app-banner`;\n }\n if (isCustomEnterpriseApp) {\n deeplinkUrl = window.mobileDeeplink;\n }\n\n const buttonHref = `${deeplinkUrl}&jotformSource=${encodeURIComponent(window.location.hostname + window.location.pathname)}`;\n\n return shouldRender && createPortal((\n
\n
\n \n \n \n
\n \n
\n
\n
{title}
\n {!isEnterprise() &&
{desc}
}\n
\n \n {button}\n \n
\n
\n ), document.querySelector('body'));\n}\n\nMobileAppSheet.propTypes = {\n pages: PropTypes.arrayOf(PropTypes.string),\n project: PropTypes.string\n};\n\nMobileAppSheet.defaultProps = {\n pages: [\n '^/(../)?myforms(.*)'\n ],\n project: 'myforms'\n};\n\nexport default MobileAppSheet;\n","import {\n ALIGN_ITEMS_VALUES,\n ALIGN_SELF_VALUES,\n FLEX_DIRECTION_VALUES,\n FLEX_GROW_VALUES,\n FLEX_SHRINK_VALUES,\n FLEX_WRAP_VALUES,\n ORDER_VALUES\n} from '../../constants/common.values';\n\nimport { ResponsiveClasses } from '../../utils';\n\nexport const alignItemsClasses:ResponsiveClasses = {\n baseline: {\n base: 'items-baseline',\n xs: 'xs:items-baseline',\n sm: 'sm:items-baseline',\n md: 'md:items-baseline',\n lg: 'lg:items-baseline',\n xl: 'xl:items-baseline',\n xxl: 'xxl:items-baseline'\n },\n stretch: {\n base: 'items-stretch',\n xs: 'xs:items-stretch',\n sm: 'sm:items-stretch',\n md: 'md:items-stretch',\n lg: 'lg:items-stretch',\n xl: 'xl:items-stretch',\n xxl: 'xxl:items-stretch'\n },\n center: {\n base: 'items-center',\n xs: 'xs:items-center',\n sm: 'sm:items-center',\n md: 'md:items-center',\n lg: 'lg:items-center',\n xl: 'xl:items-center',\n xxl: 'xxl:items-center'\n },\n end: {\n base: 'items-end',\n xs: 'xs:items-end',\n sm: 'sm:items-end',\n md: 'md:items-end',\n lg: 'lg:items-end',\n xl: 'xl:items-end',\n xxl: 'xxl:items-end'\n },\n start: {\n base: 'items-start',\n xs: 'xs:items-start',\n sm: 'sm:items-start',\n md: 'md:items-start',\n lg: 'lg:items-start',\n xl: 'xl:items-start',\n xxl: 'xxl:items-start'\n }\n};\n\nexport const directionClasses:ResponsiveClasses = {\n column: {\n base: 'flex-col',\n xs: 'xs:flex-col',\n sm: 'sm:flex-col',\n md: 'md:flex-col',\n lg: 'lg:flex-col',\n xl: 'xl:flex-col',\n xxl: 'xxl:flex-col'\n },\n 'column-reverse': {\n base: 'flex-col-reverse',\n xs: 'xs:flex-col-reverse',\n sm: 'sm:flex-col-reverse',\n md: 'md:flex-col-reverse',\n lg: 'lg:flex-col-reverse',\n xl: 'xl:flex-col-reverse',\n xxl: 'xxl:flex-col-reverse'\n },\n row: {\n base: 'flex-row',\n xs: 'xs:flex-row',\n sm: 'sm:flex-row',\n md: 'md:flex-row',\n lg: 'lg:flex-row',\n xl: 'xl:flex-row',\n xxl: 'xxl:flex-row'\n },\n 'row-reverse': {\n base: 'flex-row-reverse',\n xs: 'xs:flex-row-reverse',\n sm: 'sm:flex-row-reverse',\n md: 'md:flex-row-reverse',\n lg: 'lg:flex-row-reverse',\n xl: 'xl:flex-row-reverse',\n xxl: 'xxl:flex-row-reverse'\n }\n};\n\nexport const wrapClasses:ResponsiveClasses = {\n wrap: {\n base: 'flex-wrap',\n xs: 'xs:flex-wrap',\n sm: 'sm:flex-wrap',\n md: 'md:flex-wrap',\n lg: 'lg:flex-wrap',\n xl: 'xl:flex-wrap',\n xxl: 'xxl:flex-wrap'\n },\n nowrap: {\n base: 'flex-nowrap',\n xs: 'xs:flex-nowrap',\n sm: 'sm:flex-nowrap',\n md: 'md:flex-nowrap',\n lg: 'lg:flex-nowrap',\n xl: 'xl:flex-nowrap',\n xxl: 'xxl:flex-nowrap'\n }\n};\n\nexport const orderClasses:ResponsiveClasses = {\n last: {\n base: 'order-last',\n xs: 'xs:order-last',\n sm: 'sm:order-last',\n md: 'md:order-last',\n lg: 'lg:order-last',\n xl: 'xl:order-last',\n xxl: 'xxl:order-last'\n },\n first: {\n base: 'order-first',\n xs: 'xs:order-last',\n sm: 'sm:order-first',\n md: 'md:order-first',\n lg: 'lg:order-first',\n xl: 'xl:order-first',\n xxl: 'xxl:order-first'\n },\n none: {\n base: 'order-none',\n xs: 'xs:order-last',\n sm: 'sm:order-none',\n md: 'md:order-none',\n lg: 'lg:order-none',\n xl: 'xl:order-none',\n xxl: 'xxl:order-none'\n }\n};\n\nexport const growClasses:ResponsiveClasses = {\n 0: {\n base: 'grow-0',\n xs: 'xs:grow-0',\n sm: 'sm:grow-0',\n md: 'md:grow-0',\n lg: 'lg:grow-0',\n xl: 'xl:grow-0',\n xxl: 'xxl:grow-0'\n },\n 1: {\n base: 'grow-1',\n xs: 'xs:grow-1',\n sm: 'sm:grow-1',\n md: 'md:grow-1',\n lg: 'lg:grow-1',\n xl: 'xl:grow-1',\n xxl: 'xxl:grow-1'\n }\n};\n\nexport const shrinkClasses:ResponsiveClasses = {\n 0: {\n base: 'shrink-0',\n xs: 'xs:shrink-0',\n sm: 'sm:shrink-0',\n md: 'md:shrink-0',\n lg: 'lg:shrink-0',\n xl: 'xl:shrink-0',\n xxl: 'xxl:shrink-0'\n },\n 1: {\n base: 'shrink-1',\n xs: 'xs:shrink-1',\n sm: 'sm:shrink-1',\n md: 'md:shrink-1',\n lg: 'lg:shrink-1',\n xl: 'xl:shrink-1',\n xxl: 'xxl:shrink-1'\n }\n};\n\nexport const alignSelfClasses:ResponsiveClasses = {\n baseline: {\n base: 'self-baseline',\n xs: 'xs:self-baseline',\n sm: 'sm:self-baseline',\n md: 'md:self-baseline',\n lg: 'lg:self-baseline',\n xl: 'xl:self-baseline',\n xxl: 'xxl:self-baseline'\n },\n auto: {\n base: 'self-auto',\n xs: 'xs:self-auto',\n sm: 'sm:self-auto',\n md: 'md:self-auto',\n lg: 'lg:self-auto',\n xl: 'xl:self-auto',\n xxl: 'xxl:self-auto'\n },\n center: {\n base: 'self-center',\n xs: 'xs:self-center',\n sm: 'sm:self-center',\n md: 'md:self-center',\n lg: 'lg:self-center',\n xl: 'xl:self-center',\n xxl: 'xxl:self-center'\n },\n start: {\n base: 'self-start',\n xs: 'xs:self-start',\n sm: 'sm:self-start',\n md: 'md:self-start',\n lg: 'lg:self-start',\n xl: 'xl:self-start',\n xxl: 'xxl:self-start'\n },\n end: {\n base: 'self-end',\n xs: 'xs:self-end',\n sm: 'sm:self-end',\n md: 'md:self-end',\n lg: 'lg:self-end',\n xl: 'xl:self-end',\n xxl: 'xxl:self-end'\n },\n stretch: {\n base: 'self-stretch',\n xs: 'xs:self-stretch',\n sm: 'sm:self-stretch',\n md: 'md:self-stretch',\n lg: 'lg:self-stretch',\n xl: 'xl:self-stretch',\n xxl: 'xxl:self-stretch'\n }\n};\n","import React, {\n ComponentPropsWithRef, ElementType, forwardRef\n} from 'react';\nimport { cx } from 'class-variance-authority';\nimport { PolymorphicProps } from '../../types/system.types';\nimport { FlexComponentType, FlexProps } from './flex.types';\nimport { convertResponsiveClass } from '../../utils';\nimport { justifyContentClasses } from '../../constants/common.cva';\n\nimport '@jotforminc/jotform.css';\n\nimport {\n alignItemsClasses,\n alignSelfClasses,\n directionClasses,\n growClasses,\n orderClasses,\n shrinkClasses,\n wrapClasses\n} from './flex.cva';\n\nexport const Flex:FlexComponentType = forwardRef(\n (\n props: PolymorphicProps,\n ref?: ComponentPropsWithRef['ref']\n ): JSX.Element => {\n const {\n as = 'div',\n alignSelf,\n justifyContent,\n alignItems,\n direction,\n wrap,\n grow,\n shrink,\n order,\n inline,\n children,\n className,\n ...rest\n } = props;\n\n const Component = as;\n const flexClasses = [\n !inline ? 'flex' : 'inline-flex',\n ...convertResponsiveClass(justifyContent, justifyContentClasses),\n ...convertResponsiveClass(alignItems, alignItemsClasses),\n ...convertResponsiveClass(direction, directionClasses),\n ...convertResponsiveClass(wrap, wrapClasses),\n ...convertResponsiveClass(grow, growClasses),\n ...convertResponsiveClass(shrink, shrinkClasses),\n ...convertResponsiveClass(order, orderClasses),\n ...convertResponsiveClass(alignSelf, alignSelfClasses)\n ];\n\n return (\n {children}\n );\n }\n);\n","/* eslint-disable react/prop-types */\nimport React from 'react';\nimport Styled from 'styled-components';\nimport Container from '../Container';\n\nexport const LoaderSvg = Styled.svg`\nwidth: 100%;\nheight: 100%;\n.circle {\n fill: none;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-width: 10px;\n stroke-dasharray: 140px;\n stroke-dashoffset: 139px;\n transform: rotate(180deg);\n}\n.c1 {\n animation-name: circleAnim1, color;\n animation-fill-mode: backwards;\n animation-duration: 1.5s, 6s;\n transform-origin: center;\n animation-direction: normal;\n animation-iteration-count: infinite;\n animation-timing-function: cubic-bezier(0.21, 0.09, 0.48, 0.65), ease-out;\n}\n\n@keyframes circleAnim1 {\n 0% { stroke-dashoffset: 139px; }\n 50% {\n stroke-dashoffset: 30px;\n transform: rotate(400deg);\n }\n 100% {\n stroke-dashoffset: 140px;\n transform: rotate(900deg);\n }\n}\n@keyframes color {\n 0% { stroke: #0099ff; }\n 24.9% { stroke: #0099ff; }\n 25% {\n stroke: #ff6100;\n }\n 49.9% {\n stroke: #ff6100;\n }\n 50% {\n stroke: #ffb629;\n }\n 74.9% {\n stroke: #ffb629;\n }\n 75% {\n stroke: #e4ebfc;\n }\n 100% { stroke: #e4ebfc; }\n}\n`;\n\nconst Loader = ({ size, className }) => {\n return (\n \n \n \n \n \n );\n};\n\nexport default Loader;\n","const ARROW_KEYS = {\n UP: 'ArrowUp',\n DOWN: 'ArrowDown',\n LEFT: 'ArrowLeft',\n RIGHT: 'ArrowRight'\n};\n\nconst isNextKey = e => [ARROW_KEYS.DOWN, ARROW_KEYS.RIGHT].includes(e.key);\nconst isPrevKey = e => [ARROW_KEYS.UP, ARROW_KEYS.LEFT].includes(e.key);\n\nconst isArrowKey = e => e?.key?.startsWith('Arrow');\n\nconst isSelectorProvided = selector => selector && typeof selector === 'string';\n\n/**\n * Moves focus to next or previous element and\n * calls optional callback with the event and the newly focused element.\n *\n * @param {KeyboardEvent} event\n * @param {Function} onElementClick\n * @param {Boolean|string} selector\n * @returns {void}\n */\nexport const a11yListNavigation = (event, onElementClick = false, selector = false) => {\n try {\n const { currentTarget } = event;\n\n if (!isArrowKey(event)) return;\n\n let nextElement;\n if (isNextKey(event)) {\n nextElement = currentTarget?.nextElementSibling;\n if (isSelectorProvided(selector)) {\n nextElement = currentTarget\n ?.closest(selector.split('>')[0].trim())\n ?.nextElementSibling\n ?.querySelector(selector.split('>')[1].trim());\n }\n } else if (isPrevKey(event)) {\n nextElement = currentTarget?.previousElementSibling;\n if (isSelectorProvided(selector)) {\n nextElement = currentTarget\n ?.closest(selector.split('>')[0].trim())\n ?.previousElementSibling\n ?.querySelector(selector.split('>')[1].trim());\n }\n }\n\n if (!nextElement) {\n return;\n }\n\n if (nextElement?.hasAttribute('chromevoxignoreariahidden')) {\n // Chromevox adds a reduntant div element to focus on in case\n // it lands on an unfocusable element, this element however\n // breaks the navigation flow, so we are removing this item.\n nextElement.remove();\n return a11yListNavigation(event, onElementClick);\n }\n\n nextElement?.focus();\n\n if (onElementClick) {\n const nextEvent = new window.KeyboardEvent('keydown');\n Object.defineProperty(nextEvent, 'target', { writable: false, value: nextElement });\n onElementClick(nextEvent, nextElement);\n }\n } catch (error) {\n console.error(error);\n }\n};\n\nconst ACTION_KEYS = {\n ENTER: 'Enter',\n SPACE: ' '\n};\n\nconst isActionKeyPressed = e => Object.values(ACTION_KEYS).indexOf(e.key) > -1;\n\nexport const a11yClickHandler = (event, handler = false) => {\n try {\n if (!isActionKeyPressed(event)) {\n return;\n }\n\n if (handler) {\n handler(event);\n }\n } catch (e) {\n console.error(e);\n }\n};\n\nexport const a11yAnnounce = (text, priority) => {\n try {\n const visuallyHidden = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: '0',\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n 'white-space': 'nowrap',\n border: '0'\n };\n\n const el = document.createElement('div');\n const id = `speak-${Date.now()}`;\n el.setAttribute('id', id);\n el.setAttribute('aria-live', priority || 'polite');\n\n Object.keys(visuallyHidden).forEach(rule => {\n el.style[rule] = visuallyHidden[rule];\n });\n\n document.body.appendChild(el);\n\n window.setTimeout(() => {\n document.getElementById(id).textContent = text;\n }, 100);\n\n window.setTimeout(() => {\n document.body.removeChild(document.getElementById(id));\n }, 1000);\n } catch (e) {\n console.error(e);\n }\n};\n","import { createPortal } from 'react-dom';\nimport React, { Component } from 'react';\nimport {\n node,\n func,\n bool,\n string,\n number,\n oneOfType,\n instanceOf,\n elementType\n} from 'prop-types';\nimport { Button } from '@jotforminc/magnet';\nimport { a11yClickHandler } from '@jotforminc/utils';\nimport { IconXmark } from '@jotforminc/svg-icons';\n\nimport '../styles/style.scss';\n\n/**\n * Displays a popup with two configurable buttons\n */\nexport class TwoButtonPopup extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n isOpen: props.initialState\n };\n\n this.show = this.show.bind(this);\n this.hide = this.hide.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleEscape = this.handleEscape.bind(this);\n this.handleSave = this.handleSave.bind(this);\n this.handleClickOutside = this.handleClickOutside.bind(this);\n this.handleKeyPressCancel = this.handleKeyPressCancel.bind(this);\n }\n\n componentDidMount() {\n const { modalAutoFocus } = this.props;\n\n if (modalAutoFocus && this.modalContainerRef) {\n this.modalContainerRef.focus();\n }\n }\n\n handleCancel(e) {\n const { onClose } = this.props;\n this.hide();\n onClose(e);\n }\n\n handleKeyPressCancel(e) {\n e.stopPropagation();\n a11yClickHandler(e, this.handleCancel);\n }\n\n handleEscape(e) {\n e.stopPropagation();\n if (e.key === 'Escape') this.handleCancel();\n }\n\n async handleSave() {\n const { onSave } = this.props;\n const result = await onSave();\n\n if (result) {\n this.setState({\n isOpen: false\n });\n }\n }\n\n handlePropagation(e) {\n e.stopPropagation();\n }\n\n handleClickOutside(e) {\n const { disableClickOutside } = this.props;\n\n if (disableClickOutside) {\n e.stopPropagation();\n } else {\n this.handleCancel();\n }\n }\n\n get classNames() {\n const {\n className\n } = this.props;\n\n return [\n 'jfModal-wrapper',\n className\n ].filter(a => a).join(' ');\n }\n\n get isOpen() {\n const { isOpen } = this.state;\n return isOpen;\n }\n\n show() {\n this.setState({\n isOpen: true\n });\n }\n\n hide() {\n this.setState({\n isOpen: false\n });\n }\n\n renderFooter() {\n const {\n saveText,\n showSave,\n showClose,\n footerContent,\n contentBetweenButtons,\n onDiscard,\n saveButtonDisabled,\n buttonsTabIndex,\n cancelText,\n CustomFooter\n } = this.props;\n\n return (\n
\n {CustomFooter ? (\n \n ) : (\n <>\n {footerContent}\n
\n {showClose ? (\n {\n this.handleCancel();\n onDiscard();\n }}\n >\n {cancelText}\n \n ) : null}\n {contentBetweenButtons}\n {showSave ? (\n \n {saveText}\n \n ) : null}\n
\n \n )}\n
\n );\n }\n\n render() {\n const {\n children,\n title,\n subtitle,\n cancelText,\n modalContainer,\n showCloseOnRightCorner,\n mostBottomContent,\n showFooter,\n buttonsTabIndex,\n modalTabIndex,\n modalAriaLabel,\n headerIcon\n } = this.props;\n const { isOpen } = this.state;\n const container = modalContainer || document.getElementById('modal-container');\n\n return (isOpen && container) ? createPortal(\n
\n \n
\n
\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */}\n { this.modalContainerRef = ref; }}\n >\n
\n {headerIcon &&
{headerIcon}
}\n
\n
{title}
\n {subtitle &&
{subtitle}
}\n { showCloseOnRightCorner && (\n \n \n
\n )}\n
\n
\n
\n {children}\n
\n {showFooter && this.renderFooter()}\n {mostBottomContent}\n
\n
\n \n \n ,\n container\n ) : null;\n }\n}\n\nTwoButtonPopup.propTypes = {\n /** Contents to display inside the Popup */\n children: oneOfType([elementType, node]),\n /** Modal wrapper class name */\n className: oneOfType([elementType, node]),\n /** Title for the popup */\n title: node,\n /** Secondary button text */\n cancelText: string,\n /** Primary button text */\n saveText: string,\n /** Container to put the modal in, defaults to DOM element with id \"modal-container\" */\n modalContainer: instanceOf(global.Element),\n /** Secondary button callback */\n onClose: func,\n onDiscard: func,\n /** Primary button callback */\n onSave: func,\n /** Show primary button? */\n showSave: bool,\n /** Show secondary button? */\n showClose: bool,\n /** Show close button on right top corner? */\n showCloseOnRightCorner: bool,\n /** Show text under the buttons */\n mostBottomContent: node,\n /** Should show buttons? */\n showFooter: bool,\n /** Footer content (if provided) */\n footerContent: node,\n initialState: bool,\n /** Do not close the modal (if click outside) */\n disableClickOutside: bool,\n contentBetweenButtons: node,\n subtitle: string,\n saveButtonDisabled: bool,\n buttonsTabIndex: number,\n modalTabIndex: number,\n modalAutoFocus: bool,\n modalAriaLabel: string,\n headerIcon: node,\n CustomFooter: node\n};\n\nTwoButtonPopup.defaultProps = {\n children: null,\n className: null,\n title: '',\n cancelText: 'CANCEL',\n saveText: 'SAVE',\n saveButtonDisabled: false,\n modalContainer: null,\n onClose: f => f,\n onDiscard: f => f,\n onSave: f => f,\n showSave: true,\n showClose: true,\n showCloseOnRightCorner: true,\n mostBottomContent: null,\n showFooter: true,\n footerContent: null,\n initialState: true,\n disableClickOutside: null,\n contentBetweenButtons: null,\n subtitle: null,\n buttonsTabIndex: -1,\n modalTabIndex: -1,\n modalAutoFocus: false,\n modalAriaLabel: '',\n headerIcon: null,\n CustomFooter: null\n};\n","import {\n useState, useEffect, useRef, useLayoutEffect\n} from 'react';\nimport { moment as Moment, nodeContains } from '@jotforminc/utils';\nimport { randomHash } from '../utils';\n\nexport const useClickOutsideState = (initialState, refs = []) => {\n const [isVisible, setVisibility] = useState(initialState);\n\n const hideMenu = ({ target }) => {\n for (let i = 0; i < refs.length; i++) {\n const ref = refs[i];\n\n if (typeof ref === 'function' && ref(target)) return;\n\n if (!ref || !ref.current) {\n continue;\n }\n\n // Ignore if given ref clicked\n const isElementContains = element => element instanceof global.Element && (element === target || nodeContains(element, target));\n const currentContains = isElementContains(ref.current);\n const selfContains = isElementContains(ref.current.self);\n\n if (currentContains || selfContains) {\n return;\n }\n }\n\n setVisibility(false);\n };\n\n const escapeCapturingPhase = e => {\n if (e.target.closest('.searchFilter')) {\n e.stopPropagation();\n }\n };\n\n useEffect(() => {\n global.window.addEventListener('mouseup', hideMenu);\n global.window.addEventListener('mousedown', escapeCapturingPhase, true);\n return () => {\n global.window.removeEventListener('mouseup', hideMenu);\n global.window.removeEventListener('mousedown', escapeCapturingPhase);\n };\n }, []);\n\n return [isVisible, setVisibility];\n};\n\nexport const useManagedClickOutsideState = ({ modalRef, modalVisible, setVisibility }) => {\n const hideMenu = ({ target }) => {\n const ref = document.querySelector(`[id=\"${modalRef.current.portalID}\"] > div`);\n\n if (modalVisible) {\n setVisibility(target !== ref);\n }\n };\n\n useEffect(() => {\n if (modalVisible) {\n global.window.addEventListener('mouseup', hideMenu);\n return () => global.window.removeEventListener('mouseup', hideMenu);\n }\n }, [modalVisible, modalRef?.current?.portalID]);\n};\n\nexport const useMomentDate = (date, format) => {\n const [momentDate, setMomentDate] = useState(Moment.dateToMoment(date, format));\n const renewMomentDate = () => {\n setMomentDate(Moment.dateToMoment(date, format));\n };\n\n useEffect(() => {\n const listenerKey = `renewMomentDate_${randomHash()}`;\n Moment.addListener('setLocale', listenerKey, renewMomentDate);\n return () => Moment.removeListener('setLocale', listenerKey);\n }, []);\n\n useEffect(() => {\n renewMomentDate();\n }, [date, format]);\n\n return [momentDate, setMomentDate];\n};\n\nexport const useBreakpoints = breakPoints => {\n const bpEntries = Object.entries(breakPoints);\n\n const findBreakPoint = () => {\n const foundBP = bpEntries.reduce((acc, [key, value]) => {\n if (window.innerWidth > value) return key;\n return acc;\n }, '');\n\n return foundBP;\n };\n\n const [selectedBreakPoint, setSelectedBreakPoint] = useState(findBreakPoint());\n\n const handleResize = () => setSelectedBreakPoint(findBreakPoint());\n\n useEffect(() => {\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n return selectedBreakPoint;\n};\n\nexport function useInterval(callback, delay) {\n const savedCallback = useRef(callback);\n\n // Remember the latest callback if it changes.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n useEffect(() => {\n // Don't schedule if no delay is specified.\n if (delay === null) {\n return;\n }\n\n const id = setInterval(() => savedCallback.current(), delay);\n\n return () => clearInterval(id);\n }, [delay]);\n}\n\nexport const useEscKeyTrap = (trapKey, isExpanded, callback) => {\n useEffect(() => {\n const handleEscKey = e => {\n if (e.key === trapKey) {\n callback(e);\n }\n };\n if (isExpanded) {\n window.addEventListener('keydown', handleEscKey);\n }\n return () => {\n window.removeEventListener('keydown', handleEscKey);\n };\n }, [isExpanded]);\n};\n\nexport const useAutoFocus = (elementId, isVisible) => {\n useEffect(() => {\n if (isVisible) {\n document.getElementById(elementId).focus();\n }\n }, [isVisible]);\n};\n\nexport const useMeasure = () => {\n const ref = useRef(null);\n const [forceRedraw, setForceRedraw] = useState(1);\n const rect = useRef(null);\n\n useLayoutEffect(() => {\n rect.current = ref.current && ref.current.getBoundingClientRect();\n if (!ref.current) return;\n if (!rect.current.height && forceRedraw > 0) {\n setTimeout(() => setForceRedraw(v => v + 1), 1);\n }\n if (rect.current.height) {\n setForceRedraw(0);\n }\n }, [forceRedraw, rect]);\n return [ref, rect.current && rect.current];\n};\n","/* eslint-disable max-classes-per-file */\nimport React, { createContext, Component } from 'react';\nimport { assert } from '../../utils';\n\nconst { Provider, Consumer } = createContext();\n\nexport const withUIManager = (WrapperComponent, { container = global.document.body } = {}) => class UiManager extends Component {\n static generateClassList() {\n return container.classList.toString().split(' ').reduce((prev, curr) => ({ ...prev, [curr]: true }), {});\n }\n\n constructor(props) {\n super(props);\n\n this.state = {\n classNames: UiManager.generateClassList()\n };\n\n this.addClass = this.addClass.bind(this);\n this.hasClass = this.hasClass.bind(this);\n this.removeClass = this.removeClass.bind(this);\n this.toggleClass = this.toggleClass.bind(this);\n this.changeClassName = this.changeClassName.bind(this);\n }\n\n changeClassName(className, isExist) {\n assert(typeof className === 'string', new Error('changeClassName: className is not a string.'));\n if (typeof className !== 'string') return;\n const { classNames } = this.state;\n const newClassNames = className.split(' ').reduce((prev, curr) => ({\n ...prev,\n [curr]: isExist !== undefined ? isExist : !classNames[curr] // Quick way to handle add/remove/toggle methods\n }), {});\n\n Object.keys(newClassNames).forEach(classNameKey => (\n // Change classname if only changed\n classNames[classNameKey] !== newClassNames[classNameKey] && (\n newClassNames[classNameKey]\n ? container.classList.add(classNameKey)\n : container.classList.remove(classNameKey)\n )\n ));\n\n this.setState({\n classNames: UiManager.generateClassList()\n });\n }\n\n addClass(...args) {\n args.forEach(className => {\n if (!this.hasClass(className)) {\n this.changeClassName(className, true);\n }\n });\n }\n\n removeClass(...args) {\n args.forEach(className => {\n if (this.hasClass(className)) {\n this.changeClassName(className, false);\n }\n });\n }\n\n toggleClass(className) {\n this.changeClassName(className);\n }\n\n hasClass(className) {\n const { classNames } = this.state;\n return Boolean(classNames[className]);\n }\n\n render() {\n const { classNames } = this.state;\n\n return (\n \n \n \n );\n }\n};\n\nexport const withUIDispatcher = WrapperComponent => class extends Component {\n render() {\n return (\n \n {({\n addClass,\n removeClass,\n toggleClass,\n hasClass,\n classNames\n }) => (\n \n )}\n \n );\n }\n};\n","/* eslint-disable max-classes-per-file */\nimport React, { createContext, Component, useMemo } from 'react';\nimport { t } from '@jotforminc/translation';\n\nimport { string } from 'prop-types';\n\nimport { assert } from '../../utils';\nimport texts from '../../constants/texts';\n\nconst { Provider, Consumer } = createContext();\n\nexport const withTranslationManager = WrappedComponent => {\n const Translation = props => {\n const { language } = props;\n const branding21 = true;\n\n const translation = useMemo(() => {\n if (!language) return texts;\n const translated = Object.keys(texts).reduce((accum, key) => {\n const translatedText = t(texts[key]) || texts[key];\n\n return {\n ...accum,\n [key]: branding21 ? translatedText.replace(/JotForm/g, 'Jotform') : translatedText\n };\n }, {});\n\n return global.Proxy\n ? new Proxy(translated, {\n get: function getter(target, prop) {\n if (prop === '@@toStringTag') return 'Translation';\n if (prop === '_reactFragment') return 'React.Fragment';\n if (typeof prop === 'symbol') return target[prop];\n assert(target[prop], new Error(`withTranslationManager: Given key (${prop}) does not exist!`));\n return target[prop];\n }\n })\n : translated;\n }, [language]);\n\n return (\n \n \n \n );\n };\n\n Translation.propTypes = {\n language: string.isRequired\n };\n\n return Translation;\n};\n\nexport const withTranslation = WrappedComponent => class extends Component {\n render() {\n return (\n \n {({\n translation\n }) => (\n \n )}\n \n );\n }\n};\n","import { compose } from 'redux';\nimport { withUIDispatcher } from '../UserInterfaceManager';\n// import { withActionTracker } from '../ActionTracker';\nimport { withTranslation } from '../Translation';\n\n// TODO: exclude action/target pairs\n// const EXCLUDE_TARGETS = [];\n// const EXCLUDE_ACTIONS = ['onFrameLoad', 'onSubmissionRequest', 'onActiveSubmissionChange', 'onWindowSizeChange', 'onEvent'];\n\nexport const withInboxEnhancer = (name, ...modifiers) => compose(\n withTranslation,\n withUIDispatcher,\n ...modifiers\n // withActionTracker(name, target => EXCLUDE_TARGETS.indexOf(target) === -1, action => EXCLUDE_ACTIONS.indexOf(action) === -1)\n);\n","/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport { connect } from 'react-redux';\nimport {\n arrayOf, func, bool, shape\n} from 'prop-types';\nimport React, {\n useRef, useEffect, useState\n} from 'react';\nimport Tethered from 'react-tether';\nimport { Tooltip } from '@jotforminc/tooltip';\nimport { translationRenderer } from '@jotforminc/translation';\nimport { usePermissions } from '@jotforminc/permissions';\nimport { Checkbox } from '@jotforminc/magnet';\nimport { TwoButtonPopup as Modal } from '@jotforminc/two-button-popup';\nimport { ButtonField as Button } from '@jotforminc/button-field';\n\nimport { withRouter } from 'react-router-dom';\nimport { IconCheckCircleFilled } from '@jotforminc/svg-icons';\nimport { useDebounce } from '@jotforminc/hooks';\nimport SVG from '../../components/SVG';\n\nimport { useClickOutsideState } from '../../hooks';\n\nimport {\n submissionPropType,\n NUMBER_OR_STRING_PROPTYPE,\n enhancedProps\n} from '../../constants/proptypes';\n\nimport {\n activeSubmissionSelector,\n selectedSubmissionIDsSelector,\n filteredActiveSubmissionIndexSelector,\n isFavoriteSelectedSelector,\n isUnreadSelectedSelector,\n submissionsDeletingSelector,\n formSelector,\n userSelector,\n activeTabIDSelector,\n filterResultCountSelector,\n allSubmissionsSelectedSelector,\n editSubmissionPreference,\n filterTextSelector,\n filterObjectSelector,\n questionsSelector,\n submissionsSelector,\n userTypeSelector,\n isFormOwnerSelector,\n isSignFormSelector,\n isPreviousOrdersSelector,\n isPwaSelector,\n isTeamContextAllowedSelector\n} from '../../selectors';\n\nimport {\n updateBulkSubmission,\n deleteBulkSubmission,\n selectBulkSubmissions,\n prepareMultipleDownload,\n setViews\n} from '../../actions';\n\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\nimport { classNames, mapGeneralCurrentFilter, updateLocationParams } from '../../utils';\nimport { withInboxEnhancer } from '../../hocs/InboxEnhancer';\nimport { getInboxViews, saveInboxView } from '../../api';\nimport { MOBILE_MAX_WIDTH } from '../../constants';\n\nexport const SearchPanelToolbarComponent = ({\n activeTab,\n submissionsCount,\n allSubmissionsSelected,\n selectedSubmissionIDs,\n onSelectSubmissions,\n activeSubmissionIndex,\n submissionCount,\n changeFilter,\n filterObject,\n filterCount,\n form,\n onSetViews,\n history,\n t,\n isPreviousOrders,\n isPwa,\n isTeamContextAllowed\n}) => {\n const submissionExist = submissionsCount > 0;\n const isSubmissionSelectedAfterSelectAll = allSubmissionsSelected && selectedSubmissionIDs.length === 0;\n const isSelectAll = !allSubmissionsSelected && submissionExist && selectedSubmissionIDs.length === submissionsCount;\n const isDeselectAll = allSubmissionsSelected && submissionExist && selectedSubmissionIDs.length === submissionsCount;\n const checkDeselectAll = isDeselectAll ? '' : false;\n const isAllSubmissionsSelected = isSubmissionSelectedAfterSelectAll || isSelectAll ? true : checkDeselectAll;\n const isMultipleSubmissionSelected = isAllSubmissionsSelected || selectedSubmissionIDs.length > 0;\n\n const selectedCount = allSubmissionsSelected ? submissionCount - selectedSubmissionIDs.length : selectedSubmissionIDs.length;\n const checkboxMenuRef = useRef(null);\n const dropdownRef = useRef(null);\n const [nameValue, setNameValue] = useState('');\n\n const [isCheckboxMenuVisible, setCheckboxMenuVisibility] = useClickOutsideState(false, [checkboxMenuRef]);\n\n useEffect(() => {\n if (isCheckboxMenuVisible && dropdownRef.current) {\n dropdownRef.current.focus();\n }\n }, [isCheckboxMenuVisible]);\n\n const onSelectAllCheckbox = () => {\n if (isAllSubmissionsSelected || isMultipleSubmissionSelected) {\n return onSelectSubmissions('clear');\n }\n\n return onSelectSubmissions('all');\n };\n\n const onCheckboxMenuClick = () => {\n setCheckboxMenuVisibility(!isCheckboxMenuVisible);\n };\n\n const onSelectFilterValue = useDebounce(filterVal => {\n if (filterVal['conversation_type:eq'] || filterVal['ai_agent_id:ne']) {\n // possible action tags: incomplete, submission, ai-conversations\n const actionTag = filterVal['conversation_type:eq'] ?? 'ai-conversations';\n WatchmanRecorder.recordEvent(actionTag, 'inbox-ai-transcript');\n }\n changeFilter(filterVal);\n }, 250);\n\n const getSubmissionTranslatedStrings = () => {\n if (submissionsCount <= 0) { return t.NO_SUBMISSIONS; }\n const isFiltered = Object.keys(filterObject).length;\n\n if (isFiltered) {\n let finalResult = '';\n const currentFilter = mapGeneralCurrentFilter(filterObject);\n if (currentFilter) {\n const translationText = `{activeSubmission} of {totalSubmissions} submission${filterCount > 1 ? 's' : ''} ${filterCount > 1 ? 'are' : 'is'} [1[${currentFilter}]]`;\n const [translatedResult] = translationRenderer(translationText)({\n renderer1: text => `${text}`\n });\n\n finalResult = typeof translatedResult === 'string' ? translatedResult : translatedResult?.join('');\n\n finalResult = finalResult.replace(/ /g, '\\u00A0').replace('{activeSubmission}', `${activeSubmissionIndex + 1}`).replace('{totalSubmissions}', `${submissionsCount}`);\n } else {\n finalResult = t.FILTERED_SUBMISSIONS.replace('{count}', submissionsCount);\n }\n if (isPreviousOrders && isPwa) {\n finalResult = finalResult.replace('Submission', 'Order');\n }\n return finalResult;\n }\n\n if (activeTab === 'sentbox') {\n let text = t.TOTAL_SUBMISSIONS.replace('{totalSubmissions}', `${submissionsCount}`);\n if (isPreviousOrders && isPwa) {\n text = text.replace('Submission', 'Order');\n }\n return text;\n }\n return t.ACTIVE_SUBMISSION_OF_TOTAL.replace(/ /g, '\\u00A0').replace('{activeSubmission}', `${activeSubmissionIndex + 1}`).replace('{totalSubmissions}', `${submissionsCount}`);\n };\n\n const showActions = isAllSubmissionsSelected || isMultipleSubmissionSelected;\n const permissions = usePermissions();\n\n const submissionSelectionLabel = isMultipleSubmissionSelected ? t.DESELECT : t.SELECT_ALL;\n\n const [isCreateTabVisible, showCreateTab] = useState();\n const newTabNameRef = useRef();\n\n useEffect(() => {\n if (newTabNameRef.current) newTabNameRef.current.focus();\n }, [isCreateTabVisible]);\n\n const onCancelCreateTab = () => showCreateTab(false);\n\n const isIncomplete = activeTab === 'incompleteSubmissions';\n const isMobile = window.innerWidth <= MOBILE_MAX_WIDTH;\n const isAllTime = filterObject && (Object.values(filterObject).length === 0 || (Object.values(filterObject).length === 1 && filterObject.timeFilterText === 'All time'));\n\n const onSaveNewTab = () => {\n showCreateTab(false);\n saveInboxView(form.id, { filterObject, name: newTabNameRef.current.value.length > 0 ? newTabNameRef.current.value : 'Untitled Tab' }).then(tab => {\n getInboxViews(form.id).then(newTabs => {\n onSetViews(newTabs);\n history.push(updateLocationParams({ tab: tab.id, sid: '', filterObject }));\n WatchmanRecorder.recordEvent('createNewTab', 'SearchPanelToolbar');\n });\n });\n };\n const ContextFilterButtons = [{\n onClick: () => onSelectFilterValue({}),\n className: classNames('forSelectAll', isAllTime && 'isActive'),\n icon: 'IconBars',\n text: t.ALL,\n show: true\n },\n {\n onClick: () => onSelectFilterValue({ 'new:eq': '0' }),\n className: classNames('forRead', filterObject['new:eq'] === '0' && 'isActive'),\n icon: 'IconEnvelopeOpenedFilled',\n text: t.READ,\n show: activeTab !== 'conversations'\n },\n {\n onClick: () => onSelectFilterValue({ 'new:eq': '1' }),\n className: classNames('forUnread', filterObject['new:eq'] === '1' && 'isActive'),\n icon: 'IconEnvelopeClosedFilled',\n text: t.UNREAD,\n show: activeTab !== 'conversations'\n },\n {\n onClick: () => onSelectFilterValue({ 'flag:eq': '1' }),\n className: classNames('forStarred', filterObject['flag:eq'] === '1' && 'isActive'),\n icon: 'IconStarFilled',\n text: t.STARRED,\n show: !['trash', 'conversations'].includes(activeTab) && permissions?.star\n },\n {\n onClick: () => onSelectFilterValue({ 'flag:eq': '0' }),\n className: classNames('forUnstarred', filterObject['flag:eq'] === '0' && 'isActive'),\n icon: 'IconStar',\n text: t.UNSTARRED,\n show: !['trash', 'conversations'].includes(activeTab) && permissions?.star\n },\n {\n onClick: () => onSelectFilterValue({ 'ai_agent_id:ne': 'null' }),\n className: classNames('forSelectAll', filterObject['ai_agent_id:ne'] === 'null' && 'isActive'),\n icon: 'IconAiFilled',\n text: 'Conversations',\n show: activeTab !== 'conversations' && form?.isAIAgentCreated === '1'\n },\n {\n onClick: () => onSelectFilterValue({ 'conversation_type:eq': 'incomplete' }),\n className: classNames('forSelectAll', filterObject['conversation_type:eq'] === 'incomplete' && 'isActive'),\n icon: 'IconIncomplete',\n text: 'Incomplete',\n show: activeTab === 'conversations' && form?.isAIAgentCreated === '1'\n },\n {\n onClick: () => onSelectFilterValue({ 'conversation_type:eq': 'submission' }),\n className: classNames('forSelectAll', filterObject['conversation_type:eq'] === 'submission' && 'isActive'),\n icon: 'IconCircleLgFilled',\n text: 'Submission',\n show: activeTab === 'conversations' && form?.isAIAgentCreated === '1'\n }];\n\n return (\n <>\n {isCreateTabVisible && isMobile ? (\n \n Create a New Tab\n

Create a new tab for your filtered results.

\n \n )\n }\n onSave={onSaveNewTab}\n saveText='CREATE TAB'\n onClose={onCancelCreateTab}\n usePortal\n >\n
\n

ENTER A NAME FOR YOUR TAB

\n setNameValue(e.currentTarget.value)}\n value={nameValue}\n ref={newTabNameRef}\n />\n
\n \n ) : null}\n
\n
\n
\n {!isIncomplete && (\n
\n \n \n
\n )}\n \n \n
\n
\n
\n {(!isIncomplete && activeTab !== 'sentbox') && (\n
\n \n
\n )}\n
\n
\n
\n {\n isTeamContextAllowed && (\n \n {ContextFilterButtons.map(({\n onClick, className, text, show, icon\n }) => (\n (show && (\n \n ))\n ))}\n
\n )\n }\n \n
\n
\n {selectedCount !== 0 && (\n
\n {`${selectedCount} ${t.LOWER_SELECTED}`}\n onSelectSubmissions('clear')} name='IconXmark' />\n
\n )}\n \n \n );\n};\n\nSearchPanelToolbarComponent.propTypes = {\n submission: submissionPropType.isRequired,\n selectedSubmissionIDs: arrayOf(NUMBER_OR_STRING_PROPTYPE).isRequired,\n onUpdateBulkSubmission: func.isRequired,\n onDeleteBulkSubmission: func.isRequired,\n onSelectSubmissions: func.isRequired,\n activeSubmissionIndex: NUMBER_OR_STRING_PROPTYPE.isRequired,\n isSubmissionDeleting: bool.isRequired,\n isUnreadSelected: bool.isRequired,\n allowEdit: bool.isRequired,\n filterObject: shape({}).isRequired,\n isTeamContextAllowed: bool.isRequired,\n ...enhancedProps\n};\n\nconst mapStateToProps = stateProps => ({\n form: formSelector(stateProps),\n user: userSelector(stateProps),\n userType: userTypeSelector(stateProps),\n submission: activeSubmissionSelector(stateProps),\n questions: questionsSelector(stateProps),\n filterCount: filterResultCountSelector(stateProps),\n filterText: filterTextSelector(stateProps),\n filterObject: filterObjectSelector(stateProps),\n isFavoriteSelected: isFavoriteSelectedSelector(stateProps),\n isUnreadSelected: isUnreadSelectedSelector(stateProps),\n allSubmissionsSelected: allSubmissionsSelectedSelector(stateProps),\n selectedSubmissionIDs: selectedSubmissionIDsSelector(stateProps),\n submissionCount: filterResultCountSelector(stateProps),\n activeTab: activeTabIDSelector(stateProps),\n activeSubmissionIndex: filteredActiveSubmissionIndexSelector(stateProps),\n submissionsCount: filterResultCountSelector(stateProps),\n isSubmissionDeleting: submissionsDeletingSelector(stateProps),\n allowEdit: editSubmissionPreference(stateProps),\n submissions: submissionsSelector(stateProps),\n isFormOwner: isFormOwnerSelector(stateProps),\n isSignForm: isSignFormSelector(stateProps),\n isPreviousOrders: isPreviousOrdersSelector(stateProps),\n isPwa: isPwaSelector(stateProps),\n isTeamContextAllowed: isTeamContextAllowedSelector(stateProps)\n});\n\nconst mapDispatchToProps = {\n onUpdateBulkSubmission: updateBulkSubmission,\n onDeleteBulkSubmission: deleteBulkSubmission,\n onSelectSubmissions: selectBulkSubmissions,\n initiateMultipleDownload: prepareMultipleDownload,\n onSetViews: setViews\n};\n\nconst mergeProps = (stateProps, dispatchProps, compProps) => {\n return {\n ...compProps,\n ...stateProps,\n ...dispatchProps,\n changeFilter: filterObject => {\n if (Object.keys(filterObject).length > 0) {\n return compProps.history.push(updateLocationParams({ filterObject }));\n }\n\n compProps.history.replace(/\\?.*/, '');\n }\n };\n};\n\nconst connection = connect(mapStateToProps, mapDispatchToProps, mergeProps);\n\nexport default withRouter(withInboxEnhancer('searchPanelToolbar', connection)(SearchPanelToolbarComponent));\n","import { TwoButtonPopup } from '@jotforminc/two-button-popup';\nimport { func } from 'prop-types';\nimport React, { useState } from 'react';\nimport { enhancedProps } from '../../constants/proptypes';\n\nconst MAX_ALLOWED_CHARS = 75;\n\nconst CreateTabModal = ({\n onSaveNewTab,\n onCancelCreateTab,\n t\n}) => {\n const [tabName, setTabName] = useState('');\n\n return (\n \n {t.CREATE_A_NEW_TAB}\n

{t.TAB_FOR_FILTERED}

\n \n )\n }\n onSave={() => onSaveNewTab(tabName)}\n saveText='CREATE TAB'\n onClose={onCancelCreateTab}\n usePortal\n >\n
\n

{t.NAME_FOR_TAB}

\n setTabName(e.currentTarget.value)}\n value={tabName}\n maxLength={MAX_ALLOWED_CHARS}\n />\n
\n \n\n );\n};\n\nCreateTabModal.propTypes = {\n onSaveNewTab: func.isRequired,\n onCancelCreateTab: func.isRequired,\n ...enhancedProps\n};\n\nexport default CreateTabModal;\n","import React, { useState, useEffect } from 'react';\nimport { func, number, bool } from 'prop-types';\nimport classNames from 'classnames';\nimport { useDelayUnmount } from '@jotforminc/hooks';\nimport { translationRenderer } from '@jotforminc/translation';\nimport { IconFunnelFilled, IconTrashFilled, IconXmark } from '@jotforminc/svg-icons';\nimport { Button } from '@jotforminc/magnet';\nimport { enhancedProps } from '../../constants/proptypes';\nimport CreateTabModal from '../CreateTabModal';\n\nconst FilterResultBar = ({\n filterResultCount,\n submissionCount,\n hideResultBar,\n createNewTab,\n removeFilter,\n canCreateTab,\n isVisible,\n t\n}) => {\n const [showTabModal, setShowTabModal] = useState(false);\n const [isMounted, setIsMounted] = useState(false);\n\n const [shouldRenderChild, className] = useDelayUnmount(isMounted, 250);\n\n const onSaveNewTab = tabName => {\n setShowTabModal(false);\n createNewTab(tabName);\n };\n useEffect(() => {\n if (!isMounted && isVisible) {\n setIsMounted(true);\n return;\n }\n setIsMounted(false);\n }, [isVisible]);\n\n const [firstText, replaceText, secondText] = translationRenderer('[1[Filter result]]: {activeSubmission} of the {totalSubmission} [2[entries met the filter conditions]].')({\n renderer1: text => ({text}),\n renderer2: text => (text)\n });\n\n const filterText = replaceText?.join('')?.replace(/ /g, '\\u00A0').replace('{activeSubmission}', filterResultCount).replace('{totalSubmission}', submissionCount);\n\n return (\n shouldRenderChild && (\n
\n \n
\n \n

\n {firstText}\n {filterText}\n {secondText}\n

\n \n
\n\n
\n {canCreateTab\n && (\n setShowTabModal(true)}\n className=\"jfInboxFilterResultBar-button\"\n >\n {t.CREATE_A_NEW_TAB}\n \n )}\n \n {t.REMOVE_FILTER}\n \n \n
\n {showTabModal && setShowTabModal(false)} />}\n
\n \n ));\n};\n\nFilterResultBar.propTypes = {\n filterResultCount: number.isRequired,\n submissionCount: number.isRequired,\n hideResultBar: func.isRequired,\n createNewTab: func.isRequired,\n removeFilter: func.isRequired,\n isVisible: bool.isRequired,\n ...enhancedProps\n};\n\nexport default FilterResultBar;\n","import React from 'react';\nimport {\n string,\n arrayOf,\n oneOf,\n node\n} from 'prop-types';\nimport { classNames } from '../../utils';\nimport './warning.scss';\n\nconst Warning = ({ className, type, children }) => {\n return (\n
\n
\n
{children}
\n
\n );\n};\n\nWarning.propTypes = {\n type: arrayOf(oneOf(['warning', 'info', 'success', 'error'])).isRequired,\n className: string,\n children: node.isRequired\n};\n\nWarning.defaultProps = {\n className: ''\n};\n\nexport default Warning;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { classNames } from '../../utils';\n\nimport './Placeholder.scss';\n\nconst Placeholder = ({ animated, className }) => (\n
\n {animated &&
}\n
\n);\n\nPlaceholder.propTypes = {\n animated: PropTypes.bool,\n className: PropTypes.string\n};\n\nPlaceholder.defaultProps = {\n animated: false,\n className: ''\n};\n\nexport default Placeholder;\n","import React from 'react';\n\nimport Placeholder from '../Placeholder';\n\nconst SubmissionListPlaceholder = () => (\n
\n
\n \n
\n
\n \n \n
\n
\n);\n\nexport default SubmissionListPlaceholder;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { IconShieldLock } from '@jotforminc/svg-icons';\nimport { string, func } from 'prop-types';\n\nimport { withInboxEnhancer } from '../../hocs/InboxEnhancer';\nimport { setActiveSubmission } from '../../actions';\n\nconst SubmissionListEncrypted = ({ submissionId, changeActiveSubmission }) => {\n const handleEncryptedSubmissionClick = () => {\n changeActiveSubmission(submissionId);\n };\n\n return (\n
\n \n
\n
\n .....................\n
\n
\n
\n );\n};\n\nSubmissionListEncrypted.propTypes = {\n submissionId: string,\n changeActiveSubmission: func\n};\n\nSubmissionListEncrypted.defaultProps = {\n submissionId: '',\n changeActiveSubmission: null\n};\n\nconst mapDispatchToProps = {\n changeActiveSubmission: setActiveSubmission\n};\n\nconst enhance = withInboxEnhancer('SubmissionListEncrypted', connect(null, mapDispatchToProps));\n\nexport default enhance(SubmissionListEncrypted);\n","import './styles.scss';\n\nimport { connect } from 'react-redux';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport {\n object, arrayOf, string, func\n} from 'prop-types';\n\nimport { StorageHelper } from '@jotforminc/storage-helper';\nimport { Hooks } from '@jotforminc/uikit';\nimport { t } from '@jotforminc/translation';\nimport { IconXmarkSm } from '@jotforminc/svg-icons';\n\nimport { withInboxEnhancer } from '../../../hocs/InboxEnhancer';\n\nimport {\n actionTrackingHandler, classNames\n} from '../../../utils';\n\nimport { setActiveSubmission, setCampaignSubmissionContentVisiblity, setCampaignActive } from '../../../actions';\n\nimport {\n liteModeSelector, appLoadedSelector, selectedSubmissionIDsSelector, activeSubmissionIDSelector, userSelector\n} from '../../../selectors';\n\nconst a11yClickListener = (event, handler) => {\n const { keyCode } = event;\n if (keyCode !== 32) return;\n handler();\n};\n\nconst OneDollarSilverInboxListItem = ({\n // eslint-disable-next-line react/prop-types\n user = {}\n}) => {\n const { account_type: { currency = 'USD' } = {} } = user;\n\n const oneDollarText = useMemo(() => {\n switch (currency) {\n case 'GBP':\n return '£1';\n case 'EUR':\n return '€1';\n default:\n return '$1';\n }\n }, []);\n\n return (\n <>\n

\n \n {t('Upgrade to Silver for just {oneCurrencyUnit}.').replace('{oneCurrencyUnit}', oneDollarText)}\n \n

\n

{t('Limited time only.')}

\n \n );\n};\n\nconst CampaignSubmissionListItem = ({\n user,\n style,\n parentSubmissionID,\n activeSubmissionID,\n selectedSubmissions,\n setCampaignActivity,\n setCampaignUnmounted,\n changeActiveSubmission,\n showCampaignSubmission\n}) => {\n const { campaign, username } = user;\n const { utm_campaign: utmCampaign = '', type } = (campaign || {});\n\n const actor = username || '__inbox_campaign__';\n const target = 'campaignInboxSubmissionListItem';\n\n const [isActive, setIsActive] = useState(false);\n\n const handleActivateSubmissionItem = () => {\n changeActiveSubmission('');\n setIsActive(true);\n };\n\n const title = type === 'ONEDOLLARSILVER'\n ? (\n \n )\n :

{t('Save 50% off Jotform paid plans')}

;\n\n useEffect(() => {\n if (selectedSubmissions.length > 0) {\n setIsActive(false);\n }\n }, [selectedSubmissions]);\n\n useEffect(() => {\n if (!window.seenCampaignSubmission) {\n actionTrackingHandler(utmCampaign, { actor, target, action: 'seen' });\n window.seenCampaignSubmission = true;\n }\n if (activeSubmissionID === '' || activeSubmissionID === 0) {\n handleActivateSubmissionItem();\n }\n setCampaignUnmounted(false);\n return () => {\n setCampaignUnmounted(true);\n };\n }, []);\n\n useEffect(() => {\n if (activeSubmissionID !== '' && activeSubmissionID !== 0) {\n setIsActive(false);\n }\n }, [activeSubmissionID]);\n\n Hooks.useEffectIgnoreFirst(() => {\n setIsActive(isActive);\n showCampaignSubmission(isActive);\n }, [isActive]);\n\n const submissionItemClickHandler = () => {\n actionTrackingHandler(utmCampaign, { actor, target, action: 'click' });\n setIsActive(false);\n handleActivateSubmissionItem();\n };\n\n const handleClickDismiss = event => {\n event.stopPropagation();\n actionTrackingHandler(utmCampaign, { actor, target, action: 'click-dismiss' });\n setCampaignActivity(false);\n changeActiveSubmission(parentSubmissionID);\n const ttl = 1000 * 60 * 60 * 24 * 365;\n StorageHelper.setLocalStorageItem({ key: `dismiss-${utmCampaign}-campaign-submission`, value: '1', ttl });\n };\n\n return (\n a11yClickListener(event, handleActivateSubmissionItem)}\n >\n \"Popper\"\n
\n {title}\n

{t('Jotform Team')}

\n
\n \n {t('Dismiss')}\n \n \n
\n );\n};\n\nCampaignSubmissionListItem.propTypes = {\n user: object,\n style: object,\n setCampaignActivity: func,\n setCampaignUnmounted: func,\n parentSubmissionID: string,\n activeSubmissionID: string,\n showCampaignSubmission: func,\n changeActiveSubmission: func,\n selectedSubmissions: arrayOf(string)\n};\n\nCampaignSubmissionListItem.defaultProps = {\n user: {},\n style: {},\n activeSubmissionID: '',\n parentSubmissionID: '',\n selectedSubmissions: [],\n setCampaignActivity: f => f,\n setCampaignUnmounted: f => f,\n showCampaignSubmission: f => f,\n changeActiveSubmission: f => f\n};\n\nconst mapStateToProps = stateProps => ({\n user: userSelector(stateProps),\n liteMode: liteModeSelector(stateProps),\n appLoaded: appLoadedSelector(stateProps),\n activeSubmissionID: activeSubmissionIDSelector(stateProps),\n selectedSubmissions: selectedSubmissionIDsSelector(stateProps)\n});\n\nconst mapDispatchToProps = {\n setCampaignActivity: setCampaignActive,\n changeActiveSubmission: setActiveSubmission,\n showCampaignSubmission: setCampaignSubmissionContentVisiblity\n};\n\nconst enhance = withInboxEnhancer('CampaignSubmissionListItem', connect(mapStateToProps, mapDispatchToProps));\n\nexport default enhance(CampaignSubmissionListItem);\n","import React, { useState, useEffect } from 'react';\nimport {\n string, number, func, object, bool\n} from 'prop-types';\nimport { InfiniteLoader, Grid, AutoSizer } from 'react-virtualized';\n\nimport SubmissionListPlaceholder from '../SubmissionListPlaceholder';\nimport SubmissionListEncrypted from '../SubmissionListEncrypted';\nimport t from '../../constants/texts';\n\nimport {\n submissionsPropType,\n VALID_REACT_RENDER_PROPTYPE\n} from '../../constants/proptypes';\nimport CampaignSubmissionListItem from '../CampaignComponents/CampaignSubmissionListItem';\n\nconst SubmissionList = ({\n batchSize,\n submissions,\n submissionsCount,\n submissionLoadRequest,\n isSubmissionLoadRequired,\n submissionRenderer,\n placeHolderRenderer,\n rowHeight,\n className,\n overscanRowCount,\n toggleContextMenu,\n registerRef,\n encryptionStatus,\n isEncrypted,\n hasEncryptionKey,\n campaignActive,\n liteMode,\n activeTab,\n filterObject,\n editMode,\n submissionID,\n showCampaignSubmission\n}) => {\n const [rowsStartIndex, setRowsStartIndex] = useState(0);\n const [campaignUnmounted, setCampaignUnmounted] = useState(true);\n const renderSubmissionList = (submission, index) => (encryptionStatus[submission?.id] !== 'decrypting' && submission && submission.answers\n ? submissionRenderer({ submission, index })\n : placeHolderRenderer({ index })\n );\n\n const renderEncryptedList = submissionId => (\n \n );\n\n const campaignSubmissionItemVisible = (\n campaignActive\n && activeTab === 'inbox'\n && !liteMode\n && !editMode\n && Object.keys(filterObject).length === 0\n );\n\n useEffect(() => {\n if (campaignSubmissionItemVisible && campaignUnmounted) {\n showCampaignSubmission(!submissionID);\n }\n }, [submissionID, campaignUnmounted]);\n\n useEffect(() => {\n return () => {\n showCampaignSubmission(false);\n };\n }, []);\n\n const rowCount = campaignSubmissionItemVisible ? submissionsCount + 1 : submissionsCount;\n return (\n isSubmissionLoadRequired({ submissions, index })}\n loadMoreRows={submissionLoadRequest}\n rowCount={submissionsCount}\n minimumBatchSize={batchSize}\n threshold={batchSize / 2}\n >\n {({ onRowsRendered, registerChild }) => (\n \n {({ height, width }) => (\n {\n registerChild(gridRef);\n registerRef(gridRef);\n }}\n onSectionRendered={({ rowStartIndex: startIndex, rowStopIndex: stopIndex }) => {\n setRowsStartIndex(startIndex);\n onRowsRendered({ startIndex, stopIndex });\n }}\n rowCount={rowCount}\n rowHeight={rowHeight}\n columnWidth={width}\n height={height}\n width={width}\n overscanRowCount={overscanRowCount}\n aria-label={t.SUBMISSIONS}\n cellRenderer={({ key, rowIndex: index, style }) => {\n const {\n top: styleTop,\n height: styleHeight\n } = style;\n const submission = submissions[index];\n const isRenderEncryptedList = !hasEncryptionKey && !isEncrypted && submission?.encryptionProtocol === 'JF-CSE-V2';\n const listItemRenderer = (customStyle = {}) => (\n { toggleContextMenu(e, submission); }}\n >\n {isRenderEncryptedList ? renderEncryptedList(submission?.id) : renderSubmissionList(submission, index)}\n \n );\n\n if (campaignSubmissionItemVisible && !submission && rowsStartIndex >= 1 && campaignUnmounted) {\n return null;\n }\n if (campaignSubmissionItemVisible && index === 0) {\n return (\n <>\n \n {listItemRenderer(!campaignUnmounted && {\n top: styleTop + styleHeight\n })}\n \n );\n }\n return listItemRenderer((campaignSubmissionItemVisible && !campaignUnmounted) && { top: styleTop + styleHeight });\n }}\n />\n )}\n \n )}\n \n );\n};\n\nSubmissionList.propTypes = {\n className: string,\n batchSize: number,\n submissions: submissionsPropType,\n submissionsCount: number,\n registerRef: func,\n toggleContextMenu: func,\n submissionLoadRequest: func,\n isSubmissionLoadRequired: func,\n submissionRenderer: VALID_REACT_RENDER_PROPTYPE,\n placeHolderRenderer: VALID_REACT_RENDER_PROPTYPE,\n rowHeight: number,\n overscanRowCount: number,\n encryptionStatus: object,\n isEncrypted: bool,\n hasEncryptionKey: bool,\n campaignActive: bool,\n filterObject: object,\n activeTab: string,\n liteMode: bool,\n editMode: bool,\n showCampaignSubmission: func,\n submissionID: string\n};\n\nSubmissionList.defaultProps = {\n className: 'jfInbox-list hasTools',\n batchSize: 20,\n submissions: [],\n submissionsCount: 0,\n registerRef: () => null,\n toggleContextMenu: () => null,\n submissionRenderer: () => null,\n submissionLoadRequest: () => null,\n isSubmissionLoadRequired: ({ submissions, index }) => !!submissions[index] && !!submissions[index].answers,\n placeHolderRenderer: () => ,\n rowHeight: 64,\n overscanRowCount: 10,\n encryptionStatus: [],\n isEncrypted: false,\n hasEncryptionKey: false,\n campaignActive: false,\n filterObject: {},\n activeTab: '',\n liteMode: false,\n editMode: false,\n showCampaignSubmission: f => f,\n submissionID: ''\n};\n\nexport default SubmissionList;\n","import React from 'react';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport SVG from '../SVG';\nimport { translatedProps } from '../../constants/proptypes';\n\nconst NoResult = ({\n clearFilter,\n isSearched,\n t\n}) => {\n return (\n
\n
\n
\n {t.SUBMISSIONS_APPAER_HERE_SUBMISSIONS}\n
\n
\n
\n \n
\n
\n {!isSearched && t.NO_SUBMISSIONS_TEXT_FILTER}\n {isSearched && (t.NO_SUBMISSIONS_TEXT_SEARCHED)}\n
\n
\n {isSearched ? t.SUBMISSIONS_APPAER_HERE_SEARCHED : t.SUBMISSIONS_APPAER_HERE_FILTER}\n
\n {!isSearched && (\n
\n \n {t.REMOVE_FILTER}\n \n
\n )}\n
\n
\n );\n};\n\nNoResult.propTypes = translatedProps;\n\nexport default NoResult;\n","import React from 'react';\nimport { t as translate } from '@jotforminc/translation';\nimport classNames from 'classnames';\nimport { translatedProps } from '../../constants/proptypes';\nimport SVG from '../SVG';\n\nfunction getText(key, text, obj) {\n if (!key || typeof key !== 'string') return obj[`${text}SUBMISSIONS`];\n if (`${text}${key.toUpperCase()}` in obj) {\n return obj[`${text}${key.toUpperCase()}`];\n }\n return obj[`${text}SUBMISSIONS`];\n}\nconst NoSubmission = ({\n t, activeTab\n}) => {\n return (\n
\n
\n
\n {translate(getText(activeTab, 'SUBMISSIONS_APPAER_HERE_', t))}\n
\n
\n
\n \n
\n
\n {translate(getText(activeTab, 'NO_SUBMISSIONS_TEXT_', t))}\n
\n
\n
\n {translate(getText(activeTab, 'SUBMISSIONS_APPAER_HERE_', t))}\n
\n
\n
\n );\n};\n\nNoSubmission.propTypes = translatedProps;\n\nexport default NoSubmission;\n","import React from 'react';\n\nimport { translatedProps } from '../../constants/proptypes';\nimport SVG from '../SVG';\n\nconst NoPermission = ({\n t\n}) => (\n
\n
\n \n
\n
\n {t.NO_PERMISSION_TO_DISPLAY}\n
\n
\n);\n\nNoPermission.propTypes = translatedProps;\n\nexport default NoPermission;\n","import { useMomentDate } from '@jotforminc/hooks';\nimport moment from 'moment-timezone';\n\nconst COMPLETED = 'COMPLETED';\nconst NOT_REQUIRED_TASK = {\n buttonColor: '#979DC6',\n type: 'NOTREQUIRED',\n text: 'Not required'\n};\n\nconst DEFAULT_TASK = {\n buttonColor: '#FFB629',\n type: 'WAITING',\n text: 'Waiting'\n};\n\nconst NOT_QUALIFIED_REASON_CREATOR = {\n buttonColor: '#979DC6',\n type: 'CREATOR',\n text: 'Creator Role'\n};\n\nexport const isTaskCompleted = status => status && status === COMPLETED;\n\nexport const defaultAvatarValues = (outcomeInfo, notRequired = false, notQualifiedReason = false) => {\n if (notQualifiedReason && notQualifiedReason === 'CREATOR_ROLE') {\n return NOT_QUALIFIED_REASON_CREATOR;\n }\n if (notRequired) {\n return NOT_REQUIRED_TASK;\n }\n return {\n buttonColor: outcomeInfo?.buttonColor || DEFAULT_TASK.buttonColor,\n type: outcomeInfo?.type || DEFAULT_TASK.type,\n text: outcomeInfo?.text || DEFAULT_TASK.text\n };\n};\n\nexport const getDateValue = (timestamp = null, createdAt) => {\n const serverTimezoneOffset = moment().tz('America/New_York').format('Z');\n const [date] = useMomentDate(`${timestamp || createdAt} ${serverTimezoneOffset}`, 'YYYY-MM-DD HH:mm ZZ');\n return date;\n};\n\nexport const isTeamApproval = (type, team) => {\n if (!type || !team) return false;\n if (type === 'workflow_team_approval' && team) return true;\n return false;\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport './Placeholder.scss';\n\nconst Placeholder = ({\n animated,\n rounded,\n className,\n ...props\n}) => (\n
\n {animated &&
}\n
\n);\n\nPlaceholder.propTypes = {\n animated: PropTypes.bool,\n rounded: PropTypes.bool,\n className: PropTypes.string\n};\n\nPlaceholder.defaultProps = {\n animated: false,\n rounded: false,\n className: ''\n};\n\nexport default Placeholder;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport classNames from 'classnames';\n\nimport Placeholder from './PlaceHolder';\n\nconst StyledWorkflowStatus = styled.div`\n .jfPlaceholder {\n &-row {\n height: 14px;\n\n &.forShort {\n width: 72.5%;\n }\n\n &.forLong {\n margin-top: 10px;\n }\n }\n }\n`;\n\nconst WorkflowStatus = ({ className, ...props }) => (\n \n
\n \n
\n
\n \n
\n
\n);\n\nWorkflowStatus.propTypes = {\n className: PropTypes.string\n};\n\nWorkflowStatus.defaultProps = {\n className: ''\n};\n\nexport default WorkflowStatus;\n","import { RequestLayer, Interceptors } from '@jotforminc/request-layer';\n\nexport const layer = new RequestLayer('/API', {\n interceptorConfig: {\n teamID: global.teamID,\n customResponseInterceptors: [Interceptors.requestManagerResponseNormalizer]\n }\n});\n\nexport const fetchQuestions = (formID, project = '') => layer.get(`/API/${project}/form/${formID}/questions`);\nexport const fetchSubmission = (submissionID, project = '') => layer.get(`/API/${project}/submission/${submissionID}`);\nexport const fetchUser = () => layer.get('user/combinedinfo');\n\nexport const fetchFormPdf = formID => layer.get(`form/${formID}/pdf`);\n","import { createContext } from 'react';\n\nexport const SingleSubmissionButtonContext = createContext();\n","/* eslint-disable max-len */\nimport React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport Styled from 'styled-components';\n\nimport Preview from '../components/Preview';\n\nconst getDisplayName = WrappedComponent => WrappedComponent.displayName || WrappedComponent.name || 'Component';\n\nconst StyledPreviewWrapper = Styled.div`\n .clickableImageWrapper {\n cursor: pointer;\n border-radius: 4px;\n border: 1px solid #D9DAE4;\n overflow: hidden;\n transition: .3s ease-in;\n cursor: pointer;\n position: relative;\n height: 80px;\n\n &::before,\n &::after {\n content: '';\n position: absolute;\n opacity: 0;\n visibility: hidden;\n pointer-events: none;\n transition: .2s ease-in;\n }\n\n &::before {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: rgba(0, 0, 0, 0.4);\n z-index: 2;\n }\n\n &::after {\n content: \"\";\n top: 50%;\n left: 50%;\n width: 29px;\n height: 29px;\n transform: translate(-50%, -50%);\n background-image: url(\"data:image/svg+xml,%3Csvg width='29' height='29' viewBox='0 0 29 29' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='14.75' cy='14.6748' r='14' fill='%23121C48' fill-opacity='0.64'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M8.99573 19.5229C8.99573 19.337 8.99579 19.2315 8.99573 19.126C8.99526 18.3094 9.00063 17.4927 8.99164 16.6762C8.98744 16.293 8.7308 16.0422 8.37583 16.0407C8.0166 16.0392 7.75558 16.2888 7.75418 16.6673C7.74875 18.1255 7.7484 19.5837 7.75435 21.042C7.75593 21.4273 7.99052 21.6677 8.37233 21.6695C9.83072 21.6766 11.2892 21.6762 12.7476 21.6704C13.1241 21.669 13.3852 21.4025 13.3847 21.0562C13.3841 20.6939 13.1216 20.4349 12.7264 20.4319C11.9001 20.4254 11.0736 20.4296 10.2471 20.4294C10.1548 20.4293 10.0624 20.4294 9.97001 20.4294C9.93856 20.3865 9.90705 20.3436 9.87554 20.3008C9.97059 20.2512 10.0849 20.2211 10.1577 20.1491C10.9664 19.3492 11.769 18.5431 12.5727 17.7382C12.9918 17.3186 13.418 16.9057 13.826 16.4756C14.1538 16.1299 14.0329 15.5936 13.6039 15.4486C13.3145 15.3509 13.0824 15.4548 12.8702 15.6681C11.6769 16.8672 10.4771 18.0597 9.27904 19.254C9.2051 19.3278 9.12761 19.398 8.99573 19.5229ZM20.3851 9.81163C20.4254 9.84449 20.4657 9.87742 20.506 9.91034C20.506 10.8245 20.5022 11.7387 20.5077 12.6529C20.5101 13.0551 20.7623 13.3137 21.1273 13.3124C21.4909 13.3112 21.7453 13.0502 21.7465 12.6499C21.7511 11.2198 21.7512 9.78968 21.7466 8.3596C21.7451 7.91082 21.5096 7.67901 21.0584 7.67772C19.6406 7.67381 18.2225 7.67381 16.8046 7.67784C16.3823 7.67901 16.1161 7.93177 16.1213 8.30362C16.1264 8.67874 16.3881 8.91761 16.8148 8.91989C17.6403 8.92427 18.4658 8.92088 19.2914 8.92205C19.3732 8.92217 19.455 8.93151 19.5368 8.93658L19.6122 9.03868C19.5204 9.09338 19.4125 9.13197 19.339 9.20523C18.1691 10.3721 17.0033 11.5433 15.8376 12.7145C15.7556 12.7969 15.6713 12.8801 15.6055 12.9751C15.369 13.3165 15.4985 13.7314 15.8827 13.8874C16.2035 14.0177 16.4402 13.88 16.6612 13.6583C17.8486 12.4675 19.04 11.2809 20.2256 10.0884C20.2982 10.0154 20.3329 9.90474 20.3851 9.81163Z' fill='white'/%3E%3C/svg%3E%0A\");\n background-repeat: no-repeat;\n background-position: center;\n transition-delay: .1s;\n z-index: 3;\n }\n\n &:hover {\n border-color: #4277ff;\n\n &::before,\n &::after {\n opacity: 1;\n visibility: visible;\n }\n }\n }\n`;\n\nconst withPreview = WrappedComponent => {\n const WithPreview = props => {\n const {\n clickableImageSelector,\n ...otherProps\n } = props;\n const [activePreviewIndex, setActivePreviewIndex] = useState(false);\n const [files, setFiles] = useState([]);\n\n const prepareFile = (url = '') => {\n const fileName = url.split('/').pop().split('?')[0];\n const fileUrl = url.replace('#', '%23');\n\n return {\n fileName,\n fileUrl,\n previewUrl: fileUrl\n };\n };\n\n const prepareFiles = allImages => {\n const preparedFiles = allImages.map(image => prepareFile(image.src));\n\n setFiles(preparedFiles);\n };\n\n const handleClick = i => setActivePreviewIndex(i);\n\n useEffect(() => {\n const previewContent = document.querySelector('#preview-content');\n if (!previewContent) {\n const newPreviewContentEl = document.createElement('div');\n newPreviewContentEl.id = 'preview-content';\n document.body.appendChild(newPreviewContentEl);\n }\n\n const allImages = clickableImageSelector ? Array.from(document.querySelectorAll(clickableImageSelector)) : [];\n prepareFiles(allImages);\n\n allImages.forEach((image, i) => {\n image.parentNode.classList.add('clickableImageWrapper');\n image.addEventListener('click', () => handleClick(i));\n });\n\n return () => {\n allImages.forEach((image, i) => {\n image.removeEventListener('click', () => handleClick(i));\n });\n };\n }, []);\n\n return (\n \n \n {activePreviewIndex !== false && (\n setActivePreviewIndex(false)}\n isPreviewContextMenuOpened={false}\n togglePreviewContextMenu={f => f}\n />\n )}\n \n );\n };\n\n WithPreview.propTypes = {\n clickableImageSelector: PropTypes.string\n };\n\n WithPreview.defaultProps = {\n clickableImageSelector: ''\n };\n\n WithPreview.displayName = `Preview(${getDisplayName(WrappedComponent)})`;\n\n return WithPreview;\n};\n\nexport default withPreview;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { capitalize } from '@jotforminc/utils';\n\nconst SVGComponents = {\n\n};\n\nconst SVG = React.forwardRef(({\n name,\n className,\n ...remainingProps\n}, ref) => {\n const SVGComponent = SVGComponents[capitalize(name)];\n if (!SVGComponent) {\n return null;\n }\n\n return (\n \n );\n});\n\nSVG.propTypes = {\n name: PropTypes.string.isRequired,\n className: PropTypes.string\n};\n\nSVG.defaultProps = {\n className: null\n};\n\nexport default SVG;\n","import React from 'react';\n\nconst View = props =>
;\n\nexport default View;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Styled from 'styled-components';\n\nimport View from '../View';\n\nconst ViewWithAlignment = Styled(({ direction, ...props }) => )`\n display: flex;\n flex-direction: ${({ direction }) => direction};`;\n\nViewWithAlignment.propTypes = {\n direction: PropTypes.string\n};\n\nViewWithAlignment.defaultProps = {\n direction: 'column'\n};\n\nexport default ViewWithAlignment;\n","import React from 'react';\nimport dompurify from 'dompurify';\n\nconst Text = ({\n noSanitize, textWrapper, textWrapperRef, ...props\n}) => {\n if (textWrapper) {\n const Wrapper = textWrapper;\n return (\n \n
\n \n );\n }\n if (props.dangerouslySetInnerHTML && props.dangerouslySetInnerHTML.__html && !noSanitize) {\n try {\n const sanitizationOptions = {\n ADD_ATTR: ['target'] // This option is necessary to preserve the 'target' attribute in tags because the 'target' attribute was not an allowed attribute.\n };\n // eslint-disable-next-line no-param-reassign\n props.dangerouslySetInnerHTML.__html = dompurify.sanitize(props.dangerouslySetInnerHTML.__html, sanitizationOptions);\n } catch (e) {\n console.error(e);\n }\n }\n return (\n
\n );\n};\n\nexport default Text;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Styled from 'styled-components';\nimport isEqual from 'lodash/isEqual';\nimport View from '../View';\nimport Text from '../Text';\nimport { nl2br, stripHTML } from '../../utils';\nimport { isNative } from '../../utils/environment';\n\nconst LabelText = Styled(Text)`\n font-size: 20px;\n letter-spacing: .25px;\n font-weight: 600;\n`;\n\nclass Label extends React.Component {\n constructor(props) {\n super(props);\n\n const { textStyle } = this.props;\n\n // In order to prevent unnecessary re-renders caused by ref changes on WrappedLabelText caused by calling Styled(...) on each render.\n this.wrappedLabelText = Styled(styledProps => )`${textStyle}`;\n // If you are willing to change this logic, you may break inline-edit on PDF-Editor. Remember, everything is connected.\n }\n\n componentDidUpdate(prevProps) {\n if (!isEqual(prevProps.textStyle, this.props.textStyle)) {\n this.wrappedLabelText = Styled(props => )`${this.props.textStyle}`;\n }\n }\n\n render() {\n const {\n label,\n textProps,\n textStyle,\n allowHTML,\n childLabels, // array of additional components in the label\n ...props\n } = this.props;\n\n const WrappedLabelText = this.wrappedLabelText;\n const isValid = (label !== '') && (label.length > 0); // required for native\n\n const prettyLabel = isNative() ? stripHTML(label) : nl2br(stripHTML(label));\n return (\n \n {isValid && label && {allowHTML ? label : prettyLabel}}\n {childLabels && childLabels}\n \n );\n }\n}\n\nLabel.propTypes = {\n label: PropTypes.string,\n textProps: PropTypes.shape({}),\n allowHTML: PropTypes.bool,\n childLabels: PropTypes.arrayOf(PropTypes.shape({})),\n textStyle: PropTypes.string\n};\n\nLabel.defaultProps = {\n label: '',\n textProps: {},\n allowHTML: false,\n childLabels: [],\n textStyle: ''\n};\n\nexport default Label;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Styled from 'styled-components';\n\nimport Label from '../Label';\n\nconst LabelWithAlignment = Styled(({ direction, flexBasis, ...props }) => \n )}\n {showMap && emptyResult && (\n \n \n \n \n \n \n {t('Couldn\\'t find the address')}\n \n \n {t('It looks like the provided address is invalid.')}\n \n \n \n )}\n \n \n );\n }\n}\n\nAddress.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.shape({\n addr_line1: PropTypes.string,\n addr_line2: PropTypes.string,\n city: PropTypes.string,\n state: PropTypes.string,\n postal: PropTypes.string,\n country: PropTypes.string\n })\n ]),\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string,\n showMap: PropTypes.bool\n};\n\nAddress.defaultProps = {\n text: '',\n answer: {\n addr_line1: '',\n addr_line2: '',\n city: '',\n state: '',\n postal: '',\n country: ''\n },\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n direction: 'column',\n showMap: false\n};\n\nexport default Address;\n","import React from 'react';\nimport Styled from 'styled-components';\n\nconst styled = Component => {\n return (tags, ...others) => {\n return Styled(props => )`\n ${tags}\n ${others}\n `;\n };\n};\n\nexport default styled;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment-timezone';\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\nimport Styled from '../../utils/styled';\n\nconst TimezoneText = Styled(Text)`\n font-size: 13px;\n letter-spacing: 0.1px;\n color: #8894ac;\n`;\n\nclass Appointment extends React.Component {\n getAnswerDate() {\n const {\n answer, timezone, showTimezone, timeFormat, submissionDate, isNewAppointment, locale\n } = this.props;\n const { date: dateStr, duration } = answer;\n if (locale) {\n moment.locale(locale);\n }\n const serverTimeZone = 'America/New_York';\n const newAppointment = (true || window.location.href.includes('useAppointmentFix') || isNewAppointment);\n\n if (!dateStr) {\n return '';\n }\n\n let dateObject = newAppointment ? moment.tz(dateStr, serverTimeZone) : moment(dateStr);\n if (!dateObject.isValid()) {\n return '';\n }\n\n if (timezone) {\n if (newAppointment) {\n dateObject = dateObject.clone().tz(timezone);\n } else {\n const defaultOffset = submissionDate ? moment(submissionDate).tz(serverTimeZone).utcOffset() : moment.tz(serverTimeZone).utcOffset();\n const timezoneOffset = submissionDate ? moment(submissionDate).tz(timezone).utcOffset() : moment.tz(timezone).utcOffset();\n const changedOffset = timezoneOffset - defaultOffset;\n\n dateObject = dateObject.clone().add(changedOffset, 'minutes');\n }\n }\n\n const endDate = dateObject.clone().add(duration, 'minutes');\n const answerTimeFormat = timeFormat === 'AM/PM' ? 'h:mm A' : 'HH:mm';\n\n return (\n <>\n {dateObject.clone().format(`dddd, MMM DD, Y ${answerTimeFormat}`)}\n {' - '}\n {endDate.format(answerTimeFormat)}\n {' '}\n {showTimezone && `- ${timezone} Time`}\n \n );\n }\n\n render() {\n const {\n text,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n direction\n } = this.props;\n\n const answer = this.getAnswerDate();\n\n return (\n \n {answer ? (\n \n {answer}\n \n ) : null}\n \n );\n }\n}\n\nAppointment.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.string,\n timezone: PropTypes.string,\n timeFormat: PropTypes.string,\n submissionDate: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n dateFormat: PropTypes.shape({}),\n direction: PropTypes.string,\n showTimezone: PropTypes.bool,\n isNewAppointment: PropTypes.bool\n};\n\nAppointment.defaultProps = {\n text: '',\n answer: '',\n timezone: '',\n timeFormat: '24 Hour',\n submissionDate: '',\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n dateFormat: 'mm-dd-yyyy',\n direction: 'column',\n showTimezone: false,\n isNewAppointment: false\n};\n\nexport default Appointment;\n","import Emoji from 'emoji-mart/dist/components/emoji/emoji';\nimport 'emoji-mart/css/emoji-mart.css';\n\nexport default Emoji;\n","import React from 'react';\nimport { EmojiWithoutLazy } from '@jotforminc/emoji-mart';\nimport { string, oneOfType, number } from 'prop-types';\n\nconst EmojiRendererWithoutLazy = ({ id, size }) => {\n return (\n \n );\n};\n\nEmojiRendererWithoutLazy.propTypes = {\n id: string,\n size: oneOfType([number, string])\n};\n\nEmojiRendererWithoutLazy.defaultProps = {\n id: '',\n size: 55\n};\n\nexport default EmojiRendererWithoutLazy;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Styled from 'styled-components';\nimport { EmojiRendererWithoutLazy } from '@jotforminc/icon-selector';\n\nimport View from '../View';\nimport Text from '../Text';\nimport Image from '../Image';\n// import Baseline from '../Baseline';\n\nconst StyledTextHolder = Styled(View)`\n display: flex;\n flex: 1;\n flex-direction: column;\n text-align: left;\n overflow: hidden;\n`;\n\nconst StyleSubText = Styled(Text)`\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n opacity: .6;\n`;\n\nconst StyledText = Styled(Text)`\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n`;\n\nconst StyledImageLine = Styled(View)`\n background-color: ${({ backgroundColor }) => backgroundColor};\n display: inline-flex !important;\n align-items: center;\n padding: 10px;\n border: 1px solid #C8CEED;\n border-radius: 90px;\n`;\n\nconst StyledImage = Styled(props => )`\n display: block;\n flex: 0;\n max-width: 36px;\n max-height: 36px;\n margin-right: 8px;\n border-radius: 50%;\n object-fit: cover;\n background-color: #b9bbd2;\n flex-shrink: 1;\n`;\n\nclass AssigneeLine extends React.Component {\n render() {\n const {\n label,\n subLabel,\n value,\n imageLabel,\n valueContainerProps,\n imageContainerProps,\n backgroundColor,\n optimizeImage,\n showSubLabel,\n teamAvatarID,\n ...props\n } = this.props;\n\n const imageSource = value || 'https://cdn.jotfor.ms/assets/img/v4/avatar/Podo-Guest.png';\n\n return (\n \n \n {teamAvatarID ? \n : }\n\n \n \n {imageLabel && {imageLabel}}\n {showSubLabel && subLabel && {subLabel}}\n \n \n );\n }\n}\n\nAssigneeLine.propTypes = {\n label: PropTypes.string,\n subLabel: PropTypes.string,\n value: PropTypes.string,\n imageLabel: PropTypes.string,\n backgroundColor: PropTypes.string,\n valueContainerProps: PropTypes.shape({}),\n imageContainerProps: PropTypes.shape({}),\n optimizeImage: PropTypes.bool,\n showSubLabel: PropTypes.bool\n};\n\nAssigneeLine.defaultProps = {\n label: '',\n subLabel: '',\n value: '',\n imageLabel: '',\n backgroundColor: null,\n valueContainerProps: {},\n imageContainerProps: {},\n optimizeImage: false,\n showSubLabel: true\n};\n\nexport default AssigneeLine;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport AssigneeLine from '../AssigneeLine';\n\nconst AssigneeItem = ({\n children: [opt, subOpt, value], checked, imageContainerProps, ...props\n}) => (\n \n);\n\nAssigneeItem.propTypes = {\n imageContainerProps: PropTypes.shape({\n style: PropTypes.shape({})\n }),\n children: PropTypes.node,\n checked: PropTypes.bool\n};\n\nAssigneeItem.defaultProps = {\n children: null,\n checked: false,\n imageContainerProps: {\n style: {}\n }\n};\n\nexport default AssigneeItem;\n","import PropTypes from 'prop-types';\n\nimport {\n LOCALES,\n LIST_TYPES,\n NUMBER_FORMATS\n} from '.';\n\n/**\n * Just creates a mix of other prop type schemas with given key => proptype pair\n */\nconst mixPropTypes = propTypes => Object.keys(propTypes).reduce(\n (prev, curr) => ({\n schema: { ...prev.schema, [curr]: propTypes[curr].schema },\n default: { ...prev.default, [curr]: propTypes[curr].default }\n }),\n { schema: {}, default: {} }\n);\n\nexport const ContainerProps = {\n schema: PropTypes.shape({\n alignment: PropTypes.oneOf([\n 'left',\n 'center',\n 'right'\n ])\n }),\n default: { alignment: 'center' }\n};\n\nexport const ListItem = {\n schema: PropTypes.node,\n default: ''\n};\n\nexport const ShowAll = {\n schema: PropTypes.bool,\n default: false\n};\n\nexport const ListItems = {\n schema: PropTypes.arrayOf(ListItem.schema),\n default: []\n};\n\nexport const ItemProps = {\n schema: PropTypes.shape({}),\n default: {}\n};\n\nexport const ListItemProps = {\n schema: PropTypes.oneOfType([\n PropTypes.arrayOf(ItemProps.schema),\n PropTypes.object\n ]),\n default: []\n};\n\nexport const ListTypes = {\n schema: PropTypes.oneOf(Object.values(LIST_TYPES)),\n default: LIST_TYPES.OPTION\n};\n\nexport const OptionsArrayItem = {\n schema: PropTypes.shape({\n value: PropTypes.string,\n color: PropTypes.string,\n key: PropTypes.string\n }),\n default: {}\n};\n\nexport const OptionsArrayParsed = {\n schema: PropTypes.arrayOf(OptionsArrayItem.schema),\n default: []\n};\n\nexport const MultiChoiceAnswer = {\n schema: PropTypes.oneOfType([\n PropTypes.shape({}),\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string)\n ]),\n default: []\n};\n\nexport const OptionsArray = {\n schema: PropTypes.oneOfType([PropTypes.string, PropTypes.shape({})]),\n default: ''\n};\n\nexport const SubmissionWidget = {\n schema: PropTypes.oneOf(['Yes', 'No']),\n default: 'No'\n};\n\nexport const NumberFormats = {\n schema: PropTypes.oneOf(Object.values(NUMBER_FORMATS)),\n default: NUMBER_FORMATS.NUMBER\n};\n\nexport const ListPropTypes = mixPropTypes({\n type: ListTypes,\n showAll: ShowAll,\n items: ListItems,\n allItems: ListItems,\n itemProps: ListItemProps,\n containerProps: ContainerProps\n});\n\nexport const SubmissionWidgetPropsTypes = mixPropTypes({\n answer: MultiChoiceAnswer,\n options_array: OptionsArray,\n submissionWidget: SubmissionWidget\n});\n\nexport const LocaleTypes = {\n schema: PropTypes.oneOf(Object.keys(LOCALES)),\n default: 'en'\n};\n","import React from 'react';\nimport Styled from 'styled-components';\n\nimport View from '../View';\nimport AssigneeItem from '../AssigneeItem';\nimport { mapAnswerItems, justifyContentPicker } from '../../utils';\nimport { ListPropTypes } from '../../constants/schemas';\n\nconst ViewWrap = Styled(View)`\n display: flex;\n flex-wrap: wrap;\n justify-content: ${({ alignment }) => justifyContentPicker(alignment)};\n gap: 12px;\n`;\n\nconst AssigneeList = ({ items, itemProps, containerProps }) => (\n \n {mapAnswerItems(AssigneeItem, items, itemProps)}\n \n);\n\nAssigneeList.propTypes = ListPropTypes.schema;\nAssigneeList.defaultProps = ListPropTypes.default;\n\nexport default AssigneeList;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Imageline from '../Imageline';\n\nconst ImageItem = ({\n children: [opt, value], checked, imageContainerProps, ...props\n}) => (\n \n);\n\nImageItem.propTypes = {\n imageContainerProps: PropTypes.shape({\n style: PropTypes.shape({})\n }),\n children: PropTypes.node,\n checked: PropTypes.bool\n};\n\nImageItem.defaultProps = {\n children: null,\n checked: false,\n imageContainerProps: {\n style: {}\n }\n};\n\nexport default ImageItem;\n","import React from 'react';\nimport Styled from 'styled-components';\n\nimport View from '../View';\nimport ImageItem from '../ImageItem';\nimport { mapAnswerItems, justifyContentPicker } from '../../utils';\nimport { ListPropTypes } from '../../constants/schemas';\n\nconst ViewWrap = Styled(View)`\n display: flex;\n flex-wrap: wrap;\n justify-content: ${({ alignment }) => justifyContentPicker(alignment)};\n`;\n\nconst ImageList = ({ items, itemProps, containerProps }) => (\n \n {mapAnswerItems(ImageItem, items, itemProps)}\n \n);\n\nImageList.propTypes = ListPropTypes.schema;\nImageList.defaultProps = ListPropTypes.default;\n\nexport default ImageList;\n","import React from 'react';\nimport Styled from 'styled-components';\n\nimport View from '../View';\nimport { mapAnswerItems, justifyContentPicker } from '../../utils';\nimport { ListPropTypes } from '../../constants/schemas';\n\nconst ViewWrap = Styled(View)`\n display: flex;\n flex-flow: row wrap;\n justify-content: ${({ alignment }) => justifyContentPicker(alignment)};\n`;\nconst ViewChild = Styled(View)`\n text-decoration: ${({ checked }) => (checked !== undefined && !checked ? 'line-through' : 'none')};\n &:not(:last-of-type):after {\n content: ', ';\n white-space: pre;\n }\n`;\n\nconst CommaList = ({ items, itemProps, containerProps }) => (\n \n {mapAnswerItems(ViewChild, items, itemProps)}\n \n);\n\nCommaList.propTypes = ListPropTypes.schema;\nCommaList.defaultProps = ListPropTypes.default;\n\nexport default CommaList;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Styled from 'styled-components';\n\nimport Text from '../Text';\n\nconst OptionItem = Styled(({\n backgroundColor,\n checked,\n color,\n ...remainingProps\n}) => )`\n background-color: ${({ backgroundColor }) => backgroundColor || '#E3E8F3'};\n padding: 8px 24px;\n font-size: 16px;\n font-weight: 200;\n margin-right: 12px;\n margin-bottom: 12px;\n border-radius: 3px;\n opacity: ${({ checked }) => (checked ? 1 : 0.5)};\n`;\n\nOptionItem.propTypes = {\n color: PropTypes.string,\n checked: PropTypes.bool\n};\n\nOptionItem.defaultProps = {\n color: '#E3E8F3',\n checked: true\n};\n\nexport default OptionItem;\n","import React from 'react';\nimport Styled from 'styled-components';\n\nimport View from '../View';\nimport OptionItem from '../OptionItem';\nimport { mapAnswerItems, justifyContentPicker } from '../../utils';\nimport { ListPropTypes } from '../../constants/schemas';\n\nconst ViewWrap = Styled(View)`\n display: flex;\n flex-wrap: wrap;\n justify-content: ${({ alignment }) => justifyContentPicker(alignment)};\n`;\n\nconst OptionList = ({ items, itemProps, containerProps }) => (\n \n {mapAnswerItems(OptionItem, items, itemProps)}\n \n);\n\nOptionList.propTypes = ListPropTypes.schema;\nOptionList.defaultProps = ListPropTypes.default;\n\nexport default OptionList;\n","import React from 'react';\nimport Styled from 'styled-components';\n\nimport { mapAnswerItems } from '../../utils';\nimport { ListPropTypes } from '../../constants/schemas';\n\nconst StyledListItem = Styled(props =>
  • )``;\n\nconst OrderedList = ({ items, itemProps, containerProps }) => (\n
      \n {mapAnswerItems(StyledListItem, items, itemProps)}\n
    \n);\n\nOrderedList.propTypes = ListPropTypes.schema;\nOrderedList.defaultProps = ListPropTypes.default;\n\nexport default OrderedList;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Styled from '../../utils/styled';\n\nimport View from '../View';\nimport Image from '../Image';\n\nconst StyledImage = Styled(props => )`\n width: 12px;\n height: 12px;\n display: inline-block;\n vertical-align: text-bottom;\n outline: 1px solid #b8b8b8;\n border-color: #b8b8b8;\n border-width: 1;\n`;\n\nconst StyledView = Styled(View)`\n width: 12px;\n height: 12px;\n min-width: 12px;\n display: inline-block;\n vertical-align: text-bottom;\n box-shadow: 0 0 0 1px #b0b0b0;\n border-color: #b0b0b0;\n border-width: 1;\n`;\n\nclass Checkbox extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n checked: props.checked\n };\n\n this.handleToggle = this.handleToggle.bind(this);\n }\n\n handleToggle() {\n const { interactive } = this.props;\n const { checked } = this.state;\n\n if (!interactive) {\n return false;\n }\n\n const { handleChange } = this.props;\n this.setState({ checked: !checked }, () => handleChange(!checked));\n }\n\n render() {\n const { checked } = this.state;\n return (\n checked\n ? (\n \n )\n : ()\n );\n }\n}\n\nCheckbox.propTypes = {\n interactive: PropTypes.bool,\n checked: PropTypes.bool,\n handleChange: PropTypes.func\n};\n\nCheckbox.defaultProps = {\n checked: false,\n interactive: true,\n handleChange: f => f\n};\n\nexport default Checkbox;\n","import React from 'react';\nimport Styled from 'styled-components';\n\nimport View from '../View';\nimport Text from '../Text';\nimport Checkbox from '../Checkbox';\nimport { ListPropTypes } from '../../constants/schemas';\nimport { mapAnswerItems } from '../../utils';\n\nconst ViewWrap = Styled(View)`\n text-align: ${({ alignment }) => alignment};\n`;\n\nconst CheckbowWrapper = Styled(View)`\n display: inline-block;\n`;\n\nconst CheckboxContainer = Styled(View)`\n display: flex;\n align-items: center;\n flex-flow: row nowrap;\n margin: 10px 15px 10px 0;\n`;\n\nconst CheckboxLabel = Styled(Text)`\n margin-left: 10px;\n`;\n\nconst CheckboxView = ({ checked, ...props }) => (\n \n \n \n \n \n \n);\n\nconst CheckboxList = ({ items, itemProps, containerProps }) => (\n \n {mapAnswerItems(CheckboxView, items, itemProps)}\n \n);\n\nCheckboxList.propTypes = ListPropTypes.schema;\nCheckboxList.defaultProps = ListPropTypes.default;\n\nexport default CheckboxList;\n","import React from 'react';\nimport Styled from 'styled-components';\n\nimport { mapAnswerItems } from '../../utils';\nimport { ListPropTypes } from '../../constants/schemas';\n\nconst StyledListItem = Styled(props =>
  • )``;\n\nconst UnorderedList = ({ items, itemProps, containerProps }) => (\n
      \n {mapAnswerItems(StyledListItem, items, itemProps)}\n
    \n);\n\nUnorderedList.propTypes = ListPropTypes.schema;\nUnorderedList.defaultProps = ListPropTypes.default;\n\nexport default UnorderedList;\n","import React, { Component } from 'react';\n\nimport AssigneeList from '../AssigneeList';\nimport ImageList from '../ImageList';\nimport CommaList from '../CommaList';\nimport OptionList from '../OptionList';\nimport OrderedList from '../OrderedList';\nimport CheckboxList from '../CheckboxList';\nimport UnorderedList from '../UnorderedList';\nimport { LIST_TYPES } from '../../constants';\nimport { ListPropTypes } from '../../constants/schemas';\nimport { isAnswerExits } from '../../utils';\n\nexport default class List extends Component {\n get baseItemProps() {\n const { allItems, itemProps } = this.props;\n return Array.isArray(itemProps)\n ? itemProps\n : allItems.map(() => itemProps);\n }\n\n get items() {\n const { showAll, items, allItems } = this.props;\n return showAll ? allItems : items;\n }\n\n get itemProps() {\n const { showAll, items, allItems } = this.props;\n\n return showAll\n ? allItems.map((item, index) => {\n const itemIndex = isAnswerExits(items, item);\n return { ...(this.baseItemProps[index] || {}), checked: itemIndex > -1 };\n })\n : items.map((item, index) => ({ ...this.baseItemProps[index], checked: items.indexOf(item) > -1 }));\n }\n\n get ListComponent() {\n const {\n COMMA,\n OPTION,\n ORDERED,\n CHECKBOX,\n UNORDERED,\n IMAGE,\n ASSIGNEE\n } = LIST_TYPES;\n\n switch (this.props.type) {\n case COMMA:\n return CommaList;\n case OPTION:\n return OptionList;\n case ORDERED:\n return OrderedList;\n case UNORDERED:\n return UnorderedList;\n case CHECKBOX:\n return CheckboxList;\n case ASSIGNEE:\n return AssigneeList;\n case IMAGE:\n return ImageList;\n default:\n return OptionList;\n }\n }\n\n render() {\n return (\n \n );\n }\n}\n\nList.propTypes = ListPropTypes.schema;\nList.defaultProps = ListPropTypes.default;\n","import React, { Component } from 'react';\nimport memoize from 'lodash/memoize';\nimport { safeJSONParse } from '@jotforminc/utils';\n\nimport { convertAnswerToArray } from '../../utils';\nimport { SubmissionWidgetPropsTypes } from '../../constants/schemas';\n\nconst memoizedJSONParse = memoize(safeJSONParse);\n\n// TO DO: needs renaming\n\nexport default AnswerComponent => {\n /**\n * This component is used for Submission Widgets (Checkbox and Tags),\n * Custom Added Columns (Single Select and Multiple Select),\n * and native fields with extended options via apps (eg. Tables)\n * */\n class ExtendedAnswerComponent extends Component {\n get optionsExtender() {\n const { optionsExtender = '{}' } = this.props;\n return typeof optionsExtender === 'object' ? optionsExtender : memoizedJSONParse(optionsExtender, {});\n }\n\n get isOptionExtendedField() {\n return !!Object.keys(this.optionsExtender).length;\n }\n\n get isSubmissionWidget() {\n const {\n submissionWidget = 'No',\n options_array: optionsArray = '{}',\n sheetField = 'No'\n } = this.props;\n\n return (\n submissionWidget === 'Yes'\n || (optionsArray !== '{}' && sheetField === 'Yes')\n || this.isOptionExtendedField\n );\n }\n\n get answerArray() {\n return convertAnswerToArray(this.props.answer);\n }\n\n get optionsArray() {\n return memoizedJSONParse(this.props.options_array, {});\n }\n\n get submissionWidgetAnswer() {\n if (this.isOptionExtendedField) {\n return this.answerArray.map(answer => {\n if (this.optionsExtender[answer.replace(/{|}/g, '')]) {\n return this.optionsExtender[answer.replace(/{|}/g, '')];\n }\n return { value: answer };\n });\n }\n const otherOption = Object.values(this.optionsArray).filter(option => option.other);\n\n const answers = this.answerArray\n .map(key => key.match(/\\{(.*?)\\}/) || [])\n .map(([/* unused var */, optionKey]) => this.optionsArray[optionKey] || null)\n .filter(option => option);\n\n return [...answers, ...otherOption];\n }\n\n get submissionWidgetProps() {\n return {\n optionsArray: this.optionsArray,\n isSubmissionWidget: this.isSubmissionWidget,\n submissionWidgetAnswer: this.submissionWidgetAnswer\n };\n }\n\n get colorCorrectedAnswerProps() {\n if (!this.isOptionExtendedField) {\n return this.props.answerProps;\n }\n\n return this.submissionWidgetAnswer.map(({ key, color }, index) => {\n if (key && color) {\n return {\n ...this.props.answerProps[index],\n backgroundColor: color\n };\n }\n return this.props.answerProps[index];\n });\n }\n\n render() {\n return (\n \n );\n }\n }\n\n ExtendedAnswerComponent.propTypes = SubmissionWidgetPropsTypes.schema;\n ExtendedAnswerComponent.defaultProps = SubmissionWidgetPropsTypes.default;\n\n return ExtendedAnswerComponent;\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport isEmpty from 'lodash/isEmpty';\n\nimport List from '../../components/List';\nimport { LIST_TYPES } from '../../constants';\nimport Baseline from '../../components/Baseline';\nimport withSubmissionWidgetProps from '../../hocs/SubmissionWidget';\nimport { convertAnswerToArray } from '../../utils';\n\nconst Assignee = ({\n text,\n answer,\n showAll,\n labelProps,\n answerProps,\n answerWrapperProps,\n containerProps,\n baselineProps,\n direction,\n optionsArray\n}) => {\n const answerArray = !isEmpty(answer) ? convertAnswerToArray(answer) : [];\n const answerTupleList = answerArray.map(txt => {\n const answerArr = txt.replace('{', '').replace('}', '');\n if (optionsArray[answerArr]?.value) {\n const { text: assignee, link: avatarUrl, subText: email } = optionsArray[answerArr]?.value;\n\n return [assignee, email, avatarUrl];\n }\n\n return [answerArr, null];\n });\n const allItems = Object.keys(optionsArray).map(key => {\n const { text: assignee, link: avatarUrl, subText: email } = optionsArray[key].value;\n return [assignee, email, avatarUrl];\n });\n\n return (\n \n \n \n );\n};\n\nAssignee.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.arrayOf(PropTypes.string),\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.oneOfType([\n PropTypes.shape({}),\n PropTypes.array\n ]),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n containerStyle: PropTypes.shape({}),\n containerProps: PropTypes.shape({}),\n showAll: PropTypes.bool,\n options: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.shape({\n text: PropTypes.string,\n link: PropTypes.string\n })),\n PropTypes.string\n ]),\n direction: PropTypes.string,\n optionsArray: PropTypes.shape({})\n};\n\nAssignee.defaultProps = {\n text: '',\n answer: [],\n labelProps: {},\n answerProps: [],\n answerWrapperProps: {},\n baselineProps: {},\n containerStyle: {},\n containerProps: {},\n showAll: false,\n options: [],\n direction: 'column',\n optionsArray: {}\n};\n\nexport default withSubmissionWidgetProps(Assignee);\n","import React from 'react';\n\nconst Touchable = props =>
    ;\n\nexport default Touchable;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport View from '../../components/View';\nimport Baseline from '../../components/Baseline';\nimport Touchable from '../../components/Touchable';\nimport { isEmpty } from '../../utils';\nimport withSubmissionWidgetProps from '../../hocs/SubmissionWidget';\nimport List from '../../components/List';\nimport { ListTypes } from '../../constants/schemas';\n\nconst defaultItemProp = { className: 'multipleChoice' };\n\nconst Checkbox = ({\n text,\n listType,\n answerArray,\n labelProps,\n answerProps,\n answerWrapperProps,\n options,\n handleChange,\n editMode,\n toggleProps,\n baselineProps,\n isSubmissionWidget,\n submissionWidgetAnswer,\n containerProps,\n optionsArray,\n showAll,\n direction\n}) => {\n const allOptions = !isEmpty(options) ? options.toString().split('|').map(option => option.trim()) : [];\n const optionsLength = allOptions.length;\n const items = isSubmissionWidget ? submissionWidgetAnswer.map(({ value }) => value) : answerArray;\n const baseItemProps = isSubmissionWidget ? submissionWidgetAnswer.map(({ color }) => ({ backgroundColor: color })) : [...Array(items.length)];\n const allItems = isSubmissionWidget\n ? Object.values(optionsArray).map(({ value }) => value)\n : allOptions.concat(items.filter(item => allOptions.indexOf(item.trim()) === -1)); // For 'other' option type non static data\n\n // Change spread of props based on show all\n const itemProps = !showAll\n ? baseItemProps.map((prop, index) => ({\n ...defaultItemProp,\n ...(prop || {}),\n ...(answerProps[index] || answerProps || {})\n }))\n : allItems.map(item => {\n const itemIndex = items.indexOf(item);\n return {\n ...defaultItemProp,\n ...(baseItemProps[itemIndex] || {}),\n ...(answerProps[itemIndex] || answerProps || {})\n };\n });\n\n /**\n * TODO: Touchable should be moved from this static field\n *\n * As the intention of this component only to show submission data in all projects, we should avoid writing edit mode or project specific structures into it.\n */\n const curatedItems = !editMode ? items : items.map(item => [item, handleChange(item)} />]);\n\n return (\n \n \n {/* TODO: This one should be moved to edit component as it is specific to edit mode only */}\n {editMode && options.length > 0 && optionsLength !== answerArray.length && Add}\n \n );\n};\n\nCheckbox.propTypes = {\n submissionWidgetAnswer: PropTypes.arrayOf(PropTypes.shape({\n value: PropTypes.string,\n key: PropTypes.string,\n color: PropTypes.string\n })),\n answerArray: PropTypes.arrayOf(PropTypes.node),\n isSubmissionWidget: PropTypes.bool,\n options: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.oneOfType([\n PropTypes.shape({}),\n PropTypes.arrayOf(PropTypes.shape({}))\n ]),\n text: PropTypes.string,\n optionsArray: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.shape({})),\n PropTypes.shape({})\n ]),\n handleChange: PropTypes.func,\n editMode: PropTypes.bool,\n toggleProps: PropTypes.shape([\n PropTypes.object\n ]),\n baselineProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n containerProps: PropTypes.shape({}),\n listType: ListTypes.schema,\n showAll: PropTypes.bool,\n direction: PropTypes.string\n};\n\nCheckbox.defaultProps = {\n submissionWidgetAnswer: [],\n isSubmissionWidget: false,\n answerWrapperProps: {},\n answerArray: [],\n options: '',\n baselineProps: {},\n labelProps: {},\n text: '',\n answerProps: {},\n optionsArray: [],\n handleChange: () => {},\n editMode: false,\n toggleProps: {},\n containerProps: {},\n listType: ListTypes.default,\n showAll: false,\n direction: 'column'\n};\n\nexport default withSubmissionWidgetProps(Checkbox);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\nimport { getDateTimeText } from '../../utils';\nimport { LocaleTypes } from '../../constants/schemas';\n\nclass Datetime extends React.Component {\n render() {\n const {\n text,\n answer,\n locale,\n labelProps,\n dateFormat,\n answerProps,\n answerWrapperProps,\n baselineProps,\n direction\n } = this.props;\n const dateTimeText = getDateTimeText({\n answer, hideTime: false, dateFormat, locale\n });\n return (\n \n {dateTimeText}\n \n );\n }\n}\n\nDatetime.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.shape({\n year: PropTypes.string,\n month: PropTypes.string,\n day: PropTypes.string,\n hour: PropTypes.string,\n min: PropTypes.string,\n ampm: PropTypes.string\n })\n ]),\n labelProps: PropTypes.shape({}),\n dateFormat: PropTypes.string,\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n locale: LocaleTypes.schema,\n direction: PropTypes.string\n};\n\nDatetime.defaultProps = {\n text: '',\n answer: {\n year: '',\n month: '',\n day: '',\n hour: '',\n min: '',\n ampm: ''\n },\n labelProps: {},\n dateFormat: 'MMM D, YYYY HH:mm',\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n locale: LocaleTypes.default,\n direction: 'column'\n};\n\nexport default Datetime;\n","/* eslint-disable max-lines */\nexport const CountryList = [\n 'United States',\n 'Afghanistan',\n 'Albania',\n 'Algeria',\n 'American Samoa',\n 'Andorra',\n 'Angola',\n 'Anguilla',\n 'Antigua and Barbuda',\n 'Argentina',\n 'Armenia',\n 'Aruba',\n 'Australia',\n 'Austria',\n 'Azerbaijan',\n 'The Bahamas',\n 'Bahrain',\n 'Bangladesh',\n 'Barbados',\n 'Belarus',\n 'Belgium',\n 'Belize',\n 'Benin',\n 'Bermuda',\n 'Bhutan',\n 'Bolivia',\n 'Bosnia and Herzegovina',\n 'Botswana',\n 'Brazil',\n 'Brunei',\n 'Bulgaria',\n 'Burkina Faso',\n 'Burundi',\n 'Cambodia',\n 'Cameroon',\n 'Canada',\n 'Cape Verde',\n 'Cayman Islands',\n 'Central African Republic',\n 'Chad',\n 'Chile',\n 'China',\n 'Christmas Island',\n 'Cocos (Keeling) Islands',\n 'Colombia',\n 'Comoros',\n 'Congo',\n 'Cook Islands',\n 'Costa Rica',\n 'Cote d\\'Ivoire',\n 'Croatia',\n 'Cuba',\n 'Cyprus',\n 'Czech Republic',\n 'Denmark',\n 'Djibouti',\n 'Dominica',\n 'Dominican Republic',\n 'Ecuador',\n 'Egypt',\n 'El Salvador',\n 'Equatorial Guinea',\n 'Eritrea',\n 'Estonia',\n 'Ethiopia',\n 'Falkland Islands',\n 'Faroe Islands',\n 'Fiji',\n 'Finland',\n 'France',\n 'French Polynesia',\n 'Gabon',\n 'The Gambia',\n 'Georgia',\n 'Germany',\n 'Ghana',\n 'Gibraltar',\n 'Greece',\n 'Greenland',\n 'Grenada',\n 'Guadeloupe',\n 'Guam',\n 'Guatemala',\n 'Guernsey',\n 'Guinea',\n 'Guinea-Bissau',\n 'Guyana',\n 'Haiti',\n 'Honduras',\n 'Hong Kong',\n 'Hungary',\n 'Iceland',\n 'India',\n 'Indonesia',\n 'Iran',\n 'Iraq',\n 'Ireland',\n 'Israel',\n 'Italy',\n 'Jamaica',\n 'Japan',\n 'Jersey',\n 'Jordan',\n 'Kazakhstan',\n 'Kenya',\n 'Kiribati',\n 'North Korea',\n 'South Korea',\n 'Kosovo',\n 'Kuwait',\n 'Kyrgyzstan',\n 'Laos',\n 'Latvia',\n 'Lebanon',\n 'Lesotho',\n 'Liberia',\n 'Libya',\n 'Liechtenstein',\n 'Lithuania',\n 'Luxembourg',\n 'Macau',\n 'Macedonia',\n 'Madagascar',\n 'Malawi',\n 'Malaysia',\n 'Maldives',\n 'Mali',\n 'Malta',\n 'Marshall Islands',\n 'Martinique',\n 'Mauritania',\n 'Mauritius',\n 'Mayotte',\n 'Mexico',\n 'Micronesia',\n 'Moldova',\n 'Monaco',\n 'Mongolia',\n 'Montenegro',\n 'Montserrat',\n 'Morocco',\n 'Mozambique',\n 'Myanmar',\n 'Nagorno-Karabakh',\n 'Namibia',\n 'Nauru',\n 'Nepal',\n 'Netherlands',\n 'Netherlands Antilles',\n 'New Caledonia',\n 'New Zealand',\n 'Nicaragua',\n 'Niger',\n 'Nigeria',\n 'Niue',\n 'Norfolk Island',\n 'Turkish Republic of Northern Cyprus',\n 'Northern Mariana',\n 'Norway',\n 'Oman',\n 'Pakistan',\n 'Palau',\n 'Palestine',\n 'Panama',\n 'Papua New Guinea',\n 'Paraguay',\n 'Peru',\n 'Philippines',\n 'Pitcairn Islands',\n 'Poland',\n 'Portugal',\n 'Puerto Rico',\n 'Qatar',\n 'Romania',\n 'Russia',\n 'Rwanda',\n 'Saint Barthelemy',\n 'Saint Helena',\n 'Saint Kitts and Nevis',\n 'Saint Lucia',\n 'Saint Martin',\n 'Saint Pierre and Miquelon',\n 'Saint Vincent and the Grenadines',\n 'Samoa',\n 'San Marino',\n 'Sao Tome and Principe',\n 'Saudi Arabia',\n 'Senegal',\n 'Serbia',\n 'Seychelles',\n 'Sierra Leone',\n 'Singapore',\n 'Slovakia',\n 'Slovenia',\n 'Solomon Islands',\n 'Somalia',\n 'Somaliland',\n 'South Africa',\n 'South Ossetia',\n 'South Sudan',\n 'Spain',\n 'Sri Lanka',\n 'Sudan',\n 'Suriname',\n 'Svalbard',\n 'Swaziland',\n 'Sweden',\n 'Switzerland',\n 'Syria',\n 'Taiwan',\n 'Tajikistan',\n 'Tanzania',\n 'Thailand',\n 'Timor-Leste',\n 'Togo',\n 'Tokelau',\n 'Tonga',\n 'Transnistria Pridnestrovie',\n 'Trinidad and Tobago',\n 'Tristan da Cunha',\n 'Tunisia',\n 'Turkey',\n 'Turkmenistan',\n 'Turks and Caicos Islands',\n 'Tuvalu',\n 'Uganda',\n 'Ukraine',\n 'United Arab Emirates',\n 'United Kingdom',\n 'Uruguay',\n 'Uzbekistan',\n 'Vanuatu',\n 'Vatican City',\n 'Venezuela',\n 'Vietnam',\n 'British Virgin Islands',\n 'Isle of Man',\n 'US Virgin Islands',\n 'Wallis and Futuna',\n 'Western Sahara',\n 'Yemen',\n 'Zambia',\n 'Zimbabwe'\n];\n\nexport const CanadianProvinces = [\n 'Alberta',\n 'British Columbia',\n 'Manitoba',\n 'New Brunswick',\n 'Newfoundland',\n 'Northwest Territories',\n 'Nova Scotia',\n 'Nunavut',\n 'Ontario',\n 'Prince Edward Island',\n 'Quebec',\n 'Saskatchewan',\n 'Yukon'\n];\n\nexport const GenderList = [\n 'Male',\n 'Female',\n 'N/A'\n];\n\nexport const USStates = [\n 'Alabama',\n 'Alaska',\n 'Arizona',\n 'Arkansas',\n 'California',\n 'Colorado',\n 'Connecticut',\n 'Delaware',\n 'District of Columbia',\n 'Florida',\n 'Georgia',\n 'Hawaii',\n 'Idaho',\n 'Illinois',\n 'Indiana',\n 'Iowa',\n 'Kansas',\n 'Kentucky',\n 'Louisiana',\n 'Maine',\n 'Maryland',\n 'Massachusetts',\n 'Michigan',\n 'Minnesota',\n 'Mississippi',\n 'Missouri',\n 'Montana',\n 'Nebraska',\n 'Nevada',\n 'New Hampshire',\n 'New Jersey',\n 'New Mexico',\n 'New York',\n 'North Carolina',\n 'North Dakota',\n 'Ohio',\n 'Oklahoma',\n 'Oregon',\n 'Pennsylvania',\n 'Puerto Rico',\n 'Rhode Island',\n 'South Carolina',\n 'South Dakota',\n 'Tennessee',\n 'Texas',\n 'Utah',\n 'Vermont',\n 'Virgin Islands',\n 'Virginia',\n 'Washington',\n 'West Virginia',\n 'Wisconsin',\n 'Wyoming'\n];\n\nexport const USStatesAbbr = [\n 'AL',\n 'AK',\n 'AR',\n 'AZ',\n 'CA',\n 'CO',\n 'CT',\n 'DC',\n 'DE',\n 'FL',\n 'GA',\n 'HI',\n 'ID',\n 'IL',\n 'IN',\n 'IA',\n 'KS',\n 'KY',\n 'LA',\n 'ME',\n 'MD',\n 'MA',\n 'MI',\n 'MN',\n 'MS',\n 'MO',\n 'MT',\n 'NE',\n 'NV',\n 'NH',\n 'NJ',\n 'NM',\n 'NY',\n 'NC',\n 'ND',\n 'OH',\n 'OK',\n 'OR',\n 'PA',\n 'RI',\n 'SC',\n 'SD',\n 'TN',\n 'TX',\n 'UT',\n 'VT',\n 'VA',\n 'WA',\n 'WV',\n 'WI',\n 'WY'\n];\n\nexport const LocationCountries = [\n 'Canada',\n 'United States',\n 'Afghanistan',\n 'Albania',\n 'Algeria',\n 'American Samoa',\n 'Andorra',\n 'Angola',\n 'Anguilla',\n 'Antarctica',\n 'Antigua and Barbuda',\n 'Argentina',\n 'Armenia',\n 'Aruba',\n 'Australia',\n 'Austria',\n 'Azerbaijan',\n 'Bahamas',\n 'Bahrain',\n 'Bangladesh',\n 'Barbados',\n 'Belarus',\n 'Belgium',\n 'Belize',\n 'Benin',\n 'Bermuda',\n 'Bhutan',\n 'Bolivia',\n 'Bosnia/Herzegowina',\n 'Botswana',\n 'Bouvet Island',\n 'Brazil',\n 'British Ind. Ocean',\n 'Brunei Darussalam',\n 'Bulgaria',\n 'Burkina Faso',\n 'Burundi',\n 'Cambodia',\n 'Cameroon',\n 'Cape Verde',\n 'Cayman Islands',\n 'Central African Rep.',\n 'Chad',\n 'Chile',\n 'China',\n 'Christmas Island',\n 'Cocoa (Keeling) Is.',\n 'Colombia',\n 'Comoros',\n 'Congo',\n 'Cook Islands',\n 'Costa Rica',\n 'Cote Divoire',\n 'Croatia',\n 'Cuba',\n 'Cyprus',\n 'Czech Republic',\n 'Denmark',\n 'Djibouti',\n 'Dominica',\n 'Dominican Republic',\n 'East Timor',\n 'Ecuador',\n 'Egypt',\n 'El Salvador',\n 'Equatorial Guinea',\n 'Eritrea',\n 'Estonia',\n 'Ethiopia',\n 'Falkland Islands',\n 'Faroe Islands',\n 'Fiji',\n 'Finland',\n 'France',\n 'Gabon',\n 'Gambia',\n 'Georgia',\n 'Germany',\n 'Ghana',\n 'Gibraltar',\n 'Greece',\n 'Greenland',\n 'Grenada',\n 'Guadeloupe',\n 'Guam',\n 'Guatemala',\n 'Guinea',\n 'Guinea-Bissau',\n 'Guyana',\n 'Haiti',\n 'Honduras',\n 'Hong Kong',\n 'Hungary',\n 'Iceland',\n 'India',\n 'Indonesia',\n 'Iran',\n 'Iraq',\n 'Ireland',\n 'Israel',\n 'Italy',\n 'Jamaica',\n 'Japan',\n 'Jordan',\n 'Kazakhstan',\n 'Kenya',\n 'Kiribati',\n 'Korea',\n 'Kuwait',\n 'Kyrgyzstan',\n 'Lao',\n 'Latvia',\n 'Lebanon',\n 'Lesotho',\n 'Liberia',\n 'Liechtenstein',\n 'Lithuania',\n 'Luxembourg',\n 'Macau',\n 'Macedonia',\n 'Madagascar',\n 'Malawi',\n 'Malaysia',\n 'Maldives',\n 'Mali',\n 'Malta',\n 'Marshall Islands',\n 'Martinique',\n 'Mauritania',\n 'Mauritius',\n 'Mayotte',\n 'Mexico',\n 'Micronesia',\n 'Moldova',\n 'Monaco',\n 'Mongolia',\n 'Montserrat',\n 'Morocco',\n 'Mozambique',\n 'Myanmar',\n 'Namibia',\n 'Nauru',\n 'Nepal',\n 'Netherlands',\n 'New Caledonia',\n 'New Zealand',\n 'Nicaragua',\n 'Niger',\n 'Nigeria',\n 'Niue',\n 'Norfolk Island',\n 'Norway',\n 'Oman',\n 'Pakistan',\n 'Palau',\n 'Panama',\n 'Papua New Guinea',\n 'Paraguay',\n 'Peru',\n 'Philippines',\n 'Pitcairn',\n 'Poland',\n 'Portugal',\n 'Puerto Rico',\n 'Qatar',\n 'Reunion',\n 'Romania',\n 'Russia',\n 'Rwanda',\n 'Saint Lucia',\n 'Samoa',\n 'San Marino',\n 'Saudi Arabia',\n 'Senegal',\n 'Seychelles',\n 'Sierra Leone',\n 'Singapore',\n 'Slovakia',\n 'Solomon Islands',\n 'Somalia',\n 'South Africa',\n 'South Sudan',\n 'Spain',\n 'Sri Lanka',\n 'St. Helena',\n 'Sudan',\n 'Suriname',\n 'Swaziland',\n 'Sweden',\n 'Switzerland',\n 'Syria',\n 'Taiwan',\n 'Tajikistan',\n 'Tanzania',\n 'Thailand',\n 'Togo',\n 'Tokelau',\n 'Tonga',\n 'Trinidad and Tobago',\n 'Tunisia',\n 'Turkey',\n 'Turkmenistan',\n 'Tuvalu',\n 'Uganda',\n 'Ukraine',\n 'United Arab Emirates',\n 'United Kingdom',\n 'Uruguay',\n 'Uzbekistan',\n 'Vanuatu',\n 'Vatican',\n 'Venezuela',\n 'Viet Nam',\n 'Virgin Islands',\n 'Western Sahara',\n 'Yeman',\n 'Yugoslavia',\n 'Zaire',\n 'Zambia'\n];\n\nexport const Days = [\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n 'Sunday'\n];\n\nexport const Months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n];\nexport const TimeZones = [\n '[[Africa]]',\n 'Abidjan (GMT)',\n 'Accra (GMT)',\n 'Addis Ababa (GMT+03:00)',\n 'Algiers (GMT+01:00)',\n 'Asmara (GMT+03:00)',\n 'Bamako (GMT)',\n 'Bangui (GMT+01:00)',\n 'Banjul (GMT)',\n 'Bissau (GMT)',\n 'Blantyre (GMT+02:00)',\n 'Brazzaville (GMT+01:00)',\n 'Bujumbura (GMT+02:00)',\n 'Cairo (GMT+03:00)',\n 'Casablanca (GMT)',\n 'Ceuta (GMT+02:00)',\n 'Conakry (GMT)',\n 'Dakar (GMT)',\n 'Dar es Salaam (GMT+03:00)',\n 'Djibouti (GMT+03:00)',\n 'Douala (GMT+01:00)',\n 'El Aaiun (GMT)',\n 'Freetown (GMT)',\n 'Gaborone (GMT+02:00)',\n 'Harare (GMT+02:00)',\n 'Johannesburg (GMT+02:00)',\n 'Kampala (GMT+03:00)',\n 'Khartoum (GMT+03:00)',\n 'Kigali (GMT+02:00)',\n 'Kinshasa (GMT+01:00)',\n 'Lagos (GMT+01:00)',\n 'Libreville (GMT+01:00)',\n 'Lome (GMT)',\n 'Luanda (GMT+01:00)',\n 'Lubumbashi (GMT+02:00)',\n 'Lusaka (GMT+02:00)',\n 'Malabo (GMT+01:00)',\n 'Maputo (GMT+02:00)',\n 'Maseru (GMT+02:00)',\n 'Mbabane (GMT+02:00)',\n 'Mogadishu (GMT+03:00)',\n 'Monrovia (GMT)',\n 'Nairobi (GMT+03:00)',\n 'Ndjamena (GMT+01:00)',\n 'Niamey (GMT+01:00)',\n 'Nouakchott (GMT)',\n 'Ouagadougou (GMT)',\n 'Porto-Novo (GMT+01:00)',\n 'Sao Tome (GMT)',\n 'Tripoli (GMT+02:00)',\n 'Tunis (GMT+02:00)',\n 'Windhoek (GMT+01:00)',\n '[[America]]',\n 'Adak (GMT-09:00)',\n 'Anchorage (GMT-08:00)',\n 'Anguilla (GMT-04:00)',\n 'Antigua (GMT-04:00)',\n 'Araguaina (GMT-03:00)',\n 'Buenos Aires, Argentina (GMT-03:00)',\n 'Catamarca, Argentina (GMT-03:00)',\n 'Cordoba, Argentina (GMT-03:00)',\n 'Jujuy, Argentina (GMT-03:00)',\n 'La Rioja, Argentina (GMT-03:00)',\n 'Mendoza, Argentina (GMT-03:00)',\n 'Rio Gallegos, Argentina (GMT-03:00)',\n 'Salta, Argentina (GMT-03:00)',\n 'San Juan, Argentina (GMT-03:00)',\n 'San Luis, Argentina (GMT-04:00)',\n 'Tucuman, Argentina (GMT-03:00)',\n 'Ushuaia, Argentina (GMT-03:00)',\n 'Aruba (GMT-04:00)',\n 'Asuncion (GMT-04:00)',\n 'Atikokan (GMT-05:00)',\n 'Bahia (GMT-03:00)',\n 'Barbados (GMT-04:00)',\n 'Belem (GMT-03:00)',\n 'Belize (GMT-06:00)',\n 'Blanc-Sablon (GMT-04:00)',\n 'Boa Vista (GMT-04:00)',\n 'Bogota (GMT-05:00)',\n 'Boise (GMT-06:00)',\n 'Cambridge Bay (GMT-06:00)',\n 'Campo Grande (GMT-04:00)',\n 'Cancun (GMT-05:00)',\n 'Caracas (GMT-04:30)',\n 'Cayenne (GMT-03:00)',\n 'Cayman (GMT-05:00)',\n 'Chicago (GMT-05:00)',\n 'Chihuahua (GMT-06:00)',\n 'Costa Rica (GMT-06:00)',\n 'Cuiaba (GMT-04:00)',\n 'Curacao (GMT-04:00)',\n 'Danmarkshavn (GMT)',\n 'Dawson (GMT-07:00)',\n 'Dawson Creek (GMT-07:00)',\n 'Denver (GMT-06:00)',\n 'Detroit (GMT-04:00)',\n 'Dominica (GMT-04:00)',\n 'Edmonton (GMT-06:00)',\n 'Eirunepe (GMT-04:00)',\n 'El Salvador (GMT-06:00)',\n 'Fortaleza (GMT-03:00)',\n 'Glace Bay (GMT-03:00)',\n 'Godthab (GMT-02:00)',\n 'Goose Bay (GMT-03:00)',\n 'Grand Turk (GMT-04:00)',\n 'Grenada (GMT-04:00)',\n 'Guadeloupe (GMT-04:00)',\n 'Guatemala (GMT-06:00)',\n 'Guayaquil (GMT-05:00)',\n 'Guyana (GMT-04:00)',\n 'Halifax (GMT-03:00)',\n 'Havana (GMT-04:00)',\n 'Hermosillo (GMT-07:00)',\n 'Indianapolis, Indiana (GMT-04:00)',\n 'Knox, Indiana (GMT-05:00)',\n 'Marengo, Indiana (GMT-04:00)',\n 'Petersburg, Indiana (GMT-04:00)',\n 'Tell City, Indiana (GMT-05:00)',\n 'Vevay, Indiana (GMT-04:00)',\n 'Vincennes, Indiana (GMT-04:00)',\n 'Winamac, Indiana (GMT-04:00)',\n 'Inuvik (GMT-06:00)',\n 'Iqaluit (GMT-04:00)',\n 'Jamaica (GMT-05:00)',\n 'Juneau (GMT-08:00)',\n 'Louisville, Kentucky (GMT-04:00)',\n 'Monticello, Kentucky (GMT-04:00)',\n 'La Paz (GMT-04:00)',\n 'Lima (GMT-05:00)',\n 'Los Angeles (GMT-07:00)',\n 'Maceio (GMT-03:00)',\n 'Managua (GMT-06:00)',\n 'Manaus (GMT-04:00)',\n 'Marigot (GMT-04:00)',\n 'Martinique (GMT-04:00)',\n 'Mazatlan (GMT-06:00)',\n 'Menominee (GMT-05:00)',\n 'Merida (GMT-05:00)',\n 'Mexico City (GMT-05:00)',\n 'Miquelon (GMT-02:00)',\n 'Moncton (GMT-03:00)',\n 'Monterrey (GMT-05:00)',\n 'Montevideo (GMT-03:00)',\n 'Montreal (GMT-04:00)',\n 'Montserrat (GMT-04:00)',\n 'Nassau (GMT-04:00)',\n 'New York (GMT-04:00)',\n 'Nipigon (GMT-04:00)',\n 'Nome (GMT-08:00)',\n 'Noronha (GMT-02:00)',\n 'Center, North Dakota (GMT-05:00)',\n 'New Salem, North Dakota (GMT-05:00)',\n 'Panama (GMT-05:00)',\n 'Pangnirtung (GMT-04:00)',\n 'Paramaribo (GMT-03:00)',\n 'Phoenix (GMT-07:00)',\n 'Port-au-Prince (GMT-05:00)',\n 'Port of Spain (GMT-04:00)',\n 'Porto Velho (GMT-04:00)',\n 'Puerto Rico (GMT-04:00)',\n 'Rainy River (GMT-05:00)',\n 'Rankin Inlet (GMT-05:00)',\n 'Recife (GMT-03:00)',\n 'Regina (GMT-06:00)',\n 'Resolute (GMT-05:00)',\n 'Rio Branco (GMT-04:00)',\n 'Santarem (GMT-03:00)',\n 'Santiago (GMT-04:00)',\n 'Santo Domingo (GMT-04:00)',\n 'Sao Paulo (GMT-03:00)',\n 'Scoresbysund (GMT)',\n 'Shiprock (GMT-06:00)',\n 'St Barthelemy (GMT-04:00)',\n 'St Johns (GMT-02:30)',\n 'St Kitts (GMT-04:00)',\n 'St Lucia (GMT-04:00)',\n 'St Thomas (GMT-04:00)',\n 'St Vincent (GMT-04:00)',\n 'Swift Current (GMT-06:00)',\n 'Tegucigalpa (GMT-06:00)',\n 'Thule (GMT-03:00)',\n 'Thunder Bay (GMT-04:00)',\n 'Tijuana (GMT-07:00)',\n 'Toronto (GMT-04:00)',\n 'Tortola (GMT-04:00)',\n 'Vancouver (GMT-07:00)',\n 'Whitehorse (GMT-07:00)',\n 'Winnipeg (GMT-05:00)',\n 'Yakutat (GMT-08:00)',\n 'Yellowknife (GMT-06:00)',\n '[[Antarctica]]',\n 'Casey (GMT+11:00)',\n 'Davis (GMT+05:00)',\n 'DumontDUrville (GMT+10:00)',\n 'Mawson (GMT+05:00)',\n 'McMurdo (GMT+12:00)',\n 'Palmer (GMT-04:00)',\n 'Rothera (GMT-03:00)',\n 'South Pole (GMT+12:00)',\n 'Syowa (GMT+03:00)',\n 'Vostok (GMT+06:00)',\n '[[Arctic]]',\n 'Longyearbyen (GMT+02:00)',\n '[[Asia]]',\n 'Aden (GMT+03:00)',\n 'Almaty (GMT+06:00)',\n 'Amman (GMT+03:00)',\n 'Anadyr (GMT+13:00)',\n 'Aqtau (GMT+05:00)',\n 'Aqtobe (GMT+05:00)',\n 'Ashgabat (GMT+05:00)',\n 'Baghdad (GMT+03:00)',\n 'Bahrain (GMT+03:00)',\n 'Baku (GMT+05:00)',\n 'Bangkok (GMT+07:00)',\n 'Beirut (GMT+03:00)',\n 'Bishkek (GMT+06:00)',\n 'Brunei (GMT+08:00)',\n 'Choibalsan (GMT+08:00)',\n 'Chongqing (GMT+08:00)',\n 'Colombo (GMT+05:30)',\n 'Damascus (GMT+03:00)',\n 'Dhaka (GMT+07:00)',\n 'Dili (GMT+09:00)',\n 'Dubai (GMT+04:00)',\n 'Dushanbe (GMT+05:00)',\n 'Gaza (GMT+03:00)',\n 'Harbin (GMT+08:00)',\n 'Ho Chi Minh (GMT+07:00)',\n 'Hong Kong (GMT+08:00)',\n 'Hovd (GMT+07:00)',\n 'Irkutsk (GMT+09:00)',\n 'Jakarta (GMT+07:00)',\n 'Jayapura (GMT+09:00)',\n 'Jerusalem (GMT+03:00)',\n 'Kabul (GMT+04:30)',\n 'Kamchatka (GMT+13:00)',\n 'Karachi (GMT+06:00)',\n 'Kashgar (GMT+08:00)',\n 'Kathmandu (GMT+05:45)',\n 'Kolkata (GMT+05:30)',\n 'Krasnoyarsk (GMT+08:00)',\n 'Kuala Lumpur (GMT+08:00)',\n 'Kuching (GMT+08:00)',\n 'Kuwait (GMT+03:00)',\n 'Macau (GMT+08:00)',\n 'Magadan (GMT+12:00)',\n 'Makassar (GMT+08:00)',\n 'Manila (GMT+08:00)',\n 'Muscat (GMT+04:00)',\n 'Nicosia (GMT+03:00)',\n 'Novokuznetsk (GMT+07:00)',\n 'Novosibirsk (GMT+07:00)',\n 'Omsk (GMT+07:00)',\n 'Oral (GMT+05:00)',\n 'Phnom Penh (GMT+07:00)',\n 'Pontianak (GMT+07:00)',\n 'Pyongyang (GMT+09:00)',\n 'Qatar (GMT+03:00)',\n 'Qyzylorda (GMT+06:00)',\n 'Rangoon (GMT+06:30)',\n 'Riyadh (GMT+03:00)',\n 'Sakhalin (GMT+11:00)',\n 'Samarkand (GMT+05:00)',\n 'Seoul (GMT+09:00)',\n 'Shanghai (GMT+08:00)',\n 'Singapore (GMT+08:00)',\n 'Taipei (GMT+08:00)',\n 'Tashkent (GMT+05:00)',\n 'Tbilisi (GMT+04:00)',\n 'Tehran (GMT+04:30)',\n 'Thimphu (GMT+06:00)',\n 'Tokyo (GMT+09:00)',\n 'Ulaanbaatar (GMT+08:00)',\n 'Urumqi (GMT+08:00)',\n 'Vientiane (GMT+07:00)',\n 'Vladivostok (GMT+11:00)',\n 'Yakutsk (GMT+10:00)',\n 'Yekaterinburg (GMT+06:00)',\n 'Yerevan (GMT+05:00)',\n '[[Atlantic]]',\n 'Azores (GMT)',\n 'Bermuda (GMT-03:00)',\n 'Canary (GMT+01:00)',\n 'Cape Verde (GMT-01:00)',\n 'Faroe (GMT+01:00)',\n 'Madeira (GMT+01:00)',\n 'Reykjavik (GMT)',\n 'South Georgia (GMT-02:00)',\n 'St Helena (GMT)',\n 'Stanley (GMT-04:00)',\n '[[Australia]]',\n 'Adelaide (GMT+09:30)',\n 'Brisbane (GMT+10:00)',\n 'Broken Hill (GMT+09:30)',\n 'Currie (GMT+10:00)',\n 'Darwin (GMT+09:30)',\n 'Eucla (GMT+08:45)',\n 'Hobart (GMT+10:00)',\n 'Lindeman (GMT+10:00)',\n 'Lord Howe (GMT+10:30)',\n 'Melbourne (GMT+10:00)',\n 'Perth (GMT+08:00)',\n 'Sydney (GMT+10:00)',\n '[[Europe]]',\n 'Amsterdam (GMT+02:00)',\n 'Andorra (GMT+02:00)',\n 'Athens (GMT+03:00)',\n 'Belgrade (GMT+02:00)',\n 'Berlin (GMT+02:00)',\n 'Bratislava (GMT+02:00)',\n 'Brussels (GMT+02:00)',\n 'Bucharest (GMT+03:00)',\n 'Budapest (GMT+02:00)',\n 'Chisinau (GMT+03:00)',\n 'Copenhagen (GMT+02:00)',\n 'Dublin (GMT+01:00)',\n 'Gibraltar (GMT+02:00)',\n 'Guernsey (GMT+01:00)',\n 'Helsinki (GMT+03:00)',\n 'Isle of Man (GMT+01:00)',\n 'Istanbul (GMT+03:00)',\n 'Jersey (GMT+01:00)',\n 'Kaliningrad (GMT+03:00)',\n 'Kiev (GMT+03:00)',\n 'Lisbon (GMT+01:00)',\n 'Ljubljana (GMT+02:00)',\n 'London (GMT+01:00)',\n 'Luxembourg (GMT+02:00)',\n 'Madrid (GMT+02:00)',\n 'Malta (GMT+02:00)',\n 'Mariehamn (GMT+03:00)',\n 'Minsk (GMT+03:00)',\n 'Monaco (GMT+02:00)',\n 'Moscow (GMT+04:00)',\n 'Oslo (GMT+02:00)',\n 'Paris (GMT+02:00)',\n 'Podgorica (GMT+02:00)',\n 'Prague (GMT+02:00)',\n 'Riga (GMT+03:00)',\n 'Rome (GMT+02:00)',\n 'Samara (GMT+05:00)',\n 'San Marino (GMT+02:00)',\n 'Sarajevo (GMT+02:00)',\n 'Simferopol (GMT+03:00)',\n 'Skopje (GMT+02:00)',\n 'Sofia (GMT+03:00)',\n 'Stockholm (GMT+02:00)',\n 'Tallinn (GMT+03:00)',\n 'Tirane (GMT+02:00)',\n 'Uzhgorod (GMT+03:00)',\n 'Vaduz (GMT+02:00)',\n 'Vatican (GMT+02:00)',\n 'Vienna (GMT+02:00)',\n 'Vilnius (GMT+03:00)',\n 'Volgograd (GMT+04:00)',\n 'Warsaw (GMT+02:00)',\n 'Zagreb (GMT+02:00)',\n 'Zaporozhye (GMT+03:00)',\n 'Zurich (GMT+02:00)',\n '[[Indian]]',\n 'Antananarivo (GMT+03:00)',\n 'Chagos (GMT+06:00)',\n 'Christmas (GMT+07:00)',\n 'Cocos (GMT+06:30)',\n 'Comoro (GMT+03:00)',\n 'Kerguelen (GMT+05:00)',\n 'Mahe (GMT+04:00)',\n 'Maldives (GMT+05:00)',\n 'Mauritius (GMT+04:00)',\n 'Mayotte (GMT+03:00)',\n 'Reunion (GMT+04:00)',\n '[[Pacific]]',\n 'Apia (GMT-11:00)',\n 'Auckland (GMT+12:00)',\n 'Chatham (GMT+12:45)',\n 'Easter (GMT-06:00)',\n 'Efate (GMT+11:00)',\n 'Enderbury (GMT+13:00)',\n 'Fakaofo (GMT-10:00)',\n 'Fiji (GMT+12:00)',\n 'Funafuti (GMT+12:00)',\n 'Galapagos (GMT-06:00)',\n 'Gambier (GMT-09:00)',\n 'Guadalcanal (GMT+11:00)',\n 'Guam (GMT+10:00)',\n 'Honolulu (GMT-10:00)',\n 'Johnston (GMT-10:00)',\n 'Kiritimati (GMT+14:00)',\n 'Kosrae (GMT+11:00)',\n 'Kwajalein (GMT+12:00)',\n 'Majuro (GMT+12:00)',\n 'Marquesas (GMT-09:30)',\n 'Midway (GMT-11:00)',\n 'Nauru (GMT+12:00)',\n 'Niue (GMT-11:00)',\n 'Norfolk (GMT+11:30)',\n 'Noumea (GMT+11:00)',\n 'Pago Pago (GMT-11:00)',\n 'Palau (GMT+09:00)',\n 'Pitcairn (GMT-08:00)',\n 'Ponape (GMT+11:00)',\n 'Port Moresby (GMT+10:00)',\n 'Rarotonga (GMT-10:00)',\n 'Saipan (GMT+10:00)',\n 'Tahiti (GMT-10:00)',\n 'Tarawa (GMT+12:00)',\n 'Tongatapu (GMT+13:00)',\n 'Truk (GMT+10:00)',\n 'Wake (GMT+12:00)',\n 'Wallis (GMT+12:00)'\n];\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport withSubmissionWidgetProps from '../../hocs/SubmissionWidget';\nimport List from '../../components/List';\nimport Baseline from '../../components/Baseline';\nimport Touchable from '../../components/Touchable';\nimport { ListTypes } from '../../constants/schemas';\nimport * as Specials from '../../constants/specials';\n\nimport { isEmpty, convertAnswerToArray } from '../../utils';\n\nconst Dropdown = props => {\n const {\n text,\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n multipleSelections,\n handleChange,\n editMode,\n isToggleActive,\n toggleProps,\n options,\n type,\n containerProps,\n showAll,\n special,\n listType,\n baselineProps,\n direction,\n isSubmissionWidget,\n submissionWidgetAnswer\n } = props;\n\n let items = convertAnswerToArray(answer);\n\n if (isSubmissionWidget) {\n items = submissionWidgetAnswer.map(({ value }) => value);\n }\n\n const isPredefined = special && special !== 'None';\n const allOptions = !isEmpty(options) ? options.split('|') : [];\n const allItems = isPredefined ? Specials[special.replace(/\\s/g, '')] : allOptions;\n\n const isRenderItsToggle = () => {\n if (editMode && type === 'control_dropdown' && !isEmpty(answer) && allItems.length > 0) {\n if (multipleSelections === 'Yes') {\n return (allItems !== items.length &&
    Add
    );\n }\n return (
    );\n }\n return null;\n };\n\n const curatedItems = editMode && multipleSelections === 'Yes'\n ? items.map(item => [item, handleChange(item)} />])\n : items;\n\n return (\n \n \n {isRenderItsToggle()}\n \n );\n};\n\nDropdown.propTypes = {\n options: PropTypes.string,\n answer: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string)\n ]),\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.oneOfType([\n PropTypes.shape({}),\n PropTypes.arrayOf(PropTypes.shape({}))\n ]),\n text: PropTypes.string,\n multipleSelections: PropTypes.string,\n handleChange: PropTypes.func,\n editMode: PropTypes.bool,\n isToggleActive: PropTypes.bool,\n toggleProps: PropTypes.shape([\n PropTypes.object\n ]),\n type: PropTypes.string,\n special: PropTypes.string,\n containerProps: PropTypes.shape({}),\n showAll: PropTypes.bool,\n listType: ListTypes.schema,\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string,\n isSubmissionWidget: PropTypes.bool,\n submissionWidgetAnswer: PropTypes.arrayOf(PropTypes.shape({\n value: PropTypes.string\n }))\n};\n\nDropdown.defaultProps = {\n options: '',\n type: 'control_dropdown',\n multipleSelections: 'No',\n answer: [],\n special: '',\n answerWrapperProps: {},\n text: '',\n editMode: false,\n handleChange: () => {},\n isToggleActive: false,\n showAll: false,\n listType: ListTypes.default,\n labelProps: {},\n answerProps: {},\n toggleProps: {},\n containerProps: {},\n baselineProps: {},\n direction: 'column',\n isSubmissionWidget: false,\n submissionWidgetAnswer: []\n};\n\nexport default withSubmissionWidgetProps(Dropdown);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\nimport HyperText from '../../components/Hypertext';\n\nimport { stripHTML } from '../../utils';\n\nclass Email extends React.Component {\n render() {\n const {\n text,\n answer,\n isMailTo,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n direction\n } = this.props;\n\n let answerText = typeof answer === 'object' && answer !== null && answer.email ? answer.email : answer;\n if (typeof answerText === 'object') {\n answerText = Object.values(answerText).join();\n }\n\n return (\n \n {\n isMailTo\n ? {stripHTML(answerText)}\n : {stripHTML(answerText)}\n }\n \n );\n }\n}\n\nEmail.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.string,\n isMailTo: PropTypes.bool,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nEmail.defaultProps = {\n text: '',\n answer: '',\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n isMailTo: false,\n direction: 'column'\n};\n\nexport default Email;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Styled from 'styled-components';\nimport { FileUtils } from '@jotforminc/upload-fields';\n\nimport View from '../../components/View';\nimport Hypertext from '../../components/Hypertext';\nimport Baseline from '../../components/Baseline';\nimport Imageline from '../../components/Imageline';\nimport SimpleText from '../../components/Text';\n\nconst ViewWrap = Styled(View)`\n display: flex;\n flex-wrap: wrap;\n`;\n\nconst HalfView = Styled(View)`\n width: 50%;\n`;\n\nclass Fileupload extends React.Component {\n encodeRequestUrl(url) {\n return url.replace('#', '%23');\n }\n\n render() {\n const {\n text,\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n showFileNameAsText,\n showImageHyperlink,\n imagePropsArray,\n filePropsArray,\n direction,\n containerProps,\n fileNameProps,\n hideImageLine,\n useEncodeURI\n } = this.props;\n\n const imgPropsArray = imagePropsArray || [];\n const fileProps = filePropsArray || [];\n\n return (\n \n \n {answer ? answer.map((uploadedUrl, answerIndex) => {\n const encodedRequestUrl = useEncodeURI ? encodeURI(uploadedUrl) : this.encodeRequestUrl(uploadedUrl);\n const filename = FileUtils.getFileName(uploadedUrl);\n if (FileUtils.isImageFile(filename) || uploadedUrl.match(/^blob:/)) {\n return (\n // eslint-disable-next-line react/no-array-index-key\n \n {!hideImageLine && (\n \n )}\n {showImageHyperlink\n ? {filename}\n : null}\n\n {showFileNameAsText && !showImageHyperlink\n ? {filename}\n : null}\n \n );\n }\n return showFileNameAsText\n ? {filename}\n : (\n \n {filename}\n \n );\n }) : null}\n \n \n );\n }\n}\n\nFileupload.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.shape({})]),\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n containerProps: PropTypes.shape({}),\n imagePropsArray: PropTypes.instanceOf(Array),\n fileNameProps: PropTypes.oneOfType([PropTypes.shape({}), PropTypes.array]),\n filePropsArray: PropTypes.instanceOf(Array),\n showImageHyperlink: PropTypes.bool,\n showFileNameAsText: PropTypes.bool,\n hideImageLine: PropTypes.bool,\n direction: PropTypes.string,\n useEncodeURI: PropTypes.bool\n};\n\nFileupload.defaultProps = {\n text: '',\n answer: [''],\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n containerProps: {},\n imagePropsArray: [],\n fileNameProps: [],\n filePropsArray: [],\n showImageHyperlink: true,\n showFileNameAsText: false,\n hideImageLine: false,\n direction: 'column',\n useEncodeURI: false\n};\n\nexport default Fileupload;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\n\nimport { stripHTML } from '../../utils';\n\nconst Fullname = ({\n text,\n answer: {\n prefix,\n first: firstName,\n middle: middleName,\n last: lastName,\n suffix\n },\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n direction\n}) => (\n \n \n {[prefix, firstName, middleName, lastName].filter(f => f).map(str => stripHTML(str)).join(' ')}\n {suffix ? `, ${stripHTML(suffix)}` : ''}\n \n \n);\n\nFullname.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.shape({\n prefix: PropTypes.string,\n first: PropTypes.string,\n middle: PropTypes.string,\n last: PropTypes.string,\n suffix: PropTypes.string\n })\n ]),\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nFullname.defaultProps = {\n text: '',\n answer: {\n prefix: '',\n first: '',\n middle: '',\n last: '',\n suffix: ''\n },\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n direction: 'column'\n};\n\nexport default Fullname;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport BaseImage from '../../components/Image';\nimport Baseline from '../../components/Baseline';\n\nconst Image = ({\n src,\n text,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n direction\n}) => (\n \n \n \n);\n\nImage.propTypes = {\n src: PropTypes.string,\n text: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nImage.defaultProps = {\n src: '',\n text: '',\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n direction: 'column'\n};\n\nexport default Image;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { safeJSONParse } from '@jotforminc/utils';\n\nimport View from '../../components/View';\nimport List from '../../components/List';\nimport { LIST_TYPES } from '../../constants';\nimport Baseline from '../../components/Baseline';\nimport { convertAnswerToArray } from '../../utils';\n\n// TODO: Currently just printing selected option. It may need to change in a way to show other options too.\nconst Imagechoice = ({\n text,\n answer,\n showAll,\n options,\n labelProps,\n answerProps,\n answerWrapperProps,\n containerStyle,\n containerProps,\n baselineProps,\n direction\n}) => {\n const answerArray = convertAnswerToArray(answer);\n const answerTupleList = answerArray.map(txt => {\n const answerArr = txt.split('|');\n if (answerArr.length < 3) {\n return answerArr;\n }\n\n const imgUrl = answerArr[answerArr.length - 1];\n const replacedTxt = txt.replace(`|${imgUrl}`, '');\n\n return [replacedTxt, imgUrl];\n });\n const allItems = safeJSONParse(options, []).map(({ text: imageText, link }) => [imageText, link]);\n\n return (\n \n \n \n \n \n );\n};\n\nImagechoice.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.arrayOf(PropTypes.string),\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.oneOfType([\n PropTypes.shape({}),\n PropTypes.array\n ]),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n containerStyle: PropTypes.shape({}),\n containerProps: PropTypes.shape({}),\n showAll: PropTypes.bool,\n options: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.shape({\n text: PropTypes.string,\n link: PropTypes.string\n })),\n PropTypes.string\n ]),\n direction: PropTypes.string\n};\n\nImagechoice.defaultProps = {\n text: '',\n answer: [],\n labelProps: {},\n answerProps: [],\n answerWrapperProps: {},\n baselineProps: {},\n containerStyle: {},\n containerProps: {},\n showAll: false,\n options: [],\n direction: 'column'\n};\n\nexport default Imagechoice;\n","import isEmpty from 'lodash/isEmpty';\nimport isObject from 'lodash/isObject';\nimport isString from 'lodash/isString';\nimport flatten from 'lodash/flatten';\nimport uniq from 'lodash/uniq';\nimport isArray from 'lodash/isArray';\nimport compose from 'lodash/fp/compose';\nimport defaultTo from 'lodash/fp/defaultTo';\nimport split from 'lodash/fp/split';\nimport add from 'lodash/fp/add';\nimport { safeJSONParse } from '@jotforminc/utils';\n\nimport { getDateTimeText, getFixedUrl, isBase64Image } from '../../../utils';\nimport { isNative } from '../../../utils/environment';\n\nexport const BLOT_REGEX = /\\{([a-z0-9]*?-[a-z0-9]*?)\\}/gi;\nconst TIMESTAMP_OF_2019 = 1546300000000;\n\nconst isOldBlotId = id => Number(id) > TIMESTAMP_OF_2019;\nconst setParsedId = ([x, y]) => (isOldBlotId(x) ? ({ id: x, label: y }) : ({ id: y, label: x }));\nconst parseBlotId = (blotId = '') => setParsedId(blotId.split('-'));\nconst setBlotId = id => label => (isOldBlotId(id) ? `${id}-${label}` : `${label}-${id}`);\n\nexport const COLOR_LIST = [\n '#D0F0FE',\n '#EDE2FE',\n '#CEDFFF',\n '#FFDAF6',\n '#D0F7C3',\n '#FFDCE5',\n '#FFEAB6',\n '#C2F5E9',\n '#FEE2D5',\n '#EEEEEE'\n];\n\nexport const getItemFromList = (arr, i) => arr[i % arr.length];\n\nexport const normalizeDate = (answer, format, separator) => getDateTimeText({\n answer: answer,\n hideTime: true,\n dateFormat: format.match(/(.)\\1+/g).join(separator).toUpperCase()\n});\n\nconst normalizeTime = ({ hourSelect, minuteSelect, ampm }) => (\n hourSelect || minuteSelect ? `${hourSelect || '0'}:${minuteSelect || '00'} ${ampm || ''}` : ''\n);\n\nconst makeArray = a => (isArray(a) ? a : [a]);\n\nexport const normalizeData = x => (isString(x) ? safeJSONParse(x) : x);\n\nexport const normalizeArray = arr => uniq(flatten(makeArray(arr).map(a => (\n /\\[(.*?)\\]/g.test(a) ? normalizeData(a) : a\n))));\n\nexport const isAnswerEmpty = answer => (\n !isArray(answer) && isObject(answer) ? Object.values(answer).every(val => !val) : isEmpty(answer)\n);\n\nexport const getAnswerByType = (answers, {\n type, id, merged, label, options\n}) => {\n if (type === 'checkbox' && merged) {\n return Object.keys(answers).filter(a => a.indexOf(id) > -1).map(ax => answers[ax]);\n }\n if (type === 'datebox') {\n return normalizeData(answers[id]);\n }\n if (type === 'radiobox' && !merged) {\n const entry = Object.keys(answers).filter(a => a.indexOf(parseBlotId(id).id) > -1);\n return answers[entry] === label && label;\n }\n\n if (type === 'timebox') {\n const time = normalizeData(answers[id]);\n\n return time && normalizeTime(time);\n }\n\n if (type === 'signaturebox') {\n if (isNative()) {\n const path = answers[id];\n if (path && path !== '/' && !path.includes('http')) {\n return getFixedUrl(path.startsWith('/') ? path : `/${path}`);\n }\n return path;\n }\n return answers[id];\n }\n if (type === 'selectbox') {\n const optionsArray = options ? options.split('|').map(option => option.trim()) : [];\n const answer = answers[id] ? answers[id].trim() : '';\n return optionsArray.includes(answer) ? answer : '';\n }\n return answers[id];\n};\n\nconst setNum = arr => (arr.length > 1 ? arr[1] : arr[0]);\nconst getNumberFromLabel = compose(\n parseInt,\n setNum,\n split('option'),\n defaultTo('')\n);\n\nconst getIndex = (index = 0) => name => compose(\n add(parseInt(index, 10)),\n getNumberFromLabel\n)(name);\n\nexport const getFieldOptions = (field, isMerged) => {\n if (((['control_radio', 'control_checkbox'].indexOf(field.type) > -1) && isMerged) || field.type === 'control_dropdown') {\n return [field.options.reduce((acc, o) => ({\n ...acc,\n options: `${acc.options || acc.label}|${o.label}`,\n merged: true,\n label: field.label,\n id: field.type === 'control_dropdown' ? setBlotId(field.id)(o.type) : field.id,\n groupID: getIndex(field.index)(o.name),\n index: Number(field.index)\n }))];\n }\n\n return field.options.map(opt => ({\n ...opt,\n // Add groupID to change color of tagFields\n ...(['radiobox', 'checkbox'].indexOf(opt.type) > -1 ? {\n groupID: getIndex(field.index)(opt.name)\n } : {}),\n // Add datetime specific field props to blot\n ...(opt.type === 'datebox' ? {\n dateSeparator: field.dateSeparator || '-',\n dateFormat: field.format || 'mmddyyyy'\n } : {}),\n index: Number(field.index)\n }));\n};\n\nconst normalizeURLPath = path => (/^\\/+/.test(path) ? path : `/${path}`);\n\nconst isAbsoluteURL = url => /^(?:[a-z]+:)?\\/\\//i.test(url);\n\nexport const normalizeURL = url => (isBase64Image(url) || isAbsoluteURL(url) ? url : normalizeURLPath(url));\n\nexport const getSiblingAnswers = (answers, id) => {\n const siblingId = id.split('-')[1];\n return Object.keys(answers).filter(item => item.startsWith('option') && item.endsWith(siblingId));\n};\n","import React from 'react';\nimport ReactDOMServer from 'react-dom/server';\nimport get from 'lodash/get';\n\nimport {\n getItemFromList, COLOR_LIST, normalizeDate, normalizeURL\n} from './utils';\nimport { LIST_TYPES } from '../../../constants';\n\nconst CSS = {\n wrapper: {\n lineHeight: 'initial',\n display: 'inline-flex',\n flexDirection: 'column'\n },\n answer: (groupID, type, mainStyle, listType) => ({\n display: 'inline-block',\n width: '100%',\n ...(groupID && listType === LIST_TYPES.OPTION ? {\n backgroundColor: getItemFromList(COLOR_LIST, groupID),\n padding: '4px 6px',\n borderRadius: '4px'\n } : {}),\n ...(['checkbox', 'selectbox', 'radiobox'].indexOf(type) > -1 ? {} : {\n borderBottom: '1px solid #979797',\n fontWeight: '600'\n }),\n ...mainStyle\n }),\n sublabel: mainStyle => ({\n display: 'block',\n fontSize: '10px',\n color: '#57647e',\n marginTop: '2px',\n ...mainStyle\n }),\n signatureImg: {\n maxWidth: '100%',\n maxHeight: '2em',\n verticalAlign: 'bottom'\n }\n};\n\nconst getHTMLLine = (answer, {\n label, groupID, type, index\n},\n{\n showSublabels, answerProps, labelProps, listType, siblingAnswers = [], id\n}) => {\n let _answer = answer;\n\n if (type === 'checkbox' && listType === LIST_TYPES.COMMA) {\n const indexOfCurrentAnswer = siblingAnswers.indexOf(id);\n _answer = `${answer}${indexOfCurrentAnswer < siblingAnswers.length - 1 ? ',' : ''}`;\n }\n\n return ReactDOMServer.renderToStaticMarkup(\n \n \n {_answer}\n \n {(showSublabels && label) && {label}}\n \n );\n};\n\nexport const HTML_ANSWER = {\n textbox: (answer, props, mainProps) => getHTMLLine(answer, props, mainProps),\n datebox: (answer, { label, dateSeparator, dateFormat }, mainProps) => (\n getHTMLLine(normalizeDate(answer, dateFormat, dateSeparator), { label }, mainProps)),\n checkbox: (answer, props, mainProps) => getHTMLLine(answer, props, mainProps),\n radiobox: (answer, props, mainProps) => getHTMLLine(answer, props, mainProps),\n signaturebox: (answer, { label, type }, mainProps) => getHTMLLine((\n {label}), { label, type }, mainProps),\n selectbox: (answer, props, mainProps) => getHTMLLine(answer, props, mainProps),\n timebox: (answer, props, mainProps) => getHTMLLine(answer, props, mainProps)\n};\n","import React from 'react';\nimport { string, shape, oneOfType } from 'prop-types';\nimport Styled from 'styled-components';\nimport View from '../View';\nimport Text from '../Text';\n\nconst Sublabel = Styled(View)`\n color: #C0C1C3;\n font-size: 14px;\n font-weight: 100;\n`;\n\nconst Subtext = Styled(View)`\n font-size: 16px;\n padding-top: 8px;\n font-weight: 100;\n`;\n\nconst StyledView = Styled(View)`\n padding-bottom: 15px;\n`;\n\nconst Line = ({\n label,\n value,\n labelContainerProps,\n valueContainerProps,\n labelProps,\n ...props\n}) => (\n \n {!!label && (\n \n {label}\n \n )}\n \n {typeof value === 'string' ? {value} : {value}}\n \n \n);\n\nLine.propTypes = {\n label: string,\n value: oneOfType([\n string,\n shape({})\n ]),\n labelContainerProps: shape({}),\n valueContainerProps: shape({})\n};\n\nLine.defaultProps = {\n label: '',\n value: '',\n labelContainerProps: {},\n valueContainerProps: {}\n};\n\nexport default Line;\n","import React from 'react';\n\nimport OptionList from '../../../components/OptionList';\nimport CommaList from '../../../components/CommaList';\nimport Line from '../../../components/Line';\nimport Imageline from '../../../components/Imageline';\nimport {\n getItemFromList, COLOR_LIST, normalizeDate, normalizeArray, normalizeURL\n} from './utils';\nimport { LIST_TYPES } from '../../../constants';\n\nconst getLine = (answer, { label, id, type }, { labelProps: { textProps }, answerProps, lineProps }) => (\n \n);\n\nconst listComponent = listType => {\n const {\n COMMA,\n OPTION\n } = LIST_TYPES;\n\n switch (listType) {\n case COMMA:\n return CommaList;\n case OPTION:\n return OptionList;\n default:\n return OptionList;\n }\n};\n\nexport const LIST_ANSWER = {\n textbox: (answer, { label, id, type }, { labelProps: { textProps }, answerProps, lineProps }) => (\n getLine(\n answer,\n { label, id, type },\n { labelProps: { textProps }, answerProps, lineProps }\n )\n ),\n datebox: (answer, {\n label, id, dateFormat, dateSeparator, type\n }, { labelProps: { textProps }, answerProps, lineProps }) => (\n getLine(\n normalizeDate(answer, dateFormat, dateSeparator),\n { label, id, type },\n { labelProps: { textProps }, answerProps, lineProps }\n )\n ),\n checkbox: (answer, { groupID = 0, id, type }, { listType }) => {\n const ListComponent = listComponent(listType);\n return [\n (\n { className: 'tagField', backgroundColor: getItemFromList(COLOR_LIST, groupID + i), style: { marginBottom: 12 } }\n ))\n }\n items={normalizeArray(answer)}\n />\n ];\n },\n radiobox: (answer, props, { listType }) => LIST_ANSWER.checkbox(answer, props, { listType }),\n signaturebox: (answer, { label, id, type }, { labelProps: { textProps }, answerProps, lineProps }) => (\n getLine(\n ,\n { label, id, type },\n { labelProps: { textProps }, answerProps, lineProps }\n )\n ),\n selectbox: (answer, {\n groupID, label, id, type\n },\n {\n labelProps: { textProps }, answerProps, lineProps, listType\n }) => (\n getLine(\n LIST_ANSWER.checkbox(answer, { groupID, id }, { listType }),\n { label, id, type },\n { labelProps: { textProps }, answerProps, lineProps }\n )\n ),\n timebox: (answer, { label, id, type }, { labelProps: { textProps }, answerProps, lineProps }) => (\n LIST_ANSWER.textbox(answer, { label, id, type }, { labelProps: { textProps }, answerProps, lineProps })\n )\n};\n","import React from 'react';\nimport {\n string, arrayOf, bool, shape, oneOfType, oneOf\n} from 'prop-types';\nimport isEmpty from 'lodash/isEmpty';\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\nimport { HTML_ANSWER } from './helpers/getHTMLAnswer';\nimport { LIST_ANSWER } from './helpers/getListAnswer';\nimport {\n normalizeData, isAnswerEmpty, getAnswerByType, getFieldOptions, BLOT_REGEX, getSiblingAnswers\n} from './helpers/utils';\nimport { isNative } from '../../utils/environment';\nimport { stripHTML } from '../../utils';\nimport { LIST_TYPES } from '../../constants';\n\nconst getEmptyStringByEnvironment = () => (\n isNative() ? : ''\n);\n\nconst findBlot = (blots, currId) => blots && blots.find(({ id }) => id === currId);\n\nconst checkTypeToStrip = answers => (Array.isArray(answers) ? answers.map(answer => (typeof answer === 'string' ? stripHTML(answer) : answer)) : stripHTML(answers));\n\nconst prepareAnswer = (blot, answers) => (blot ? { blot, answer: blot.type === 'datebox' ? getAnswerByType(answers, blot) : checkTypeToStrip(getAnswerByType(answers, blot)) } : {});\n\nconst renderAnswer = ({ blot, answer }, renderType, props) => (\n !isAnswerEmpty(answer) && (blot.type in renderType) ? renderType[blot.type](answer, blot, props) : getEmptyStringByEnvironment()\n);\n\nconst getBlots = (fields, isMerged) => !isEmpty(fields) && fields.reduce(\n (acc, f) => [...acc, ...(getFieldOptions(f, isMerged) || [])], []\n);\n\nconst sortBlots = blots => blots.sort(({ index: prevIndex }, { index: nextIndex }) => (\n prevIndex !== nextIndex && prevIndex < nextIndex ? -1 : 1\n));\n\nconst getListAnswers = (blots, answers, props) => blots.map(blot => (\n renderAnswer(prepareAnswer(blot, answers), LIST_ANSWER, props)\n));\n\nconst updateHTML = (template, blots, answers, props) => template.replace(BLOT_REGEX, (str, id) => {\n const currBlot = findBlot(blots, id);\n const _props = { ...props, id };\n\n if (currBlot?.type === 'checkbox') {\n _props.siblingAnswers = getSiblingAnswers(answers, id);\n }\n\n return renderAnswer(prepareAnswer(currBlot, answers), HTML_ANSWER, _props);\n});\n\nconst Inline = ({\n template,\n fields,\n fullContent,\n showSublabels,\n // Default props\n text,\n answer,\n answerProps,\n labelProps,\n direction,\n answerWrapperProps,\n baselineProps,\n lineProps,\n listType\n}) => {\n const blots = getBlots(normalizeData(fields), !fullContent);\n\n const isFullContentVisible = fullContent === 'Yes' || (fullContent && fullContent !== 'No');\n\n return (\n \n {isFullContentVisible ? (\n \n ) : blots && getListAnswers(sortBlots(blots), answer, {\n labelProps, answerProps, lineProps, listType\n })}\n \n );\n};\n\nInline.propTypes = {\n template: string,\n fields: oneOfType([\n arrayOf(shape({})),\n string\n ]),\n fullContent: bool,\n showSublabels: bool,\n text: string,\n direction: string,\n labelProps: shape({\n textProps: shape({})\n }),\n answerProps: shape({}),\n answerWrapperProps: shape({}),\n baselineProps: shape({}),\n lineProps: shape({}),\n answer: oneOfType([\n shape({}),\n string\n ]),\n listType: oneOf(Object.values(LIST_TYPES))\n};\n\nInline.defaultProps = {\n template: '',\n fields: {},\n fullContent: true,\n showSublabels: true,\n text: '',\n direction: 'column',\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n lineProps: {},\n answer: {},\n listType: LIST_TYPES.OPTION\n};\n\nexport default Inline;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Styled from 'styled-components';\n\nimport Image from '../Image';\n\nconst EmojiImage = Styled(props => )`\n width: 18px;\n height: 18px;\n display: inline-block;\n vertical-align: text-bottom;\n`;\n\nconst Emoji = ({ score }) => ;\n\nEmoji.propTypes = {\n score: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ])\n};\n\nEmoji.defaultProps = {\n score: 1\n};\n\nexport default Emoji;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport Styled from 'styled-components';\nimport memoize from 'lodash/memoize';\n\nimport {\n transpose as transposeArray, fixTableHeader, sanitizeHTML\n} from '../../utils';\nimport View from '../View';\nimport Text from '../Text';\n\nconst themeDark = '#F2F3FE';\nconst themeLight = '#fff';\nconst themeBorder = '#E5E6EF';\nconst themeHeaderColor = '#2A2F54';\n\nconst memoizedTranspose = memoize(transposeArray);\n\nconst ColumnOrientedView = Styled(props => )`\n table-layout: fixed;\n width: 100%;\n text-align: center;\n border-collapse: collapse;\n border-radius: 6px;\n overflow: hidden;\n box-shadow: 0 0 0 1px ${themeBorder};\n word-break: break-word;\n hyphens: auto;\n`;\n\nconst RowOrientedView = Styled.div`\n box-shadow: 0 0 0 1px ${themeBorder};\n border-radius: 6px;\n`;\n\nconst Thead = Styled.thead`\n th {\n border-bottom: 1px solid ${themeBorder};\n }\n`;\n\nconst Tbody = Styled.tbody`\n`;\n\nconst TableHeader = Styled.th`\n font-size: 11px;\n border: none;\n font-weight: bold;\n padding: 6px;\n color: ${({ isDeleted }) => { return isDeleted ? '#FFF' : themeHeaderColor; }};\n background: ${({ isDeleted }) => { return isDeleted ? '#FF3737' : themeDark; }};\n`;\n\nconst EmptyHeader = Styled(props => )``;\n\nconst TableData = Styled.td`\n font-size: 11px;\n border:none;\n padding: 6px;\n background: ${themeLight};\n color: ${themeHeaderColor};\n`;\n\nconst RowHeader = Styled.th`\n font-size: 11px;\n border:none;\n padding: 6px;\n text-align: left;\n font-weight: bold;\n background: ${themeDark};\n color: ${themeHeaderColor};\n`;\n\nconst Row = Styled.tr`\n &:not(:first-of-type) {\n td, th {\n border-top: 1px solid ${themeBorder};\n }\n }\n`;\n\nconst StyledRow = Styled(View)`\n display: flex;\n flex-flow: row;\n\n &:not(:first-of-type) {\n td, th {\n border-top: 1px solid ${themeBorder};\n }\n }\n`;\n\nconst StyledQuestion = Styled(Text)`\n padding: 6px 8px;\n font-size: 10pt;\n width: 49.8%;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: bold;\n background-color: ${themeDark};\n text-align: left;\n`;\n\nconst StyledAnswer = Styled(Text)`\n padding: 6px;\n font-size: 10pt;\n width: 49.8%;\n font-weight: 200;\n overflow: hidden;\n text-overflow: ellipsis;\n background-color: ${themeLight};\n text-align: left;\n`;\n\nclass Tableview extends Component {\n constructor(props) {\n super(props);\n\n // Bindings\n this.renderRows = this.renderRows.bind(this);\n this.renderColumnHeaders = this.renderColumnHeaders.bind(this);\n this.renderRowOrientedView = this.renderRowOrientedView.bind(this);\n this.renderColumnOrientedView = this.renderColumnOrientedView.bind(this);\n }\n\n get columns() {\n const {\n rows,\n transpose,\n columns\n } = this.props;\n\n return !transpose ? columns : rows;\n }\n\n get rows() {\n const {\n rows,\n transpose,\n columns\n } = this.props;\n\n return !transpose ? rows : columns;\n }\n\n get tableData() {\n const {\n transpose,\n tableData\n } = this.props;\n\n return !transpose ? tableData : memoizedTranspose(tableData);\n }\n\n get isRowsExist() {\n const { transpose, orientation } = this.props;\n return (orientation !== 'row' || !transpose) && this.rows.length !== 0;\n }\n\n renderCell({ key, data, props }) {\n if (data && typeof data === 'string') {\n return ;\n }\n\n const emptyData = props.emptyCellStyle === 'line' ? '-' : '';\n const cellData = data || emptyData;\n return (\n \n {cellData}\n \n );\n }\n\n renderColumnHeaderCell({\n key, data, props = {}\n }) {\n const fixedHeader = fixTableHeader(data);\n return (\n typeof fixedHeader === 'string'\n ? (\n \n )\n : {fixedHeader}\n );\n }\n\n renderColumnHeaders() {\n const {\n name,\n headerProps,\n showRowHeader\n } = this.props;\n\n let key = 0;\n return this.columns.length !== 0 && (\n \n {[\n (showRowHeader && this.isRowsExist ? : null),\n ...this.columns.map(data => this.renderColumnHeaderCell({\n key: `${name}_${key++}`, data, props: headerProps\n }))\n ]}\n \n );\n }\n\n renderRowHeaderCell({ key, data, props }) {\n return (\n typeof data === 'string'\n ? \n : {data}\n );\n }\n\n renderRow({\n key,\n rowData,\n header,\n containerStyle,\n headerProps,\n answerProps\n }) {\n const { showAll, columns } = this.props;\n\n if (answerProps.hideEmptyRow && (!rowData.length || rowData.filter(data => data).length < 1)) return;\n\n const cells = rowData && Array.isArray(rowData) && rowData.reduce((acc, data, index) => {\n if (!showAll && !data) return acc;\n\n const cellData = (data && !showAll) ? columns[index] : data;\n\n return [\n ...acc,\n this.renderCell({ key: `${key}_${index}`, data: cellData, props: answerProps })\n ];\n }, []);\n\n if (!showAll && !cells.length) {\n cells.push(this.renderCell({ data: null, props: answerProps }));\n }\n\n return (\n \n {(typeof header === 'string' || header) && this.renderRowHeaderCell({ key, data: header, props: headerProps })}\n {cells}\n \n );\n }\n\n renderRows() {\n const {\n name,\n containerStyle,\n headerProps,\n answerProps,\n showRowHeader\n } = this.props;\n\n return this.tableData.map((rowData, index) => this.renderRow({\n key: `${name}_${index}`,\n rowData,\n containerStyle,\n header: (this.isRowsExist && showRowHeader) && this.rows[index],\n headerProps,\n answerProps\n }));\n }\n\n renderColumnOrientedView() {\n const {\n tableComponent: TableComponent,\n showColumnHeader,\n showAll, transpose, tableData, columns, rows, orientation, containerStyle, headerProps, answerProps, // useless props\n ...props // rest\n } = this.props;\n\n return (\n \n {\n showAll && showColumnHeader\n && (\n \n {this.renderColumnHeaders()}\n \n )\n }\n \n {this.renderRows()}\n \n \n );\n }\n\n renderRowOrientedHeaderCell(data, { className: rowHeaderClassName, ...props }) {\n const className = `rowOriented-row-header${rowHeaderClassName ? ` ${rowHeaderClassName}` : ''}`;\n\n return (\n typeof data === 'string'\n ? \n : {data}\n );\n }\n\n renderRowOrientedAnswerCell(data, { className: answerClassName, ...props }) {\n const className = `rowOriented-row-answer${answerClassName ? ` ${answerClassName}` : ''}`;\n\n return (\n typeof data === 'string'\n ? \n : {data}\n );\n }\n\n renderRowOrientedView() {\n const {\n name,\n rows,\n transpose,\n tableData,\n answerProps,\n containerStyle,\n headerProps\n } = this.props;\n\n let key = 0;\n return (\n \n {\n !transpose\n ? rows.map((row, index) => (\n \n {row && this.renderRowOrientedHeaderCell(row, headerProps)}\n {this.renderRowOrientedAnswerCell(tableData[index], answerProps)}\n \n ))\n : (\n <>\n {this.renderColumnHeaders()}\n {this.renderRow({ key: `${name}_0`, rowData: tableData, answerProps })}\n \n )\n }\n \n );\n }\n\n render() {\n const { orientation, columns, tableComponent } = this.props;\n\n if (tableComponent !== ColumnOrientedView) {\n return this.renderColumnOrientedView();\n }\n\n switch (orientation) {\n case 'row':\n return this.renderRowOrientedView();\n case 'column':\n default:\n return columns.length === 0 ? this.renderRowOrientedView() : this.renderColumnOrientedView();\n }\n }\n}\n\nconst cellPropTypes = [\n PropTypes.arrayOf(PropTypes.string),\n PropTypes.string,\n PropTypes.number,\n PropTypes.node\n];\n\nTableview.propTypes = {\n name: PropTypes.string,\n orientation: PropTypes.string,\n rows: PropTypes.arrayOf(PropTypes.string),\n columns: PropTypes.arrayOf(PropTypes.oneOfType(cellPropTypes)),\n tableData: PropTypes.arrayOf(PropTypes.oneOfType(cellPropTypes)),\n answerProps: PropTypes.shape(),\n containerStyle: PropTypes.shape(),\n headerProps: PropTypes.shape(),\n transpose: PropTypes.bool,\n rowProps: PropTypes.shape({}),\n tableComponent: PropTypes.oneOfType([PropTypes.element, PropTypes.object]),\n showAll: PropTypes.bool,\n showRowHeader: PropTypes.bool,\n showColumnHeader: PropTypes.bool\n};\n\nTableview.defaultProps = {\n name: '',\n rows: [],\n columns: [],\n tableData: [],\n orientation: 'column',\n answerProps: {},\n containerStyle: {},\n headerProps: {},\n transpose: false,\n rowProps: {},\n tableComponent: ColumnOrientedView,\n showAll: true,\n showRowHeader: true,\n showColumnHeader: true\n};\n\nexport default Tableview;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport memoize from 'lodash/memoize';\nimport { safeJSONParse, stripSlashes } from '@jotforminc/utils';\n\nimport {\n renameDuplicateRows, stripHTML, sanitizeOrStripHTML\n} from '../../utils';\nimport { ROW_BASED_MATRIX_TYPES } from '../../constants';\n\nconst singleInputTables = ROW_BASED_MATRIX_TYPES;\n\nconst isAnswerValid = answerData => {\n if (answerData === null || answerData === undefined) return false;\n\n const isValidObject = typeof answerData === 'object' && Object.keys(answerData).length > 0;\n const isValidArray = Array.isArray(answerData) || answerData.length > 0;\n const isBoolean = typeof answerData === 'boolean';\n\n return !isBoolean && (isValidObject || isValidArray);\n};\n\nconst normalizeAnswer = memoize((answerData, columns, rows, orientation, useIndex = false) => {\n // Fix the data by passing empty array(s) if not a valid data sended\n if (!isAnswerValid(answerData)) {\n const dummyAnswerRow = orientation === 'column' ? columns.map(() => '') : '';\n return rows.map(() => dummyAnswerRow);\n }\n\n // When there are duplicate or empty row names defined by user, we fail to refer to the correct answerData row via row\n // name. In this case we eliminate the duplicate/empty rows by appending row index to the end user defined row name.\n // Same logic is applied on API backend when returning answers array, to fix this.\n const uniqueRows = renameDuplicateRows(rows);\n\n // Each row data can be an encoded json string\n const parsedAnswerValues = uniqueRows.map((row, rowIndex) => {\n const answer = (useIndex ? answerData[rowIndex] : answerData[row]) || '';\n let parsedAnswer = safeJSONParse(answer, answer, true);\n let isAnswerArray = Array.isArray(parsedAnswer);\n\n if (typeof parsedAnswer === 'object' && isAnswerArray) {\n parsedAnswer = parsedAnswer.map(ans => (typeof ans === 'string' ? sanitizeOrStripHTML(ans) : ans));\n }\n\n if (typeof parsedAnswer === 'object' && !isAnswerArray) {\n isAnswerArray = true;\n parsedAnswer = columns.map((_, index) => {\n if (parsedAnswer[index]) {\n if (typeof parsedAnswer[index] === 'string') {\n parsedAnswer[index] = stripHTML(parsedAnswer[index]);\n }\n\n return parsedAnswer[index];\n }\n return '';\n });\n }\n\n const sanitizedAnswer = isAnswerArray ? parsedAnswer.map(a => (a === null || a === false ? '' : a)).map(stripSlashes) : parsedAnswer;\n\n // If row data length is not equal to column length, push empty data to fix structure.\n const columnLengthDiff = columns.length - sanitizedAnswer.length;\n const hasColDifference = isAnswerArray && (columnLengthDiff > 0);\n return hasColDifference ? columns.map((_, index) => (sanitizedAnswer[index] || '')) : sanitizedAnswer;\n });\n\n // Fix empty strings on column oriented tables\n return parsedAnswerValues.map(answerRowData => {\n if (orientation === 'column' && (!answerRowData && answerRowData !== 0)) {\n return columns.map(() => '');\n }\n return answerRowData;\n });\n}, (...args) => args.map(arg => JSON.stringify(arg)).join(''));\n\nconst generateEmojiArray = memoize(emojiCount => {\n const normalizedEmojiCount = emojiCount ? parseInt(emojiCount, 10) : 7;\n\n switch (normalizedEmojiCount) {\n case 3:\n return [1, 4, 7];\n case 7:\n return [1, 2, 3, 4, 5, 6, 7];\n default:\n return [1, 2, 4, 6, 7];\n }\n});\n\nconst getOrientation = memoize(matrixType => (singleInputTables.indexOf(matrixType) > -1 ? 'row' : 'column'));\n\nconst splitNormalizer = memoize(str => (typeof str === 'string' ? str.split('|') : []));\n\n// Higher order component\nexport default function withMatrixProps(MatrixComponent) {\n class ExtendedMatrix extends Component {\n get columns() {\n const { dcolumns, mcolumns } = this.props;\n return this.isDynamic ? safeJSONParse(dcolumns, dcolumns, true) : splitNormalizer(mcolumns);\n }\n\n get rows() {\n const { mrows } = this.props;\n const featureSet = safeJSONParse(this.props.featureSet, this.props.featureSet, true);\n const drows = safeJSONParse(this.props.drows, this.props.drows, true);\n if (featureSet.includes('useIds')) {\n return drows.map(({ text }) => text);\n }\n return splitNormalizer(mrows);\n }\n\n get answer() {\n // in input tables with row/column ids, answer data is already sorted by column order in api\n // to allow duplicate row names in input table use index-based answer data\n const useIndex = this.props.featureSet.includes('useIds');\n return normalizeAnswer(this.props.answer, this.columns, this.rows, this.orientation, useIndex);\n }\n\n get orientation() {\n const { orientation, inputType } = this.props;\n return orientation || getOrientation(inputType);\n }\n\n get toggleOptions() {\n return splitNormalizer(this.props.toggleText);\n }\n\n get emojiArray() {\n return generateEmojiArray(this.props.emojiCount);\n }\n\n get isDynamic() {\n const featureSet = safeJSONParse(this.props.featureSet, this.props.featureSet, true);\n return featureSet.includes('useDcols') || this.props.inputType === 'Dynamic';\n }\n\n get useDcols() {\n const featureSet = safeJSONParse(this.props.featureSet, this.props.featureSet, true);\n return featureSet.includes('useIds');\n }\n\n render() {\n const { orientation, rows, ...props } = this.props;\n\n return (\n \n );\n }\n }\n\n ExtendedMatrix.propTypes = {\n mcolumns: PropTypes.string,\n dcolumns: PropTypes.shape({}),\n mrows: PropTypes.string,\n answer: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.shape({}),\n PropTypes.arrayOf(PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]))\n ]),\n answerProps: PropTypes.shape(),\n labelProps: PropTypes.shape(),\n inputType: PropTypes.string,\n toggleText: PropTypes.string,\n emojiCount: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]),\n orientation: PropTypes.oneOf([\n '',\n 'row',\n 'column'\n ]),\n featureSet: PropTypes.arrayOf(PropTypes.string)\n };\n\n ExtendedMatrix.defaultProps = {\n mcolumns: '',\n mrows: '',\n answer: {},\n dcolumns: {},\n answerProps: {},\n labelProps: {},\n inputType: '',\n toggleText: '',\n emojiCount: 5,\n orientation: '',\n featureSet: []\n };\n\n return ExtendedMatrix;\n}\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { safeJSONParse } from '@jotforminc/utils';\n\nimport Text from '../../components/Text';\nimport Styled from '../../utils/styled';\nimport Image from '../../components/Image';\nimport Emoji from '../../components/Emoji';\nimport Baseline from '../../components/Baseline';\nimport Tableview from '../../components/Tableview';\nimport withMatrixProps from '../../hocs/Matrix';\nimport { ROW_BASED_MATRIX_TYPES } from '../../constants';\nimport { stripHTML } from '../../utils';\n\nconst StyledImage = Styled(props => )`\n width: 12px;\n height: 12px;\n display: inline-block;\n vertical-align: text-bottom;\n`;\n\nconst EmojiText = Styled(Text)`\n display: inline-block;\n text-indent: 5px;\n`;\n\nconst StyledCheckboxImage = ;\nconst StyledRadioActiveImage = ;\n\nclass Matrix extends Component {\n get orientation() {\n const { orientation, showAll } = this.props;\n return showAll ? 'column' : orientation;\n }\n\n get normalizedColumns() {\n const {\n orientation,\n columns,\n normalizedAnswer,\n isDynamic\n } = this.props;\n\n const sanitizedColumns = isDynamic ? columns.map(column => column.text) : columns.map(column => stripHTML(column));\n\n // Row oriented matrixes do not need any normalization\n if (orientation !== 'column') {\n return sanitizedColumns;\n }\n\n // Trying to get maximum number of sanitizedColumns by parsing answer data in case any column removed\n const maxAnswerLength = normalizedAnswer.reduce((prev, curr) => (Array.isArray(curr) ? Math.max(curr.length, prev) : prev), 1);\n\n // This case indicates that really a column removed. Therefore we are appending 'delete column' dummy sanitizedColumns\n if (sanitizedColumns.length < maxAnswerLength) {\n const dummyDeletedColumns = [...Array(maxAnswerLength - sanitizedColumns.length)].map(() => 'Deleted Column');\n return sanitizedColumns.concat(dummyDeletedColumns);\n }\n\n return sanitizedColumns;\n }\n\n get columns() {\n const {\n showAll,\n toggleOptions,\n inputType,\n emojiArray,\n columns\n } = this.props;\n\n if (inputType === 'Yes No') {\n return toggleOptions;\n }\n\n if (inputType === 'Emoji Slider') {\n return emojiArray.map(column => );\n }\n\n if (showAll) {\n switch (inputType) {\n case 'Yes No':\n return toggleOptions;\n case 'Emoji Slider':\n return emojiArray.map(column => );\n case 'Dynamic':\n return columns.map(({ text }) => text);\n default:\n break;\n }\n }\n\n return this.normalizedColumns;\n }\n\n get columnnHeaderProps() {\n const { columnnHeaderProps, columns } = this.props;\n\n // If deleted column does not exist\n if (columns.length === this.columns.length) {\n return columnnHeaderProps;\n }\n\n return this.columns.map((_, index) => ({\n isDeleted: index >= columns.length,\n ...(columnnHeaderProps[index] || {})\n }));\n }\n\n sanitizeAnswer(ans) {\n return Array.isArray(ans)\n ? ans.map(answer => stripHTML(answer))\n : stripHTML(ans);\n }\n\n get tableData() {\n const {\n answer,\n inputType,\n rows,\n dcolumns,\n emojiArray,\n normalizedAnswer,\n toggleOptions: [yesOption, noOption] = [],\n useDcols\n } = this.props;\n\n // Data of row based matrixes need to be converted into arrays if intended orientation is column\n if (ROW_BASED_MATRIX_TYPES.indexOf(inputType) > -1 && this.orientation === 'column') {\n if (inputType === 'Yes No') {\n return rows.map((_, index) => this.columns.map(column => ((column === yesOption && normalizedAnswer[index]) || (column === noOption && !normalizedAnswer[index])\n ? StyledCheckboxImage\n : null)));\n }\n if (inputType === 'Emoji Slider') {\n return rows.map(row => this.columns.map((_, index) => (answer[row] && parseInt(answer[row], 10) === emojiArray[index]\n ? StyledCheckboxImage\n : null)));\n }\n if (!useDcols && (inputType === 'Slider' || inputType === 'Radio Button')) {\n return rows.map((_, index) => this.columns.map(column => {\n const strippedHtml = stripHTML(normalizedAnswer[index]);\n const normalized = strippedHtml || normalizedAnswer[index];\n const newNormalized = typeof normalized === 'string' ? normalized.replace(/\\\\/g, '') : normalized;\n const isSelected = (newNormalized || newNormalized === 0) && (this.checkHasOnlyEmptyColumn() ? newNormalized === 1 : newNormalized.toString().trim() === column.toString().trim());\n return isSelected ? StyledRadioActiveImage : null;\n }));\n }\n }\n\n if (inputType === 'Emoji Slider') {\n return normalizedAnswer.map(rowAnswer => (\n <>\n \n \n {`(${emojiArray.indexOf(rowAnswer) + 1}/${emojiArray.length})`}\n \n \n ));\n }\n if (inputType === 'Yes No') {\n return normalizedAnswer.map(rowAnswer => (rowAnswer ? yesOption : noOption));\n }\n if (useDcols || inputType === 'Dynamic') {\n return rows.map((_, index) => safeJSONParse(dcolumns, dcolumns, true).map((column, i) => {\n const ans = Array.isArray(normalizedAnswer[index]) ? normalizedAnswer[index][i] : '';\n if (!ans) return ans;\n if (this.orientation === 'row') return ans;\n if (column.type === 'Radio Button') return StyledRadioActiveImage;\n if (column.type === 'Check Box') return StyledCheckboxImage;\n if (column.type === 'Slider') return StyledCheckboxImage;\n return ans;\n }));\n }\n if (inputType === 'Check Box') {\n return rows.map((_, index) => this.columns.map(column => {\n const ans = normalizedAnswer[index] && !Array.isArray(normalizedAnswer[index]) ? normalizedAnswer[index].toString() : normalizedAnswer[index];\n const strippedAns = this.sanitizeAnswer(ans);\n const isSelected = strippedAns && (this.checkHasOnlyEmptyColumn() ? strippedAns.includes('1') : strippedAns.includes(column));\n return isSelected ? StyledCheckboxImage : null;\n }));\n }\n\n return normalizedAnswer;\n }\n\n checkHasOnlyEmptyColumn() {\n return this.columns.length === 1 && this.columns[0] === '';\n }\n\n render() {\n const {\n text,\n rows,\n transpose,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n sublabelProps,\n containerStyle,\n direction\n } = this.props;\n\n return (\n \n \n \n );\n }\n}\n\nconst cellDataPropTypes = [\n PropTypes.string,\n PropTypes.number,\n PropTypes.bool\n];\n\nMatrix.propTypes = {\n rows: PropTypes.arrayOf(PropTypes.string),\n columns: PropTypes.arrayOf(PropTypes.string),\n dcolumns: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n text: PropTypes.string,\n normalizedAnswer: PropTypes.arrayOf(PropTypes.oneOfType([\n ...cellDataPropTypes,\n PropTypes.arrayOf(cellDataPropTypes)\n ])),\n emojiArray: PropTypes.arrayOf(PropTypes.number),\n toggleOptions: PropTypes.arrayOf(PropTypes.string),\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n sublabelProps: PropTypes.shape({}),\n containerStyle: PropTypes.shape({}),\n columnnHeaderProps: PropTypes.arrayOf(PropTypes.shape({})),\n transpose: PropTypes.bool,\n orientation: PropTypes.oneOf([\n 'row',\n 'column'\n ]),\n answer: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.shape({}),\n PropTypes.arrayOf(PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]))\n ]),\n inputType: PropTypes.string,\n showAll: PropTypes.bool,\n direction: PropTypes.string,\n isDynamic: PropTypes.bool,\n useDcols: PropTypes.bool\n};\n\nMatrix.defaultProps = {\n rows: [],\n text: '',\n normalizedAnswer: [],\n dcolumns: '',\n emojiArray: [],\n toggleOptions: ['Yes', 'No'],\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n sublabelProps: {},\n containerStyle: {},\n columnnHeaderProps: [],\n columns: [],\n transpose: false,\n orientation: 'column',\n answer: {},\n inputType: '',\n showAll: false,\n direction: 'column',\n isDynamic: false,\n useDcols: false\n};\n\nexport default withMatrixProps(Matrix);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport isNumber from 'lodash/isNumber';\n\nimport Line from '../../components/Line';\nimport Baseline from '../../components/Baseline';\nimport { isObject, stripHTML } from '../../utils';\n\nclass Mixed extends React.Component {\n render() {\n const {\n text,\n answer,\n sublabels,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n sublabelProps,\n direction,\n lineProps\n } = this.props;\n return (\n \n {isObject(answer) ? Object.keys(answer).map(key => {\n let answerValue = answer[key];\n const isStringArray = typeof answerValue === 'string' && answerValue.match(/^\\[(.*)\\]$/);\n if (isStringArray && isStringArray[1]) {\n // answer looks like => \"[\"Option 1\",\"Option 2\"]\"\n answerValue = isStringArray[1].split(',').map(answerWithQuotationMark => answerWithQuotationMark.replace(/^\"(.*)\"$/, '$1')).join(', ');\n } else if (Array.isArray(answerValue)) {\n answerValue = answerValue.join(', ');\n } else if (isNumber(answerValue)) {\n answerValue = `${answerValue}`;\n }\n return (answerValue\n ? (\n \n ) : null);\n }) : null}\n \n );\n }\n}\n\nMixed.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.shape({}),\n sublabels: PropTypes.shape({}),\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n sublabelProps: PropTypes.shape({}),\n lineProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nMixed.defaultProps = {\n text: '',\n answer: {},\n sublabels: {},\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n sublabelProps: {},\n lineProps: {},\n direction: 'column'\n};\n\nexport default Mixed;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\nimport { NUMBER_FORMATS } from '../../constants';\nimport { NumberFormats } from '../../constants/schemas';\nimport { stripHTML } from '../../utils';\n\nclass Number extends React.Component {\n getAnswerNumber() {\n const { answer, numberFormat } = this.props;\n const answerNum = answer ? +answer : '';\n const {\n COMMA,\n POINT,\n NUMBER\n } = NUMBER_FORMATS;\n\n switch (numberFormat) {\n case COMMA:\n return answerNum.toLocaleString();\n case POINT:\n return answerNum.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n case NUMBER:\n default:\n return answer || '';\n }\n }\n\n render() {\n const {\n text,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n direction\n } = this.props;\n\n const answer = this.getAnswerNumber();\n\n return (\n \n {answer\n && (\n \n {stripHTML(answer)}\n \n )}\n \n );\n }\n}\n\nNumber.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n numberFormat: NumberFormats.schema,\n direction: PropTypes.string\n};\n\nNumber.defaultProps = {\n text: '',\n answer: '',\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n numberFormat: NumberFormats.default,\n direction: 'column'\n};\n\nexport default Number;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\n\nimport { stripHTML } from '../../utils';\n\nclass Phone extends React.Component {\n // Check Ticket 1808956 for why phone number is formatted like that.\n // Lets separate the formatting logic, so we can use it in mobile part too (phone/index.native.js)\n renderTextContent = () => {\n const {\n answer: {\n country: AnswerCountryCode,\n area: AnswerAreaCode,\n phone: AnswerPhoneNumber,\n full: AnswerFullNumber\n },\n answerProps\n } = this.props;\n return (\n \n {AnswerCountryCode && `+${stripHTML(AnswerCountryCode)} `}\n {AnswerAreaCode && `(${stripHTML(AnswerAreaCode)}) `}\n {AnswerPhoneNumber && `${stripHTML(AnswerPhoneNumber)}`.replace(/(\\d{3})(\\d{4})/, '$1-$2')}\n {stripHTML(AnswerFullNumber)}\n \n );\n };\n\n render() {\n const {\n text,\n labelProps,\n answerWrapperProps,\n baselineProps,\n direction\n } = this.props;\n return (\n \n {this.renderTextContent()}\n \n );\n }\n}\n\nPhone.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.oneOfType([\n PropTypes.shape({\n country: PropTypes.string,\n area: PropTypes.string,\n phone: PropTypes.string,\n full: PropTypes.string\n }),\n PropTypes.string\n ]),\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nPhone.defaultProps = {\n text: '',\n answer: {},\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n direction: 'column'\n};\n\nexport default Phone;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport withSubmissionWidgetProps from '../../hocs/SubmissionWidget';\nimport View from '../../components/View';\nimport List from '../../components/List';\nimport Baseline from '../../components/Baseline';\nimport { ListTypes } from '../../constants/schemas';\nimport { isEmpty } from '../../utils';\n\nconst Radio = ({\n text,\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n editMode,\n isToggleActive,\n toggleProps,\n options,\n showAll,\n listType,\n containerProps,\n baselineProps,\n isSubmissionWidget,\n submissionWidgetAnswer,\n optionsArray,\n direction\n}) => {\n const answerString = (() => {\n if (Array.isArray(answer)) return answer;\n return typeof answer === 'object' ? Object.values(answer)[0] : answer;\n })();\n\n let items = answerString && answerString.length > 0\n ? [editMode ? [answerString, ] : answerString]\n : [];\n\n if (isSubmissionWidget) {\n items = submissionWidgetAnswer.map(({ value }) => value);\n }\n\n const allOptions = !isEmpty(options) ? options.toString().split('|') : [];\n const allItems = isSubmissionWidget\n ? Object.values(optionsArray).map(({ value }) => value)\n : allOptions.concat(items.filter(item => allOptions.indexOf(typeof item === 'string' ? item : item[0]) === -1)); // For 'other' option type non static data\n\n return (\n \n \n \n );\n};\n\nRadio.propTypes = {\n options: PropTypes.string,\n answer: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.shape({\n other: PropTypes.string\n })\n ]),\n showAll: PropTypes.bool,\n listType: ListTypes.schema,\n containerProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n text: PropTypes.string,\n labelProps: PropTypes.shape({}),\n editMode: PropTypes.bool,\n isToggleActive: PropTypes.bool,\n toggleProps: PropTypes.shape([\n PropTypes.object\n ]),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nRadio.defaultProps = {\n options: '',\n answer: '',\n showAll: false,\n listType: ListTypes.default,\n containerProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n labelProps: {},\n text: '',\n editMode: false,\n toggleProps: {},\n isToggleActive: false,\n direction: 'column'\n};\n\nexport default withSubmissionWidgetProps(Radio);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Styled from 'styled-components';\n\nimport Image from '../../components/Image';\nimport Baseline from '../../components/Baseline';\nimport { generateNumberArray } from '../../utils';\n\nconst StyledImage = Styled(props => )`\n width: 18px;\n height: 18px;\n margin-right: 5px;\n display: inline-block;\n vertical-align: text-bottom;\n`;\n\nclass Rating extends Component {\n constructor(props) {\n super(props);\n\n this.renderRating = this.renderRating.bind(this);\n this.renderSingleIcon = this.renderSingleIcon.bind(this);\n }\n\n get iconSources() {\n switch (this.props.starStyle) {\n case 'Stars':\n return ['https://cdn.jotfor.ms/assets/img/submission/rating_star_icon_rated.png', 'https://cdn.jotfor.ms/assets/img/submission/rating_star_icon_not_rated.png'];\n case 'Stars 2':\n return ['https://cdn.jotfor.ms/assets/img/default-theme/star-rating/star2_v2.png', 'https://cdn.jotfor.ms/assets/img/submission/rating_star_icon_not_rated.png'];\n case 'Hearts':\n return ['https://cdn.jotfor.ms/assets/img/submission/heart_active.svg', 'https://cdn.jotfor.ms/assets/img/submission/heart_normal.svg'];\n case 'Light Bulps':\n return ['https://cdn.jotfor.ms/assets/img/default-theme/star-rating/bulp_v2.png', 'https://cdn.jotfor.ms/assets/img/default-theme/star-rating/bulp_v2_not_rated.png'];\n case 'Lightnings':\n return ['https://cdn.jotfor.ms/assets/img/default-theme/star-rating/lightning_v2.png', 'https://cdn.jotfor.ms/assets/img/default-theme/star-rating/lightning_v2_not_rated.png'];\n case 'Flags':\n return ['https://cdn.jotfor.ms/assets/img/default-theme/star-rating/flag_v2.png', 'https://cdn.jotfor.ms/assets/img/default-theme/star-rating/flag_v2_not_rated.png'];\n case 'Shields':\n return ['https://cdn.jotfor.ms/assets/img/default-theme/star-rating/shield_v2.png', 'https://cdn.jotfor.ms/assets/img/default-theme/star-rating/shield_v2_not_rated.png'];\n case 'Pluses':\n return ['https://cdn.jotfor.ms/assets/img/default-theme/star-rating/plus_v2.png', 'https://cdn.jotfor.ms/assets/img/default-theme/star-rating/plus_v2_not_rated.png'];\n default:\n return ['https://cdn.jotfor.ms/assets/img/submission/rating_star_icon_rated.png', 'https://cdn.jotfor.ms/assets/img/submission/rating_star_icon_not_rated.png'];\n }\n }\n\n getStarCounts() {\n const {\n answer,\n stars\n } = this.props;\n const filledStars = parseInt(answer, 10) ? parseInt(answer, 10) : 0;\n const emptyStars = parseInt(stars - answer, 10) > -1 ? parseInt(stars - answer, 10) : 0;\n return ({ filledStars, emptyStars });\n }\n\n renderSingleIcon(star) {\n const {\n name,\n answer,\n answerProps,\n scaleFrom = 1\n } = this.props;\n // Decide whether star is filled or not based on answer data\n const isFilled = (star + 1) <= (answer - scaleFrom + 1);\n // Prepare icon props\n const key = `${name}_${isFilled ? 'filled' : 'empty'}_${star}`;\n const src = isFilled ? this.iconSources[0] : this.iconSources[1];\n const className = `${isFilled ? 'isFilled' : 'isEmpty'} ${answerProps.className || ''}`;\n\n return (\n \n );\n }\n\n renderRating() {\n const { stars } = this.props;\n\n const raitingArray = generateNumberArray(stars);\n return raitingArray.map(this.renderSingleIcon);\n }\n\n render() {\n const {\n text,\n labelProps,\n direction,\n answerWrapperProps,\n baselineProps\n } = this.props;\n\n return (\n \n {this.renderRating()}\n \n );\n }\n}\n\nRating.propTypes = {\n name: PropTypes.string,\n text: PropTypes.string,\n answer: PropTypes.string,\n stars: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n starStyle: PropTypes.oneOf(['Stars', 'Stars 2', 'Hearts', 'Light Bulps', 'Lightnings', 'Flags', 'Shields', 'Pluses']),\n direction: PropTypes.string\n};\n\nRating.defaultProps = {\n name: '',\n text: '',\n answer: '',\n stars: '5',\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n starStyle: 'Stars',\n direction: 'column'\n};\n\nexport default Rating;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\n\nimport { stripHTML } from '../../utils';\n\nconst Scale = ({\n text,\n scaleAmount,\n answer,\n direction,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps\n}) => (\n \n {answer ? {`${stripHTML(answer)} / ${scaleAmount}`} : null}\n \n);\n\nScale.propTypes = {\n text: PropTypes.string,\n scaleAmount: PropTypes.string,\n answer: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nScale.defaultProps = {\n text: '',\n scaleAmount: '5', // TODO: Questions API must provide scaleAmount\n answer: '',\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n direction: 'column'\n};\n\nexport default Scale;\n","import React, { PureComponent } from 'react';\nimport Styled from 'styled-components';\nimport PropTypes from 'prop-types';\n\nimport Baseline from '../../components/Baseline';\n\nconst SheetboxCellContainer = Styled.div`\n display: table-cell;\n vertical-align: middle;\n width: 100%;\n`;\n\nconst SheetboxWrapper = Styled.div`\n text-align: center;\n line-height: 1;\n font-size: 16px;\n`;\n\nconst SheetboxInput = Styled.input`\n display: none;\n\n &:checked + label {\n border-color: #54B45C;\n background-color: #F0FFF1;\n background-image: url(https://cdn.jotfor.ms/assets/img/submission/sheetbox_check_icon.png);\n }\n`;\n\nconst SheetboxCustomInput = Styled.label`\n display: inline-block;\n width: 1.125em;\n height: 1.125em;\n border: 2px solid #D3D6EC;\n background-position: center;\n border-radius: 3px;\n background-size: 0.625em;\n background-repeat: no-repeat;\n cursor: pointer;\n`;\n\nclass Sheetbox extends PureComponent {\n render() {\n const {\n answer, id, onChange,\n text, answerWrapperProps, labelProps,\n direction, baselineProps\n } = this.props;\n\n return (\n \n \n \n \n \n \n \n \n );\n }\n}\n\nSheetbox.propTypes = {\n answer: PropTypes.string, // checked => 1, unchecked => 0\n onChange: PropTypes.func,\n id: PropTypes.string\n};\n\nSheetbox.defaultProps = {\n answer: '0',\n onChange: () => { },\n id: ''\n};\n\nexport default Sheetbox;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\n\nimport { stripHTML } from '../../utils';\n\nconst Spinner = ({\n text,\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n direction\n}) => (\n \n {stripHTML(answer)}\n \n);\n\nSpinner.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nSpinner.defaultProps = {\n text: '',\n answer: '',\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n direction: 'column'\n};\n\nexport default Spinner;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport SimpleText from '../../components/Text';\nimport View from '../../components/View';\n\nclass Text extends React.Component {\n render() {\n const {\n text,\n labelProps,\n answerProps\n } = this.props;\n return (\n \n \n \n );\n }\n}\n\nText.propTypes = {\n text: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({})\n};\n\nText.defaultProps = {\n text: '',\n labelProps: {},\n answerProps: {}\n};\n\nexport default Text;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Styled from 'styled-components';\nimport unescape from 'lodash/unescape';\n// Note: if u change unescape in here, please change also mobile side. (index.native.jsx)\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\nimport { sanitizeHTML, replaceUrlsWithAnchors } from '../../utils';\n\nconst StyledText = Styled(Text)`\n white-space: pre-wrap;\n`;\n\nclass Textarea extends React.Component {\n render() {\n const {\n text,\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n direction,\n wysiwyg,\n mde\n } = this.props;\n\n const isHTMLAnswerAllowed = wysiwyg === 'Enable' || mde === 'Yes';\n const sanitizedAnswer = isHTMLAnswerAllowed && sanitizeHTML(answer);\n const replacedText = replaceUrlsWithAnchors(sanitizedAnswer);\n\n const Child = isHTMLAnswerAllowed\n ? \n : (\n \n {answer}\n \n );\n\n return (\n \n {Child}\n \n );\n }\n}\n\nTextarea.propTypes = {\n answer: PropTypes.string,\n labelProps: PropTypes.shape({}),\n text: PropTypes.string,\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string,\n wysiwyg: PropTypes.string,\n mde: PropTypes.string\n};\n\nTextarea.defaultProps = {\n answer: '',\n labelProps: {},\n text: '',\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n direction: 'column',\n wysiwyg: 'Disable',\n mde: 'No'\n};\n\nexport default Textarea;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport unescape from 'lodash/unescape';\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\nimport { replaceUrlsWithAnchors, stripHTML } from '../../utils';\n\nconst Textbox = ({\n text,\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n direction\n}) => {\n const sanitizedAnswer = stripHTML(answer);\n const replacedText = replaceUrlsWithAnchors(sanitizedAnswer);\n\n return (\n \n {replacedText ? (\n \n ) : (\n {unescape(answer)}\n )}\n \n );\n};\n\nTextbox.propTypes = {\n answer: PropTypes.string,\n labelProps: PropTypes.shape({}),\n text: PropTypes.string,\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nTextbox.defaultProps = {\n answer: '',\n labelProps: {},\n text: '',\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n direction: 'column'\n};\n\nexport default Textbox;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\n// import fr from 'moment/locale/fr';\n// import tr from 'moment/locale/tr';\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\n\nclass Time extends React.Component {\n // MOMENT.JS USAGE WITH LOCALES\n // constructor(props) {\n // super(props);\n // moment.locale('fr');\n // }\n\n // This function helps to share logic between web and native components\n getTimeValues() {\n const {\n answer: {\n hourSelect: AnswerHour,\n hourSelectRange: AnswerHourRange,\n minuteSelect: AnswerMinute,\n minuteSelectRange: AnswerMinuteRange,\n ampm: AnswerAMPM,\n ampmRange: AnswerAMPMRange,\n timeRangeDuration: TimeRangeDuration\n },\n format,\n range\n } = this.props;\n let timeString = AnswerHour || AnswerMinute ? `${AnswerHour || '0'}:${AnswerMinute || '00'} ${AnswerAMPM || ''}` : '';\n const timeObject = {\n date: moment(timeString, 'h:mm:ss A'),\n range: null\n };\n\n if (range === 'Yes') {\n const rangeString = AnswerHourRange || AnswerMinuteRange ? `${AnswerHourRange || '0'}:${AnswerMinuteRange || '00'} ${AnswerAMPMRange || ''}` : '';\n timeObject.range = moment(rangeString, 'h:mm:ss A');\n const timeMoment = moment(timeString, 'h:mm:ss A');\n const rangeMoment = moment(rangeString, 'h:mm:ss A');\n const isTimeValid = timeMoment.isValid();\n const isRangeValid = rangeMoment.isValid();\n timeString = isTimeValid || isRangeValid ? `${isTimeValid ? timeMoment.format(format) : ''} - ${isRangeValid ? rangeMoment.format(format) : ''}` : '';\n timeString = TimeRangeDuration ? `${timeString} (${TimeRangeDuration})` : timeString;\n }\n return {\n timeText: timeString,\n timeObject\n };\n }\n\n getText() {\n return this.getTimeValues().timeText;\n }\n\n getNonformattedTime() {\n return this.getTimeValues().timeObject;\n }\n\n render() {\n const {\n text,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n direction\n } = this.props;\n return (\n \n {this.getText()}\n \n );\n }\n}\n\nTime.propTypes = {\n text: PropTypes.string,\n format: PropTypes.string,\n answer: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.shape({\n hourSelect: PropTypes.string,\n hourSelectRange: PropTypes.string,\n minuteSelect: PropTypes.string,\n minuteSelectRange: PropTypes.string,\n ampm: PropTypes.string,\n ampmRange: PropTypes.string\n })\n ]),\n range: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nTime.defaultProps = {\n text: '',\n format: 'LT',\n answer: {},\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n range: '',\n direction: 'column'\n};\n\nexport default Time;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport List from '../../components/List';\nimport View from '../../components/View';\nimport Baseline from '../../components/Baseline';\nimport { ListTypes } from '../../constants/schemas';\n\nconst Yesno = ({\n text,\n options,\n listType,\n showAll,\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n containerProps,\n editMode,\n isToggleActive,\n toggleProps,\n direction\n}) => {\n const items = answer\n ? [[answer, editMode && options.length > 0 && ]]\n : [];\n\n const itemProps = Array.isArray(answerProps)\n ? answerProps.map(prop => ({ style: { backgroundColor: '#E2FFC4' }, ...prop }))\n : { style: { backgroundColor: '#E2FFC4' }, ...answerProps };\n\n return (\n \n \n \n );\n};\n\nYesno.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.string,\n options: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n toggleProps: PropTypes.shape([\n PropTypes.object\n ]),\n containerProps: PropTypes.shape({}),\n showAll: PropTypes.bool,\n editMode: PropTypes.bool,\n isToggleActive: PropTypes.bool,\n listType: ListTypes.schema,\n direction: PropTypes.string\n};\n\nYesno.defaultProps = {\n text: '',\n answer: '',\n options: '',\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n toggleProps: {},\n containerProps: {},\n showAll: false,\n editMode: false,\n isToggleActive: false,\n listType: ListTypes.default,\n direction: 'column'\n};\n\nexport default Yesno;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\n\nconst Autocomp = ({\n text,\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n direction\n}) => (\n \n {answer}\n \n);\n\nAutocomp.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nAutocomp.defaultProps = {\n text: '',\n answer: '',\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n direction: 'column'\n};\n\nexport default Autocomp;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\n\nconst Autoincrement = ({\n text,\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n direction\n}) => (\n \n {typeof answer === 'string' ? answer : ''}\n \n);\n\nAutoincrement.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nAutoincrement.defaultProps = {\n text: '',\n answer: '',\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n direction: 'column'\n};\n\nexport default Autoincrement;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\nimport { LocaleTypes } from '../../constants/schemas';\nimport { getBirthdateText } from '../../utils';\n\nconst Birthdate = ({\n text,\n answer,\n locale,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n direction,\n dateFormat,\n format\n}) => (\n \n \n {answer ? getBirthdateText({\n ...answer, format, locale, dateFormat\n }) : ''}\n \n \n);\n\nBirthdate.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.shape({\n year: PropTypes.string,\n month: PropTypes.string,\n day: PropTypes.string\n }),\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n locale: LocaleTypes.schema,\n format: PropTypes.string,\n direction: PropTypes.string\n};\n\nBirthdate.defaultProps = {\n text: '',\n answer: {\n year: '',\n month: '',\n day: ''\n },\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n locale: LocaleTypes.default,\n format: 'mmddyyyy',\n direction: 'column'\n};\n\nexport default Birthdate;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\n\nconst Calculation = ({\n text,\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n direction\n}) => (\n \n {answer}\n \n);\n\nCalculation.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nCalculation.defaultProps = {\n text: '',\n answer: '',\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n direction: 'column'\n};\n\nexport default Calculation;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\n\nconst Grading = ({\n text,\n total,\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n direction\n}) => {\n const totalGrading = answer && Object.values(answer).reduce((accumulator, value) => {\n const intValue = parseInt(value, 10);\n if (!Number.isNaN(intValue)) {\n return accumulator + intValue;\n }\n return accumulator;\n }, 0);\n return (\n \n {answer ? Object.keys(answer).map(answerLine => {`${answerLine}: ${answer[answerLine] ? answer[answerLine] : 0}`}) : null}\n {totalGrading ? {`Total: ${totalGrading || 0} / ${total}`} : null}\n \n );\n};\n\nGrading.propTypes = {\n text: PropTypes.string,\n total: PropTypes.string,\n answer: PropTypes.shape({}),\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nGrading.defaultProps = {\n text: '',\n total: '',\n answer: {},\n labelProps: {},\n answerProps: {\n style: {\n display: 'block'\n }\n },\n baselineProps: {},\n answerWrapperProps: {},\n direction: 'column'\n};\n\nexport default Grading;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\n\nconst Hidden = ({\n text,\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n direction\n}) => {\n return (\n \n {answer ? answer.split('\\r\\n').map(line => {line}) : null}\n \n );\n};\n\nHidden.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nHidden.defaultProps = {\n text: '',\n answer: '',\n answerProps: {\n style: {\n display: 'block'\n }\n },\n baselineProps: {},\n answerWrapperProps: {},\n labelProps: {},\n direction: 'column'\n};\n\nexport default Hidden;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\n\nimport { stripHTML } from '../../utils';\n\nconst Range = ({\n text,\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n direction\n}) => {\n const rangeFrom = parseInt(answer.from, 10) ? parseInt(answer.from, 10) : 0;\n const rangeTo = parseInt(answer.to, 10) ? parseInt(answer.to, 10) : 0;\n const difference = rangeTo - rangeFrom;\n return (\n \n {`From: ${stripHTML(rangeFrom)}`}\n {`To: ${stripHTML(rangeTo)}`}\n {`Difference: ${stripHTML(difference)}`}\n \n );\n};\n\nRange.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.shape({\n from: PropTypes.string,\n to: PropTypes.string\n }),\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nRange.defaultProps = {\n text: '',\n answer: {\n from: '',\n to: ''\n },\n answerProps: {\n style: {\n display: 'block'\n }\n },\n answerWrapperProps: {},\n baselineProps: {},\n labelProps: {},\n direction: 'column'\n};\n\nexport default Range;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport View from '../../components/View';\nimport Baseline from '../../components/Baseline';\nimport Imageline from '../../components/Imageline';\nimport { isBase64Image } from '../../utils';\n\nclass Signature extends React.Component {\n render() {\n const {\n text,\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n emptySignatureProps,\n emptyAnswerProps,\n direction\n } = this.props;\n\n return (\n \n {(answer && !/(jotform.com\\/$)|(jotform.pro\\/$)/.test(answer))\n ? (\n \n ) : (\n \n \n \n )}\n \n );\n }\n}\n\nSignature.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n containerStyle: PropTypes.shape({}),\n emptySignatureProps: PropTypes.shape({}),\n emptyAnswerProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nSignature.defaultProps = {\n text: '',\n answer: '',\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n containerStyle: {},\n emptySignatureProps: {},\n emptyAnswerProps: {},\n baselineProps: {},\n direction: 'column'\n};\n\nexport default Signature;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\n\nimport { stripHTML } from '../../utils';\n\nconst Slider = ({\n text,\n maxValue,\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n direction\n}) => (\n \n {`${stripHTML(answer)} / ${maxValue}`}\n \n);\n\nSlider.propTypes = {\n text: PropTypes.string,\n maxValue: PropTypes.string,\n answer: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nSlider.defaultProps = {\n text: '',\n maxValue: '',\n answer: '',\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n direction: 'column'\n};\n\nexport default Slider;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport Hypertext from '../../../components/Hypertext';\nimport Imageline from '../../../components/Imageline';\nimport View from '../../../components/View';\n\nimport {\n getFixedUrl, base64Decode, optimizeImageUrl, sanitizeHTML\n} from '../../../utils';\n\nclass MetaWidget extends Component {\n render() {\n const {\n metaData: { type, value }, answer, optimizeImage, hideImageLine\n } = this.props;\n\n switch (type) {\n case 'links':\n return value.map(({ url, name }) => {name});\n case 'imagelinks':\n return value.map(({ url, name }) => {\n let _url = getFixedUrl(url);\n _url = optimizeImage ? optimizeImageUrl(_url) : _url;\n\n return hideImageLine\n ? {name}\n : ;\n });\n case 'htmltext':\n return ;\n default:\n return answer;\n }\n }\n}\n\nMetaWidget.propTypes = {\n answer: PropTypes.string,\n metaData: PropTypes.shape({}),\n optimizeImage: PropTypes.bool,\n hideImageLine: PropTypes.bool\n};\n\nMetaWidget.defaultProps = {\n answer: '',\n metaData: null,\n optimizeImage: false,\n hideImageLine: false\n};\n\nexport default MetaWidget;\n","import React, { createRef, Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { safeJSONParse } from '@jotforminc/utils';\n\nimport Baseline from '../../components/Baseline';\n\nclass Widget extends Component {\n constructor(props) {\n super(props);\n\n const {\n answer: value,\n frameWidth,\n frameHeight\n } = props;\n\n this.state = {\n value,\n frameWidth,\n frameHeight,\n isFrameLoaded: false\n };\n\n this.iframeRef = createRef();\n\n this.sendMessage = this.sendMessage.bind(this);\n this.handleMessage = this.handleMessage.bind(this);\n this.handleFrameLoad = this.handleFrameLoad.bind(this);\n this.renderWidgetFrame = this.renderWidgetFrame.bind(this);\n this.renderWidgetEmbed = this.renderWidgetEmbed.bind(this);\n }\n\n componentDidMount() {\n // Initialize message listening\n global.addEventListener('message', this.handleMessage);\n }\n\n get frameSrc() {\n try {\n const { frameSrc, qid } = this.props;\n let url = frameSrc;\n\n if (Widget.jotformUrlRegex.test(frameSrc)) {\n const [, projectName, widgetPath] = frameSrc.match(Widget.jotformUrlRegex);\n url = `https://${projectName}.jotform.io/${widgetPath}`;\n }\n\n url = new URL(url);\n\n const { searchParams } = url;\n\n searchParams.set('ref', global.location.origin);\n searchParams.append('qid', qid);\n\n return url.toString();\n } catch (error) {\n return null;\n }\n }\n\n handleMessage({ data }) {\n const { qid, type, ...parsedData } = safeJSONParse(data, {});\n const { qid: questionID, handleChange } = this.props;\n\n // Ignore this message\n if (questionID !== qid) {\n return;\n }\n\n switch (type) {\n case 'size': {\n const { width: frameWidth, height: frameHeight } = parsedData;\n this.setState({ frameWidth, frameHeight });\n break;\n }\n case 'data': {\n const { valid, value } = parsedData;\n handleChange(value, valid);\n break;\n }\n default:\n // console.log('unhandled message', type, 'data', parsedData);\n }\n }\n\n handleFrameLoad() {\n const { qid, formID, selectedField } = this.props;\n const { value } = this.state;\n\n this.setState({ isFrameLoaded: true }, () => {\n // Initialize widget\n global.widgetFrameLoaded(\n qid,\n { formID },\n value,\n { selectedField }\n );\n });\n }\n\n sendMessage(data, type) {\n const { qid } = this.props;\n if (this.iframeRef.current) {\n this.iframeRef.current.contentWindow.postMessage(\n JSON.stringify({ ...data, type, qid }),\n '*' // global.location.origin There is currently a cross origin domain issue due to different origins\n );\n }\n }\n\n renderWidgetEmbed() {\n return null;\n }\n\n renderWidgetFrame() {\n const { frameWidth, frameHeight, isFrameLoaded } = this.state;\n const { qid, settings } = this.props;\n\n const widgetSettings = encodeURIComponent(\n JSON.stringify(\n Object.keys(settings).map(name => ({ name, value: settings[name] }))\n )\n );\n\n return this.frameSrc ? (\n <>\n \n \n \n ) : null;\n }\n\n render() {\n const { widgetType } = this.props;\n\n return (\n \n {widgetType === 'field' && this.renderWidgetFrame()}\n {widgetType === 'direct_embed' && this.renderWidgetEmbed()}\n \n );\n }\n}\n\nWidget.propTypes = {\n qid: PropTypes.string,\n answer: PropTypes.string,\n frameSrc: PropTypes.string,\n widgetType: PropTypes.string,\n handleChange: PropTypes.func,\n frameWidth: PropTypes.oneOf([PropTypes.number, PropTypes.string]),\n frameHeight: PropTypes.oneOf([PropTypes.number, PropTypes.string]),\n settings: PropTypes.shape({}),\n formID: PropTypes.string.isRequired\n};\n\nWidget.defaultProps = {\n qid: '',\n answer: '',\n frameSrc: '',\n widgetType: '',\n frameWidth: 100,\n frameHeight: 100,\n handleChange: f => f,\n settings: {}\n};\n\nWidget.jotformUrlRegex = /(?:https?:)?(?:\\/\\/)?((?:data-)?(?:app-)?widgets)\\.jotform\\.io\\/(.*)/;\n\nexport default Widget;\n","import { safeJSONParse } from '@jotforminc/utils';\n\nimport { getFixedUrl, optimizeImageUrl } from '../../utils';\n\nclass WidgetUtils {\n getImageArray(widgetMetaData, optimizeImage = false, timestamp) {\n if (widgetMetaData) {\n const tempAnswer = safeJSONParse(widgetMetaData);\n if (tempAnswer && tempAnswer.widget_metadata && tempAnswer.widget_metadata.type === 'imagelinks') {\n return tempAnswer.widget_metadata.value.map(item => {\n const { name, url, base64 } = item;\n let _url = getFixedUrl(base64 || url, timestamp);\n _url = optimizeImage ? optimizeImageUrl(_url) : _url;\n return {\n name,\n url: _url\n };\n });\n }\n }\n return [];\n }\n\n encodeRequestUrl(url) {\n return url.replace('#', '%23');\n }\n}\n\nexport default new WidgetUtils();\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FileUtils } from '@jotforminc/upload-fields';\n\nimport Imageline from '../../../components/Imageline';\nimport Hypertext from '../../../components/Hypertext';\nimport WidgetUtils from '../utils';\n\nclass ImageUploadPreview extends React.Component {\n render() {\n const {\n answer, onImagePress, optimizeImage, showImageHyperlink, timestamp\n } = this.props;\n const urls = WidgetUtils.getImageArray(answer, optimizeImage, timestamp);\n return urls.map(({ name, url }) => (\n <>\n \n {showImageHyperlink && (\n \n {name}\n \n )}\n \n ));\n }\n}\n\nImageUploadPreview.propTypes = {\n answer: PropTypes.string,\n onImagePress: PropTypes.func,\n optimizeImage: PropTypes.bool,\n showImageHyperlink: PropTypes.bool\n};\n\nImageUploadPreview.defaultProps = {\n answer: '',\n onImagePress: null,\n optimizeImage: false,\n showImageHyperlink: false\n};\n\nexport default ImageUploadPreview;\n","// Smooth Signature\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Imageline from '../../../components/Imageline';\nimport { isNative } from '../../../utils/environment';\n\nconst SmoothSignature = ({\n answer, cfname, onImagePress, optimizeImage\n}) => (\n \n);\n\nSmoothSignature.propTypes = {\n answer: PropTypes.string,\n cfname: PropTypes.string,\n onImagePress: PropTypes.func,\n optimizeImage: PropTypes.bool\n};\n\nSmoothSignature.defaultProps = {\n answer: '',\n cfname: '',\n onImagePress: null,\n optimizeImage: false\n};\n\nexport default SmoothSignature;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport unescape from 'lodash/unescape';\nimport { safeJSONParse } from '@jotforminc/utils';\n\nimport Tableview from '../../../components/Tableview';\nimport { stripHTML, processWidgetTableData } from '../../../utils';\n\nconst ConfigurableList = ({\n answer,\n answerProps,\n sublabelProps,\n containerStyle,\n submitNarration,\n transpose,\n selectedField,\n fields\n}) => {\n const parsedAnswer = (answer && typeof answer === 'object') ? answer : safeJSONParse(stripHTML(answer), []);\n let columns = parsedAnswer.length > 0 ? Object.keys(parsedAnswer[0]) : [];\n let tableData = parsedAnswer.length > 0 ? parsedAnswer.filter(key => key).map(Object.values) : [];\n ({ columns, tableData } = processWidgetTableData(selectedField, parsedAnswer, columns, tableData, fields));\n return (\n parsedAnswer.length > 0 && submitNarration !== 'Yes'\n ? (\n \n )\n : (
    {unescape(answer)}
    )\n );\n};\n\nConfigurableList.propTypes = {\n answer: PropTypes.string,\n transpose: PropTypes.bool,\n submitNarration: PropTypes.string,\n answerProps: PropTypes.shape({}),\n sublabelProps: PropTypes.shape({}),\n containerStyle: PropTypes.shape({})\n};\n\nConfigurableList.defaultProps = {\n answer: '',\n transpose: false,\n submitNarration: 'No',\n answerProps: {},\n sublabelProps: {},\n containerStyle: {}\n};\n\nexport default ConfigurableList;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FileUtils } from '@jotforminc/upload-fields';\n\nimport MetaWidget from '../MetaWidget';\nimport Imageline from '../../../components/Imageline';\nimport { getFixedUrl, optimizeImageUrl } from '../../../utils';\nimport Baseline from '../../../components/Baseline';\nimport { isNative } from '../../../utils/environment';\nimport Hypertext from '../../../components/Hypertext';\nimport WidgetUtils from '../utils';\n\nconst TakePhoto = props => {\n const {\n answer,\n metaData,\n onImagePress,\n thumbnail,\n baselineProps,\n selectedField,\n optimizeImage,\n showImageLink,\n hideImageLine,\n timestamp\n } = props;\n const { selectionProps = {} } = baselineProps;\n const { isSelectable = false, onSelect = f => f } = selectionProps;\n\n const handlePress = () => {\n if (isSelectable) {\n onSelect('answer');\n return;\n }\n onImagePress();\n };\n\n if (!metaData) {\n let value = answer ? getFixedUrl(answer, timestamp) : null;\n value = optimizeImage ? optimizeImageUrl(value) : value;\n if (thumbnail !== '') value = thumbnail;\n baselineProps.widgetId = selectedField;\n\n const href = value ? FileUtils.getUploadUrl(WidgetUtils.encodeRequestUrl(value)) : null;\n const name = value ? FileUtils.getFileName(value) : '';\n\n const isInitialWidget = baselineProps.widgetId === '533a8c19a3f5fec35d00009a';\n\n return (\n \n {!hideImageLine && (\n onSelect('answer')}\n imageStyle={isNative() ? { flex: 1, height: 160 } : undefined}\n noImgPlaceholder={isInitialWidget}\n />\n )}\n {showImageLink && href && (\n \n {name}\n \n )}\n \n );\n }\n\n return ;\n};\n\nTakePhoto.propTypes = {\n metaData: PropTypes.shape({\n value: PropTypes.arrayOf(PropTypes.shape({\n name: PropTypes.string,\n url: PropTypes.string\n }))\n }),\n baselineProps: PropTypes.shape({\n selectionProps: PropTypes.shape({\n isSelectable: PropTypes.bool,\n onSelect: PropTypes.func\n })\n }),\n onImagePress: PropTypes.func,\n answer: PropTypes.string,\n thumbnail: PropTypes.string,\n selectedField: PropTypes.string,\n optimizeImage: PropTypes.bool,\n showImageLink: PropTypes.bool,\n hideImageLine: PropTypes.bool\n};\n\nTakePhoto.defaultProps = {\n metaData: null,\n baselineProps: {\n selectionProps: {\n isSelectable: false,\n onSelect: f => f,\n selectedParts: [],\n wrapperStyle: {}\n }\n },\n answer: '',\n thumbnail: '',\n onImagePress: null,\n selectedField: '',\n optimizeImage: false,\n showImageLink: false,\n hideImageLine: false\n};\n\nexport default TakePhoto;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { getFixedUrl } from '../../../utils';\nimport Hypertext from '../../../components/Hypertext';\n\nconst VoiceRecorder = ({ answer, onPress }) => {\n return {answer};\n};\n\nVoiceRecorder.propTypes = {\n answer: PropTypes.string,\n onPress: PropTypes.func\n};\n\nVoiceRecorder.defaultProps = {\n answer: '',\n onPress: () => { }\n};\n\nexport default VoiceRecorder;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { getFixedUrl } from '../../../utils';\nimport Hypertext from '../../../components/Hypertext';\n\nconst csvUrlRegex = /(?:\\r\\n)?CSV\\:\\s*(.*?\\.csv)/; // eslint-disable-line\n\nconst LocationCoordinate = ({ answer }) => {\n // Answer matches the expected format\n if (csvUrlRegex.test(answer)) {\n const [fullMatch, csvPath] = answer.match(csvUrlRegex);\n return {answer.replace(fullMatch, '')};\n }\n\n return {answer};\n};\n\nLocationCoordinate.propTypes = {\n answer: PropTypes.string\n};\n\nLocationCoordinate.defaultProps = {\n answer: ''\n};\n\nexport default LocationCoordinate;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { ListTypes } from '../../../constants/schemas';\n\nimport List from '../../../components/List';\n\nconst ChecklistWidget = ({\n listType,\n answer,\n hideunchecked,\n answerProps,\n showAll,\n containerProps\n}) => {\n const answerLines = (answer || '').split(/\\r\\n|\\n|\\r/);\n const answerCheckboxObjects = answerLines && answerLines.map(item => {\n const [_, checkedStatus, optionName] = item.match(/(^(?:UN)?CHECKED): (.*)/) || []; // eslint-disable-line\n\n return {\n checked: !(checkedStatus === 'UNCHECKED'),\n optionName: (optionName || item)\n };\n });\n\n const allItems = answerCheckboxObjects.map(({ optionName }) => optionName);\n const items = answerCheckboxObjects.filter(({ checked }) => checked).map(({ optionName }) => optionName);\n\n const longerOptions = allItems.length > items.length ? allItems : items;\n const itemProps = Array.isArray(answerProps) ? answerProps : longerOptions.map(() => answerProps);\n\n return (\n \n );\n};\n\nChecklistWidget.propTypes = {\n listType: ListTypes.schema,\n answer: PropTypes.string,\n hideunchecked: PropTypes.bool,\n showAll: PropTypes.bool,\n answerProps: PropTypes.shape({}),\n containerProps: PropTypes.shape({})\n};\n\nChecklistWidget.defaultProps = {\n answer: '',\n listType: ListTypes.default,\n hideunchecked: true,\n showAll: false,\n answerProps: {},\n containerProps: {}\n};\n\nexport default ChecklistWidget;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport List from '../../../components/List';\nimport { ListPropTypes } from '../../../constants/schemas';\n\nconst DynamicTextBoxWidget = ({\n answer,\n listType,\n answerProps,\n containerProps\n}) => {\n const answerLines = answer.split(/\\r\\n|\\r|\\n/g);\n return (\n answerProps)}\n containerProps={containerProps}\n />\n );\n};\n\nDynamicTextBoxWidget.propTypes = {\n answer: PropTypes.string,\n ...ListPropTypes.schema\n};\n\nDynamicTextBoxWidget.defaultProps = {\n answer: '',\n ...ListPropTypes.default\n};\n\nexport default DynamicTextBoxWidget;\n","// Tiny MCE\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport unescape from 'lodash/unescape';\nimport DOMPurify from 'dompurify';\n\nimport View from '../../../components/View';\n\nconst TinyMCE = ({ answer }) => (\n \n);\n\nTinyMCE.propTypes = {\n answer: PropTypes.string\n};\n\nTinyMCE.defaultProps = {\n answer: ''\n};\n\nexport default TinyMCE;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { ListTypes } from '../../../constants/schemas';\nimport List from '../../../components/List';\n\nconst ButtonCheckboxWidget = ({\n listType,\n answer,\n hideunchecked,\n answerProps,\n showAll,\n containerProps,\n options\n}) => {\n const optionsChecked = (answer || '').split(/\\r\\n|\\n|\\r/);\n const optionsAll = options.split(/\\r\\n|\\n|\\r/);\n\n const longerOptions = optionsAll.length > optionsChecked.length ? optionsAll : optionsChecked;\n const itemProps = Array.isArray(answerProps) ? answerProps : longerOptions.map(() => answerProps);\n\n return (\n \n );\n};\n\nButtonCheckboxWidget.propTypes = {\n listType: ListTypes.schema,\n answer: PropTypes.string,\n hideunchecked: PropTypes.bool,\n showAll: PropTypes.bool,\n answerProps: PropTypes.shape({}),\n containerProps: PropTypes.shape({}),\n options: PropTypes.string\n};\n\nButtonCheckboxWidget.defaultProps = {\n answer: '',\n listType: ListTypes.default,\n hideunchecked: true,\n showAll: false,\n answerProps: {},\n containerProps: {},\n options: ''\n};\n\nexport default ButtonCheckboxWidget;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport View from '../../../components/View';\nimport Imageline from '../../../components/Imageline';\nimport { getFixedUrl, optimizeImageUrl } from '../../../utils';\n\nconst UploadCare = props => {\n const { answer, onImagePress, optimizeImage } = props;\n return (\n \n {answer.split('\\r\\n').map(answerPart => {\n let value = null;\n if (answerPart) {\n const url = getFixedUrl(answerPart);\n value = optimizeImage ? optimizeImageUrl(url) : url;\n }\n return ;\n })}\n \n );\n};\n\nUploadCare.propTypes = {\n onImagePress: PropTypes.func,\n answer: PropTypes.string,\n optimizeImage: PropTypes.bool\n};\n\nUploadCare.defaultProps = {\n answer: '',\n onImagePress: null,\n optimizeImage: false\n};\n\nexport default UploadCare;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../../components/Text';\nimport View from '../../../components/View';\n\nconst DatePickerWidget = ({\n answer,\n description,\n descriptionProps\n}) => {\n const { className = '' } = descriptionProps;\n const descriptionPart = description ? {description} : null;\n return (\n \n {descriptionPart}\n {answer}\n \n );\n};\n\nDatePickerWidget.propTypes = {\n descriptionProps: PropTypes.shape({\n className: PropTypes.string\n }),\n description: PropTypes.string,\n answer: PropTypes.string\n};\n\nDatePickerWidget.defaultProps = {\n descriptionProps: {},\n answer: '',\n description: ''\n};\n\nexport default DatePickerWidget;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../../components/Text';\n\nconst GeoLocation = ({ answer }) => {answer};\n\nGeoLocation.propTypes = {\n answer: PropTypes.string\n};\n\nGeoLocation.defaultProps = {\n answer: ''\n};\n\nexport default GeoLocation;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../../components/Text';\n\nconst GPSLocation = ({ answer }) => {answer};\n\nGPSLocation.propTypes = {\n answer: PropTypes.string\n};\n\nGPSLocation.defaultProps = {\n answer: ''\n};\n\nexport default GPSLocation;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../../components/Text';\n\nconst GeoStamp = ({ answer }) => {answer};\n\nGeoStamp.propTypes = {\n answer: PropTypes.string\n};\n\nGeoStamp.defaultProps = {\n answer: ''\n};\n\nexport default GeoStamp;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { getFixedUrl } from '../../../utils';\nimport Hypertext from '../../../components/Hypertext';\n\nconst VideoRecorder = ({ answer, onPress }) => {\n return {answer};\n};\n\nVideoRecorder.propTypes = {\n answer: PropTypes.string,\n onPress: PropTypes.func\n};\n\nVideoRecorder.defaultProps = {\n answer: '',\n onPress: () => { }\n};\n\nexport default VideoRecorder;\n","// Loom Video Recorder\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Hypertext from '../../../components/Hypertext';\nimport { getFixedUrl } from '../../../utils';\n\nconst LoomVideoRecorder = ({ metaData, widgetVideoMode }) => {\n return metaData ? metaData.value.map(({ url, name }) => {\n const fixedUrl = getFixedUrl(url);\n const key = `${url}_${name}`;\n return widgetVideoMode ? (\n \n ) : {name};\n }) : '';\n};\n\nLoomVideoRecorder.propTypes = {\n metaData: PropTypes.shape({\n value: PropTypes.arrayOf(PropTypes.shape({\n name: PropTypes.string,\n url: PropTypes.string\n }))\n }),\n widgetVideoMode: PropTypes.bool\n};\n\nLoomVideoRecorder.defaultProps = {\n metaData: null,\n widgetVideoMode: false\n};\n\nexport default LoomVideoRecorder;\n","import {\n TABLEVIEW_WIDGETS,\n LISTVIEW_WIDGETS,\n IMAGE_WIDGETS,\n HTML_WIDGETS\n} from '../../../constants';\n\n// Please follow the naming rule.\n// Add name of the widget in its file.\nimport EditableWidget from '../../../editables/Widget';\nimport ImageUploadPreview from './5295b800485bd19f5d000005';\nimport SmoothSignature from './529467003477f3512000001f';\nimport ConfigurableList from './533946093c1ad0c45d000070';\nimport TakePhoto from './529c8286a75dae5e7f000005';\nimport VoiceRecorder from './5297188631357d390700000d';\nimport LocationCoordinate from './55486915347ef1086c000017';\nimport ChecklistWidget from './52961c97e3e5266570000004';\nimport DynamicTextBoxWidget from './528ee7cf8d5a5fc76a000004';\nimport TinyMCE from './5295f8da6396ecd66d00000e';\nimport ButtonCheckboxWidget from './5290397c57a764425100000b';\nimport UploadCare from './573ae96be567f40178000011';\nimport DatePickerWidget from './52934dbf3be147110a000030';\nimport GeoLocation from './5343b614d5f416b42a000004';\nimport GPSLocation from './5379f8c6d6aa823065000009';\nimport GeoStamp from './5935688a725d1797050002e7';\nimport VideoRecorder from './5ce54324d21603df40000031';\nimport LoomVideoRecorder from './302518f9f4744e3ae379dd71';\n\nconst tableViewWidgetComponents = TABLEVIEW_WIDGETS.reduce((prev, curr) => ({\n ...prev,\n [curr]: ConfigurableList\n}), {});\n\nconst listViewWidgetComponents = LISTVIEW_WIDGETS.reduce((prev, curr) => ({\n ...prev,\n [curr]: DynamicTextBoxWidget\n}), {});\n\nconst imageWidgetComponents = IMAGE_WIDGETS.reduce((prev, curr) => ({\n ...prev,\n [curr]: TakePhoto\n}), {});\n\nconst htmlWidgetComponents = HTML_WIDGETS.reduce((prev, curr) => ({\n ...prev,\n [curr]: TinyMCE\n}), {});\n\nexport default {\n // format\n // [widgetKey] : 'widgetFile'\n ...tableViewWidgetComponents,\n ...listViewWidgetComponents,\n ...imageWidgetComponents,\n ...htmlWidgetComponents,\n '5295b800485bd19f5d000005': ImageUploadPreview,\n '529467003477f3512000001f': SmoothSignature,\n '5297188631357d390700000d': VoiceRecorder,\n '55486915347ef1086c000017': LocationCoordinate,\n '52961c97e3e5266570000004': ChecklistWidget,\n '5297606bfe8fa6bf0d000016': EditableWidget, // Data Grid\n '5293065005a7114f7000002a': EditableWidget, // Fit Text\n '5290397c57a764425100000b': ButtonCheckboxWidget,\n '573ae96be567f40178000011': UploadCare,\n '52934dbf3be147110a000030': DatePickerWidget,\n '5343b614d5f416b42a000004': GeoLocation,\n '5379f8c6d6aa823065000009': GPSLocation,\n '5935688a725d1797050002e7': GeoStamp,\n '5ce54324d21603df40000031': VideoRecorder,\n '302518f9f4744e3ae379dd71': LoomVideoRecorder\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport memoize from 'lodash/memoize';\n\nimport MetaWidget from './MetaWidget';\nimport CustomWidgets from './CustomWidgets';\nimport Text from '../../components/Text';\nimport Hypertext from '../../components/Hypertext';\nimport Baseline from '../../components/Baseline';\nimport { parseJSONObject, sanitizeHTML } from '../../utils';\nimport View from '../../components/View';\n\nclass Widget extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n metaData: false,\n CustomComponent: null\n };\n }\n\n static getDerivedStateFromProps({ answer, selectedField }) {\n return {\n metaData: Widget.parseMetaData(answer),\n CustomComponent: CustomWidgets[selectedField]\n };\n }\n\n customAnswerForWidget() {\n const { answer, URL, answerProps: { textProps } } = this.props;\n const { metaData, CustomComponent } = this.state;\n\n if (CustomComponent) {\n return (\n \n );\n }\n\n if (metaData) {\n return (\n \n );\n }\n\n if (!answer && URL) {\n return {URL};\n }\n\n if (typeof answer === 'string') {\n return {sanitizeHTML(unescape(answer.replace(/&/g, '&')))};\n }\n if (Array.isArray(answer)) {\n return {sanitizeHTML(answer.join(' '))};\n }\n if (typeof answer === 'object') {\n return {sanitizeHTML(Object.keys(answer).map(key => answer[key]).join(' '))};\n }\n }\n\n render() {\n const {\n text,\n labelProps,\n dontSpreadAnswerPropsToWrapper,\n answerProps,\n answerWrapperProps,\n baselineProps,\n direction\n } = this.props;\n\n return (\n \n \n {this.customAnswerForWidget()}\n \n \n );\n }\n}\n\nWidget.propTypes = {\n URL: PropTypes.string,\n text: PropTypes.string,\n description: PropTypes.string,\n cfname: PropTypes.string,\n selectedField: PropTypes.string,\n answer: PropTypes.string,\n labelProps: PropTypes.shape({}),\n dontSpreadAnswerPropsToWrapper: PropTypes.bool,\n answerProps: PropTypes.shape({\n onLinkPress: PropTypes.func,\n onImagePress: PropTypes.func\n }),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n containanswerPropserStyle: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nWidget.defaultProps = {\n URL: '',\n text: '',\n description: '',\n cfname: '',\n selectedField: '',\n answer: '',\n labelProps: {},\n dontSpreadAnswerPropsToWrapper: false,\n answerProps: { onLinkPress: () => { }, onImagePress: null },\n answerWrapperProps: {},\n baselineProps: {},\n containanswerPropserStyle: {},\n direction: 'column'\n};\n\nWidget.parseMetaData = memoize(answer => {\n const { widget_metadata: metaData } = parseJSONObject(answer) || {};\n return metaData;\n});\n\nexport default Widget;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { closest } from '@jotforminc/utils';\n\nclass ClickOutside extends Component {\n constructor(props) {\n super(props);\n\n this.handleClickOutside = this.handleClickOutside.bind(this);\n }\n\n componentDidMount() {\n const { forceCloseOutside } = this.props;\n if (!forceCloseOutside) window.addEventListener('click', this.handleClickOutside, true);\n }\n\n componentWillUnmount() {\n const { forceCloseOutside } = this.props;\n if (!forceCloseOutside) window.removeEventListener('click', this.handleClickOutside, true);\n }\n\n handleClickOutside(event) {\n const { onClickOutside, exceptionClass } = this.props;\n const target = exceptionClass !== '' ? closest(event.target, `.${exceptionClass}`, '.jSheetRow-cell') : null;\n if (!this.wrapper.contains(event.target) && target === null) {\n onClickOutside(event);\n }\n }\n\n render() {\n const { children } = this.props;\n return (\n
    { this.wrapper = wrapper; }}>{children}
    \n );\n }\n}\n\nClickOutside.propTypes = {\n children: PropTypes.node.isRequired,\n onClickOutside: PropTypes.func,\n forceCloseOutside: PropTypes.bool,\n exceptionClass: PropTypes.string\n};\n\nClickOutside.defaultProps = {\n forceCloseOutside: false,\n onClickOutside: () => {},\n exceptionClass: ''\n};\n\nexport default ClickOutside;\n","import React from 'react';\nimport Text from '../../components/Text';\nimport View from '../../components/View';\nimport Styled from '../../utils/styled';\nimport Imageline from '../../components/Imageline';\n\nconst StyledView = Styled(View)`\n border-bottom: 1px solid #C2C3C4;\n display: flex;\n flex-direction: column;\n padding-bottom: 12px;\n margin-top: 12px;\n page-break-inside: avoid;\n`;\n\nconst ProductView = Styled(View)`\n padding: 15px 0;\n border-bottom: 1px solid #C2C3C4;\n display: flex;\n page-break-inside: avoid;\n`;\n\nconst ProductName = Styled(Text)`\n font-weight: bold;\n color: #18152C;\n`;\n\nconst ProductPeriod = Styled(Text)`\n font-weight: bold;\n color: #18152C;\n`;\n\nconst ProductPrice = Styled(Text)`\n flex-shrink: 1;\n font-weight: bold;\n`;\n\nconst ProductImage = Styled(Text)`\n flex-shrink: 1;\n min-width: 100px;\n`;\n\nconst ProductOptions = Styled(View)`\n flex-direction: column;\n`;\n\nconst ProductDetails = Styled(View)`\n flex-grow: 1;\n padding: 0 15px;\n line-height: 1.5em;\n`;\n\nconst HeaderText = Styled(Text)`\n font-weight: bold;\n`;\n\nconst PriceView = Styled(View)`\n display: flex;\n margin-bottom: 12px;\n`;\n\nconst PriceLabel = Styled(Text)`\n flex-grow: 1;\n`;\n\nconst PriceText = Styled(Text)`\n flex-shrink: 1;\n`;\n\nconst PriceDetailsView = Styled(View)`\n margin: 12px 0;\n font-weight: bold;\n display: flex;\n flex-direction: column;\n border-bottom: 1px solid #C2C3C4;\n`;\n\nconst PaymentImageText = Styled(Text)`\n padding: 41px 5px;\n background-color: #CEF1FE;\n width: 100%;\n max-width: 100px;\n text-align: center;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst PayerView = Styled(View)`\n border-bottom: 1px solid #C2C3C4;\n display: flex;\n flex-direction: column;\n padding-bottom: 12px;\n margin-top: 12px;\n page-break-inside: avoid;\n`;\n\nconst PayerViewTitle = Styled(Text)`\n font-weight: bold;\n`;\n\nconst ProductImageline = Styled(props => )`\n text-align: center;\n`;\n\n// Sheets\nconst SheetsProductView = Styled(View)`\n ${({ isPreview }) => (isPreview\n ? `display: table;\n width: 100%;\n & + & {\n padding-top: 12px;\n margin-top: 12px;\n border-top: 1px solid rgba(209, 212, 228, 0.5);\n }`\n : `display: inline-table;\n height: 26px;\n border-radius: 4px;\n padding: 0 4px;\n margin-right: 6px;`)\n}\n`;\n\nconst SheetsProductName = Styled(Text)`\n display: inline-table;\n vertical-align: middle;\n color: #18152C;\n line-height: 26px;\n ${({ isPreview }) => isPreview\n && 'font-family: \"Circular Std Medium\", \"Work Sans SemiBold\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;'\n}\n`;\n\nconst SheetsProductDetails = Styled(View)`\n display: table-cell;\n vertical-align: middle;\n padding-right: 20px;\n white-space: normal;\n`;\n\nconst SheetsPriceView = Styled(View)`\n display: table;\n width: 100%;\n table-layout: fixed;\n`;\n\nconst SheetsPriceLabel = Styled(Text)`\n display: table-cell;\n vertical-align: middle;\n`;\n\nconst SheetsPriceText = Styled(Text)`\n display: table-cell;\n vertical-align: middle;\n text-align: right;\n font-size: 18px;\n font-family: \"Circular Std Medium\", \"Work Sans SemiBold\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n`;\n\nconst SheetsPriceDetailsView = Styled(View)`\n display: block;\n text-decoration: none;\n border-top: 1px solid rgba(209, 212, 228, 0.5);\n text-transform: uppercase;\n padding-top: 12px;\n margin-top: 16px;\n`;\n\nconst SheetsPayerView = Styled(View)`\n display: block;\n padding-top: 16px;\n position: relative;\n margin-top: 12px;\n border-top: 1px solid rgba(209, 212, 228, 0.5);\n`;\n\nconst SheetsPayerViewTitle = Styled(Text)`\n font-family: \"Circular Std Medium\", \"Work Sans SemiBold\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n font-size: 17px;\n margin-bottom: 6px;\n\n & ~ * {\n color: #51585D;\n font-size: 15px;\n }\n`;\n\nconst SheetsProductOptions = Styled(Text)`\n color: #51585D;\n font-size: 14px;\n & > div {\n float: left;\n width: 100%;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n`;\n\nconst SheetsProductPrice = Styled(Text)`\n display: table-cell;\n vertical-align: middle;\n white-space: nowrap;\n text-align: right;\n width: 1px;\n`;\n\nconst SheetsProductImageline = Styled(props => )`\n display: table-cell;\n vertical-align: middle;\n font-size: 0;\n ${({ isPreview }) => (isPreview\n ? `height: 60px;\n width: 60px;\n border: 1px solid #D5D9EC;\n border-radius: 4px;\n overflow: hidden;\n & + div {\n padding-left: 14px;\n }`\n : `width: 20px;\n height: 20px;\n & + div {\n padding-left: 6px;\n }\n & > div {\n display: inherit;\n vertical-align: middle;\n width: 20px;\n height: 20px;\n border-radius: 4px;\n overflow: hidden;\n background-color: #fff;\n }`\n )\n}\n`;\n\nconst SheetsPaymentImageText = Styled(Text)`\n display: table-cell;\n vertical-align: middle;\n ${({ isPreview }) => (isPreview\n ? `width: 1px;\n white-space: nowrap;\n padding: 30px 10px;\n border-radius: 4px;\n font-size: 18px;\n font-family: \"Circular Std Medium\", \"Work Sans SemiBold\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n & + div {\n padding: 0 0 0 14px;\n display: table-cell;\n }`\n : `padding: 0 4px;\n & + div {\n padding: 0 4px;\n display: none;\n }\n `\n )}\n`;\n\nexport const defaultsMap = {\n StyledView,\n ProductView,\n ProductName,\n ProductPeriod,\n ProductPrice,\n ProductImage,\n ProductOptions,\n ProductDetails,\n HeaderText,\n PriceLabel,\n PriceText,\n PriceDetailsView,\n PaymentImageText,\n PriceView,\n ProductImageline,\n PayerView,\n PayerViewTitle\n};\n\nexport const sheetsMap = {\n ...defaultsMap,\n ProductView: SheetsProductView,\n ProductImageline: SheetsProductImageline,\n ProductName: SheetsProductName,\n PriceView: SheetsPriceView,\n PriceLabel: SheetsPriceLabel,\n PriceText: SheetsPriceText,\n ProductDetails: SheetsProductDetails,\n PriceDetailsView: SheetsPriceDetailsView,\n PayerView: SheetsPayerView,\n PayerViewTitle: SheetsPayerViewTitle,\n ProductOptions: SheetsProductOptions,\n ProductPrice: SheetsProductPrice,\n PaymentImageText: SheetsPaymentImageText\n};\n\nexport function getStyledComponent(appName) {\n switch (appName) {\n case 'sheets':\n return sheetsMap;\n default:\n return defaultsMap;\n }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { t } from '@jotforminc/translation';\nimport View from '../../components/View';\nimport Text from '../../components/Text';\nimport Hypertext from '../../components/Hypertext';\nimport ClickOutside from '../../components/ClickOutside';\nimport { getStyledComponent } from './StyledComponents';\n\n// All of the magic is because of Jotform3/Submission::makeProductArray() function\nclass PaymentView extends React.Component {\n constructor(props) {\n super(props);\n this.Styled = getStyledComponent(props.appName);\n }\n\n get paymentType() {\n const { allProducts, type } = this.props;\n\n return (allProducts && allProducts[0] && allProducts[0].paymentType) ? allProducts[0].paymentType : type;\n }\n\n getBoughtProducts = () => {\n // Product related data\n const { boughtProducts, allProducts, type } = this.props;\n return boughtProducts.product.reduce((accumulator, product, currentIndex) => {\n const productOptions = this.extractProductProperties(product, type);\n\n if (this.paymentType === 'donation') {\n accumulator.push(productOptions);\n return accumulator;\n }\n\n if (allProducts) {\n // If you delete a product in the middle of a the product list, the allProducts\n // turn from an array to an object.\n const allProductsArray = Array.isArray(allProducts) ? allProducts : Object.values(allProducts);\n\n const productSpecs = allProductsArray.find(productSpec => productSpec.name.trim() === productOptions.name.trim());\n\n if (productSpecs) {\n const {\n name = '',\n icon = '',\n pid: productID = '',\n period = '',\n price = '',\n images = []\n } = productSpecs;\n\n const isImage = boughtProducts.shortView && boughtProducts.shortView.products && boughtProducts.shortView.products[currentIndex];\n\n accumulator.push({\n name,\n image: isImage ? boughtProducts.shortView.products[currentIndex].image : images[0] || icon || '',\n productID,\n period,\n price,\n ...productOptions\n });\n }\n }\n\n return accumulator;\n }, []);\n };\n\n getViewCustomProps = viewKey => {\n const { popoverProps } = this.props;\n return popoverProps && popoverProps[viewKey] ? popoverProps[viewKey] : {};\n };\n\n getPriceWithCurrency = price => {\n const { boughtProducts } = this.props;\n if (this.paymentType === 'subscription' && boughtProducts.currency && price) {\n return `${parseFloat(price).toFixed(2)} ${boughtProducts.currency}`;\n }\n return price;\n };\n\n getProductImage = ({ image, price }, isPreview = false) => {\n const {\n colorMap, appName, showImages\n } = this.props;\n const { Styled } = this;\n\n if (this.paymentType === 'donation' && !image) {\n return ({this.getPriceWithCurrency(price)});\n }\n\n if (showImages) {\n const noImagePlaceHolder = '//cdn.jotfor.ms/assets/img/cardforms/noImage-placeholder.svg';\n let imageContainerStyles = {\n maxWidth: '100px',\n maxHeight: '100px'\n };\n if (appName === 'sheets' && !isPreview) {\n imageContainerStyles = {\n maxWidth: '100%',\n maxHeight: '100%',\n borderRadius: '4px'\n };\n } else if (appName === 'sheets' && isPreview) {\n imageContainerStyles = {\n maxWidth: '60px',\n maxHeight: '60px',\n borderRadius: '2px'\n };\n }\n return (\n \n );\n }\n\n return null;\n };\n\n getProductView = (boughtProducts, isPreview = false) => {\n if (!boughtProducts || boughtProducts.length < 1) return null;\n const { Styled } = this;\n const {\n colorMap,\n labelProps,\n productProps\n } = this.props;\n\n const productView = boughtProducts.map(product => {\n const colorKey = this.paymentType === 'donation' ? product.price : product.productID;\n const options = product.options ? product.options.join('_') : '';\n const productId = product.productID ? product.productID : null;\n let productKey = product.name.concat(product.price);\n if (productId) {\n productKey = productKey.concat(productId, options);\n }\n\n return isPreview ? (\n \n {this.getProductImage(product)}\n \n {product.name}\n \n \n ) : (\n \n {this.getProductImage(product, true)}\n \n \n {product.name}\n \n \n {product.options ? product.options.map(opt => {typeof opt === 'string' ? opt.replace(/"/g, '\"') : opt}) : null}\n \n \n {['product'].includes(this.paymentType)\n ? (\n \n {product.price}\n \n ) : null}\n \n );\n });\n\n return productView;\n };\n\n getSinglePriceView = (topic, cost, currency) => {\n if (!cost) return null;\n const { Styled, props: { labelProps = {} } } = this;\n\n return (\n \n {topic}\n {`${cost}${currency}`}\n \n );\n };\n\n getPriceView = ({\n currency,\n coupon,\n shipping,\n tax,\n total,\n subtotal\n }) => {\n const {\n paymentStrings\n } = this.props;\n\n const { Styled } = this;\n if (!shipping && !tax && !total && !coupon && !subtotal) return null;\n const currencyText = `${currency ? ` ${currency}` : ''}`;\n\n const paymentStringsDefault = {\n couponApply: 'Apply',\n couponEnter: 'Coupon Code',\n totalSubtotal: 'Subtotal',\n taxTax: 'Tax',\n shippingShipping: 'Shipping',\n totalTotal: 'Total'\n };\n\n const strings = paymentStrings ? { ...paymentStringsDefault, ...paymentStrings[0] } : paymentStringsDefault;\n\n return (\n \n {this.getSinglePriceView(strings.totalSubtotal, subtotal, currencyText)}\n {this.getSinglePriceView(strings.shippingShipping, shipping, currencyText)}\n {this.getSinglePriceView(strings.taxTax, tax, currencyText)}\n {this.getSinglePriceView(strings.totalTotal, total, currencyText)}\n {this.getSinglePriceView(strings.couponEnter, coupon, '')}\n \n );\n };\n\n getPayerView = ({\n name,\n email,\n company\n }) => {\n const { Styled, props: { labelProps = {}, answerProps = {} } } = this;\n if (!name && !email && !company) return null;\n const customProps = this.getViewCustomProps('payerView');\n\n return (\n \n {t('Payer Information')}\n {name ? {name} : null}\n {email ? {email} : null}\n {company ? {company} : null}\n \n );\n };\n\n getShippingView = ({\n name,\n street,\n city,\n state,\n postalCode,\n country\n }) => {\n const { Styled, props: { labelProps = {}, answerProps = {} } } = this;\n if (!name && !street && !city && !state && !postalCode && !country) return null;\n return (\n \n {t('Shipping Address')}\n {name ? {name} : null}\n {street ? {street} : null}\n {city || state || postalCode ? {`${city} ${state} ${postalCode}`} : null}\n {country ? {country} : null}\n \n );\n };\n\n getTransactionView = ({\n text,\n id\n }) => {\n const { Styled, props: { labelProps = {}, answerProps = {} } } = this;\n if (!text || !id) return null;\n return (\n \n {text}\n {id}\n \n );\n };\n\n getTransactionInformation = () => {\n const { boughtProducts, gateway } = this.props;\n let text = t('Transaction ID');\n let id = boughtProducts.transactionid;\n\n switch (gateway) {\n case 'control_cardconnect':\n text = t('Reference ID');\n id = boughtProducts.reference ? boughtProducts.reference : id;\n break;\n case 'control_square':\n text = t('Payment ID');\n break;\n default:\n break;\n }\n\n return {\n text: text,\n id: id\n };\n };\n\n getPaymentMethodView = ({\n text,\n pm\n }) => {\n const { Styled, props: { labelProps = {}, answerProps = {} } } = this;\n if (!text || !pm) return null;\n return (\n \n {text}\n {pm}\n \n );\n };\n\n getPaymentMethodInformation = () => {\n const { boughtProducts } = this.props;\n\n return {\n text: t('Payment Method'),\n pm: boughtProducts.paymentmethod\n };\n };\n\n getShipmentInformation = () => {\n // Shipment related data\n const { boughtProducts } = this.props;\n return {\n name: boughtProducts.shiptoname,\n street: boughtProducts.addr,\n city: boughtProducts.city,\n state: boughtProducts.state,\n postalCode: boughtProducts.postal,\n country: boughtProducts.country\n };\n };\n\n getPriceInformation = () => {\n const { boughtProducts } = this.props;\n return {\n currency: boughtProducts.currency,\n coupon: boughtProducts.coupon,\n shipping: boughtProducts.shipping,\n tax: boughtProducts.tax,\n total: boughtProducts.total,\n subtotal: boughtProducts.subtotal\n };\n };\n\n getPayerInformation = () => {\n // Payer related data\n const { boughtProducts } = this.props;\n let payerName = null;\n if (boughtProducts.fullname) {\n payerName = boughtProducts.fullname;\n } else if (boughtProducts.firstname || boughtProducts.lastname) {\n payerName = `${boughtProducts.firstname} ${boughtProducts.lastname}`;\n } else if (boughtProducts.nameonaccount) {\n payerName = boughtProducts.nameonaccount;\n }\n\n return {\n name: payerName,\n email: boughtProducts.email,\n company: boughtProducts.company\n };\n };\n\n extractProductProperties = product => {\n if (this.paymentType === 'subscription') return { name: product };\n\n // product string looks like \"Black T-Shirt (Amount: 21.00 USD, Quantity: 2)\"\n const amountIndex = product.indexOf(' (Amount: ');\n const productName = product.substr(0, amountIndex);\n const productOptions = product.substr(amountIndex + 2, product.length - amountIndex - 3).split(', ');\n const amountArrayIndex = productOptions.findIndex(option => option.indexOf('Amount: ') > -1);\n if (amountArrayIndex === -1) {\n return {\n name: productName,\n price: '',\n options: productOptions\n };\n }\n\n const productPrice = productOptions[amountArrayIndex].replace('Amount: ', '');\n productOptions.splice(amountArrayIndex, 1);\n\n return {\n name: productName,\n price: productPrice,\n options: productOptions\n };\n };\n\n // eslint-disable-next-line react/require-render-return\n render = () => {\n const { popoverProps } = this.props;\n const productView = this.getProductView(this.getBoughtProducts(), false);\n const productPreview = this.getProductView(this.getBoughtProducts(), true);\n const priceView = this.getPriceView(this.getPriceInformation());\n const payerView = this.getPayerView(this.getPayerInformation());\n const shippingView = this.getShippingView(this.getShipmentInformation());\n const transactionView = this.getTransactionView(this.getTransactionInformation());\n const paymentMethodView = this.getPaymentMethodView(this.getPaymentMethodInformation());\n const containerCustomProps = this.getViewCustomProps('container');\n return popoverProps ? (\n \n {productPreview}\n {popoverProps.isPopoverViewOpened && (\n \n \n {productView}\n {priceView}\n {payerView}\n {shippingView}\n {transactionView}\n {paymentMethodView}\n \n \n )}\n \n ) : (\n \n {productView}\n {priceView}\n {payerView}\n {shippingView}\n {transactionView}\n {paymentMethodView}\n \n );\n };\n}\n\nPaymentView.propTypes = {\n type: PropTypes.string,\n appName: PropTypes.string,\n allProducts: PropTypes.arrayOf(PropTypes.shape({\n paymentType: PropTypes.string\n })),\n popoverProps: PropTypes.shape({\n isPopoverViewOpened: PropTypes.bool\n }),\n colorMap: PropTypes.shape({}),\n showImages: PropTypes.bool,\n boughtProducts: PropTypes.shape({\n product: PropTypes.arrayOf(PropTypes.shape({})),\n currency: PropTypes.string,\n shiptoname: PropTypes.string,\n addr: PropTypes.string,\n city: PropTypes.string,\n state: PropTypes.string,\n postal: PropTypes.string,\n country: PropTypes.string,\n coupon: PropTypes.string,\n shipping: PropTypes.string,\n tax: PropTypes.string,\n total: PropTypes.string,\n fullname: PropTypes.string,\n firstname: PropTypes.string,\n lastname: PropTypes.string,\n nameonaccount: PropTypes.string,\n email: PropTypes.string,\n company: PropTypes.string,\n transactionid: PropTypes.string,\n reference: PropTypes.string,\n paymentmethod: PropTypes.string\n }),\n labelProps: PropTypes.shape({}),\n productProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n paymentStrings: PropTypes.arrayOf(PropTypes.shape({})),\n gateway: PropTypes.string\n};\n\nPaymentView.defaultProps = {\n type: '',\n appName: '',\n allProducts: [{}],\n popoverProps: null,\n showImages: false,\n colorMap: {},\n boughtProducts: {},\n labelProps: {},\n answerProps: {},\n productProps: {},\n paymentStrings: [{}],\n gateway: ''\n};\n\nexport default PaymentView;\n","import React from 'react';\n\nconst HTMLRenderer = ({ prettyFormatSanitized }) => (
    );\n\nexport default HTMLRenderer;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { safeJSONParse } from '@jotforminc/utils';\nimport { sanitizeHTML } from '../../../utils';\n\nimport PaymentView from '../PaymentView';\nimport Baseline from '../../../components/Baseline';\nimport HTMLRenderer from '../../../components/HtmlRenderer';\n\nconst Payment = ({\n text,\n answer: { paymentArray },\n containerStyle,\n products,\n paymentType,\n popoverProps,\n colorMap,\n showImages,\n appName,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n paymentStrings,\n productProps,\n prettyFormat,\n direction,\n type\n}) => {\n const paymentData = safeJSONParse(paymentArray, paymentArray);\n const prettyFormatSanitized = prettyFormat ?? sanitizeHTML(prettyFormat);\n\n if (!paymentData || !paymentData.product) {\n return (\n \n {prettyFormatSanitized ? : null}\n \n );\n }\n\n return (\n \n \n \n );\n};\n\nPayment.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.shape({}),\n containerStyle: PropTypes.shape({}),\n products: PropTypes.arrayOf(PropTypes.shape({})),\n paymentType: PropTypes.string,\n appName: PropTypes.string,\n popoverProps: PropTypes.shape({}),\n colorMap: PropTypes.shape({}),\n showImages: PropTypes.bool,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n productProps: PropTypes.shape({}),\n direction: PropTypes.string,\n paymentStrings: PropTypes.arrayOf(PropTypes.shape({})),\n type: PropTypes.string\n};\n\nPayment.defaultProps = {\n text: '',\n answer: {},\n appName: '',\n containerStyle: {},\n colorMap: {},\n showImages: false,\n products: null,\n paymentType: '',\n popoverProps: null,\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n productProps: {},\n direction: 'column',\n paymentStrings: [{}],\n type: ''\n};\n\nexport default Payment;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport unescape from 'lodash/unescape';\n\nimport Text from '../../components/Text';\nimport Baseline from '../../components/Baseline';\nimport { replaceUrlsWithAnchors } from '../../utils';\n\nconst Paymentmethods = ({\n text,\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n baselineProps,\n direction\n}) => {\n const replacedText = replaceUrlsWithAnchors(answer);\n return (\n \n {replacedText ? (\n \n ) : (\n {unescape(answer.payment_method)}\n )}\n \n );\n};\n\nPaymentmethods.propTypes = {\n answer: PropTypes.string,\n labelProps: PropTypes.shape({}),\n text: PropTypes.string,\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nPaymentmethods.defaultProps = {\n answer: '',\n labelProps: {},\n text: '',\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n direction: 'column'\n};\n\nexport default Paymentmethods;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../../components/Text';\nimport Baseline from '../../../components/Baseline';\nimport { getDateTimeText } from '../../../utils';\nimport { LocaleTypes } from '../../../constants/schemas';\n\nclass SubmissionDate extends React.Component {\n render() {\n const {\n answer,\n label,\n labelProps,\n answerProps,\n answerWrapperProps,\n hideTime,\n dateFormat,\n userTimeZone,\n locale,\n direction,\n baselineProps\n } = this.props;\n\n const dateTimeText = getDateTimeText({\n answer,\n hideTime,\n dateFormat,\n shouldCalculateTimeZone: true,\n userTimeZone,\n locale\n });\n\n return (\n \n {dateTimeText}\n \n );\n }\n}\n\nSubmissionDate.propTypes = {\n baselineProps: PropTypes.shape({}),\n answer: PropTypes.shape({}),\n userTimeZone: PropTypes.string,\n label: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n hideTime: PropTypes.bool,\n dateFormat: PropTypes.string,\n locale: LocaleTypes.schema,\n direction: PropTypes.string\n};\n\nSubmissionDate.defaultProps = {\n baselineProps: {},\n answer: '',\n userTimeZone: '',\n label: 'Submission Date',\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n hideTime: false,\n dateFormat: 'dddd, MMMM DD, YYYY',\n locale: LocaleTypes.default,\n direction: 'column'\n};\n\nexport default SubmissionDate;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../../components/Text';\nimport Baseline from '../../../components/Baseline';\n\nconst SubmissionID = ({\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n label,\n direction,\n baselineProps\n}) => (\n \n {answer}\n \n);\n\nSubmissionID.propTypes = {\n answer: PropTypes.string,\n label: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n direction: PropTypes.string,\n baselineProps: PropTypes.shape({})\n};\n\nSubmissionID.defaultProps = {\n baselineProps: {},\n answer: '',\n label: 'Submission ID',\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n direction: 'column'\n};\n\nexport default SubmissionID;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Text from '../../../components/Text';\nimport Baseline from '../../../components/Baseline';\n\nconst SubmissionIP = ({\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n label,\n direction,\n baselineProps\n}) => (\n \n {answer}\n \n);\n\nSubmissionIP.propTypes = {\n baselineProps: PropTypes.shape({}),\n answer: PropTypes.string,\n label: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nSubmissionIP.defaultProps = {\n baselineProps: {},\n answer: '',\n label: 'Submission IP',\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n direction: 'column'\n};\n\nexport default SubmissionIP;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport List from '../../../components/List';\nimport Baseline from '../../../components/Baseline';\n\nconst getAnswer = answer => {\n const keys = ['name', 'email'];\n\n return keys.reduce((acc, curr) => {\n if (acc === '' && answer[curr]) {\n // eslint-disable-next-line no-param-reassign\n acc = answer[curr];\n }\n return acc;\n }, '');\n};\n\nconst Submitter = ({\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n label,\n direction,\n baselineProps,\n containerProps\n}) => (\n \n \n \n);\n\nSubmitter.propTypes = {\n answer: PropTypes.string,\n label: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n direction: PropTypes.string,\n baselineProps: PropTypes.shape({}),\n containerProps: PropTypes.shape({})\n};\n\nSubmitter.defaultProps = {\n baselineProps: {},\n answer: '',\n label: 'Submitter',\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n direction: 'column',\n containerProps: {}\n};\n\nexport default Submitter;\n","export const isRGB = color => {\n return typeof color === 'string' && (color?.slice(0, 4) === 'rgb(' || color?.slice(0, 5) === 'rgba(') && color?.slice(-1) === ')';\n};\n\nexport const isHexColor = color => {\n const hexColorRegex = /^#(?:[0-9a-fA-F]{3}){1,2}$/;\n return hexColorRegex.test(color);\n};\n\nexport const rgbToHex = rgbVal => {\n let rgb = rgbVal.replace(/^rgba?\\(|\\s+|\\)$/g, '').split(',');\n rgb = rgb[2] | (rgb[1] << 8) | (rgb[0] << 16); // eslint-disable-line no-bitwise\n return `#${(0x1000000 | rgb).toString(16).substring(1)}`; // eslint-disable-line no-bitwise\n};\n\nexport const isBrightColor = sourceColor => {\n if (sourceColor && sourceColor.length > 0) {\n const color = (sourceColor.charAt(0) === '#') ? sourceColor.substring(1, 7) : sourceColor;\n const r = parseInt(color.substring(0, 2), 16); // hexToR\n const g = parseInt(color.substring(2, 4), 16); // hexToG\n const b = parseInt(color.substring(4, 6), 16); // hexToB\n return (((r * 0.299) + (g * 0.587) + (b * 0.114)) > 160);\n }\n return false;\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { isBrightColor } from '@jotforminc/utils';\nimport Styled from 'styled-components';\nimport List from '../../../components/List';\nimport Baseline from '../../../components/Baseline';\n\nconst getAnswer = answer => {\n const keys = ['title'];\n\n return keys.reduce((acc, curr) => {\n if (acc === '' && answer[curr]) {\n // eslint-disable-next-line no-param-reassign\n acc = answer[curr];\n }\n return acc;\n }, '');\n};\n\nconst getIconProps = props => {\n const {\n appIconColor,\n appIconType,\n appIconURL,\n appIconBackground\n } = props;\n\n return {\n iconColor: appIconColor,\n type: appIconType,\n url: appIconURL,\n backgroundColor: appIconBackground\n };\n};\n\nconst SubmittedVia = ({\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n label,\n direction,\n baselineProps,\n containerProps\n}) => {\n const { PortalItemRenderer = null } = answerProps;\n const icon = getIconProps(answer);\n\n const portalItemProps = {\n ...answer,\n icon\n };\n\n const StyledPortalItemRenderer = Styled.div`\n color: ${isBrightColor(answer.appIconBackground) ? '#2B3245' : '#FFF'};\n background-color: ${answer.appIconBackground};\n padding: 6px;\n border: 1px solid #E3E5F5;\n font-size: 14px;\n font-weight: 500;\n border-radius: 4px;\n width: fit-content;\n max-width: 400px;\n\n * { font-size: 14px; }\n & > div:only-child { padding-right: 4px; }\n .jfIconSVG-wrapper svg { padding: 0; }\n `;\n\n const normalizedAnswer = getAnswer(answer);\n const hasAnswer = normalizedAnswer?.length > 0;\n return (\n \n {hasAnswer && (\n PortalItemRenderer\n ? (\n \n \n \n )\n : (\n \n )\n )}\n \n );\n};\n\nSubmittedVia.propTypes = {\n answer: PropTypes.string,\n label: PropTypes.string,\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n direction: PropTypes.string,\n baselineProps: PropTypes.shape({}),\n containerProps: PropTypes.shape({})\n};\n\nSubmittedVia.defaultProps = {\n baselineProps: {},\n answer: '',\n label: 'Source App',\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n direction: 'column',\n containerProps: {}\n};\n\nexport default SubmittedVia;\n","import type { SVGProps, ReactSVGElement } from 'react';\n/**\n * Enums :: START\n */\nexport enum AUTH_METHODS {\n OAUTH = 'oauth',\n API_KEY = 'api_key',\n CUSTOM = 'CUSTOM'\n}\n\nexport enum PARTNER_NAMES {\n QUICKBOOKS = 'quickbooks',\n AIRTABLE = 'airtable',\n GOOGLE_DRIVE = 'google-drive',\n BOX = 'box',\n ONEDRIVE = 'onedrive',\n DROPBOX = 'dropbox',\n ASANA = 'asana',\n TRELLO = 'trello',\n MONDAY = 'monday',\n CLICKUP = 'clickup',\n EGNYTE = 'egnyte',\n GOOGLE_SHEETS_V2 = 'google-sheetsV2',\n WEBHOOKSV2 = 'webhooksV2',\n SLACK = 'slack',\n MICROSOFT_TEAMS = 'microsoft-teams',\n CAMPAIGN_MONITOR = 'campaign-monitor',\n ZOHO_CRM = 'zoho-crm',\n HUBSPOT = 'hubspot',\n GOOGLE_CALENDAR = 'google-calendar',\n ZOOM = 'zoom',\n MAILERLITE = 'mailerlite',\n CONSTANT_CONTACTV2 = 'constantContactV2',\n GETRESPONSE = 'getresponse',\n MAILCHIMP = 'mailchimp',\n ACTIVE_CAMPAIGN = 'activecampaign',\n AWEBER = 'aweber',\n KEAP = 'keap',\n ZENDESK = 'zendesk',\n PIPEDRIVE = 'pipedrive',\n SENDGRID = 'sendgrid',\n MAILSOFTLY = 'mailsoftly',\n NOTION = 'notion'\n}\n\nexport enum PARTNER_NAMES_V1 {\n GOOGLE_CALENDAR = 'googleCalendar',\n WEBHOOKS = 'webhooks',\n MONDAY = 'mondayCom',\n SALESFORCEV2 = 'salesforceV2',\n FTP = 'FTP',\n BOX = 'boxnet',\n CAMPAIGN_MONITOR = 'campaignMonitor',\n ICONTACT = 'iContact',\n MADMIMI = 'madMimi',\n HIGHRISE = 'highRise',\n SOLVE360 = 'solve360',\n ZOHOCRMV2 = 'zohoCrmV2',\n INSIGHTLY = 'insightlyCrm',\n CALLINGLY = 'callingly',\n SENDGRID = 'sendGrid',\n VERTICAL_RESPONSE = 'verticalResponse',\n INFUSIONSOFT = 'infusionsoft',\n ZAPIER = 'zapier',\n XZAZU = 'xzazu',\n ACTIVE_CAMPAIGN = 'activeCampaign',\n PAYMO = 'paymo',\n GOOGLE_SHEETS = 'google-sheets',\n BOXSIGN = 'box-sign',\n MAILCHIMP = 'mailChimp'\n}\n\nexport enum RESOURCE_TYPE {\n FORM = 'form',\n SIGN = 'sign',\n SHEET_FORM = 'sheet_form',\n WORKFLOW = 'workflow'\n}\n\nexport enum INTEGRATION_ACTION_TYPES {\n SEND_SUBMISSION_FILES = 'SendSubmissionFiles',\n CREATE_ACCOUNT = 'CreateAccount',\n CREATE_RECORD = 'CreateRecord',\n CREATE_CUSTOMER = 'CreateCustomer',\n CREATE_INVOICE = 'CreateInvoice',\n CREATE_ITEM = 'CreateItem',\n CREATE_UPDATE = 'CreateUpdate',\n CREATE_TASK = 'CreateTask',\n CREATE_SUBTASK = 'CreateSubTask',\n CREATE_SECTION = 'CreateSection',\n CREATE_PROJECT = 'CreateProject',\n CREATE_TASK_COMMENT = 'CreateTaskComment',\n CREATE_CARD = 'CreateCard',\n UPDATE_CARD = 'UpdateCard',\n ADD_SUBSCRIBER = 'AddSubscriber',\n CREATE_SPREADSHEET = 'SendSubmissionData',\n EXISTING_SPREADSHEET = 'SendSubmissionDataToExistingSheet',\n SEND_SUBMISSION_DATA = 'SendSubmissionData',\n PUBLIC_CHANNEL = 'SendMessagePublicChannel',\n PRIVATE_CHANNEL = 'SendMessagePrivateChannel',\n PRIVATE_MESSAGE = 'SendPrivateMessage',\n CREATE_EVENT = 'CreateEvent',\n CREATE_CONTACT = 'CreateContact',\n CREATE_DEAL = 'CreateDeal',\n CREATE_TICKET = 'CreateTicket',\n CREATE_COMPANY = 'CreateCompany',\n CREATE_EVENT_WITH_MEETING = 'CreateEventWithMeeting',\n SEND_DATA_BY_FORMDATA = 'SendDataByFormData',\n ADD_REGISTRANT = 'AddRegistrant',\n ADD_REGISTRANT_TO_WEBINAR = 'AddRegistrantToWebinar',\n CREATE_MEETING = 'CreateMeeting',\n CREATE_PERSON = 'CreatePerson',\n CREATE_ACTIVITY = 'CreateActivity',\n CREATE_PAGE_TO_DATABASE = 'CreatePageToDatabase'\n}\n\n/**\n * Enum :: END\n */\n\nexport type INTEGRATION_ACTION_DETAILS_TYPE = {\n text: string,\n value: string,\n description?: string,\n allowedResources?: Array\n};\n\nexport interface I_PARTNER_RAW_DETAILS {\n text: string,\n guideURL: string,\n icon: (props: SVGProps) => ReactSVGElement,\n logoURL: string,\n actions: Array,\n description: Partial>,\n shortDescription: Partial>,\n authMethod: AUTH_METHODS,\n guideURLText?: string\n url?: string,\n hipaaCompliance?: boolean,\n actionLimit?: number,\n betaIntegration?: boolean,\n accountFetcherParams?: Record,\n authParameters?: Array,\n customApiKey?: string\n}\n\nexport interface I_PARTNER_DETAILS extends Omit {\n description: string,\n shortDescription: string\n}\n","import {\n // Partner Icons\n LogoGoogledriveLogomarkColor,\n LogoBoxColor,\n LogoOnedriveLogomarkColor,\n LogoDropboxLogomarkColor,\n LogoEgnyteLogomarkDark,\n LogoQuickbooksLogomarkColor,\n LogoAirtableLogomarkColor,\n LogoAsanaLogomarkColor,\n LogoGooglecalendarLogomarkColor,\n LogoMailchimpLogomarkDark,\n LogoTrelloLogomarkColor,\n LogoMicrosoftteamsLogomarkColor,\n LogoWebhooksLogomarkColor,\n LogoHubspotLogomarkColor,\n LogoSlackLogomarkColor,\n LogoMondayLogomarkColor,\n LogoZendeskLogomarkColor,\n LogoSalesforceLogomarkColor,\n LogoConstantcontactLogomarkColor,\n LogoMailerliteLogomarkColor,\n LogoClickupLogomarkColor,\n LogoFtpColor,\n LogoAweberLogomarkColor,\n LogoCampaignmonitorLogomarkColor,\n LogoIcontactLogomarkColor,\n LogoHighriseLogomarkColor,\n LogoSolveLogomarkColor,\n LogoInsightlyColor,\n LogoCallinglyLogomarkColor,\n LogoVerticalresponseLogomarkColor,\n LogoGetresponseLogomarkColor,\n LogoKeapLogomarkColor,\n LogoZapierLogomarkColor,\n LogoXzazuLogomarkColor,\n LogoActivecampaignLogomarkColor,\n LogoPaymoLogomarkColor,\n LogoPipedriveLogomarkColor,\n LogoZoomLogomarkColor,\n LogoBoxsignColor,\n LogoSendgridLogomarkColor,\n LogoMadmimiLogomarkColor,\n LogoZohoColor,\n LogoGooglesheetsColor\n} from '@jotforminc/svg-icons';\nimport { PARTNER_NAMES, PARTNER_NAMES_V1 } from './types';\n\nexport const PARTNER_ICONS = {\n [PARTNER_NAMES.GOOGLE_DRIVE]: LogoGoogledriveLogomarkColor,\n [PARTNER_NAMES.BOX]: LogoBoxColor,\n [PARTNER_NAMES.ONEDRIVE]: LogoOnedriveLogomarkColor,\n [PARTNER_NAMES.DROPBOX]: LogoDropboxLogomarkColor,\n [PARTNER_NAMES.EGNYTE]: LogoEgnyteLogomarkDark,\n [PARTNER_NAMES.QUICKBOOKS]: LogoQuickbooksLogomarkColor,\n [PARTNER_NAMES.AIRTABLE]: LogoAirtableLogomarkColor,\n [PARTNER_NAMES.MONDAY]: LogoMondayLogomarkColor,\n [PARTNER_NAMES.GOOGLE_SHEETS_V2]: LogoGooglesheetsColor,\n [PARTNER_NAMES.MICROSOFT_TEAMS]: LogoMicrosoftteamsLogomarkColor,\n [PARTNER_NAMES.WEBHOOKSV2]: LogoWebhooksLogomarkColor,\n [PARTNER_NAMES.CAMPAIGN_MONITOR]: LogoCampaignmonitorLogomarkColor,\n [PARTNER_NAMES.TRELLO]: LogoTrelloLogomarkColor,\n [PARTNER_NAMES.SLACK]: LogoSlackLogomarkColor,\n [PARTNER_NAMES.CLICKUP]: LogoClickupLogomarkColor,\n [PARTNER_NAMES.ZOHO_CRM]: LogoZohoColor,\n [PARTNER_NAMES.GOOGLE_CALENDAR]: LogoGooglecalendarLogomarkColor,\n [PARTNER_NAMES.ZOOM]: LogoZoomLogomarkColor,\n [PARTNER_NAMES.HUBSPOT]: LogoHubspotLogomarkColor,\n [PARTNER_NAMES.ASANA]: LogoAsanaLogomarkColor,\n [PARTNER_NAMES.MAILERLITE]: LogoMailerliteLogomarkColor,\n [PARTNER_NAMES.CONSTANT_CONTACTV2]: LogoConstantcontactLogomarkColor,\n [PARTNER_NAMES.MAILCHIMP]: LogoMailchimpLogomarkDark,\n [PARTNER_NAMES.GETRESPONSE]: LogoGetresponseLogomarkColor,\n [PARTNER_NAMES.ACTIVE_CAMPAIGN]: LogoActivecampaignLogomarkColor,\n [PARTNER_NAMES.AWEBER]: LogoAweberLogomarkColor,\n [PARTNER_NAMES.KEAP]: LogoKeapLogomarkColor,\n [PARTNER_NAMES.ZENDESK]: LogoZendeskLogomarkColor,\n [PARTNER_NAMES.PIPEDRIVE]: LogoPipedriveLogomarkColor,\n [PARTNER_NAMES.SENDGRID]: LogoSendgridLogomarkColor,\n [PARTNER_NAMES.MAILSOFTLY]: LogoWebhooksLogomarkColor, // TODO\n [PARTNER_NAMES.NOTION]: LogoWebhooksLogomarkColor, // TODO\n [PARTNER_NAMES_V1.MAILCHIMP]: LogoMailchimpLogomarkDark,\n [PARTNER_NAMES_V1.GOOGLE_SHEETS]: LogoGooglesheetsColor,\n [PARTNER_NAMES_V1.GOOGLE_CALENDAR]: LogoGooglecalendarLogomarkColor,\n [PARTNER_NAMES_V1.WEBHOOKS]: LogoWebhooksLogomarkColor,\n [PARTNER_NAMES_V1.MONDAY]: LogoMondayLogomarkColor,\n [PARTNER_NAMES_V1.SALESFORCEV2]: LogoSalesforceLogomarkColor,\n [PARTNER_NAMES_V1.FTP]: LogoFtpColor,\n [PARTNER_NAMES_V1.CAMPAIGN_MONITOR]: LogoCampaignmonitorLogomarkColor,\n [PARTNER_NAMES_V1.ICONTACT]: LogoIcontactLogomarkColor,\n [PARTNER_NAMES_V1.MADMIMI]: LogoMadmimiLogomarkColor,\n [PARTNER_NAMES_V1.HIGHRISE]: LogoHighriseLogomarkColor,\n [PARTNER_NAMES_V1.SOLVE360]: LogoSolveLogomarkColor,\n [PARTNER_NAMES_V1.ZOHOCRMV2]: LogoZohoColor,\n [PARTNER_NAMES_V1.INSIGHTLY]: LogoInsightlyColor,\n [PARTNER_NAMES_V1.CALLINGLY]: LogoCallinglyLogomarkColor,\n [PARTNER_NAMES_V1.SENDGRID]: LogoSendgridLogomarkColor,\n [PARTNER_NAMES_V1.VERTICAL_RESPONSE]: LogoVerticalresponseLogomarkColor,\n [PARTNER_NAMES_V1.INFUSIONSOFT]: LogoKeapLogomarkColor,\n [PARTNER_NAMES_V1.ZAPIER]: LogoZapierLogomarkColor,\n [PARTNER_NAMES_V1.XZAZU]: LogoXzazuLogomarkColor,\n [PARTNER_NAMES_V1.ACTIVE_CAMPAIGN]: LogoActivecampaignLogomarkColor,\n [PARTNER_NAMES_V1.PAYMO]: LogoPaymoLogomarkColor,\n [PARTNER_NAMES_V1.BOXSIGN]: LogoBoxsignColor\n};\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst GOOGLE_DRIVE_ACTIONS = (): Array => ([\n { text: t('Send Files'), value: INTEGRATION_ACTION_TYPES.SEND_SUBMISSION_FILES }\n]);\n\nconst GOOGLE_DRIVE_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'Google Drive',\n icon: PARTNER_ICONS[PARTNER_NAMES.GOOGLE_DRIVE],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/google_drive_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('Google Drive lets you store important files and access them anywhere — whether at home or on the go! Use this free integration to automatically send form responses and file uploads directly to your Google Drive folder, with no manual data entry necessary.')\n },\n shortDescription: {\n default: t('Sync file uploads and form submissions to Google Drive')\n },\n guideURL: 'https://www.jotform.com/help/192-how-to-integrate-a-form-with-google-drive',\n hipaaCompliance: true,\n authMethod: AUTH_METHODS.OAUTH,\n actionLimit: 1,\n actions: GOOGLE_DRIVE_ACTIONS()\n});\n\nexport default GOOGLE_DRIVE_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst BOX_ACTIONS = (): Array => ([\n { text: t('Send Files'), value: INTEGRATION_ACTION_TYPES.SEND_SUBMISSION_FILES }\n]);\n\nconst BOX_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'Box',\n icon: PARTNER_ICONS[PARTNER_NAMES.BOX],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/box_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('Box is a powerful file storage solution that makes it easy to access files on different devices or share them with your team. With the Box integration, you can collect file uploads of photos, videos, or documents through your online forms and automatically send them to your Box account.')\n },\n shortDescription: {\n default: t('Send file uploads to your cloud storage')\n },\n guideURL: 'https://www.jotform.com/help/349-how-to-integrate-jotform-with-box',\n hipaaCompliance: true,\n authMethod: AUTH_METHODS.OAUTH,\n actionLimit: 1,\n actions: BOX_ACTIONS()\n});\n\nexport default BOX_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst DROPBOX_ACTIONS = (): Array => ([\n { text: t('Send Files'), value: INTEGRATION_ACTION_TYPES.SEND_SUBMISSION_FILES }\n]);\n\nconst DROPBOX_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'Dropbox',\n icon: PARTNER_ICONS[PARTNER_NAMES.DROPBOX],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/dropbox_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('Dropbox lets you store important files in a personal cloud and access them anywhere — whether at home or on the go! Use the Dropbox integration to automatically convert form responses into PDFs and send them directly to your Dropbox folder along with additional file uploads.')\n },\n shortDescription: {\n default: t('Send uploaded files to your cloud storage')\n },\n guideURL: 'https://www.jotform.com/help/77-Upload-to-Dropbox-with-JotForm',\n hipaaCompliance: true,\n authMethod: AUTH_METHODS.OAUTH,\n actionLimit: 1,\n actions: DROPBOX_ACTIONS()\n});\n\nexport default DROPBOX_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst ONEDRIVE_ACTIONS = (): Array => ([\n { text: t('Send Files'), value: INTEGRATION_ACTION_TYPES.SEND_SUBMISSION_FILES }\n]);\n\nconst ONEDRIVE_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'OneDrive',\n icon: PARTNER_ICONS[PARTNER_NAMES.ONEDRIVE],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/onedrive_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('Microsoft OneDrive lets you store important files in a personal cloud and access them anywhere — whether at home or on the go! Use the OneDrive integration to automatically convert form responses into PDFs and send them directly to your OneDrive folder along with additional file uploads.')\n },\n shortDescription: {\n default: t('Sync file uploads and form submission PDFs to OneDrive')\n },\n guideURL: 'https://www.jotform.com/help/1349-how-to-integrate-jotform-with-onedrive',\n hipaaCompliance: true,\n authMethod: AUTH_METHODS.OAUTH,\n actionLimit: 1,\n actions: ONEDRIVE_ACTIONS()\n});\n\nexport default ONEDRIVE_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst EGNYTE_ACTIONS = (): Array => ([\n { text: t('Send Files'), value: INTEGRATION_ACTION_TYPES.SEND_SUBMISSION_FILES }\n]);\n\nconst EGNYTE_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'Egnyte',\n icon: PARTNER_ICONS[PARTNER_NAMES.EGNYTE],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/egnyte_logo.svg',\n description: {\n default: t('Egnyte is an enterprise file sharing software designed to back up your business’ files.')\n },\n shortDescription: {\n default: t('Send submissions to your enterprise file storage account')\n },\n guideURL: 'https://www.jotform.com/help/429-how-to-integrate-jotform-with-egnyte/',\n hipaaCompliance: true,\n authMethod: AUTH_METHODS.OAUTH,\n actionLimit: 1,\n actions: EGNYTE_ACTIONS(),\n authParameters: ['domain']\n});\n\nexport default EGNYTE_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport { getUrlParameter } from '@jotforminc/utils';\n\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst AIRTABLE_ACTIONS = (): Array => ([\n { text: t('Create Record'), value: INTEGRATION_ACTION_TYPES.CREATE_RECORD }\n]);\n\nconst AIRTABLE_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'Airtable',\n icon: PARTNER_ICONS[PARTNER_NAMES.AIRTABLE],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/airtable_logo.svg',\n description: {\n default: t('Automatically relay form submissions to your Airtable database so you will always be ready to analyze, collaborate on, and share new data with your teammates.')\n },\n shortDescription: {\n default: t('Sync form submissions to your spreadsheet database')\n },\n guideURL: 'https://www.jotform.com/help/561-how-to-integrate-jotform-with-airtable',\n authMethod: AUTH_METHODS.OAUTH,\n hipaaCompliance: getUrlParameter('useIntegrationV2') === '1',\n actions: AIRTABLE_ACTIONS(),\n accountFetcherParams: { filterLegacy: 'Yes' }\n});\n\nexport default AIRTABLE_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst QUICKBOOKS_ACTIONS = (): Array => ([\n {\n text: t('Create Customer'),\n description: t('Create new customer records from form submissions'),\n value: INTEGRATION_ACTION_TYPES.CREATE_CUSTOMER\n },\n {\n text: t('Create Invoice'),\n description: t('Create new invoices from form submissions'),\n value: INTEGRATION_ACTION_TYPES.CREATE_INVOICE\n }\n]);\n\nconst QUICKBOOKS_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'QuickBooks',\n icon: PARTNER_ICONS[PARTNER_NAMES.QUICKBOOKS],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/quickbooks_logo.svg',\n description: {\n default: t('With this QuickBooks integration, you can automatically turn new form submissions into customer records or invoices in QuickBooks.')\n },\n shortDescription: {\n default: t('Turn submissions into QuickBooks invoices, customers, and more')\n },\n guideURL: 'https://www.jotform.com/help/how-to-create-an-invoice-with-jotforms-quickbooks-integration',\n authMethod: AUTH_METHODS.OAUTH,\n actions: QUICKBOOKS_ACTIONS(),\n authParameters: ['sandbox']\n});\n\nexport default QUICKBOOKS_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, RESOURCE_TYPE, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst MONDAY_ACTIONS = (): Array => ([\n {\n text: t('Create Item'),\n description: t('Add new items to monday.com'),\n value: INTEGRATION_ACTION_TYPES.CREATE_ITEM\n },\n {\n text: t('Create Update'),\n description: t('Add new updates to monday.com items'),\n value: INTEGRATION_ACTION_TYPES.CREATE_UPDATE\n }\n]);\n\nconst MONDAY_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'monday.com',\n icon: PARTNER_ICONS[PARTNER_NAMES.MONDAY],\n url: 'https://www.monday.com/',\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/monday_logo.svg',\n description: {\n default: t('Integrate with monday.com to sync form responses to your account and update your team’s project boards automatically!'),\n [RESOURCE_TYPE.SIGN]: t('Integrate monday.com to collect and sync e-signed document data to your monday.com account.')\n },\n shortDescription: {\n default: t('Add new items and updates on your team’s project boards')\n },\n guideURL: 'https://www.jotform.com/help/578-how-to-integrate-jotform-with-mondaycom',\n hipaaCompliance: true,\n authMethod: AUTH_METHODS.API_KEY,\n actions: MONDAY_ACTIONS()\n});\n\nexport default MONDAY_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst GOOGLE_SHEETS_ACTIONS = (): Array => ([\n {\n text: t('Create new spreadsheet'),\n description: t('Create new spreadsheet and add form data'),\n value: INTEGRATION_ACTION_TYPES.CREATE_SPREADSHEET\n },\n {\n text: t('Use existing spreadsheet'),\n description: t('Create new worksheet in an existing spreadsheet and add form data'),\n value: INTEGRATION_ACTION_TYPES.EXISTING_SPREADSHEET\n }\n]);\n\nconst GOOGLE_SHEETS_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: t('Google Sheets'),\n icon: PARTNER_ICONS[PARTNER_NAMES.GOOGLE_SHEETS_V2],\n url: 'https://docs.google.com/spreadsheets',\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/google_sheets_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('Google Sheets is a powerful data management tool that helps you organize important data and collaborate with others. Integrate Jotform with Google Sheets to automatically sync form submissions to your spreadsheets and update your data in real time.')\n },\n shortDescription: {\n default: ('Instantly populate your spreadsheets with form data')\n },\n guideURL: 'https://www.jotform.com/help/228-how-to-integrate-forms-with-google-sheets/',\n hipaaCompliance: true,\n authMethod: AUTH_METHODS.OAUTH,\n actionLimit: 1,\n actions: GOOGLE_SHEETS_ACTIONS(),\n betaIntegration: true\n});\n\nexport default GOOGLE_SHEETS_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport { getUrlParameter } from '@jotforminc/utils';\nimport {\n AUTH_METHODS,\n PARTNER_NAMES,\n INTEGRATION_ACTION_DETAILS_TYPE,\n INTEGRATION_ACTION_TYPES,\n I_PARTNER_RAW_DETAILS,\n RESOURCE_TYPE\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst WEBHOOKSV2_ACTIONS = (): Array => ([\n {\n text: t('Send data as JSON'),\n description: t('Send submission data as a JSON object'),\n value: INTEGRATION_ACTION_TYPES.SEND_SUBMISSION_DATA\n },\n {\n text: t('Send data as FormData'),\n description: t('Send submission data in form-data format'),\n value: INTEGRATION_ACTION_TYPES.SEND_DATA_BY_FORMDATA,\n allowedResources: [RESOURCE_TYPE.FORM, RESOURCE_TYPE.SHEET_FORM]\n }\n]);\n\nconst WEBHOOKSV2_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'WebHooks',\n icon: PARTNER_ICONS[PARTNER_NAMES.WEBHOOKSV2],\n url: '',\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/webhooks_logo.svg',\n description: {\n default: t('WebHook is helping you to send submssions to your endpoint.')\n },\n shortDescription: {\n default: t('Send form submission notifications to a URL')\n },\n guideURL: 'https://www.jotform.com/help/245-how-to-setup-a-webhook-with-jotform',\n authMethod: AUTH_METHODS.CUSTOM,\n hipaaCompliance: true,\n actions: WEBHOOKSV2_ACTIONS(),\n betaIntegration: getUrlParameter('useIntegrationV2') !== '1'\n});\n\nexport default WEBHOOKSV2_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, RESOURCE_TYPE, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst MICROSOFT_TEAMS_ACTIONS = (): Array => ([\n {\n text: t('Send Message to standard channel'),\n description: t('Send messages to a Microsoft Teams standard channel'),\n value: INTEGRATION_ACTION_TYPES.PUBLIC_CHANNEL\n },\n {\n text: t('Send message to private channel'),\n description: t('Send messages to a Microsoft Teams private channel'),\n value: INTEGRATION_ACTION_TYPES.PRIVATE_CHANNEL\n },\n {\n text: t('Send chat message'),\n description: t('Send messages to a Microsoft Teams chat'),\n value: INTEGRATION_ACTION_TYPES.PRIVATE_MESSAGE\n },\n {\n text: t('Create Meeting'),\n description: t('Add a new meeting to your Microsoft Teams calendar'),\n value: INTEGRATION_ACTION_TYPES.CREATE_EVENT,\n allowedResources: [RESOURCE_TYPE.FORM, RESOURCE_TYPE.SHEET_FORM, RESOURCE_TYPE.WORKFLOW]\n }\n]);\n\nconst MICROSOFT_TEAMS_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'Microsoft Teams',\n icon: PARTNER_ICONS[PARTNER_NAMES.MICROSOFT_TEAMS],\n url: '',\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/microsoft_teams_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('The ultimate collaboration tool, Microsoft Teams makes it easier than ever for teams to get notified about new tasks, feedback, bookings, and more. Integrate your form with Microsoft Teams to automatically send form submissions to channels or teammates, or to create meetings.')\n },\n shortDescription: {\n default: t('Sync form submissions to Microsoft Teams channels or teammates')\n },\n guideURL: 'https://www.jotform.com/help/how-to-integrate-microsoft-teams-with-jotform/',\n hipaaCompliance: true,\n authMethod: AUTH_METHODS.OAUTH,\n actions: MICROSOFT_TEAMS_ACTIONS()\n});\n\nexport default MICROSOFT_TEAMS_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst CAMPAIGN_MONITOR_ACTIONS = (): Array => ([\n { text: t('Add Subscriber'), value: INTEGRATION_ACTION_TYPES.ADD_SUBSCRIBER }\n]);\n\nconst CAMPAIGN_MONITOR_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'Campaign Monitor',\n icon: PARTNER_ICONS[PARTNER_NAMES.CAMPAIGN_MONITOR],\n url: 'https://www.campaignmonitor.com/',\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/campaign_monitor_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('Campaign Monitor is a marketing software that allows web designers to send automated emails to their clients. Automatically add new email addresses to your subscriber list by integrating your contact form, lead gen form, or email newsletter signup form directly to your Campaign Monitor account.')\n },\n shortDescription: {\n default: t('Automatically add new subscribers to your email lists')\n },\n guideURL: 'https://www.jotform.com/help/388-how-to-integrate-jotform-with-campaign-monitor/',\n authMethod: AUTH_METHODS.OAUTH,\n actions: CAMPAIGN_MONITOR_ACTIONS()\n});\n\nexport default CAMPAIGN_MONITOR_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, RESOURCE_TYPE, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst ASANA_ACTIONS = (): Array => ([\n {\n text: t('Create Task'),\n description: t('Create new task from form submissions'),\n value: INTEGRATION_ACTION_TYPES.CREATE_TASK\n },\n {\n text: t('Create Section'),\n description: t('Create new section from form submissions'),\n value: INTEGRATION_ACTION_TYPES.CREATE_SECTION\n },\n {\n text: t('Create Project'),\n description: t('Create new project from form submissions'),\n value: INTEGRATION_ACTION_TYPES.CREATE_PROJECT\n },\n {\n text: t('Create Task Comment'),\n description: t('Create new task comment from form submissions'),\n value: INTEGRATION_ACTION_TYPES.CREATE_TASK_COMMENT\n }\n]);\n\nconst ASANA_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'Asana',\n icon: PARTNER_ICONS[PARTNER_NAMES.ASANA],\n url: 'https://www.asana.com',\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/asana_logo.svg',\n description: {\n default: t('Integrate your custom online form with Asana to automatically send form submissions and attached files to your Asana boards.'),\n [RESOURCE_TYPE.SIGN]: t('You can create documents, send them out for signature, and then automatically send signed documents and their corresponding data to your Asana boards.')\n },\n shortDescription: {\n default: t('Add new projects, tasks, and comments in Asana')\n },\n guideURL: 'https://www.jotform.com/help/470-create-tasks-in-asana-with-jotform-submissions',\n hipaaCompliance: true,\n authMethod: AUTH_METHODS.OAUTH,\n actions: ASANA_ACTIONS()\n});\n\nexport default ASANA_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, RESOURCE_TYPE, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst TRELLO_ACTIONS = (): Array => ([\n {\n text: t('Create Card'),\n description: t('Create new card from form submissions'),\n value: INTEGRATION_ACTION_TYPES.CREATE_CARD\n },\n {\n text: t('Update Card'),\n description: t('Update the card from form submissions'),\n value: INTEGRATION_ACTION_TYPES.UPDATE_CARD\n }\n]);\n\nconst TRELLO_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'Trello',\n icon: PARTNER_ICONS[PARTNER_NAMES.TRELLO],\n url: 'https://www.trello.com',\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/trello_logo.svg',\n description: {\n default: t('When integrated with your online form, you can automatically send form submissions, supporting information, and file uploads straight to your Trello board.'),\n [RESOURCE_TYPE.SIGN]: t('You can automatically send e-signed documents to your Trello board.')\n },\n shortDescription: {\n default: t('Convert form submissions into new Trello cards')\n },\n guideURL: 'https://www.jotform.com/integrations/trello',\n hipaaCompliance: true,\n authMethod: AUTH_METHODS.OAUTH,\n actions: TRELLO_ACTIONS(),\n betaIntegration: true\n});\n\nexport default TRELLO_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst SLACK_ACTIONS = (): Array => ([\n {\n text: t('Send message to public channel'),\n description: t('Send messages to a Slack public channel'),\n value: INTEGRATION_ACTION_TYPES.PUBLIC_CHANNEL\n },\n {\n text: t('Send message to private channel'),\n description: t('Send messages to a Slack private channel'),\n value: INTEGRATION_ACTION_TYPES.PRIVATE_CHANNEL\n },\n {\n text: t('Send chat message'),\n description: t('Send messages to a Slack chat'),\n value: INTEGRATION_ACTION_TYPES.PRIVATE_MESSAGE\n }\n]);\n\nconst SLACK_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'Slack',\n icon: PARTNER_ICONS[PARTNER_NAMES.SLACK],\n url: 'https://www.slack.com/',\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/slack_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('Slack is the ultimate collaboration tool, making it easier than ever for teams to stay notified of new tasks, feedback, bookings, and more. Integrate your custom online form with Slack to automatically send form submissions to your channels or teammates.')\n },\n shortDescription: {\n default: t('Sync form submissions to Slack channels or teammates')\n },\n guideURL: 'https://www.jotform.com/help/563-how-to-integrate-jotform-with-slack/',\n hipaaCompliance: true,\n authMethod: AUTH_METHODS.OAUTH,\n actions: SLACK_ACTIONS()\n});\n\nexport default SLACK_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, RESOURCE_TYPE, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst CLICKUP_ACTIONS = (): Array => ([\n {\n text: t('Create Task'),\n description: t('Turn submissions into new tasks'),\n value: INTEGRATION_ACTION_TYPES.CREATE_TASK\n },\n {\n text: t('Create Subtask'),\n description: t('Turn submissions into new subtasks'),\n value: INTEGRATION_ACTION_TYPES.CREATE_SUBTASK\n },\n {\n text: t('Create Comment'),\n description: t('Turn submissions into new task comments'),\n value: INTEGRATION_ACTION_TYPES.CREATE_TASK_COMMENT\n }\n]);\n\nconst CLICKUP_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'ClickUp',\n icon: PARTNER_ICONS[PARTNER_NAMES.CLICKUP],\n url: 'https://www.clickup.com/',\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/clickup_logo.svg',\n description: {\n default: t('You can gather task requests and project information through your online forms and have it appear in your ClickUp account automatically as new tasks.'),\n [RESOURCE_TYPE.SIGN]: t('You can collect e-signatures for task requests and team projects — then send the data to ClickUp automatically.')\n },\n shortDescription: {\n default: t('Turn form submissions into ClickUp tasks automatically')\n },\n guideURL: 'https://www.jotform.com/help/how-to-integrate-with-clickup/',\n hipaaCompliance: true,\n authMethod: AUTH_METHODS.OAUTH,\n actions: CLICKUP_ACTIONS()\n});\n\nexport default CLICKUP_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst ZOHOCRM_ACTIONS = (): Array => ([\n { text: t('Create Record'), value: INTEGRATION_ACTION_TYPES.CREATE_RECORD }\n]);\n\nconst ZOHOCRM_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'Zoho CRM',\n icon: PARTNER_ICONS[PARTNER_NAMES.ZOHO_CRM],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/zoho_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('Zoho CRM is a sales automation software that helps businesses generate, organize, and manage leads. Gather leads through your website with a custom contact or lead-gen form, then instantly send submissions to your Zoho workflow with Jotform’s Zoho CRM integration.')\n },\n shortDescription: {\n default: t('Instantly send new contacts to your CRM system')\n },\n guideURL: 'https://www.jotform.com/help/409-how-to-integrate-jotform-with-zoho-crm',\n authMethod: AUTH_METHODS.OAUTH,\n hipaaCompliance: true,\n actions: ZOHOCRM_ACTIONS()\n});\n\nexport default ZOHOCRM_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst HUBSPOT_ACTIONS = (): Array => ([\n {\n text: t('Create Contact'),\n description: t('Turn submissions into new contacts'),\n value: INTEGRATION_ACTION_TYPES.CREATE_CONTACT\n },\n {\n text: t('Create Deal'),\n description: t('Turn submissions into new deals'),\n value: INTEGRATION_ACTION_TYPES.CREATE_DEAL\n },\n {\n text: t('Create Ticket'),\n description: t('Turn submissions into new tickets'),\n value: INTEGRATION_ACTION_TYPES.CREATE_TICKET\n },\n {\n text: t('Create Company'),\n description: t('Turn submissions into new companies'),\n value: INTEGRATION_ACTION_TYPES.CREATE_COMPANY\n },\n {\n text: t('Create Custom Record'),\n description: t('Turn submissions into custom object records'),\n value: INTEGRATION_ACTION_TYPES.CREATE_RECORD\n }\n]);\n\nconst HUBSPOT_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'HubSpot',\n icon: PARTNER_ICONS[PARTNER_NAMES.HUBSPOT],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/hubspot_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('HubSpot offers free CRM software and tools for more efficient marketing, sales, and customer service. Integrate your contact form or lead gen form with HubSpot CRM to update your HubSpot account automatically.')\n },\n shortDescription: {\n default: t('Send new contacts to your CRM and create new deals')\n },\n guideURL: 'https://www.jotform.com/help/551-how-to-integrate-jotform-with-hubspot-crm/',\n authMethod: AUTH_METHODS.OAUTH,\n hipaaCompliance: false,\n actions: HUBSPOT_ACTIONS()\n});\n\nexport default HUBSPOT_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst GOOGLE_CALENDAR_ACTIONS = (): Array => ([\n {\n text: t('Create Event'),\n description: t('Add new events to Google Calendar'),\n value: INTEGRATION_ACTION_TYPES.CREATE_EVENT\n },\n {\n text: t('Create Event with Google Meet'),\n description: t('Add new events with Google Meet conferencing'),\n value: INTEGRATION_ACTION_TYPES.CREATE_EVENT_WITH_MEETING\n }\n]);\n\nconst GOOGLE_CALENDAR_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: t('Google Calendar'),\n icon: PARTNER_ICONS[PARTNER_NAMES.GOOGLE_CALENDAR],\n url: '',\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/google_calendar_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('Google Calendar helps teams and individuals stay organized and keep better track of events. Integrate Jotform with Google Calendar to automatically sync form submissions to your calendar — making it easier to monitor bookings, reservations, orders, and more!')\n },\n shortDescription: {\n default: t('Automatically add new events to your calendar')\n },\n guideURL: 'https://www.jotform.com/help/558-how-to-use-google-calendar-create-events-with-your-form/',\n hipaaCompliance: true,\n authMethod: AUTH_METHODS.OAUTH,\n actions: GOOGLE_CALENDAR_ACTIONS()\n});\n\nexport default GOOGLE_CALENDAR_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst ZOOM_ACTIONS = (): Array => ([\n {\n text: t('Create meeting'),\n description: t('Turn submissions into new meetings'),\n value: INTEGRATION_ACTION_TYPES.CREATE_MEETING\n },\n {\n text: t('Add registrant to meeting'),\n description: t('Add new registrants to a meeting'),\n value: INTEGRATION_ACTION_TYPES.ADD_REGISTRANT\n },\n {\n text: t('Add registrant to webinar'),\n description: t('Add new registrants to a webinar'),\n value: INTEGRATION_ACTION_TYPES.ADD_REGISTRANT_TO_WEBINAR\n }\n]);\n\nconst ZOOM_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'Zoom',\n icon: PARTNER_ICONS[PARTNER_NAMES.ZOOM],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/zoom_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('Zoom is an online video conferencing software that makes it easy to host and attend meetings, webinars, and calls from anywhere. Use Jotform’s free Zoom Scheduler to automatically schedule new meetings and add registrants via form submissions.')\n },\n shortDescription: {\n default: t('Schedule meetings and add registrants automatically')\n },\n guideURL: 'https://www.jotform.com/help/703-how-to-integrate-jotform-with-zoom/',\n authMethod: AUTH_METHODS.OAUTH,\n hipaaCompliance: true,\n actions: ZOOM_ACTIONS()\n});\n\nexport default ZOOM_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst MAILERLITE_ACTIONS = (): Array => [\n { text: t('Add Subscriber'), value: INTEGRATION_ACTION_TYPES.ADD_SUBSCRIBER }\n];\n\nconst MAILERLITE_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'MailerLite',\n icon: PARTNER_ICONS[PARTNER_NAMES.MAILERLITE],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/mailerlite_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('MailerLite is an email marketing software that lets users create email campaigns using features like landing pages, pop-ups, automation tools, and more. With MailerLite integration, you can gather emails through your online contact forms or subscription forms and send them to MailerLite automatically.')\n },\n shortDescription: {\n default: t('Collect subscriber emails and send them to MailerLite automatically')\n },\n guideURL: 'https://www.jotform.com/help/how-to-integrate-form-with-mailerlite/',\n authMethod: AUTH_METHODS.API_KEY,\n hipaaCompliance: false,\n actions: MAILERLITE_ACTIONS(),\n customApiKey: 'api_key'\n});\n\nexport default MAILERLITE_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst CONSTANT_CONTACT_ACTIONS = (): Array => ([\n { text: t('Create Contact'), value: INTEGRATION_ACTION_TYPES.CREATE_CONTACT }\n]);\n\nconst CONSTANT_CONTACT_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'Constant Contact',\n icon: PARTNER_ICONS[PARTNER_NAMES.CONSTANT_CONTACTV2],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/constant_contact_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('Constant Contact is an email marketing platform that aims to help your business drive more sales in less time. Integrate Jotform with Constant Contact to collect leads online and instantly add new contacts to your Constant Contact lists.')\n },\n shortDescription: {\n default: t('Add new contacts to your email lists instantly')\n },\n guideURL: 'https://www.jotform.com/help/386-how-to-integrate-form-with-constant-contact/',\n authMethod: AUTH_METHODS.OAUTH,\n hipaaCompliance: false,\n actions: CONSTANT_CONTACT_ACTIONS()\n});\n\nexport default CONSTANT_CONTACT_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst GETRESPONSE_ACTIONS = (): Array => ([\n {\n text: t('Create Contact'),\n description: t('Create a new contact'),\n value: INTEGRATION_ACTION_TYPES.CREATE_CONTACT\n }\n]);\n\nconst GETRESPONSE_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'GetResponse',\n icon: PARTNER_ICONS[PARTNER_NAMES.GETRESPONSE],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/getresponse_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('GetResponse is designed to help small businesses grow their audience, convert on leads, and build a smoother email marketing workflow. Log in to your GetResponse account and integrate with Jotform to get started. With Jotform’s GetResponse integration, you can automatically sync the contacts you collect through your lead gen forms directly to GetResponse!')\n },\n shortDescription: {\n default: t('Automatically add contacts to your email campaign lists')\n },\n guideURL: 'https://www.jotform.com/help/397-how-to-integrate-form-with-getresponse',\n authMethod: AUTH_METHODS.OAUTH,\n hipaaCompliance: false,\n actions: GETRESPONSE_ACTIONS()\n});\n\nexport default GETRESPONSE_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst MAILCHIMP_ACTIONS = (): Array => ([\n {\n text: t('Create Contact'),\n description: t('Create new contacts from form submissions'),\n value: INTEGRATION_ACTION_TYPES.CREATE_CONTACT\n }\n]);\n\nconst MAILCCHIMP_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'Mailchimp',\n icon: PARTNER_ICONS[PARTNER_NAMES.MAILCHIMP],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/mailchimp_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('Mailchimp is a marketing automation platform designed to help small businesses. Integrate your form with Mailchimp to automatically send new leads, customers, and subscribers to your mailing lists.')\n },\n shortDescription: {\n default: t('Add and update contacts in your email lists')\n },\n guideURL: 'https://www.jotform.com/help/163-how-to-integrate-with-mailchimp',\n authMethod: AUTH_METHODS.OAUTH,\n hipaaCompliance: false,\n actions: MAILCHIMP_ACTIONS()\n});\n\nexport default MAILCCHIMP_DETAILS;\n","import { t } from '@jotforminc/translation';\n\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst ACTIVE_CAMPAIGN_ACTIONS = (): Array => ([\n {\n text: t('Create contact'),\n description: t('Turn submissions into new contacts'),\n value: INTEGRATION_ACTION_TYPES.CREATE_CONTACT\n },\n {\n text: t('Create account'),\n description: t('Turn submissions into new accounts'),\n value: INTEGRATION_ACTION_TYPES.CREATE_ACCOUNT\n },\n {\n text: t('Create deal'),\n description: t('Turn submissions into new deals'),\n value: INTEGRATION_ACTION_TYPES.CREATE_DEAL\n }\n]);\n\nconst ACTIVE_CAMPAIGN_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'ActiveCampaign',\n icon: PARTNER_ICONS[PARTNER_NAMES.ACTIVE_CAMPAIGN],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/activecampaign_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('ActiveCampaign offers a sales automation CRM for better lead prioritization and contact management. Stay on top of your sales process with Jotform’s ActiveCampaign integration — sync your contact form or lead-gen form with ActiveCampaign to instantly send submission data to your Deals CRM.')\n },\n shortDescription: {\n default: t('Update contacts and deals in your sales CRM')\n },\n guideURL: 'https://www.jotform.com/integrations/activecampaign',\n authMethod: AUTH_METHODS.API_KEY,\n actions: ACTIVE_CAMPAIGN_ACTIONS(),\n hipaaCompliance: true,\n authParameters: ['baseUrl']\n});\n\nexport default ACTIVE_CAMPAIGN_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst AWEBER_ACTIONS = (): Array => ([\n { text: t('Add Subscriber'), value: INTEGRATION_ACTION_TYPES.ADD_SUBSCRIBER }\n]);\n\nconst AWEBER_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'AWeber',\n icon: PARTNER_ICONS[PARTNER_NAMES.AWEBER],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/aweber_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('AWeber is an all-in-one email marketing tool that helps you connect with your audience faster. Easily send new subscriber info from your contact form, email signup form, or lead gen form straight to your AWeber lists with Jotform’s free integration!')\n },\n shortDescription: {\n default: t('Collect new contacts and add them to your email lists')\n },\n guideURL: 'https://www.jotform.com/help/387-how-to-integrate-jotform-with-aweber',\n authMethod: AUTH_METHODS.OAUTH,\n hipaaCompliance: false,\n actions: AWEBER_ACTIONS()\n});\n\nexport default AWEBER_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport { getUrlParameter } from '@jotforminc/utils';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst KEAP_ACTIONS = (): Array => ([\n {\n text: t('Create Contact'),\n description: t('Turn submissions into new contacts'),\n value: INTEGRATION_ACTION_TYPES.CREATE_CONTACT\n },\n {\n text: t('Create Company'),\n description: t('Turn submissions into new companies'),\n value: INTEGRATION_ACTION_TYPES.CREATE_COMPANY\n }\n]);\n\nconst KEAP_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'Keap',\n icon: PARTNER_ICONS[PARTNER_NAMES.KEAP],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/keap_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('Keap (formerly InfusionSoft) is an all-in-one CRM, sales, and marketing automation platform that helps you keep better track of client data. With Jotform’s Keap and Keap Max Classic integration, you can capture leads online with a custom form and add new contacts to your CRM automatically.')\n },\n shortDescription: {\n default: t('Add new contacts to your CRM and assign tags')\n },\n guideURL: 'https://www.jotform.com/help/379-achieving-keap-campaign-goals-with-jotform/',\n authMethod: AUTH_METHODS.OAUTH,\n hipaaCompliance: true,\n betaIntegration: getUrlParameter('useIntegrationV2') !== '1',\n actions: KEAP_ACTIONS()\n});\n\nexport default KEAP_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport { getUrlParameter } from '@jotforminc/utils';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst ZENDESK_ACTIONS = (): Array => ([\n { text: t('Create Ticket'), value: INTEGRATION_ACTION_TYPES.CREATE_TICKET }\n]);\n\nconst ZENDESK_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'Zendesk',\n url: 'https://www.zendesk.com/',\n icon: PARTNER_ICONS[PARTNER_NAMES.ZENDESK],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/zendesk_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('Zendesk is a CRM software that helps businesses build better customer relationships. With Jotform\\'s free Zendesk integration, you can automatically turn form submissions into new tickets in Zendesk -- perfect for tackling support requests, orders, or customer feedback with your team.')\n },\n shortDescription: {\n default: t('Generate support tickets in Zendesk')\n },\n guideURL: 'https://www.jotform.com/help/691-how-to-integrate-jotform-with-zendesk/',\n authMethod: AUTH_METHODS.OAUTH,\n actions: ZENDESK_ACTIONS(),\n betaIntegration: getUrlParameter('useIntegrationV2') !== '1',\n authParameters: ['subdomain']\n});\n\nexport default ZENDESK_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport { getUrlParameter } from '@jotforminc/utils';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst PIPEDRIVE_ACTIONS = (): Array => ([\n { text: t('Create Deal'), value: INTEGRATION_ACTION_TYPES.CREATE_DEAL },\n { text: t('Create Person'), value: INTEGRATION_ACTION_TYPES.CREATE_PERSON },\n { text: t('Create Activity'), value: INTEGRATION_ACTION_TYPES.CREATE_ACTIVITY }\n]);\n\nconst PIPEDRIVE_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'Pipedrive',\n icon: PARTNER_ICONS[PARTNER_NAMES.PIPEDRIVE],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/pipedrive_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('Pipedrive is a CRM platform built for better activity-based selling. Log in to your Pipedrive account and integrate with Jotform to get started. With Jotform’s Pipedrive integration, your custom lead-gen form will instantly sync new contacts and deals straight into your sales pipeline.')\n },\n shortDescription: {\n default: t('Send new contacts, deals, and activities to your sales pipeline')\n },\n guideURL: 'https://www.jotform.com/help/580-how-to-integrate-jotform-with-pipedrive/',\n authMethod: AUTH_METHODS.OAUTH,\n hipaaCompliance: false,\n betaIntegration: getUrlParameter('useIntegrationV2') !== '1',\n actions: PIPEDRIVE_ACTIONS()\n});\n\nexport default PIPEDRIVE_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst SENDGRID_ACTIONS = (): Array => ([\n { text: t('Create Contact'), value: INTEGRATION_ACTION_TYPES.CREATE_CONTACT }\n]);\n\nconst SENDGRID_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'SendGrid',\n icon: PARTNER_ICONS[PARTNER_NAMES.SENDGRID],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/sendgrid_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('SendGrid is an email marketing solution designed to simplify email campaigns and drive your business to success. Integrate your lead generation form, contact form, or signup form with SendGrid to automatically sync new contact information to your SendGrid contact lists.')\n },\n shortDescription: {\n default: t('Sync submissions to your contact lists')\n },\n guideURL: 'https://www.jotform.com/help/557-how-to-integrate-your-form-with-sendgrid/',\n authMethod: AUTH_METHODS.API_KEY,\n hipaaCompliance: false,\n actions: SENDGRID_ACTIONS()\n});\n\nexport default SENDGRID_DETAILS;\n","import { t } from '@jotforminc/translation';\nimport { getUrlParameter } from '@jotforminc/utils';\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst MAILSOFTLY_ACTIONS = (): Array => ([\n { text: t('Create Contact'), value: INTEGRATION_ACTION_TYPES.CREATE_CONTACT }\n]);\n\nconst MAILSOFTLY_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'Mailsoftly',\n icon: PARTNER_ICONS[PARTNER_NAMES.MAILSOFTLY],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/mailsoftly_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('Integrate forms with Mailsoftly to automate lead generation and manage contact data seamlessly. Capture form submissions directly into Mailsoftly, enabling efficient audience segmentation and personalized email campaigns.')\n },\n shortDescription: {\n default: t('Add new contacts from forms to Mailsoftly instantly')\n },\n guideURL: 'https://www.jotform.com/help',\n authMethod: AUTH_METHODS.API_KEY,\n hipaaCompliance: false,\n betaIntegration: getUrlParameter('useIntegrationV2') !== '1',\n actions: MAILSOFTLY_ACTIONS()\n});\n\nexport default MAILSOFTLY_DETAILS;\n","import { getUrlParameter } from '@jotforminc/utils';\nimport { t } from '@jotforminc/translation';\n\nimport {\n AUTH_METHODS, PARTNER_NAMES, INTEGRATION_ACTION_DETAILS_TYPE, INTEGRATION_ACTION_TYPES, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst NOTION_ACTIONS = (): Array => ([\n {\n text: t('Create database item'),\n description: t('Create database item in your Notion databases'),\n value: INTEGRATION_ACTION_TYPES.CREATE_PAGE_TO_DATABASE\n }\n]);\n\nconst NOTION_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n text: 'Notion',\n icon: PARTNER_ICONS[PARTNER_NAMES.NOTION],\n logoURL: '//cdn.jotfor.ms/assets/img/integrations/v2/webhooks_logo.svg',\n description: {\n // eslint-disable-next-line max-len\n default: t('Effortlessly streamline your data management process by integrating with Notion. Automatically create database items in Notion for new submissions and signed documents, ensuring organized and up-to-date records without manual data entry. Stay efficient and focused on important tasks with this seamless workflow.')\n },\n shortDescription: {\n default: t('Create database item in your Notion databases')\n },\n guideURL: 'https://www.jotform.com/integrations/notion',\n authMethod: AUTH_METHODS.OAUTH,\n actions: NOTION_ACTIONS(),\n hipaaCompliance: false,\n betaIntegration: getUrlParameter('useIntegrationV2') !== '1'\n});\n\nexport default NOTION_DETAILS;\n","import { AUTH_METHODS, PARTNER_NAMES_V1, I_PARTNER_RAW_DETAILS } from '../types';\nimport { PARTNER_ICONS } from '../icons';\n\nconst DUMMY_PROPS = {\n logoURL: '',\n guideURL: '',\n description: { default: '' },\n shortDescription: { default: '' },\n authMethod: AUTH_METHODS.CUSTOM,\n actions: [],\n betaIntegration: true // TODO :: remove for v1\n};\n\nexport const GOOGLE_CALENDAR_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n ...DUMMY_PROPS,\n text: 'Google Calendar',\n icon: PARTNER_ICONS[PARTNER_NAMES_V1.GOOGLE_CALENDAR],\n url: 'https://calendar.google.com'\n});\n\nexport const WEBHOOKS_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n ...DUMMY_PROPS,\n text: 'WebHooks',\n icon: PARTNER_ICONS[PARTNER_NAMES_V1.WEBHOOKS],\n url: 'https://www.jotform.com/help/248-webhook-php-script-examples'\n});\n\nexport const SALESFORCEV2_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n ...DUMMY_PROPS,\n text: 'Salesforce',\n icon: PARTNER_ICONS[PARTNER_NAMES_V1.SALESFORCEV2],\n url: 'https://www.salesforce.com/'\n});\n\nexport const FTP_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n ...DUMMY_PROPS,\n text: 'FTP',\n icon: PARTNER_ICONS[PARTNER_NAMES_V1.FTP],\n url: 'https://www.jotform.com/help/177-how-to-send-submission-data-file-upload-via-ftp'\n});\n\nexport const MAILCHIMP_DETAILS = (): I_PARTNER_RAW_DETAILS => ({\n ...DUMMY_PROPS,\n text: 'Mailchimp',\n icon: PARTNER_ICONS[PARTNER_NAMES_V1.MAILCHIMP],\n url: 'https://www.mailchimp.com'\n});\n","import { PARTNER_NAMES, PARTNER_NAMES_V1 } from '../types';\n\nimport GOOGLE_DRIVE_DETAILS from './GoogleDriveDetails';\nimport BOX_DETAILS from './BoxDetails';\nimport DROPBOX_DETAILS from './DropboxDetails';\nimport ONEDRIVE_DETAILS from './OnedriveDetails';\nimport EGNYTE_DETAILS from './EgnyteDetails';\nimport AIRTABLE_DETAILS from './AirtableDetails';\nimport QUICKBOOKS_DETAILS from './QuickbooksDetails';\nimport MONDAY_DETAILS from './MondayDetails';\nimport GOOGLE_SHEETS_DETAILS from './GoogleSheetsDetails';\nimport WEBHOOKSV2_DETAILS from './WebhooksV2Details';\nimport MICROSOFT_TEAMS_DETAILS from './MicrosoftTeamsDetails';\nimport CAMPAIGN_MONITOR_DETAILS from './CampaignMonitorDetails';\nimport ASANA_DETAILS from './AsanaDetails';\nimport TRELLO_DETAILS from './TrelloDetails';\nimport SLACK_DETAILS from './SlackDetails';\nimport CLICKUP_DETAILS from './ClickUpDetails';\nimport ZOHOCRM_DETAILS from './ZohoDetails';\nimport HUBSPOT_DETAILS from './HubspotDetails';\nimport GOOGLE_CALENDAR_DETAILSV2 from './GoogleCalendarDetails';\nimport ZOOM_DETAILS from './ZoomDetails';\nimport MAILERLITE_DETAILS from './MailerliteDetails';\nimport CONSTANT_CONTACTV2_DETAILS from './ConstantContactDetails';\nimport GETRESPONSE_DETAILS from './GetResponseDetails';\nimport MAILCHIMP_DETAILS from './MailchimpDetails';\nimport ACTIVE_CAMPAIGN_DETAILS from './ActiveCampaignDetails';\nimport AWEBER_DETAILS from './AWeberDetails';\nimport KEAP_DETAILS from './KeapDetails';\nimport ZENDESK_DETAILS from './ZendeskDetails';\nimport PIPEDRIVE_DETAILS from './PipedriveDetails';\nimport SENDGRID_DETAILS from './SendgridDetails';\nimport MAILSOFTLY_DETAILS from './MailsoftlyDetails';\nimport NOTION_DETAILS from './NotionDetails';\n\nimport {\n GOOGLE_CALENDAR_DETAILS,\n WEBHOOKS_DETAILS,\n SALESFORCEV2_DETAILS,\n FTP_DETAILS,\n MAILCHIMP_DETAILS as MAILCHIMP_DETAILS_V1\n} from './V1Details';\n\nconst PARTNER_DETAILS = {\n [PARTNER_NAMES.AIRTABLE]: AIRTABLE_DETAILS,\n [PARTNER_NAMES.ASANA]: ASANA_DETAILS,\n [PARTNER_NAMES.BOX]: BOX_DETAILS,\n [PARTNER_NAMES.CAMPAIGN_MONITOR]: CAMPAIGN_MONITOR_DETAILS,\n [PARTNER_NAMES.CLICKUP]: CLICKUP_DETAILS,\n [PARTNER_NAMES.DROPBOX]: DROPBOX_DETAILS,\n [PARTNER_NAMES.EGNYTE]: EGNYTE_DETAILS,\n [PARTNER_NAMES.GOOGLE_DRIVE]: GOOGLE_DRIVE_DETAILS,\n [PARTNER_NAMES.GOOGLE_SHEETS_V2]: GOOGLE_SHEETS_DETAILS,\n [PARTNER_NAMES.MICROSOFT_TEAMS]: MICROSOFT_TEAMS_DETAILS,\n [PARTNER_NAMES.MONDAY]: MONDAY_DETAILS,\n [PARTNER_NAMES.ONEDRIVE]: ONEDRIVE_DETAILS,\n [PARTNER_NAMES.QUICKBOOKS]: QUICKBOOKS_DETAILS,\n [PARTNER_NAMES.SLACK]: SLACK_DETAILS,\n [PARTNER_NAMES.TRELLO]: TRELLO_DETAILS,\n [PARTNER_NAMES.WEBHOOKSV2]: WEBHOOKSV2_DETAILS,\n [PARTNER_NAMES.ZOHO_CRM]: ZOHOCRM_DETAILS,\n [PARTNER_NAMES.HUBSPOT]: HUBSPOT_DETAILS,\n [PARTNER_NAMES.GOOGLE_CALENDAR]: GOOGLE_CALENDAR_DETAILSV2,\n [PARTNER_NAMES.ZOOM]: ZOOM_DETAILS,\n [PARTNER_NAMES.MAILERLITE]: MAILERLITE_DETAILS,\n [PARTNER_NAMES.CONSTANT_CONTACTV2]: CONSTANT_CONTACTV2_DETAILS,\n [PARTNER_NAMES.GETRESPONSE]: GETRESPONSE_DETAILS,\n [PARTNER_NAMES.MAILCHIMP]: MAILCHIMP_DETAILS,\n [PARTNER_NAMES.ACTIVE_CAMPAIGN]: ACTIVE_CAMPAIGN_DETAILS,\n [PARTNER_NAMES.AWEBER]: AWEBER_DETAILS,\n [PARTNER_NAMES.KEAP]: KEAP_DETAILS,\n [PARTNER_NAMES.ZENDESK]: ZENDESK_DETAILS,\n [PARTNER_NAMES.PIPEDRIVE]: PIPEDRIVE_DETAILS,\n [PARTNER_NAMES.SENDGRID]: SENDGRID_DETAILS,\n [PARTNER_NAMES.MAILSOFTLY]: MAILSOFTLY_DETAILS,\n [PARTNER_NAMES.NOTION]: NOTION_DETAILS,\n [PARTNER_NAMES_V1.GOOGLE_CALENDAR]: GOOGLE_CALENDAR_DETAILS,\n [PARTNER_NAMES_V1.WEBHOOKS]: WEBHOOKS_DETAILS,\n [PARTNER_NAMES_V1.MONDAY]: MONDAY_DETAILS,\n [PARTNER_NAMES_V1.SALESFORCEV2]: SALESFORCEV2_DETAILS,\n [PARTNER_NAMES_V1.FTP]: FTP_DETAILS,\n [PARTNER_NAMES_V1.BOX]: BOX_DETAILS,\n [PARTNER_NAMES_V1.MAILCHIMP]: MAILCHIMP_DETAILS_V1\n};\n\nexport default PARTNER_DETAILS;\n","import isUndefined from 'lodash/isUndefined';\n\nimport type {\n RESOURCE_TYPE, PARTNER_NAMES, I_PARTNER_DETAILS, I_PARTNER_RAW_DETAILS\n} from '../types';\nimport { PARTNER_NAMES_V1 } from '../types';\nimport PARTNER_DETAILS from '../partnerDetails';\n\ntype GET_INTEGRATION_DETAILS_TYPE = (resource: RESOURCE_TYPE, partner: PARTNER_NAMES) => I_PARTNER_DETAILS;\nexport const getIntegrationDetails: GET_INTEGRATION_DETAILS_TYPE = (resource, partner) => {\n const details = PARTNER_DETAILS[partner]();\n\n const description = details.description[resource] || details.description.default as string;\n const shortDescription = details.shortDescription[resource] || details.shortDescription.default as string;\n return {\n ...details,\n description,\n shortDescription,\n actions: details.actions.filter(action => isUndefined(action.allowedResources) || action.allowedResources.includes(resource))\n };\n};\n\ntype GET_ALL_INTEGRATIONS_DETAILS = (resource: RESOURCE_TYPE) => Record;\nexport const getAllIntegrationsDetails: GET_ALL_INTEGRATIONS_DETAILS = resource => { // TODO :: split v1 and v2 integration details\n const orderedPartnerNames = Object.keys(PARTNER_DETAILS).sort() as Array;\n const orderedPartnerDetails = orderedPartnerNames.reduce((acc, key) => {\n return {\n ...acc,\n [key]: PARTNER_DETAILS[key]\n };\n }, {} as Record I_PARTNER_RAW_DETAILS>);\n\n return Object.entries(orderedPartnerDetails).reduce((acc, [partner, value]) => {\n if (value().betaIntegration || Object.values(PARTNER_NAMES_V1).includes(partner as PARTNER_NAMES_V1)) {\n return acc;\n }\n return {\n ...acc,\n [partner]: getIntegrationDetails(resource, partner as PARTNER_NAMES)\n };\n }, {} as ReturnType);\n};\n","/* eslint-disable default-case */\nimport React from 'react';\nimport {\n bool, string, node, object\n} from 'prop-types';\nimport { getAllIntegrationsDetails } from '@jotforminc/integration-constants';\nimport View from '../../../components/View';\nimport Text from '../../../components/Text';\n\nexport const INTEGRATION_DETAILS = getAllIntegrationsDetails();\n\n// TODO: translate alt text for accessibility.\nconst ThreadActor = ({\n type,\n name,\n email,\n avatar,\n showAvatars,\n showAssigneeEmail,\n team,\n TeamAvatar,\n action\n}) => {\n const getAvatarText = () => {\n if (type === 'system') {\n return 'isSystem';\n }\n if (type === 'group') {\n return 'isGroup';\n }\n };\n\n const getAvatarUrl = avatarURL => {\n const currentURL = (avatarURL || '').replace(/^\\/\\//, 'https://');\n if (currentURL === '') {\n return currentURL;\n }\n const url = new URL(currentURL);\n url.searchParams.set('height', 36);\n return url.toString();\n };\n const getThreadActor = () => {\n switch (true) {\n case type === 'human':\n return (\n \n {showAvatars && (\n \n \n \n )}\n \n {name && {name}}\n {showAssigneeEmail && email && {email}}\n \n \n );\n case type === 'team':\n return (\n \n <>\n \n {team.teamName}\n \n \n );\n case type === 'system' || type === 'group':\n return (\n \n {showAvatars && (\n \n \n \n )}\n \n \n {type === 'system' && 'Notification'}\n {type === 'group' && 'Group Approval'}\n \n \n \n );\n case type === 'integration':\n const { partner } = action;\n const details = INTEGRATION_DETAILS?.[partner];\n return (\n \n \n \n {details?.icon()}\n \n \n \n {details?.text}\n \n \n );\n }\n };\n return (\n getThreadActor()\n );\n};\n\nexport const ThreadActorPropTypes = {\n type: string, // human,system\n name: string.isRequired,\n email: string,\n avatar: string.isRequired,\n showAvatars: bool,\n showAssigneeEmail: bool,\n team: object,\n TeamAvatar: node,\n action: object\n};\n\nexport const ThreadActorDefaultProps = {\n type: 'human',\n email: null,\n showAvatars: true,\n showAssigneeEmail: true,\n team: {},\n action: {},\n TeamAvatar: () => <>\n};\n\nThreadActor.propTypes = ThreadActorPropTypes;\nThreadActor.defaultProps = ThreadActorDefaultProps;\n\nexport default ThreadActor;\n","/* eslint-disable react/prop-types */\nimport React, { useMemo } from 'react';\nimport { string, shape } from 'prop-types';\nimport { getAllIntegrationsDetails } from '@jotforminc/integration-constants';\nimport { safeJSONParse } from '@jotforminc/utils';\nimport { t } from '@jotforminc/translation';\nimport Text from '../../../components/Text';\nimport View from '../../../components/View';\nimport { ThreadActorDefaultProps, ThreadActorPropTypes } from './ThreadActor';\nimport { approvalOptionValues, hexToRgba } from '../../../utils';\nimport Image from '../../../components/Image';\n\nexport const INTEGRATION_DETAILS = getAllIntegrationsDetails();\n\nconst GroupApprovalIcon = (\n \n \n \n \n \n \n \n \n \n \n \n);\n\n// TODO: Kaan, Styling\n// TODO: Berkay, refactor after styling\nconst ExpiredAction = ({ assigneeUser, fromMultipleApproval }) => {\n const assignee = useMemo(() => {\n const { name: assigneeName = '', email: assigneeEmail = '' } = assigneeUser || {};\n return fromMultipleApproval ? 'Group Approval' : assigneeName || assigneeEmail;\n }, [assigneeUser]);\n return (\n \n \n Task was automatically expired\n \n \n {`${assignee} didn't take any action in the time allowed.`}\n \n \n );\n};\n\nconst CanceledAction = () => (Approval flow is canceled.);\nconst EscalatedAction = ({ details, showComments }) => {\n const fromMultipleApproval = details?.fromMultipleApproval || false;\n const previousAssigneeName = fromMultipleApproval ? 'Group Approval' : `${details?.previousAssigneeUser?.name || details?.previousAssigneeEmail}'s`;\n const newAssignee = details.newAssigneeEmail;\n return (\n \n {`${previousAssigneeName} task has been escalated to: ${newAssignee}`}\n {showComments && details.comment && {details.comment} }\n {`${previousAssigneeName} didn't take any action in the time allowed.`}\n \n );\n};\n\nconst ReassignAction = ({ details }) => (\n \n \n Reassigned\n \n \n {`to: ${details.newAssigneeEmail}`}\n \n \n);\n\nconst OutcomeAction = ({\n details, isAutoAction, showComments, showSignature, TeamAvatar\n}) => {\n const {\n comment, buttonColor: _buttonColor, signature, assigneeUser: { name: assigneeName, email: assigneeEmail } = {},\n text, team, title, seperatedSubtask, disectedParent = null, takenOver, fromMultipleApproval\n } = details;\n const buttonColor = _buttonColor || '#01bd6f';\n const signatureOwner = assigneeName || assigneeEmail;\n const signatureAltName = signatureOwner ? t(`${signatureOwner}'s signature`) : t('signature');\n return (\n \n {isAutoAction ? 'Automatically' : ''}\n \n {text}\n
    \n {\n fromMultipleApproval && takenOver && (\n <>\n
    \n {t('on behalf of')}\n
    \n { team ? (\n
    \n \n {team.teamName}\n
    \n ) : (\n
    \n Group Approval\n
    \n )}\n \n )\n }\n {showComments && comment && (\n \n {comment}\n \n )}\n {showSignature && signature && (\n \n )}\n {team && !disectedParent && !takenOver && (\n
    \n \n {team.teamName}\n
    \n )}\n {\n seperatedSubtask && !team && (\n
    \n {GroupApprovalIcon}\n {title}\n
    \n )\n }\n
    \n );\n};\n\nconst SignAction = ({ details }) => {\n const { buttonColor, documentTitle, text } = details;\n return (\n \n \n {text}\n \n \n {documentTitle}\n \n \n );\n};\n\n// eslint-disable-next-line no-unused-vars\nconst StartAction = ({ details }) => {\n const { startPointTitle } = details;\n return (\n \n \n {`${startPointTitle} Submitted.`}\n \n \n );\n};\n\n// eslint-disable-next-line no-unused-vars\nconst RestartAction = () => {\n return (\n \n \n Restart\n \n \n approval flow.\n \n \n );\n};\n\nconst MultipleApprovalMailAction = ({ details }) => {\n const {\n approvalOptions, assigneeEmails, title = 'Approval', team, reason, mergeTo\n } = details;\n if (reason && reason === 'SEND_REMINDER') {\n return (\n \n \n {`Group Approval Step - Reminder Email sent to ${team ? team?.teamName : mergeTo || ''} `}\n \n \n );\n }\n const assigneeEmailTexts = team ? team?.teamMembers.map(val => val.email || val.username || val.name).join(',') : Object.values(safeJSONParse(assigneeEmails, [])).join(',');\n const { option, value = null } = (approvalOptions && safeJSONParse(approvalOptions, approvalOptions)) || {};\n return (\n \n \n {`${title} request sent to ${team ? '' : 'group approval:'}`}\n { team && (\n <>\n \n {team?.teamName}\n :\n \n {`${assigneeEmailTexts}`}\n \n ) }\n \n \n {approvalOptionValues(option, value)}\n \n {!team && (\n \n To: \n {`${assigneeEmailTexts}`}\n \n )}\n \n );\n};\n\nconst MailAction = ({ details }) => {\n switch (true) {\n case details && details?.reason === 'SEND_SIGN_NOTIFICATION':\n const { documentTitle = '' } = details;\n return (\n \n \n {`${documentTitle} sent for signature.`}\n \n \n );\n case details && details?.reason === 'SEND_REMINDER':\n const { elementType, elementSubType, to } = details;\n const getElementName = () => {\n // eslint-disable-next-line default-case\n switch (true) {\n case elementType === 'workflow_assign_form':\n return 'Form';\n case elementType === 'workflow_approval' && elementSubType && elementSubType === 'workflow_approval_with_sign':\n return 'Approve & Sign';\n case elementType === 'workflow_approval':\n return 'Approval';\n }\n };\n return (\n \n \n {`${getElementName()} Step - Reminder Email sent to ${to} `}\n \n \n );\n default:\n return (\n \n \n {` Email sent. (${details.subject})`}\n \n \n {details.to}\n \n \n );\n }\n};\n\nconst WaitingAction = ({ actor }) => {\n return (\n \n {`Waiting for ${actor.name || actor.email}'s action.`}\n \n );\n};\n\nconst IntegrationTriggerAction = ({ details: actionDetails }) => {\n const {\n result, integrationAccountName, action, partner = ''\n } = actionDetails;\n const integrationErrorText = 'Unable to complete the action.';\n const details = INTEGRATION_DETAILS?.[partner];\n\n if (result === 'ERRORED') {\n return (\n <>\n
    \n \n {t(integrationErrorText)}\n \n
    \n \n );\n }\n return (\n <>\n
    \n {details?.actions?.find(e => e.value === action)?.text}\n
    \n
    \n
    \n {integrationAccountName}\n
    \n
    \n \n );\n};\n\nconst ThreadAction = ({\n details,\n status, // COPLETED, ERROR, ACTIVE\n actor,\n type,\n showComments,\n showSignature,\n TeamAvatar\n}) => {\n const isAutoAction = actor.type === 'system' && !!details.assigneeUser;\n switch (true) {\n case type === 'EXPIRE':\n return ();\n case type === 'MAIL':\n return ();\n case type === 'MULTIPLE_APPROVAL_MAIL':\n return ();\n case type === 'SIGN_DOCUMENT':\n return ();\n case type === 'APPROVE_REJECT' && status === 'COMPLETED':\n return (\n \n );\n case type === 'APPROVE_REJECT' && status === 'ACTIVE':\n return ();\n case status === 'CANCELED':\n return ();\n case type === 'REASSIGN':\n return ();\n case type === 'ESCALATE':\n return ();\n case type === 'INTEGRATION_TRIGGER':\n return ();\n default:\n return (
    missing implementation
    );\n }\n};\n\nconst ThreadActionPropTypes = {\n status: string.isRequired,\n details: shape({}),\n actor: shape({ ...ThreadActorPropTypes })\n};\n\nconst ThreadActionDefaultProps = {\n details: {},\n actor: ThreadActorDefaultProps\n};\n\nThreadAction.defaultProps = ThreadActionDefaultProps;\nThreadAction.propTypes = ThreadActionPropTypes;\n\nexport default ThreadAction;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Text from '../../../components/Text';\nimport View from '../../../components/View';\nimport { getDateTimeText } from '../../../utils';\nimport { LocaleTypes } from '../../../constants/schemas';\n\nconst ThreadDate = ({\n date,\n ip,\n dateFormat,\n locale,\n amPmHour,\n showDate,\n showIP,\n userTimeZone\n}) => {\n const parsedDate = React.useMemo(() => {\n const dateObj = new Date(date);\n const answerDate = {\n year: dateObj.getFullYear(),\n month: dateObj.getMonth() + 1,\n day: dateObj.getDate(),\n hour: dateObj.getHours(),\n min: dateObj.getMinutes(),\n ampm: amPmHour\n };\n return getDateTimeText({\n answer: answerDate, hideTime: false, dateFormat, locale, userTimeZone, shouldCalculateTimeZone: true\n });\n }, [date, dateFormat, locale, amPmHour, userTimeZone]);\n\n return (\n \n {showDate && parsedDate && (\n \n {parsedDate}\n \n ) }\n {showIP && ip && (\n \n {ip}\n \n )}\n \n );\n};\n\nThreadDate.propTypes = {\n date: PropTypes.string,\n ip: PropTypes.string,\n dateFormat: PropTypes.string,\n userTimeZone: PropTypes.string,\n locale: LocaleTypes.schema,\n amPmHour: PropTypes.bool,\n showDate: PropTypes.bool,\n showIP: PropTypes.bool\n};\n\nThreadDate.defaultProps = {\n date: null,\n ip: null,\n userTimeZone: '',\n dateFormat: 'MMM D, YYYY HH:mm',\n locale: LocaleTypes.default,\n amPmHour: false,\n showDate: true,\n showIP: true\n};\n\nexport default ThreadDate;\n","/* eslint-disable max-len */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Styled from 'styled-components';\nimport { t } from '@jotforminc/translation';\nimport Baseline from '../../../components/Baseline';\nimport Tableview from '../../../components/Tableview';\nimport ThreadAction from './ThreadAction';\nimport ThreadActor from './ThreadActor';\nimport ThreadDate from './ThreadDate';\nimport { LocaleTypes } from '../../../constants/schemas';\n\nconst StyledTableview = Styled(Tableview)`\n thead {\n th {\n text-align: left;\n border-bottom: 1px solid #E5E6EF;\n background-color: #EDEEF7;\n padding: 12px;\n\n &:not(:last-of-type) {\n border-right: 1px solid #DFDEE7;\n }\n }\n }\n\n tbody {\n td {\n background-color: #FAFAFD;\n\n &:not(:last-of-type).isAnswer {\n border-right: 1px solid #E5E6EF;\n }\n }\n }\n\n .stAnswer {\n &-team {\n display: flex;\n align-items: center;\n font-size: 12px;\n line-height: 14px;\n color: #0A1551;\n margin-top: 6px;\n\n &-name {\n display: flex;\n align-items: center;\n font-size: 12px;\n margin-top: 6px;\n font-weight: 500;\n\n svg {\n width: 15px;\n height: 15px;\n margin-right: 4px;\n }\n }\n\n .sb-customIcon {\n width: 14px;\n height: 14px;\n margin-right: 4px;\n\n > span > span {\n font-size: 11px !important;\n widh: 14px;\n height: 14px;\n display: inline-block;\n }\n }\n }\n\n &-action {\n line-height: 1.5;\n margin: 9px 6px;\n\n &-text {\n &.isComment {\n width: 100%;\n }\n\n &.isOutcome {\n display: inline-block;\n padding: 6px 12px;\n margin: 4px auto 4px 0;\n border-radius: 4px;\n }\n }\n\n &-image {\n &.isSignature {\n margin-top: 8px;\n max-height: 42px;\n display: block;\n }\n }\n\n &-pill {\n background-color: #F3F3FE;\n color: #6C73A8;\n border-radius: 10px;\n display: inline-flex;\n align-items: center;\n font-size: 12px;\n padding: 2px 6px 2px 4px;\n gap: 4px;\n margin-top: 6px;\n margin-bottom: 6px;\n \n &:before {\n content: \"\";\n width: 16px;\n height: 16px;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='16' fill='none'%3E%3Cpath fill='%236C73A8' fill-rule='evenodd' d='M12.06 4.027a2.476 2.476 0 0 1 0 3.502l-.888.889a.667.667 0 1 0 .942.942l.89-.888a3.81 3.81 0 0 0-5.388-5.388l-.889.89a.667.667 0 1 0 .943.942l.889-.889a2.476 2.476 0 0 1 3.502 0Zm-6.666 6.666a.667.667 0 0 1 0-.942L9.84 5.306a.667.667 0 0 1 .943.943l-4.445 4.444a.667.667 0 0 1-.943 0Zm-1.28-2.222a2.476 2.476 0 0 0 3.502 3.502l.89-.89a.667.667 0 1 1 .942.944l-.889.889a3.81 3.81 0 0 1-5.387-5.388l.889-.889a.667.667 0 0 1 .943.943l-.89.89Z' clip-rule='evenodd'/%3E%3C/svg%3E\"); background-repeat: no-repeat;\n background-position: center;\n background-size: 16px;\n }\n }\n }\n\n &-date {\n padding: 0 6px;\n }\n\n &-actor {\n display: flex;\n margin: 9px 3px;\n align-items: center;\n\n .sb-customIcon {\n > span > span {\n font-size: 16px !important;\n }\n }\n\n &-avatar {\n min-width: 36px;\n max-width: 36px;\n min-height: 36px;\n max-height: 36px;\n flex-shrink: 1;\n border-radius: 50%;\n overflow: hidden;\n background-color: #5E74E6;\n box-shadow: 0 0 0 1px #fff, 0 0 0 3px #dcdff0;\n position: relative;\n\n &-image {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-repeat: no-repeat;\n\n > svg {\n opacity: 1 !important;\n }\n\n &.isIntegration {\n background-color: var(--jfv-navy-75);\n }\n\n &.isUser {\n background-size: cover;\n }\n\n &.isSystem {\n background-image: url(\"data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23fff' d='M5.906 3.633h8.182v3.636H5.906z'/%3E%3Cpath d='M3.18 13.635V9.09h13.636v4.545' stroke='%23fff' stroke-width='1.7' stroke-linejoin='round'/%3E%3Cpath stroke='%23fff' stroke-width='1.7' d='M9.83 13.637V9.09'/%3E%3Ccircle cx='3.17898' cy='14.0969' r='2.27273' fill='%23fff'/%3E%3Ccircle cx='16.8157' cy='14.0969' r='2.27273' fill='%23fff'/%3E%3Cpath fill='%23fff' d='M7.723 11.824h4.545v4.546H7.723z'/%3E%3C/svg%3E\");\n background-position: center;\n }\n\n &.isGroup {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='13' fill='none'%3E%3Cpath fill='%23fff' fill-rule='evenodd' d='M3.08.922a1.77 1.77 0 1 0 0 3.54 1.77 1.77 0 0 0 0-3.54ZM7 3.282a2.36 2.36 0 1 0 0 4.72 2.36 2.36 0 0 0 0-4.72Zm0 5.31c-2.176 0-4.13 1.49-4.13 3.541 0 .326.264.59.59.59h7.08a.59.59 0 0 0 .59-.59c0-2.051-1.954-3.54-4.13-3.54ZM10.75.923a1.77 1.77 0 1 0 0 3.54 1.77 1.77 0 0 0 0-3.54Zm-7.29 4.835a.59.59 0 0 0-.766-.544C1.462 5.6.51 6.672.51 8.003c0 .326.264.59.59.59h2.51a.59.59 0 0 0 .484-.928 3.52 3.52 0 0 1-.632-1.908Zm7.844-.544a.59.59 0 0 0-.767.544 3.52 3.52 0 0 1-.632 1.908.59.59 0 0 0 .484.928h2.51a.59.59 0 0 0 .59-.59c0-1.331-.952-2.403-2.185-2.79Z' clip-rule='evenodd'/%3E%3C/svg%3E\");\n background-position: center;\n background-size: 20px;\n background-color: #6C73A8;\n }\n svg {\n height: unset !important;\n width: unset !important;\n stroke: none !important;\n }\n }\n }\n\n &-info {\n flex-grow: 1;\n margin-left: 12px;\n display: flex;\n justify-content: center;\n flex-direction: column;\n line-height: 1.5;\n }\n }\n }\n`;\n\nconst SubmissionThread = ({\n answer,\n text,\n labelProps,\n answerWrapperProps,\n direction,\n transpose,\n baselineProps,\n orientation,\n containerStyle,\n sublabelProps,\n answerProps,\n columnnHeaderProps,\n dateFormat,\n locale,\n amPmHour,\n showAvatars,\n showAssigneeEmail,\n showComments,\n showSignature,\n showIP,\n userTimeZone,\n customTableProps\n}) => {\n const columns = [t('Actor'), t('Actions'), t('Date')];\n\n const tableData = React.useMemo(() => answer.map(rowData => {\n const {\n action, actor, ip, date\n } = rowData;\n if (action?.details?.notRequired) {\n return null;\n }\n return [\n ,\n ,\n \n ];\n }), [answer, dateFormat, locale, amPmHour, showAvatars, showAssigneeEmail, userTimeZone]);\n\n return (\n \n \n \n );\n};\n\nSubmissionThread.propTypes = {\n answer: PropTypes.arrayOf(PropTypes.shape({})),\n text: PropTypes.string,\n columns: PropTypes.arrayOf(PropTypes.string),\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.shape({}),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n sublabelProps: PropTypes.shape({}),\n containerStyle: PropTypes.shape({}),\n columnnHeaderProps: PropTypes.arrayOf(PropTypes.shape({})),\n transpose: PropTypes.bool,\n orientation: PropTypes.oneOf([\n 'row',\n 'column'\n ]),\n direction: PropTypes.string,\n dateFormat: PropTypes.string,\n userTimeZone: PropTypes.string,\n locale: LocaleTypes.schema,\n amPmHour: PropTypes.bool,\n showAvatars: PropTypes.bool,\n showAssigneeName: PropTypes.bool,\n showAssigneeEmail: PropTypes.bool,\n showComments: PropTypes.bool,\n showSignature: PropTypes.bool,\n showIP: PropTypes.bool,\n showDate: PropTypes.bool,\n customTableProps: PropTypes.object\n};\n\nSubmissionThread.defaultProps = {\n text: '',\n labelProps: {},\n answerProps: {},\n answerWrapperProps: {},\n baselineProps: {},\n sublabelProps: {},\n containerStyle: {},\n columnnHeaderProps: [],\n columns: [],\n transpose: false,\n orientation: 'column',\n answer: [],\n userTimeZone: '',\n direction: 'column',\n dateFormat: 'MMM D, YYYY HH:mm',\n locale: LocaleTypes.default,\n amPmHour: false,\n showAvatars: PropTypes.bool,\n showAssigneeName: true,\n showAssigneeEmail: true,\n showComments: true,\n showSignature: true,\n showIP: true,\n showDate: true,\n customTableProps: {}\n};\n\nexport default SubmissionThread;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport RadioField from '../Radio';\n\nconst SignDocumentStatus = ({\n answer,\n containerProps,\n labelProps,\n optionsArray,\n options,\n answerProps,\n label\n}) => {\n return (\n \n );\n};\n\nSignDocumentStatus.propTypes = {\n labelProps: PropTypes.shape({\n className: PropTypes.string\n }).isRequired,\n answer: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n answerProps: PropTypes.shape({}).isRequired,\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n containerProps: PropTypes.shape({}),\n optionsArray: PropTypes.shape({}).isRequired,\n options: PropTypes.string.isRequired\n};\n\nSignDocumentStatus.defaultProps = {\n baselineProps: {},\n containerProps: {},\n answerWrapperProps: {}\n};\n\nexport default SignDocumentStatus;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport Baseline from '../../components/Baseline';\nimport AssigneeLine from '../../components/AssigneeLine';\n\nconst ScAssigneeLine = styled(AssigneeLine)`\n border-radius: 14px !important;\n padding: 5px 6px !important;\n img {\n width: 18px !important;\n height: 18px !important;\n }\n`;\n\nconst UserInfo = ({\n text,\n answer,\n labelProps,\n answerProps,\n answerWrapperProps,\n containerProps,\n baselineProps,\n direction\n}) => {\n const { name, avatarUrl, email } = answer;\n\n return (\n \n
    \n \n
    \n \n );\n};\n\nUserInfo.propTypes = {\n text: PropTypes.string,\n answer: PropTypes.shape({\n name: PropTypes.string,\n email: PropTypes.string,\n avatarUrl: PropTypes.string\n }),\n labelProps: PropTypes.shape({}),\n answerProps: PropTypes.oneOfType([\n PropTypes.shape({}),\n PropTypes.array\n ]),\n answerWrapperProps: PropTypes.shape({}),\n baselineProps: PropTypes.shape({}),\n containerProps: PropTypes.shape({}),\n direction: PropTypes.string\n};\n\nUserInfo.defaultProps = {\n text: '',\n answer: {},\n labelProps: {},\n answerProps: [],\n answerWrapperProps: {},\n baselineProps: {},\n containerProps: {},\n direction: 'column'\n};\n\nexport default UserInfo;\n","import React from 'react';\n\nconst MissingField = ({ type }) => (\n
    {`${type} is missing`}
    \n);\n\nexport default MissingField;\n","import makeGetAnswerFieldComponent from './makeGetAnswerFieldComponent';\n\nconst getAnswerFieldComponent = makeGetAnswerFieldComponent({});\n\nexport default getAnswerFieldComponent;\n","import * as Fields from '../../fields';\nimport MissingField from './MissingField';\n\nconst makeGetAnswerFieldComponent = config => {\n const Types = {\n ...Fields,\n ...config\n };\n\n const fieldKeys = Object.keys(Types);\n\n const getFieldType = (type = '') => type.replace('control_', '').toLowerCase();\n\n const getMatchedFieldKey = (fnKeys, fieldType) => {\n return fnKeys.find(key => {\n if (key === 'Twoco') return fieldType === '2co';\n return key.toLowerCase() === fieldType;\n });\n };\n\n return type => {\n const fieldType = getFieldType(type);\n const matchedFieldKey = getMatchedFieldKey(fieldKeys, fieldType);\n // Not found any matching field\n if (!matchedFieldKey) return MissingField;\n return Types[matchedFieldKey];\n };\n};\n\nexport default makeGetAnswerFieldComponent;\n","export const NON_INPUT_QUESTIONS = [\n 'control_pagebreak',\n 'control_collapse',\n 'control_image',\n 'control_button',\n 'control_captcha',\n 'control_separator',\n 'control_clear',\n 'control_divider'\n];\n\nexport const HEADER_TEXT_QUESTIONS = [\n 'control_head',\n 'control_text'\n];\n\nexport const PAYMENT_FIELDS = [\n 'control_2co',\n 'control_authnet',\n 'control_bluepay',\n 'control_bluesnap',\n 'control_braintree',\n 'control_cardconnect',\n 'control_clickbank',\n 'control_dwolla',\n 'control_echeck',\n 'control_eway',\n 'control_firstdata',\n 'control_googleco',\n 'control_onebip',\n 'control_payjunction',\n 'control_chargify',\n 'control_payment',\n 'control_paymentwall',\n 'control_paymill',\n 'control_paypal',\n 'control_paypalexpress',\n 'control_paypalpro',\n 'control_paypalSPB',\n 'control_square',\n 'control_stripe',\n 'control_stripeACH',\n 'control_wepay',\n 'control_worldpay',\n 'control_worldpayus',\n 'control_payu',\n 'control_pagseguro',\n 'control_moneris',\n 'control_sofort',\n 'control_sensepass',\n 'control_paysafe',\n 'control_iyzico',\n 'control_skrill',\n 'control_gocardless'\n];\n","/* eslint-disable complexity */\nimport { safeJSONParse } from '@jotforminc/utils';\nimport { PAYMENT_FIELDS } from '../constants';\n\nexport const isFieldWithPreview = ({\n type,\n selectedField\n}) => {\n const WIDGETS_WITH_IMAGE_PREVIEW = [\n // Image Upload Preview\n '5295b800485bd19f5d000005',\n // Take Photo\n '529c8286a75dae5e7f000005'\n ];\n\n return type === 'control_widget' && WIDGETS_WITH_IMAGE_PREVIEW.indexOf(selectedField) > -1;\n};\n\nexport const getCustomProps = ({\n answer,\n question\n}) => {\n try {\n const { type } = question;\n if (PAYMENT_FIELDS.indexOf(type) > -1) {\n const _answer = answer.answer;\n const answerProducts = [];\n let showImages = false;\n\n if (_answer && Object.keys(_answer).length > 2) {\n Object.values(_answer).forEach(productRawData => {\n const productJSON = productRawData || '{}';\n let parsedProduct = typeof productRawData !== 'string' ? productRawData : safeJSONParse(productJSON);\n\n if (parsedProduct && parsedProduct.pid) {\n const { products } = answer;\n const foundProduct = products.find(product => product.pid === parsedProduct.pid);\n\n const { icon = '', images = '[]' } = foundProduct;\n const imagesArr = safeJSONParse(images, []);\n parsedProduct = { ...parsedProduct, icon, images: imagesArr };\n\n if (!showImages && !!(icon || imagesArr.length)) {\n showImages = true;\n }\n answerProducts.push(parsedProduct);\n }\n });\n }\n\n return {\n products: answerProducts,\n showImages\n };\n }\n\n // will add other types later when needed\n switch (type) {\n case 'control_datetime': {\n const { allowTime, dateFormat, timeFormat } = question;\n\n if (allowTime === 'Yes' && !dateFormat) {\n return {\n dateFormat: timeFormat === 'AM/PM' ? 'MMM D, YYYY hh:mm A' : 'MMM D, YYYY HH:mm'\n };\n }\n return {};\n }\n case 'control_birthdate': {\n const { dateFormat } = question;\n\n if (!dateFormat) {\n return {\n dateFormat: 'MMM D, YYYY'\n };\n }\n return {};\n }\n case 'control_appointment':\n const timezone = question.timezone ? question.timezone.split(' ')[0] : '';\n const showTimezone = !!timezone;\n return {\n timezone,\n showTimezone\n };\n case 'control_inline':\n return ({\n showSublabels: false,\n fullContent: true\n });\n case 'control_mixed':\n return {\n sublabels: question.sublabels\n };\n case 'control_widget':\n const { qid, selectedField } = question;\n // Image Upload Preview\n if (selectedField === '5295b800485bd19f5d000005') {\n return ({\n optimizeImage: false,\n showImageHyperlink: true,\n clickableImageSelector: `[data-qid=\"${qid}\"] .jfSingleSubmissionView-answer img`\n });\n }\n\n // Take Photo\n if (selectedField === '529c8286a75dae5e7f000005') {\n return ({\n showImageLink: true,\n clickableImageSelector: `[data-qid=\"${qid}\"] .jfSingleSubmissionView-answer img`\n });\n }\n\n return {};\n case 'control_radio':\n if (answer.name === 'outcomeID') {\n const workflowOutcomes = safeJSONParse(question?.workflow_outcomes, []);\n const { buttonColor, text } = workflowOutcomes.find(outcome => outcome.id === parseInt(answer.answer, 10));\n return {\n answer: text,\n answerProps: { className: 'workflowOutcome', style: { color: buttonColor, backgroundColor: `${buttonColor}33` } }\n };\n }\n return {};\n default: {\n return {};\n }\n }\n } catch (e) {\n return {};\n }\n};\n\nexport const getWidgetType = question => question.selectedField || null;\n\nexport const getPaymentType = question => question.paymentType || null;\n\nexport const getAnswerProps = () => {\n return { className: 'jfSingleSubmissionView-answer' };\n};\n\nexport const getDefaultHeaderText = question => {\n const {\n type,\n text,\n subLabel,\n hint,\n cfname\n } = question;\n\n const readyToUseLabels = {\n control_fullname: 'Name',\n control_email: 'Email',\n control_address: 'Address',\n control_phone: 'Phone',\n control_datetime: 'Date',\n control_time: 'Time',\n control_inline: 'Fill in the Blanks'\n };\n\n const header = text || subLabel || hint || readyToUseLabels[type] || '';\n\n if (header) return header;\n\n if (type === 'control_widget' && cfname) return cfname;\n\n const typeLabel = type.replace('control_', '');\n return typeLabel.charAt(0).toUpperCase() + typeLabel.slice(1);\n};\n","import React from 'react';\nimport { shape, number } from 'prop-types';\nimport { withPreview } from '@jotforminc/preview';\nimport FileUploadField from '@jotforminc/fileuploadfield';\nimport { getAnswerFieldComponent } from '@jotforminc/answer-fields';\n\nimport {\n getCustomProps, getAnswerProps, getDefaultHeaderText, getWidgetType, getPaymentType, isFieldWithPreview\n} from '../utils';\n\nconst ViewItem = ({\n itemQuestion,\n itemAnswer,\n index\n}) => {\n const { type: questionType, qid } = itemQuestion;\n const Field = questionType === 'control_fileupload' ? FileUploadField : getAnswerFieldComponent(questionType === 'control_head' ? 'control_text' : questionType);\n const FieldComponent = isFieldWithPreview(itemQuestion) ? withPreview(Field) : Field;\n const customProps = getCustomProps({\n answer: itemAnswer,\n question: itemQuestion\n });\n const answerProps = getAnswerProps();\n const text = getDefaultHeaderText(itemQuestion);\n const widgetId = getWidgetType(itemQuestion);\n const paymentType = getPaymentType(itemQuestion);\n\n const answerFieldProps = {\n ...itemAnswer,\n ...itemQuestion,\n answerProps,\n labelProps: {\n className: 'jfSingleSubmissionView-question',\n textProps: {\n className: 'jfSingleSubmissionView-question-text'\n }\n },\n sublabelProps: {\n className: 'jfSingleSubmissionView-question isSubLabel'\n },\n answerWrapperProps: {\n className: 'jfSingleSubmissionView-answer-wrapper'\n },\n containerProps: {\n className: 'jfSingleSubmissionView-answer-container'\n },\n baselineProps: {\n className: 'jfSingleSubmissionView-container'\n },\n lineProps: {\n className: 'jfSingleSubmissionView-line'\n },\n text,\n ...customProps\n };\n\n return (\n \n \n \n );\n};\n\nViewItem.propTypes = {\n itemQuestion: shape({}).isRequired,\n itemAnswer: shape({}).isRequired,\n index: number.isRequired\n};\n\nexport default ViewItem;\n","import React from 'react';\nimport { string } from 'prop-types';\n\nconst SingleSubmissionViewHeader = ({ headerText, subHeaderText }) => {\n return (\n
    \n
    \n {headerText}\n
    \n
    \n {subHeaderText}\n
    \n
    \n );\n};\n\nSingleSubmissionViewHeader.propTypes = {\n subHeaderText: string.isRequired,\n headerText: string.isRequired\n};\n\nexport default SingleSubmissionViewHeader;\n","import React from 'react';\nimport {\n shape, string, bool\n} from 'prop-types';\nimport sortBy from 'lodash/sortBy';\nimport { isQuestionAnswerEmpty } from '@jotforminc/answer-utils';\n\nimport ViewItem from './ViewItem';\nimport ViewHeader from './ViewHeader';\n\nimport { NON_INPUT_QUESTIONS, HEADER_TEXT_QUESTIONS } from '../constants';\n\nimport '../styles/index.scss';\n\nconst SingleSubmissionView = ({\n questions,\n submission,\n headerText,\n subHeaderText,\n hideHeaderAndText,\n hideEmptyFields\n}) => {\n const renderViewItems = () => {\n const filteredQuestions = Object.values(questions).filter(({ type }) => NON_INPUT_QUESTIONS.indexOf(type) === -1);\n const orderedQuestions = sortBy(filteredQuestions, [q => parseInt(q.order, 10)]);\n const { answers = {} } = submission;\n\n return orderedQuestions.map((question, i) => {\n const { qid, type } = question;\n const answer = answers[qid] || {};\n const { type: answerType, answer: submissionAnswer, selectedField } = answer;\n const isHeaderText = HEADER_TEXT_QUESTIONS.indexOf(type) > -1;\n const isEmptyFieldHidden = hideEmptyFields && !isHeaderText && isQuestionAnswerEmpty(answerType, submissionAnswer, selectedField);\n const isHeaderAndTextHidden = hideHeaderAndText && isHeaderText;\n\n if (isEmptyFieldHidden || isHeaderAndTextHidden) {\n return null;\n }\n\n return (\n \n );\n });\n };\n\n return (\n
    \n
    \n {(headerText || subHeaderText) && (\n \n )}\n
    \n {renderViewItems()}\n
    \n
    \n
    \n );\n};\n\nSingleSubmissionView.defaultProps = {\n hideHeaderAndText: true,\n hideEmptyFields: true,\n submission: {},\n questions: {},\n subHeaderText: '',\n headerText: ''\n};\n\nSingleSubmissionView.propTypes = {\n questions: shape({}),\n submission: shape({}),\n hideHeaderAndText: bool,\n hideEmptyFields: bool,\n subHeaderText: string,\n headerText: string\n};\n\nexport default SingleSubmissionView;\n","import React, { useContext } from 'react';\nimport { string, bool } from 'prop-types';\nimport { t } from '@jotforminc/translation';\n\nimport IconModalClose from './assets/iconModalClose.svg';\nimport IconViewAllSubmission from './assets/iconViewAllSubmission.svg';\nimport IconViewNewSubmission from './assets/iconViewNewSubmission.svg';\nimport IconArrowLeft from './assets/arrow_left.svg';\nimport { SingleSubmissionButtonContext } from './context';\n\nconst FormName = ({\n formName,\n formID,\n submissionID,\n withBackButton\n}) => {\n const { setPanelOpen } = useContext(SingleSubmissionButtonContext);\n const handleClose = () => {\n setTimeout(() => {\n setPanelOpen?.(false);\n }, 500);\n document.body.classList.remove('jfSingleSubmissionView-standalone-isVisible');\n };\n\n return (\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n {formName}\n
    \n window.open(`/inbox/${formID}/${submissionID}`, '_blank')}\n onKeyUp={null}\n >\n
    \n {t('View all submissions')}\n
    \n \n
    \n
    \n
    \n
    \n { withBackButton ? (\n (\n
    \n \n \n {t('Back')}\n \n
    \n )\n )\n : (\n
    \n \n \n \n
    \n )}\n \n );\n};\n\nFormName.propTypes = {\n formName: string.isRequired,\n formID: string.isRequired,\n submissionID: string.isRequired,\n withBackButton: bool\n};\n\nFormName.defaultProps = {\n withBackButton: false\n};\n\nexport default FormName;\n","import { saveBlobAsFile } from '@jotforminc/utils';\nimport { RequestLayer, Interceptors } from '@jotforminc/request-layer';\n\nexport const layer = new RequestLayer('/API', {\n interceptorConfig: {\n teamID: global.teamID,\n customResponseInterceptors: [Interceptors.requestManagerResponseNormalizer]\n }\n});\n\nexport const fetchQuestions = formID => layer.get(`form/${formID}/questions`);\nexport const fetchSubmission = submissionID => layer.get(`submission/${submissionID}`);\nexport const fetchUser = () => layer.get('user/combinedinfo');\n\nexport const generatePDF = (formID, reportID, submissionID, username, filename, liteMode, isHIPAA) => layer.get(`generatePDF?type=PDFv2${liteMode\n ? '&liteMode=1' : ''}&formid=${formID}&submissionid=${submissionID}&pdfName=${filename}&username=${username}&useNew=1${reportID\n ? `&reportid=${reportID}` : '&inbox=1'}${isHIPAA ? '&hipaa=1' : ''}`, {\n responseType: isHIPAA ? 'arraybuffer' : 'json'\n}).then(response => {\n const { headers: responseHeaders } = response;\n if (responseHeaders['content-type'].indexOf('application/pdf') > -1) {\n saveBlobAsFile(new global.Blob([response.data], { type: 'application/pdf' }), `${submissionID}.pdf`);\n return null;\n }\n\n const { data: { content } = {} } = response;\n return content;\n});\n\nexport const fetchFormPdf = formID => layer.get(`form/${formID}/pdf`);\n","import React, { useEffect, useRef, useState } from 'react';\nimport { string } from 'prop-types';\nimport classNames from 'classnames';\nimport Tethered from 'react-tether';\nimport { t } from '@jotforminc/translation';\nimport { generateFileName } from '@jotforminc/answer-utils';\nimport IconPDF from './assets/icon_pdf.svg';\nimport IconDownload from './assets/icon_download.svg';\nimport {\n fetchQuestions, fetchUser, generatePDF, fetchFormPdf\n} from './helper';\nimport './jfSingleSubmissionView-standalone.scss';\n\nconst DownloadButton = ({ formID, submissionID }) => {\n const [isMenuVisible, setMenuVisibility] = useState(false);\n const [loading, setLoading] = useState(false);\n const [question, setQuestion] = useState();\n const [formPdfList, setPdfList] = useState([]);\n const [username, setUsername] = useState('');\n const menuRef = useRef();\n const buttonRef = useRef();\n\n useEffect(() => {\n if (formID) {\n const getSubmissionInfo = async () => {\n try {\n const questionRes = await fetchQuestions(formID);\n if (typeof questionRes === 'object') {\n setQuestion(questionRes);\n }\n } catch (e) {\n setQuestion([]);\n console.log('error', e);\n }\n };\n getSubmissionInfo();\n }\n }, [formID]);\n\n const requestGeneratePDF = (title, id) => {\n let generatePromise;\n if (title && id) {\n generatePromise = generatePDF(formID, id, submissionID, username, title, false, false);\n } else {\n generatePromise = generatePDF(formID, '', submissionID, username, generateFileName(Object.values(question)), false, false);\n }\n setLoading(true);\n generatePromise.then(url => {\n if (url) window.location.href = url;\n setLoading(false);\n });\n setMenuVisibility(false);\n };\n\n const renderDownloadPDFMenu = () => {\n return (\n \n
    \n {formPdfList.map(({ id, title }) => (\n
    \n setMenuVisibility(false)}\n onClick={() => {\n requestGeneratePDF(id, title);\n }}\n >\n
    \n \n
    \n {title}\n \n
    \n\n ))}\n setMenuVisibility(false)}\n onClick={() => {\n requestGeneratePDF();\n }}\n >\n
    \n \n
    \n Default PDF\n \n
    \n \n );\n };\n\n const onDownloadClick = async () => {\n const userResponse = await fetchUser();\n const formPdfResponse = await fetchFormPdf(formID);\n const noPdfTemplate = formPdfResponse.length < 1;\n if (!noPdfTemplate) {\n setPdfList(formPdfResponse);\n setUsername(userResponse?.credentials?.username);\n setMenuVisibility(true);\n return;\n }\n if (userResponse?.credentials?.username) {\n requestGeneratePDF();\n }\n };\n\n return (\n <>\n onDownloadClick()}\n >\n
    \n \n
    \n
    \n {t('Download')}\n
    \n \n {isMenuVisible && renderDownloadPDFMenu()}\n\n \n );\n};\n\nDownloadButton.propTypes = {\n formID: string,\n submissionID: string\n};\n\nDownloadButton.defaultProps = {\n formID: '',\n submissionID: ''\n};\n\nexport default DownloadButton;\n","import React from 'react';\nimport { string } from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { handleCustomNavigation } from '@jotforminc/utils';\nimport IconInboxNavigator from './assets/iconInboxNavigator.svg';\nimport './jfSingleSubmissionView-standalone.scss';\n\nconst ViewInInboxButton = ({ formID, submissionID }) => {\n return (\n handleCustomNavigation(`/inbox/${formID}/${submissionID}`, '_blank')}\n >\n
    \n \n
    \n
    \n {t('View In Inbox')}\n
    \n \n );\n};\n\nViewInInboxButton.propTypes = {\n formID: string,\n submissionID: string\n};\n\nViewInInboxButton.defaultProps = {\n formID: '',\n submissionID: ''\n};\n\nexport default ViewInInboxButton;\n","import React, { useContext } from 'react';\nimport { string, bool } from 'prop-types';\nimport { IconTaskFilled } from '@jotforminc/svg-icons';\nimport { t } from '@jotforminc/translation';\nimport IconModalClose from './assets/iconModalClose.svg';\nimport IconArrowLeft from './assets/arrow_left.svg';\nimport { SingleSubmissionButtonContext } from './context';\n\nconst CustomName = ({\n name,\n withBackButton,\n customIconValue\n}) => {\n const { setPanelOpen } = useContext(SingleSubmissionButtonContext);\n const handleClose = () => {\n setTimeout(() => {\n setPanelOpen?.(false);\n }, 500);\n document.body.classList.remove('jfSingleSubmissionView-standalone-isVisible');\n };\n\n const customIconMapping = {\n ASSIGN_TASK_COMPLETE: \n };\n\n return (\n
    \n
    \n
    \n {customIconMapping?.[customIconValue]}\n
    \n
    \n
    \n
    \n {name}\n
    \n
    \n
    \n
    \n { withBackButton ? (\n (\n
    \n \n \n {t('Back')}\n \n
    \n )\n )\n : (\n
    \n \n \n \n
    \n )}\n
    \n );\n};\n\nCustomName.propTypes = {\n name: string.isRequired,\n customIconValue: string,\n withBackButton: bool\n};\n\nCustomName.defaultProps = {\n withBackButton: false,\n customIconValue: null\n};\n\nexport default CustomName;\n","import React from 'react';\nimport { shape, string, bool } from 'prop-types';\nimport { SingleSubmissionView } from '@jotforminc/singlesubmissionview';\nimport { useMomentDate } from '@jotforminc/hooks';\nimport FormName from './FormName';\nimport IconPrint from './assets/iconPrint.svg';\nimport DownloadButton from './DownloadButton';\nimport ViewInInboxButton from './ViewInInboxButton';\nimport './jfSingleSubmissionView-standalone.scss';\nimport CustomName from './CustomName';\n\nconst SingleSubmissionViewWithButton = ({\n subHeaderText: modifyDate,\n formName,\n formID,\n submissionID,\n headerText,\n hideHeaderAndText,\n hideEmptyFields,\n question,\n submission,\n showSubmissionWithHeader: {\n showFormName, showInboxNavigator, showDownloadButton, showPrintButton, showCustomName\n },\n customIconValue,\n withBackButton\n}) => {\n const [dateObj] = useMomentDate(modifyDate, 'YYYY-MM-DD HH:mm');\n const date = dateObj.format('MMM DD, YYYY');\n\n const onPrintClick = () => {\n global.window.print();\n };\n\n const renderButtons = () => {\n return (\n
    \n
    \n {showInboxNavigator && (\n \n )}\n {showDownloadButton && (\n \n )}\n
    \n
    \n {showPrintButton && (\n onPrintClick()}\n >\n
    \n \n
    \n \n )}\n
    \n
    \n );\n };\n\n return (\n <>\n { question && submission\n && (\n <>\n {showFormName && (\n \n )}\n {\n showCustomName && (\n \n )\n }\n {(showInboxNavigator || showDownloadButton || showPrintButton) && renderButtons()}\n
    \n
    \n \n
    \n
    \n \n )}\n \n );\n};\n\nSingleSubmissionViewWithButton.defaultProps = {\n hideHeaderAndText: true,\n hideEmptyFields: true,\n showSubmissionWithHeader: {\n showFormName: false,\n showInboxNavigator: false,\n showDownloadButton: false,\n showPrintButton: false,\n showCustomName: false\n },\n formName: '',\n headerText: '',\n formID: null,\n submissionID: null,\n question: {},\n submission: {},\n withBackButton: false,\n customIconValue: string\n};\n\nSingleSubmissionViewWithButton.propTypes = {\n showSubmissionWithHeader: shape({}),\n question: shape({}),\n submission: shape({}),\n headerText: string,\n subHeaderText: string.isRequired,\n formName: string,\n formID: string,\n submissionID: string,\n hideHeaderAndText: bool,\n hideEmptyFields: bool,\n withBackButton: bool,\n customIconValue: null\n};\n\nexport default SingleSubmissionViewWithButton;\n","import React from 'react';\nimport { t } from '@jotforminc/translation';\nimport { string, number } from 'prop-types';\n\nconst ApprovalOptions = ({\n option, value, subType, type\n}) => {\n const approvalOptionValues = {\n workflow_approval: {\n amount: t(`${value} response${value > 1 ? 's' : ''} completes the approval`),\n first: t('Require response from one person'),\n all: t('Require response from all'),\n majority: t('Require response from majority')\n },\n workflow_approval_with_sign: {\n amount: t(`${value} response${value > 1 ? 's' : ''} completes the approval`),\n first: t('Require response from one person'),\n all: t('Require response from all'),\n majority: t('Require response from majority')\n },\n workflow_team_approval: {\n amount: t(`${value} response${value > 1 ? 's' : ''} completes the approval`),\n first: t('Require response from one person'),\n all: t('Require response from all'),\n majority: t('Require response from majority')\n }\n };\n\n return (\n \n {approvalOptionValues?.[subType || type]?.[option]}\n \n );\n};\n\nApprovalOptions.defaultProps = {\n option: '',\n value: null,\n type: '',\n subType: ''\n};\n\nApprovalOptions.propTypes = {\n option: string,\n value: number,\n type: string,\n subType: string\n};\n\nexport default ApprovalOptions;\n","import React from 'react';\nimport {\n number,\n shape,\n string,\n node\n} from 'prop-types';\nimport classNames from 'classnames';\n\nconst SingleAvatar = ({\n user: {\n name = '',\n email = '',\n avatarUrl = ''\n },\n className,\n containerClassName,\n shortNameMaxChars,\n children,\n containerProps,\n ...props\n}) => {\n const isDefaultAvatar = avatarUrl === '' || avatarUrl?.includes('Podo-Guest');\n const shortName = (name || email || '').slice(0, shortNameMaxChars).toUpperCase();\n\n const avatarItem = (\n \n {isDefaultAvatar ? shortName : \"User}\n \n );\n\n const renderContent = children ? (\n
    \n
    \n {avatarItem}\n
    \n
    \n {children}\n
    \n
    \n ) : avatarItem;\n\n return (\n avatarUrl || isDefaultAvatar || email ? renderContent : null\n );\n};\n\nSingleAvatar.propTypes = {\n user: shape({}).isRequired,\n className: string,\n containerProps: shape({}),\n containerClassName: string,\n shortNameMaxChars: number,\n children: node\n};\n\nSingleAvatar.defaultProps = {\n className: null,\n containerProps: {},\n containerClassName: null,\n shortNameMaxChars: 2,\n children: null\n};\n\nexport default SingleAvatar;\n","import React from 'react';\nimport { node, shape, string } from 'prop-types';\nimport { Tooltip } from '@jotforminc/tooltip';\nimport { t } from '@jotforminc/translation';\nimport SingleAvatar from './SingleAvatar';\nimport '../styles/SingleAvatarWithDetails.scss';\n\nconst SingleAvatarWithDetails = ({\n name,\n email,\n avatarUrl,\n status,\n comment,\n signature,\n date,\n outcomeColor,\n menu,\n contentText,\n children\n}) => {\n const { text, type } = status;\n const userName = name || email;\n const isWaitingType = type === 'WAITING';\n const isNotRequiredType = type === 'NOTREQUIRED';\n const isCreatorType = type === 'CREATOR';\n\n return (\n
    \n \n
    \n
    \n
    \n {userName}\n
    \n
    \n {menu}\n
    \n
    \n
    \n
    \n \n {text}\n {isCreatorType && (\n \n {t('Creator roles are not involved in the approval process.')}\n \n )}\n \n {contentText?.length ? (\n <>\n {' '}\n {contentText}\n \n ) : null}\n\n {date && !isWaitingType && !isNotRequiredType && !isCreatorType ? (\n \n {' at '}\n {date.format('MMM DD, yyyy h:mm A')}\n \n ) : null}\n
    \n
    \n
    \n \n {comment ? (\n
    \n {comment}\n
    \n ) : null}\n {signature ? (\n
    \n {`${userName}'s\n
    \n ) : null}\n {children}\n
    \n );\n};\n\nSingleAvatarWithDetails.propTypes = {\n name: string,\n email: string,\n avatarUrl: string,\n status: shape({}),\n comment: string,\n signature: string,\n date: string,\n outcomeColor: string,\n children: node,\n menu: node,\n contentText: string\n};\n\nSingleAvatarWithDetails.defaultProps = {\n name: null,\n email: null,\n avatarUrl: null,\n status: {},\n comment: null,\n signature: null,\n date: null,\n outcomeColor: null,\n children: null,\n menu: null,\n contentText: null\n};\n\nexport default SingleAvatarWithDetails;\n","import {\n arrayOf,\n shape,\n string,\n node\n} from 'prop-types';\nimport React, { useMemo } from 'react';\nimport classNames from 'classnames';\nimport SingleAvatar from './SingleAvatar';\nimport '../styles/jfAvatarGroup.scss';\n\nconst AvatarGroup = ({ className, children, items }) => {\n const renderAvatarList = useMemo(() => {\n return items.map(({\n name = '',\n email = '',\n avatarUrl = '',\n itemClassName = null,\n itemWrapperClassName = null,\n itemContainerClassName = null,\n children: singleAvatarChildren = null,\n ...props\n }) => {\n return (\n
    \n \n {singleAvatarChildren}\n \n
    \n );\n });\n }, [items]);\n\n return (\n
    \n {renderAvatarList}\n {children}\n
    \n );\n};\n\nAvatarGroup.propTypes = {\n className: string,\n children: node,\n items: arrayOf(shape({\n name: string,\n email: string,\n avatarUrl: string,\n itemClassName: string,\n itemContainerClassName: string,\n children: node\n }))\n};\n\nAvatarGroup.defaultProps = {\n className: null,\n children: null,\n items: []\n};\n\nexport default AvatarGroup;\n","import React from 'react';\nimport {\n arrayOf, shape, string, node\n} from 'prop-types';\nimport { AvatarGroup, SingleAvatarWithDetails } from '@jotforminc/avatar-groups';\nimport { useHover } from '@jotforminc/hooks';\nimport { Popover } from '@jotforminc/uikit';\nimport '../styles/AvatarGroupWithContact.scss';\nimport { defaultAvatarValues, getDateValue } from '../utils/helper';\n\nconst AvatarGroupWithContact = ({ items, children }) => {\n const filteredItems = items.filter(({ properties: { notQualifiedReason = null }, status: subtaskStatus }) => {\n return subtaskStatus !== 'CANCELED' && (!notQualifiedReason || notQualifiedReason !== 'CREATOR_ROLE');\n });\n const newAvatar = filteredItems.map(item => {\n const {\n name,\n email,\n avatarUrl,\n comment = null,\n signature = null,\n updated_at: updatedAt,\n timestamp,\n user = [],\n properties: {\n outcomeInfo, notRequired, contentText, takenOver\n }\n } = item;\n\n const date = getDateValue(timestamp, updatedAt);\n const { buttonColor, type, text } = defaultAvatarValues(outcomeInfo, notRequired) || {};\n const userValue = name || email;\n const isTakenOver = takenOver && user && !Array.isArray(user);\n const contentTextForUser = takenOver ? `on behalf of ${userValue}` : '';\n const userNameValue = isTakenOver ? (user?.name || user?.username || user?.email) : name;\n const userEmailValue = isTakenOver ? user?.email : email;\n const userAvatarValue = isTakenOver ? user?.avatarUrl : avatarUrl;\n\n const [hoverRef, isHovered] = useHover(250);\n\n return {\n children: (\n <>\n
    \n {(isHovered) && (\n \n \n \n )}\n \n ),\n itemWrapperClassName: `jfContact-popover-container is--${type}`,\n itemClassName: 'forApproval',\n style: { '--outcome-color': buttonColor },\n ...item\n };\n });\n\n return (\n \n {children}\n \n );\n};\n\nAvatarGroupWithContact.propTypes = {\n children: node,\n items: arrayOf(shape({\n name: string,\n email: string,\n avatarUrl: string,\n itemClassName: string,\n itemWrapperClassName: string,\n children: node\n }))\n};\n\nAvatarGroupWithContact.defaultProps = {\n children: null,\n items: []\n};\n\nexport default AvatarGroupWithContact;\n","import React, {\n forwardRef, useRef, FunctionComponent\n} from 'react';\nimport { IconXmark } from '@jotforminc/svg-icons';\nimport classNames from 'classnames';\nimport { t } from '@jotforminc/translation';\nimport { Hooks } from '@jotforminc/uikit';\nimport { HeaderProps, RightPanelPropType } from './types';\nimport './styles/RightPanel.scss';\n\nconst PanelHeader: FunctionComponent = ({ title, onClick, headerIcon }: HeaderProps): JSX.Element => (\n
    \n
    \n {headerIcon}\n {title}\n
    \n \n \n \n
    \n);\n\nconst RightPanel = forwardRef((props, ref): JSX.Element => {\n const {\n isVisible,\n asideClass,\n wrapperClass,\n bodyClass,\n onClose,\n RightPanelHeader,\n panelTitle,\n clickableRefList,\n appName,\n isPanelHeaderHidden,\n closeOnClickOutside,\n theme,\n headerIcon,\n children,\n CustomPanelHeader,\n ...otherProps\n } = props;\n const innerRef = useRef();\n const panelRef = Hooks.useCombinedRefs(innerRef, ref);\n Hooks.useClickOutsideStateWithCallback({\n refs: clickableRefList ? [...clickableRefList, panelRef] : [panelRef],\n callback: closeOnClickOutside ? onClose : null\n });\n return (\n \n
    \n {!isPanelHeaderHidden\n ? RightPanelHeader && onClose()} headerIcon={headerIcon} />\n : CustomPanelHeader && }\n
    \n {children}\n
    \n
    \n \n );\n});\n\nRightPanel.defaultProps = {\n isVisible: false,\n asideClass: '',\n wrapperClass: '',\n bodyClass: '',\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onClose: () => {},\n RightPanelHeader: PanelHeader,\n panelTitle: '',\n clickableRefList: [],\n appName: '',\n isPanelHeaderHidden: false,\n closeOnClickOutside: true,\n headerIcon: null,\n theme: '',\n children: null,\n CustomPanelHeader: null\n};\n\nexport default RightPanel;\n","import React, { useState } from 'react';\nimport { string, node, bool } from 'prop-types';\nimport { IconChevronDown } from '@jotforminc/svg-icons';\nimport './styles/jfCollapse.scss';\n\nconst Collapse = ({\n className, buttonTitle, children, initialState\n}) => {\n const [isCollapsed, setCollapsed] = useState(initialState);\n\n const toggle = () => {\n setCollapsed(c => !c);\n };\n return (\n
    \n \n {!isCollapsed && (\n
    \n {children}\n
    \n )}\n
    \n );\n};\n\nCollapse.propTypes = {\n className: string,\n buttonTitle: string,\n children: node,\n initialState: bool\n};\n\nCollapse.defaultProps = {\n className: null,\n buttonTitle: '',\n children: null,\n initialState: true\n};\n\nexport default Collapse;\n","import Styled from 'styled-components';\n\n// eslint-disable-next-line\nconst signHere = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyMDAgNDMiPgogIDxwYXRoIHN0cm9rZT0iI0RGRTNFRCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTEgMzguNjAyYzExLjI0NiAzLjE5NyAyMi4xODItLjk5IDMxLjUwOC03LjE3MiA0LjkzMi0zLjI3IDkuODI2LTcuMTgzIDEyLjgyNS0xMi4zNDEgMS4xOTUtMi4wNTcgMi42NTYtNS42MjYtMS4xMDYtNS42NTgtNC4wOTMtLjAzNC03LjE0IDMuNjYyLTguNjY4IDcuMDIyLTIuMTkgNC44MTktMi4yNjggMTAuNTI2LjQwNyAxNS4xNyAyLjUzMSA0LjM5NSA2Ljc3OCA2LjQ3NCAxMS44NDUgNS42MiA1LjI5My0uODkzIDkuOTItNC41MDggMTMuNzY1LTcuOTg2YTQwLjcxNCA0MC43MTQgMCAwIDAgMy45NjYtNC4wOTNjLjE0Mi0uMTcuNjQyLTEuMDA2Ljk2Ni0xLjA2NC4xMi0uMDIxLjI5OCAzLjY0My4zMyAzLjg0My4yODggMS43OSAxLjE5MSAzLjgwNiAzLjMwNSAzLjg2NyAyLjY5LjA3OCA0Ljk0LTIuMTcyIDYuNzUtMy44My42MS0uNTU5IDIuNTUtMy4yNDEgMy41ODMtMy4yNDEuNDI1IDAgMS4yNDkgMi4xNDMgMS40MzcgMi40MjggMi40ODQgMy43NjQgNi4xMzIgMi40MDEgOC45Ni0uMjM4LjUyLS40ODUgMy4zMDUtNC4zNjcgNC40MzYtMy42NjcuOTExLjU2MyAxLjMxMyAxLjg5MyAxLjc4IDIuNzc4Ljc2IDEuNDQxIDEuNzIyIDIuNDY4IDMuMzMgMy4wMDQgMy40OTMgMS4xNjYgNy4yNjEtMi4xMDIgMTAuODAzLTIuMTAyIDEuMDMzIDAgMS41NjEuNTY4IDIuMTEgMS4zNTEuNzQ5IDEuMDY4IDEuNTIxIDEuODEzIDIuODczIDIuMTAzIDQuMTg4Ljg5OCA3LjYxNy0zLjA3NyAxMS42NjctMi43MjggMS4xODEuMTAxIDIuMDYzIDEuMjkyIDIuOTQ5IDEuOTI3IDEuNzg4IDEuMjggMy45MzggMi4xNjcgNi4xMjcgMi40NzggMy41MDkuNDk5IDcuMDI3LS4xNjIgMTAuNDQ3LS45IDUuOTA1LTEuMjc3IDExLjc1Mi0yLjc5OSAxNy42NjctNC4wMzEiLz4KICA8ZyBmaWxsPSIjREZFM0VEIiBjbGlwLXBhdGg9InVybCgjYSkiPgogICAgPHBhdGggZD0iTTE5Ni41MTQgMTcuNjU3IDE4NC40OTEgMy4xM2EuNjY1LjY2NSAwIDAgMC0uOTM4LS4wODlsLTIuOTA1IDIuNDA1YS42NjYuNjY2IDAgMCAwLS4wODkuOTM4bDEyLjAyMyAxNC41MjZhLjY2NC42NjQgMCAwIDAgLjQ1MS4yMzkuNjY2LjY2NiAwIDAgMCAuNDg4LS4xNWwyLjkwNS0yLjQwNWEuNjY2LjY2NiAwIDAgMCAuMDg4LS45Mzh6bS0xNS4wNzctOC4xMjEtMTAuNTgyIDIuODY5YS42NjYuNjY2IDAgMCAwLS40NzIuNDhsLTQuMjI4IDE2Ljc5NSA3LjgyLTYuNDcyYTMuMzQgMy4zNCAwIDAgMSAuODE1LTQuMTM3IDMuMzM3IDMuMzM3IDAgMCAxIDQuNjkzLjQ0MiAzLjMzOCAzLjMzOCAwIDAgMS0uNDQyIDQuNjk0IDMuMzIyIDMuMzIyIDAgMCAxLTIuNDM4Ljc1IDMuMzM1IDMuMzM1IDAgMCAxLTEuNzc4LS43MjFsLTcuODIgNi40NzEgMTcuMjg5LTEuMDE0YS42NjguNjY4IDAgMCAwIC41NjEtLjM3NGw0Ljc5Ni05Ljg1OS04LjIxNC05LjkyNHoiLz4KICA8L2c+CiAgPGRlZnM+CiAgICA8Y2xpcFBhdGggaWQ9ImEiPgogICAgICA8cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTY3LjU3MyAwaDMydjMyaC0zMnoiIHRyYW5zZm9ybT0icm90YXRlKDUuMzg2IDE2Ny41NzMgMCkiLz4KICAgIDwvY2xpcFBhdGg+CiAgPC9kZWZzPgo8L3N2Zz4=';\n\nexport const ScMainContainer = Styled.div`\n text-align: center;\n [data-uikit-modal-container=\"true\"] & { padding: 12px 24px; }\n`;\n\nexport const ScFooter = Styled.div`\n display: flex;\n justify-content: space-between;\n`;\n\nexport const ScHeader = Styled.div`\n color: #2c3345;\n font-size: 18px;\n font-weight: 600;\n display: flex;\n align-items: center;\n svg {\n width: 18px; height: 16px;\n flex: 0 0 18px;\n margin-right: 8px;\n }\n`;\n\nexport const ScTitle = Styled.div`\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nexport const ScTypingInput = Styled.input`\n width: 100%;\n border: none;\n appearance: none;\n font-size: 48px;\n outline: none;\n padding: 0;\n text-align: center;\n line-height: 152px;\n border-bottom: 2px solid #979797;\n &:invalid { background: url(${signHere}) no-repeat center/65%; }\n`;\n\nexport const ScCanvas = Styled.div`\n ${({ mode }) => mode === 'type' && 'opacity: 0; position: absolute; left: -9999px; pointer-events: none;'}\n text-align: right;\n canvas {\n display: inline-block;\n ${({ emptyCanvas }) => emptyCanvas && `background: url(${signHere}) no-repeat center/65%;`}\n border-bottom: 2px solid #979797;\n }\n`;\n\nexport const ScTypeSwitcher = Styled.div`\n button {\n border: 1px solid #2e69ff;\n padding: .3em 1em;\n margin: 0;\n transition: background-color .1s, color .1s;\n &:first-child {\n border-radius: 4px 0 0 4px;\n border-width: 1px 0 1px 1px;\n }\n &:last-child {\n border-radius: 0 4px 4px 0;\n border-width: 1px 1px 1px 0;\n }\n }\n`;\n\nexport const ScColorSelection = Styled.div`\n display: flex;\n align-items: center;\n ${({ mode }) => mode === 'draw' && 'padding-top: 12px;'}\n span { color: #4a5265; }\n`;\n\nexport const ScModal = Styled.div`\n background-color: #fefefe;\n border-radius: 4px;\n width: 100%;\n .header-content {\n width: 80%;\n padding-left: 24px;\n }\n [data-sc=\"footer\"] { padding: 12px 24px; }\n`;\n\nexport const ScColorSelectionInput = Styled.input`\n position: relative;\n appearance: none;\n margin: 0 0 0 16px;\n background-color: ${({ value }) => value};\n width: 14px; height: 14px;\n border-radius: 50%;\n outline: none;\n cursor: pointer;\n &:before {\n content: '';\n position: absolute;\n width: 100%; height: 100%;\n top: 0; left: 0;\n transform: scale(1.1);\n border-radius: 50%;\n box-shadow: none;\n transition: box-shadow .2s;\n }\n &:checked:before {\n box-shadow: 0 0 0 2px rgba(46, 105, 255, .8);\n }\n`;\n\nexport const ScSettingsContainer = Styled.div`\n width: 100%;\n display: flex;\n justify-content: space-between;\n ${({ mode }) => mode === 'type' && 'padding-top: 12px;'}\n button:not(.clearButton) {\n display: flex;\n align-items: center;\n white-space: nowrap;\n img {\n width: 10px; height: 6px;\n margin-left: 12px;\n }\n }\n button.clearButton {\n background-color: transparent;\n color: #8894ab;\n padding: 0;\n }\n ul {\n border-radius: 4px;\n overflow: hidden;\n box-shadow: 0 2px 9px 0 rgba(76, 72, 72, .3);\n &, li {\n list-style: none;\n padding: 0;\n margin: 0;\n }\n div {\n background-color: #fff;\n font-size: 24px;\n cursor: pointer;\n padding: 8px 12px;\n white-space: nowrap;\n transition: background-color .2s;\n &:hover { background-color: #f5f5f5; }\n &[data-selected=\"true\"] { background-color: #efeff0; }\n }\n }\n`;\n\nexport const ScButtonCont = Styled.div`\n position: relative;\n`;\n\nexport const ScButton = Styled.button`\n appearance: none;\n border: none;\n outline: none;\n cursor: pointer;\n border-radius: 4px;\n font-size: 1em;\n padding: 16px 32px;\n background-color: #ececec;\n color: #4c5467;\n text-transform: capitalize;\n &.dropdownButton {\n padding: 12px 16px;\n img {\n transform: rotateX(${({ opened }) => (opened ? '180deg' : '0')});\n transition: transform .2s;\n }\n }\n &.isGray { background-color: #fff; color: #2e69ff; }\n &.isBlue { background-color: #2e69ff; color: #fff; }\n &.isBlue:disabled { background-color: #2e69ff88; cursor: auto; }\n`;\n","import { ResizeObserver as ResizeObserverPolyfill } from '@juggle/resize-observer';\n\nconst getFontList = options => options.reduce(\n (acc, option, i) => (i === 1 ? `?family=${option}` : `${acc}&family=${option}`)\n).replace(/ /g, '+');\n\nexport const addGoogleFonts = options => tagId => {\n const { document } = global;\n const styleTag = document.getElementById(tagId);\n\n if (!styleTag) {\n const node = document.createElement('link');\n node.rel = 'stylesheet';\n node.id = tagId;\n node.href = `//fonts.googleapis.com/css2${getFontList(options)}`;\n document.head.appendChild(node);\n }\n};\n\nexport const getImageDimensions = base64 => {\n if (!base64) { return; }\n const i = document.createElement('img');\n i.src = base64;\n\n return { width: i.width, height: i.height };\n};\n\nexport const fromDataURL = pad => (dataUrl, options = {}) => {\n const image = document.createElement('img');\n const ratio = options.ratio || window.devicePixelRatio || 1;\n const width = options.width || (pad.canvas.width / ratio);\n const height = options.height || (pad.canvas.height / ratio);\n const top = options.top || 0;\n const left = options.left || 0;\n\n pad.clear();\n image.src = dataUrl;\n image.onload = () => {\n pad.canvas.getContext('2d').drawImage(image, left, top, width, height);\n };\n pad._isEmpty = false; // eslint-disable-line\n};\n\nconst createSvgTextElement = (ctx, text, attrs) => {\n const svgText = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n Object.keys(attrs).forEach(key => svgText.setAttribute(key, attrs[key]));\n svgText.style.font = ctx.font;\n svgText.textContent = text;\n return svgText;\n};\n\nconst getTextBoxWidth = text => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.style = 'position: absolute; z-index:-1; width:0; height: 0';\n svg.appendChild(text);\n document.body.appendChild(svg);\n const box = text.getBBox();\n document.body.removeChild(svg);\n return box.width;\n};\n\nexport const drawTextToCanvas = pad => (options = {}) => {\n const { canvas: { width: canvasWidth, height: canvasHeight }, canvas } = pad;\n const ctx = canvas.getContext('2d');\n const { font, text, color } = options;\n const defaultFontSize = 48;\n\n pad.clear();\n\n ctx.font = `${defaultFontSize}px ${font}`;\n ctx.fillStyle = color;\n ctx.textAlign = 'center';\n\n // ctx.measureText() is not working properly on built-in italic fonts. To get more accurate calculations, need to use SVGTextElement.\n const svgTxt = createSvgTextElement(ctx, text, {\n x: canvasWidth / 2,\n y: canvasHeight / 2,\n 'text-anchor': 'middle'\n });\n const textWidth = getTextBoxWidth(svgTxt);\n if (textWidth > canvasWidth) {\n // odds ratio\n const newFontSize = (canvasWidth * defaultFontSize) / textWidth;\n // -0.5 is to handle italic texts' width calculation error\n ctx.font = `${newFontSize - 0.5}px ${font}`;\n }\n ctx.fillText(text, canvasWidth / 2, canvasHeight / 2);\n};\n\nexport const resizeObserver = (el, cb) => {\n const ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill;\n const ro = new ResizeObserver(entries => {\n entries.forEach(entry => {\n cb(entry);\n });\n });\n\n ro.observe(el);\n};\n\nexport const capitalizeFirstLetter = string => {\n return string.charAt(0).toUpperCase() + string.slice(1);\n};\n","import React, { useEffect, useRef } from 'react';\nimport { string, func } from 'prop-types';\n\nimport { ScTypingInput } from '../sc/scSignature';\nimport { resizeObserver } from '../helpers/utils';\n\nconst TypingArea = ({\n color,\n font,\n text,\n onChange,\n onBlur\n}) => {\n const inputRef = useRef();\n\n useEffect(() => {\n inputRef.current.focus();\n inputRef.current.selectionStart = inputRef.current.value.length;\n // was blurring out after following commit:\n // https://github.com/jotform/Jotform3/pull/1577/commits/033a131d75570b55168bbf2eda5af08a1de56e11\n // was not able to reproduce related bug (BUGFIX #3271904)\n // we override blur to prevent this from happening\n inputRef.current.blur = () => {};\n\n resizeObserver(inputRef.current, ({ target }) => {\n if ('value' in target && target.value) {\n onChange(target.value.trim());\n }\n });\n }, []);\n\n return (\n { onChange(e.target.value.trim()); }}\n onBlur={onBlur}\n required\n />\n );\n};\n\nTypingArea.propTypes = {\n color: string.isRequired,\n font: string.isRequired,\n text: string.isRequired,\n onChange: func.isRequired,\n onBlur: func\n};\n\nTypingArea.defaultProps = {\n onBlur: () => {}\n};\n\nexport default TypingArea;\n","import React from 'react';\nimport { func, string } from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { ScColorSelection, ScColorSelectionInput } from '../sc/scSignature';\n\nconst COLORS = ['black', 'red', 'blue'];\n\nconst ColorSelection = ({\n onChange,\n selectedColor,\n mode\n}) => {\n return (\n \n {t('Select color')}\n {COLORS.map(color => (\n onChange(e.target.value)}\n />\n ))}\n \n );\n};\n\nColorSelection.propTypes = {\n onChange: func.isRequired,\n selectedColor: string.isRequired,\n mode: string.isRequired\n};\n\nexport default ColorSelection;\n","import React, { useEffect, forwardRef } from 'react';\nimport {\n string, func, shape, bool\n} from 'prop-types';\nimport { Dropdown as UIKitDropdown } from '@jotforminc/uikit';\nimport { t } from '@jotforminc/translation';\n\nimport { addGoogleFonts } from '../helpers/utils';\nimport { ScButton, ScButtonCont } from '../sc/scSignature';\n\nconst FONT_LIST = ['Shadows Into Light', 'Yellowtail', 'Dancing Script', 'Great Vibes'];\n\nconst DBButton = forwardRef(({ option: { value }, ...props }, ref) => (\n \n {t('Change Style')}\n \"\"\n \n));\n\nDBButton.propTypes = {\n option: shape({\n value: string\n }).isRequired,\n isOptionsVisible: bool.isRequired\n};\n\nconst popoverProps = {\n usePortal: false,\n popoverOptions: {\n placement: 'bottom-start',\n modifiers: [\n { name: 'offset', options: { offset: [0, 6] } },\n { name: 'computeStyles', options: { gpuAcceleration: false } }\n ]\n }\n};\n\nconst FontSelection = ({\n onChange, font\n}) => {\n useEffect(() => {\n addGoogleFonts(FONT_LIST)('signature-fonts');\n }, []);\n\n return (\n \n onChange(e.value)}\n options={FONT_LIST.map(f => ({ text: f, value: f }))}\n ButtonRenderer={DBButton}\n ContainerRenderer={({ children }) =>
      {children}
    }\n OptionRenderer={({ option: { value } }) => (\n \n Your Signature\n
    \n )}\n popoverProps={popoverProps}\n />\n \n );\n};\n\nFontSelection.propTypes = {\n onChange: func.isRequired,\n font: string.isRequired\n};\n\nexport default FontSelection;\n","import React from 'react';\nimport { arrayOf, shape } from 'prop-types';\n\nimport { ScButton } from '../sc/scSignature';\n\nconst Button = ({\n btns\n}) => btns.map(({\n text, className, onClick, ...rest\n}) => (\n \n {text || ''}\n \n));\n\nButton.propTypes = {\n btns: arrayOf(shape({})).isRequired\n};\n\nexport default Button;\n","import React, { useEffect, useState, useRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport SignaturePad from 'signature_pad';\nimport trimCanvas from 'trim-canvas';\nimport { t } from '@jotforminc/translation';\n\nimport { Hooks } from '@jotforminc/uikit';\nimport { StyledModal as Modal } from '@jotforminc/styled-modal';\nimport TypingArea from './TypingArea';\nimport ColorSelection from './ColorSelection';\nimport FontSelection from './FontSelection';\nimport Button from './Button';\nimport {\n ScMainContainer, ScCanvas, ScFooter, ScHeader, ScTypeSwitcher, ScSettingsContainer, ScModal, ScTitle\n} from '../sc/scSignature';\nimport {\n getImageDimensions, fromDataURL, drawTextToCanvas, resizeObserver, capitalizeFirstLetter\n} from '../helpers/utils';\nimport SignatureIcon from '../assets/svg/signature_icon.svg';\n\n// const switchPad = mode => pad => (mode === 'type' ? pad.off() : pad.on());\n\nconst Signature = ({\n onUse,\n onCancel,\n wrapper,\n getInitialValue,\n confirmButtonText,\n unmountComponent,\n required,\n labelTitle,\n renderMode,\n initialMode\n}) => {\n const [pad, setPad] = useState(null);\n const [mode, setMode] = useState(initialMode);\n const [color, setColor] = useState('black');\n const [font, setFont] = useState('Yellowtail');\n const [text, setText] = useState('');\n const [emptyCanvas, setEmptyCanvas] = useState(true);\n const {\n mode: initMode = mode,\n font: initFont = font,\n color: initColor = color,\n value = '',\n text: initText = text\n } = getInitialValue();\n\n const canvasRef = useRef();\n\n const getCanvasValue = () => {\n if (!pad || ((mode === 'draw' && pad.isEmpty()) || (mode === 'type' && !text))) {\n return '';\n }\n\n if (mode === 'type') {\n drawTextToCanvas(pad)({ font, text, color });\n }\n\n const tmpCanvas = document.createElement('canvas');\n\n tmpCanvas.width = pad.canvas.width;\n tmpCanvas.height = pad.canvas.height;\n tmpCanvas.getContext('2d').drawImage(pad.canvas, 0, 0);\n trimCanvas(tmpCanvas);\n\n return tmpCanvas.toDataURL();\n };\n\n const onEnd = () => {\n onUse({\n value: getCanvasValue(),\n text,\n color,\n font,\n mode\n });\n };\n\n const onClear = () => {\n if (pad) {\n pad.clear();\n }\n setEmptyCanvas(true);\n if (renderMode === 'embed') {\n onEnd();\n }\n };\n\n const handleOnUse = () => {\n if (required && !getCanvasValue()) {\n return;\n }\n\n onEnd();\n unmountComponent(wrapper);\n };\n\n const handleOnCancel = () => {\n onCancel();\n unmountComponent(wrapper);\n };\n\n useEffect(() => {\n const sigCanvas = canvasRef.current;\n const sigPad = new SignaturePad(sigCanvas, {\n throttle: 10,\n minWidth: 1,\n maxWidth: 2.5,\n minDistance: 5,\n velocityFilterWeight: 0.3\n });\n\n setPad(sigPad);\n\n if (value && emptyCanvas) {\n setMode(initMode);\n setColor(initColor);\n setEmptyCanvas(false);\n\n if (initMode === 'type') {\n setFont(initFont);\n setText(initText);\n }\n }\n\n resizeObserver(sigCanvas.parentNode, entry => {\n const { width: parentWidth, height: parentHeight } = entry.contentRect;\n\n if (value && emptyCanvas) {\n const { width, height } = getImageDimensions(value);\n\n if (initMode === 'draw') {\n fromDataURL(sigPad)(value, {\n top: (parentHeight - height) / 2,\n left: (parentWidth - width) / 2,\n width,\n height\n });\n }\n }\n });\n\n sigCanvas.focus();\n }, []);\n\n useEffect(() => {\n pad && (pad.penColor = color); // eslint-disable-line\n }, [color, pad]);\n\n Hooks.useEffectIgnoreFirst(() => {\n if (renderMode === 'embed' && mode === 'type') {\n onEnd();\n }\n }, [text, color, font]);\n\n const setRescaledSignature = (lines, scale) => (\n lines.map(line => ({\n ...line,\n points: line.points.map(point => ({\n ...point,\n x: point.x * scale\n }))\n }))\n );\n\n useEffect(() => {\n if (mode === 'draw') {\n onClear();\n\n resizeObserver(canvasRef.current.parentNode, entry => {\n const { width: parentWidth } = entry.contentRect;\n const offsetWidth = canvasRef.current ? canvasRef.current.offsetWidth : 0;\n\n if (parentWidth && offsetWidth !== parentWidth) {\n canvasRef.current.setAttribute('width', `${parentWidth}px`);\n // BUGFIX #5207734 :: prevent signature deletion on orientation change with scaling.\n if (pad && !pad.isEmpty()) {\n pad.fromData(setRescaledSignature(pad.toData(), parentWidth / offsetWidth));\n }\n }\n });\n }\n }, [mode]);\n\n Hooks.useEffectIgnoreFirst(() => {\n if (renderMode !== 'workflow_embed') {\n onEnd();\n }\n }, [renderMode, mode]);\n\n const renderMain = () => {\n return (\n \n \n ({\n className: `${btn}Mode_button ${mode === btn ? 'isBlue' : 'isGray'}`,\n onClick: () => setMode(btn),\n text: t(capitalizeFirstLetter(btn)),\n 'aria-selected': `${mode === btn}`,\n 'aria-pressed': `${mode === btn}`\n }))}\n />\n \n \n setEmptyCanvas(false)}\n onTouchStart={() => setEmptyCanvas(false)}\n {...(renderMode === 'embed' ? { onMouseUp: onEnd, onMouseLeave: onEnd, onTouchEnd: onEnd } : {})}\n className=\"signatureCanvas\"\n tabIndex={mode === 'draw' ? 0 : -1}\n role=\"button\"\n aria-label={t('E-Signature canvas')}\n aria-hidden={mode !== 'draw'}\n />\n \n {mode === 'type' && (\n \n )}\n \n \n {mode === 'type' && }\n {mode === 'draw' && \n );\n};\n\nOutcome.propTypes = {\n type: string,\n className: string,\n text: string.isRequired,\n textColor: string.isRequired,\n buttonColor: string.isRequired,\n dataTestid: string,\n isLoading: bool,\n isSelected: bool,\n isCompleted: bool,\n onClick: func\n};\n\nOutcome.defaultProps = {\n type: '',\n className: null,\n dataTestid: '',\n isLoading: false,\n isSelected: false,\n isCompleted: false,\n onClick: f => f\n};\n\nexport default Outcome;\n","/* eslint-disable max-len */\nimport styled, { css } from 'styled-components';\n\nconst commonStyles = css`\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizeLegibility;\n font-size: 16px;\n`;\n\nexport const ScBox = styled.div`\n box-sizing: border-box;\n background-color: #ffffff;\n border-radius: 4px;\n margin: auto auto;\n height: 100%;\n width: 560px;\n // box-shadow: 0 2px 7px 0 rgba(0, 0, 0, 0.5);\n border: 1px solid #D8DAE9;\n display: flex;\n flex-direction: column;\n position: relative;\n\n > div { flex: 1 1 auto; min-height: 0; }\n\n @media screen and (max-width: 480px) {\n border-radius: 0;\n }\n`;\n\nexport const ScHeader = styled.div`\n display: flex;\n align-items: center;\n height: 75px;\n padding: 0 1.625rem;\n border-bottom: 1px solid #EDEEF5;\n \n > svg {\n margin-right: 14px;\n height: 100%;\n width: 100%;\n max-width: 20px;\n max-height: 20px;\n\n [fill~=\"#fff\"] {\n fill: #141E46;\n }\n \n [stroke~=\"#fff\"] {\n stroke: #141E46;\n }\n }\n \n > span {\n font-family: 'Circular Std Medium', 'Circular Std Book', sans-serif;\n font-weight: 500; \n font-size: 20px;\n line-height: 25px;\n \n color: #141E46;\n }\n \n && { flex: 0 0 auto; }\n`;\n\nexport const ScBody = styled.div`\n padding: 1.125rem 1.625rem;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n overflow-x: hidden;\n \n > span {\n font-size: 16px;\n line-height: 25px;\n color: #121C48;\n margin-bottom: 16px;\n display: inline-block;\n }\n\n .isErrored {\n .wmApproval {\n &-task {\n &-outcome {\n padding-bottom: 3em;\n margin-bottom: -2.25em;\n }\n }\n\n &-error {\n margin-top: -0.75em !important;\n text-align: right;\n padding-top: .5em;\n }\n }\n }\n \n .wmApproval{\n &-task {\n display: flex;\n flex-direction: column;\n flex: 1;\n \n &-container {\n flex: 1;\n }\n \n &-comment {\n flex: 1;\n\n &-title {\n display: none;\n }\n \n &-textarea {\n height: 20vh;\n min-height: 120px;\n max-height: 200px;\n\n &-wrapper {\n margin-bottom: 1.125rem;\n } \n }\n }\n \n &-outcome {\n display: flex;\n justify-content: flex-end;\n flex-wrap: wrap; \n \n border-top: 1px solid #EDEEF5;\n padding: 1rem 1.625rem;\n background-color: #F8F8FB;\n margin: -1rem -1.625rem;\n margin-top: 0;\n position: relative;\n z-index: 1;\n \n @media screen and (max-width: 480px) {\n flex-direction: column;\n align-items: stretch;\n margin-top: auto;\n }\n \n &-button {\n &,\n &:last-of-type{\n margin: 0.125rem\n }\n \n @media screen and (max-width: 480px) {\n margin: 0 0 12px;\n \n &:last-of-type {\n margin: 0;\n }\n }\n }\n }\n }\n }\n`;\n\nexport const ScFooter = styled.div`\n border-top: 1px solid #eaebf2;\n min-height: 30px;\n padding: 12px 27px 21px;\n\n && { flex: 0 0 auto; }\n\n @media screen and (max-width: 480px) {\n padding: 9px 18px;\n }\n`;\n\nexport const ScOverlay = styled.div`\n * { box-sizing: border-box; }\n ${commonStyles};\n font-family: \"Circular Std Book\", Circular, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n position: fixed;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n z-index: 7002; \n background-color: rgba(39, 41, 55, 0.61);\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n :not(:last-child) {\n display: none;\n }\n\n & > div {\n ${p => (p.isFullScreen ? css`\n width: 100%;\n height: 100%;\n ` : css`\n width: 96%;\n max-width: 770px;\n max-height: 80vh;\n // min-height: 424px;\n `)};\n display: flex;\n overflow: visible;\n }\n\n ${p => p.isFullScreen && css`\n ${ScBox} { border-radius: 0; }\n `};\n\n @media screen and (max-width: 480px), (max-height: 480px) {\n overflow: auto;\n display: block;\n\n & > div {\n max-height: none;\n height: 100%;\n width: 100%;\n margin: 0;\n max-width: none;\n\n > div > div:empty {\n display: none;\n }\n }\n }\n`;\n","import React, { forwardRef } from 'react';\nimport { func } from 'prop-types';\nimport { Dropdown as UiKitDropdown } from '@jotforminc/uikit';\n\nconst ContainerRenderer = props =>
      ;\nconst OptionContainerRenderer = props =>
    • ;\nconst ButtonRenderer = forwardRef(({ option: { text, value }, ...props }, ref) => { // eslint-disable-line\n return (\n \n {text}\n \n );\n});\n\nconst Dropdown = ({ onChange, ...properties }) => {\n const handleOptionSelect = ({ value }) => onChange(value);\n\n return (\n
      \n \n
      \n );\n};\n\nDropdown.propTypes = {\n onChange: func.isRequired\n};\n\nexport default Dropdown;\n","import React, { useEffect, useState } from 'react';\nimport {\n arrayOf,\n func,\n shape,\n string,\n bool\n} from 'prop-types';\nimport Dropdown from '../Dropdown';\nimport '../../styles/jfEmailWizard.scss';\n\nexport default function EmailDropdown({\n value,\n onChange,\n options,\n filterable,\n textInputPlaceholder\n}) {\n const [defaultValue, setDefaultValue] = useState(value);\n useEffect(() => {\n if (value.length && value[0].value !== defaultValue[0].value) {\n setDefaultValue(value);\n }\n }, [value]);\n const wrappedOnChange = val => {\n onChange([{ value: val, email: val, text: val }]);\n };\n return (\n \n );\n}\n\nEmailDropdown.propTypes = {\n value: arrayOf(shape({\n value: string\n })),\n options: arrayOf(shape({\n value: string,\n text: string\n })).isRequired,\n onChange: func,\n filterable: bool,\n textInputPlaceholder: string\n};\n\nEmailDropdown.defaultProps = {\n value: [],\n onChange: f => f,\n filterable: false,\n textInputPlaceholder: null\n};\n","import { v4 as uuid } from 'uuid';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isUndefined from 'lodash/isUndefined';\nimport { t } from '@jotforminc/translation';\n\nimport { getQuestionByPlaceholder, preparePillObjectFromQuestion } from './questions';\nimport {\n isEmail,\n isTeamEmail,\n generateIsErroredFromValidations\n} from './validation';\nimport { sanitizeSingleEmailInputValue } from './sanitize';\n\nexport const pillValidator = (email, questions) => {\n return (Boolean(isEmail(email) || isTeamEmail(email) || getQuestionByPlaceholder(email, questions)));\n};\n\nexport const preparePillObjectFromEmail = email => ({\n id: uuid(),\n value: email,\n text: email,\n isValid: pillValidator(email),\n isQuestion: false\n});\n\nexport const sanitizeEmailList = (emailList, questions) => emailList.map(email => {\n if (typeof email === 'object') {\n return email;\n }\n\n const question = getQuestionByPlaceholder(email, questions);\n return question ? preparePillObjectFromQuestion(question) : preparePillObjectFromEmail(email);\n});\n\nexport const emailAnswerFinder = () => {\n const { JFFormUserHelper: { user: { email = '' } = {} } = {} } = window;\n if (email) return email;\n\n const emailSentTo = document.querySelector('input#jfFormUserSCL_emailSentTo');\n if (emailSentTo && emailSentTo.value) return emailSentTo.value;\n\n const emailSentToElementFindWithName = document.querySelector('input[name=\"jfFormUserSCL_emailSentTo\"]');\n if (emailSentToElementFindWithName && emailSentToElementFindWithName.value) return emailSentToElementFindWithName.value;\n\n // use form fields\n const emailInput = [...window.document.forms[0].querySelectorAll('.form-line:not(.form-field-hidden):not(.always-hidden) input[type=\"email\"]')]\n .find(input => input.value && input.value.trim());\n\n if (!emailInput) return '';\n\n return emailInput.value;\n};\n\n// TODO: remoe this shit\nexport const singleEmailInputEmailErrored = (value, isRequired = false) => {\n const stringVal = sanitizeSingleEmailInputValue(value);\n if (!stringVal && !isRequired) {\n return false;\n }\n\n const validations = isRequired ? ['required', 'email'] : ['email'];\n return generateIsErroredFromValidations(validations)(stringVal);\n};\n\nexport const removeHtmlTags = content => {\n const parser = (new global.DOMParser()).parseFromString(content, 'text/html').body;\n return parser.textContent || parser.innerText || '';\n};\n\nexport const selectText = question => {\n let text = removeHtmlTags(question.text);\n if (text === '' || text === ' ' || isUndefined(text)) {\n if (question.hint === '' || question.hint === ' ' || isUndefined(question.hint)) {\n // eslint-disable-next-line prefer-destructuring\n text = question.type.split('_')[1];\n text = t(`${text.substr(0, 1).toUpperCase() + text.substr(1)} Field`);\n } else {\n text = question.hint;\n }\n }\n return text;\n};\n\nexport const computeQuestions = (questions, isHIPAA) => {\n const target = isHIPAA ? questions.filter(q => q.protected !== 'Yes') : questions;\n return target.map(question => {\n const newQuestion = cloneDeep(question);\n newQuestion.text = selectText(question);\n return newQuestion;\n });\n};\n","import React, { useState } from 'react';\nimport { string, func, bool } from 'prop-types';\nimport { Hooks } from '@jotforminc/uikit';\nimport { t } from '@jotforminc/translation';\nimport classNames from 'classnames';\n\nfunction SearchInput({\n placeholder,\n value: defaultValue,\n onChange,\n autoFocus,\n className,\n isNewBranding\n}) {\n const [value, setValue] = useState(defaultValue);\n\n const handleInputChange = e => setValue(e.target.value);\n\n Hooks.useEffectIgnoreFirst(() => onChange(value), [value]);\n\n return (\n \n );\n}\n\nSearchInput.propTypes = {\n placeholder: string,\n value: string,\n onChange: func,\n autoFocus: bool,\n className: string,\n isNewBranding: bool\n};\n\nSearchInput.defaultProps = {\n placeholder: t('Search'),\n value: '',\n onChange: f => f,\n autoFocus: false,\n className: null,\n isNewBranding: false\n};\n\nexport default SearchInput;\n","import React from 'react';\nimport { SelectionGroup as UiKitSelectionGroup } from '@jotforminc/uikit';\n\nconst ContainerRenderer = props =>
        ;\nconst OptionContainerRenderer = props =>
      • ;\n\nconst SelectionGroup = properties => (\n \n);\n\nSelectionGroup.propTypes = UiKitSelectionGroup.propTypes;\nSelectionGroup.defaultProps = UiKitSelectionGroup.defaultProps;\n\nexport default SelectionGroup;\n","import React from 'react';\nimport { Tooltip } from '@jotforminc/tooltip';\nimport { t } from '@jotforminc/translation';\n\nconst ProtectedTag = () => (\n <>\n
        \n \n {t('Protected Health Information: This field includes sensitive information. This data can’t be added.')}\n \n
        \n \n);\n\nexport default ProtectedTag;\n","import React from 'react';\nimport { Tooltip } from '@jotforminc/tooltip';\nimport { t } from '@jotforminc/translation';\nimport { IconLockFilled } from '@jotforminc/svg-icons';\n\nconst EncryptedTag = () => (\n <>\n
        \n \n \n {t('Encrypted Form: This field includes encrypted information. This data can’t be added.')}\n \n
        \n \n);\n\nexport default EncryptedTag;\n","/* eslint-disable react/prop-types */\nimport React from 'react';\nimport { Checkbox } from '@jotforminc/magnet';\nimport ProtectedTag from './ProtectedTag';\nimport EncryptedTag from './EncryptedTag';\n\nconst WithOptionRenderer = (isSingle, showOptionValue) => {\n return ({\n option: {\n text, value, isProtected, isEncrypted\n }, isSelected\n }) => {\n return (\n \n {isSingle && (\n f}\n data-testid={`selectiongroup-option-checkbox-${value}`}\n />\n )}\n
        \n {text}\n {showOptionValue && (\n \n {' '}\n { ` - ${value}` }\n {' '}\n \n )}\n
        \n {(isProtected || isEncrypted) && (\n
        \n {isProtected ? : }\n
        \n )}\n \n );\n };\n};\n\nexport default WithOptionRenderer;\n","import classNames from 'classnames';\nimport {\n arrayOf, bool, func, objectOf, oneOfType, shape, string\n} from 'prop-types';\nimport React, { useState } from 'react';\nimport { t } from '@jotforminc/translation';\nimport { useFuse } from '@jotforminc/hooks';\nimport SearchInput from '@jotforminc/search-input';\n\nimport { IconMagnifyingGlass, IconAngleUp } from '@jotforminc/svg-icons';\nimport SelectionGroup from './SelectionGroup';\nimport Option from './Option';\n\nconst questionsPropType = arrayOf(\n shape({\n formTitle: string,\n questions: oneOfType([\n arrayOf(shape({ text: string, qid: string })),\n objectOf(shape({ text: string, qid: string }))\n ])\n })\n);\n\nfunction ColoredFieldsRenderer({\n formTitle,\n questions,\n color,\n optionParser,\n suggestions,\n setMenuVisibility,\n isSingle,\n defaultValue,\n hasForm,\n onChange,\n formID,\n staticFields,\n isMain,\n isExpanded,\n setExpanded\n}) {\n const options = optionParser(questions, { staticFields: staticFields.map(f => ({ ...f, placeholder: isMain ? f.placeholder : f.placeholder.replace('{', `{f${formID}_`) })) });\n const suggestedOptions = options.filter(({ text }) => suggestions?.find(({ text: suggestionText }) => text === suggestionText));\n const wrapperClasses = classNames('formFields-wrapper', { isCollapsed: !isExpanded });\n const suggestionText = suggestions?.[0]?.text?.toLowerCase();\n\n return (\n
        \n
        \n {formTitle && (\n \n
        \n {formTitle}\n
        \n
        \n \n
        \n
        \n )}\n {suggestedOptions.length !== 0 && hasForm && isExpanded && (\n {\n if (!isSingle) {\n setMenuVisibility(false);\n }\n onChange(isSingle ? val : [val]);\n }}\n OptionRenderer={Option(isSingle)}\n />\n )}\n {options.length === 0 && hasForm && isExpanded && (\n
        \n {t(`This form doesn't have any ${suggestionText || 'appropriate'} fields to add.`)}\n
        \n )}\n
        \n \n );\n}\n\nColoredFieldsRenderer.propTypes = {\n formTitle: string.isRequired,\n color: string.isRequired,\n suggestions: arrayOf(shape({})).isRequired,\n questions: arrayOf(questionsPropType).isRequired,\n hasForm: bool.isRequired,\n isSingle: bool.isRequired,\n setMenuVisibility: func.isRequired,\n defaultValue: arrayOf(string).isRequired,\n onChange: func.isRequired,\n optionParser: func.isRequired,\n formID: string.isRequired,\n staticFields: arrayOf(shape({})).isRequired,\n isMain: bool.isRequired,\n isExpanded: bool,\n setExpanded: func\n};\n\nColoredFieldsRenderer.defaultProps = {\n isExpanded: true,\n setExpanded: x => x\n};\n\nexport default function MultipleForms({\n hasForm,\n isSingle,\n setMenuVisibility,\n defaultValue,\n onChange,\n optionParser,\n formArray,\n staticFields,\n isDark\n}) {\n const [searchTerm, setSearchTerm] = useState('');\n const [expandedIndex, setExpandedIndex] = useState(0);\n const allQuestions = formArray.flatMap(q => optionParser(q.questions));\n const suggestions = useFuse(allQuestions, searchTerm, ['name', 'text']);\n const noResultFound = suggestions.length === 0 && optionParser(formArray.flatMap(q => q.questions)).length !== 0;\n\n const setExpanded = index => setExpandedIndex(expandedIndex === index ? -1 : index);\n\n return (\n
        \n
        \n
        \n \n
        \n \n
        \n
        \n {formArray.map(({\n formTitle, questions, color, id, isMain, staticFields: formSpecificStaticFields = undefined\n }, index) => {\n const toggleExpand = () => setExpanded(index);\n return (\n 2}\n setExpanded={toggleExpand}\n />\n );\n })}\n
        \n {noResultFound ? (\n
        \n {t('No result found. We couldn’t find any matching items.')}\n
        \n ) : null}\n {!hasForm && (\n
        \n {t(\"You don't have a form to select a field.\")}\n
        \n )}\n
        \n );\n}\n\nMultipleForms.propTypes = {\n formArray: questionsPropType.isRequired,\n hasForm: bool.isRequired,\n isSingle: bool.isRequired,\n setMenuVisibility: func.isRequired,\n defaultValue: arrayOf(string).isRequired,\n onChange: func.isRequired,\n optionParser: func.isRequired,\n staticFields: arrayOf(shape({})).isRequired,\n isDark: string\n};\n\nMultipleForms.defaultProps = {\n isDark: false\n};\n","import {\n arrayOf, bool, func, objectOf, oneOfType, shape, string\n} from 'prop-types';\nimport React from 'react';\nimport { t } from '@jotforminc/translation';\n\nimport SelectionGroup from './SelectionGroup';\nimport Option from './Option';\n\nexport default function SingleForm({\n formTitle,\n questions,\n hasForm,\n isSingle,\n setMenuVisibility,\n defaultValue,\n onChange,\n showOptionValue,\n isEncrypted\n}) {\n const checkIsEncrypted = value => (isEncrypted && !['{form_title}', '{id}'].includes(value));\n\n const refactoredQuestions = questions.map(question => ({\n ...question,\n isEncrypted: checkIsEncrypted(question.value)\n }));\n return (\n
        \n
        \n {formTitle && (\n
        \n {formTitle}\n
        \n )}\n {questions.length !== 0 && hasForm && (\n {\n if (!isSingle) {\n setMenuVisibility(false);\n }\n onChange(isSingle ? val : [val]);\n }}\n OptionRenderer={Option(isSingle, showOptionValue)}\n />\n )}\n {questions.length === 0 && hasForm && (\n
        \n {t(\"Your form doesn't have any appropriate fields to add.\")}\n
        \n )}\n {!hasForm && (\n
        \n {t(\"You don't have a form to select a field.\")}\n
        \n )}\n
        \n
        \n );\n}\n\nconst questionsPropType = oneOfType([\n arrayOf(shape({ text: string, qid: string })),\n objectOf(shape({ text: string, qid: string }))\n]);\n\nSingleForm.defaultProps = {\n formTitle: '',\n showOptionValue: false,\n isEncrypted: false\n};\n\nSingleForm.propTypes = {\n formTitle: string,\n questions: questionsPropType.isRequired,\n hasForm: bool.isRequired,\n isSingle: bool.isRequired,\n setMenuVisibility: func.isRequired,\n defaultValue: arrayOf(string).isRequired,\n onChange: func.isRequired,\n showOptionValue: bool,\n isEncrypted: bool\n};\n","import React, {\n useRef, useImperativeHandle, forwardRef, useEffect\n} from 'react';\nimport {\n arrayOf, shape, string, func, bool, oneOfType, objectOf\n} from 'prop-types';\nimport classNames from 'classnames';\nimport { Popover, Hooks } from '@jotforminc/uikit';\nimport { t } from '@jotforminc/translation';\nimport { getPlaceholderListWithStaticFields, preparePlaceholderDynamicList } from '@jotforminc/utils';\nimport { STATIC_FIELDS_WITH_PLACEHOLDER } from '@jotforminc/constants';\n\nimport { IconLinkDiagonal } from '@jotforminc/svg-icons';\nimport {\n SingleForm, MultipleForms\n} from './components';\n\nimport './styles/FormFields.scss';\n\nconst FormFields = forwardRef(({\n usedFromWorkflow,\n anotherFieldDropdown,\n defaultValue,\n questions,\n onChange,\n addStaticFields,\n staticFields,\n hasForm,\n formTitle,\n isSingle,\n menuTargetRef,\n isButtonVisible,\n fieldsLabelText,\n useMultipleForms,\n formArray,\n isDark,\n usePortal,\n popoverClassName,\n showOptionValue,\n showProtectedTag,\n onVisibilityChange,\n duplicatedEmails,\n isEncrypted\n}, ref) => {\n const menuRef = useRef();\n const buttonRef = useRef();\n const onButtonClickCallbackRef = useRef(null);\n const [isMenuVisible, setMenuVisibility] = Hooks.useClickOutsideState(false, [menuRef, buttonRef]);\n const isFormFieldsDisabledForWorkflow = value => duplicatedEmails && value && duplicatedEmails?.length > 0 && duplicatedEmails.includes(value);\n const getOptions = (formQuestions, opts = {}) => {\n const { staticFields: staticFieldsOptions = staticFields } = opts;\n const questionsArray = Object.values(formQuestions);\n const placeholderList = addStaticFields\n ? getPlaceholderListWithStaticFields({\n questions: questionsArray, includeSeparator: false, staticFields: staticFieldsOptions, anotherFieldDropdown, usedFromWorkflow\n })\n : preparePlaceholderDynamicList(questionsArray, anotherFieldDropdown, usedFromWorkflow);\n // 'protected' is a reserved word in strict mode. so mapeed it to isProtected field\n return placeholderList.map(({\n text, placeholder: value, disabled, isProtected\n }) => ({\n text, value, disabled: isFormFieldsDisabledForWorkflow(value) || disabled, isProtected: isProtected && showProtectedTag\n }));\n };\n\n const handleButtonClick = () => {\n onButtonClickCallbackRef.current?.();\n setMenuVisibility(!isMenuVisible);\n };\n\n useImperativeHandle(ref, () => ({\n setMenuVisibility,\n getIsMenuVisible: () => isMenuVisible,\n setOnButtonClickCallback: callback => {\n onButtonClickCallbackRef.current = callback;\n }\n }));\n\n useEffect(() => {\n onVisibilityChange(isMenuVisible);\n }, [isMenuVisible]);\n\n return (\n
        \n {isButtonVisible && (\n \n
        \n \n
        \n
        \n {t(fieldsLabelText)}\n
        \n \n )}\n {isMenuVisible && (\n \n {useMultipleForms ? (\n \n ) : (\n \n )}\n \n )}\n
        \n );\n});\n\nconst questionsPropType = oneOfType([\n arrayOf(shape({ text: string, qid: string })),\n objectOf(shape({ text: string, qid: string }))\n]);\n\nFormFields.propTypes = {\n usedFromWorkflow: bool,\n anotherFieldDropdown: bool,\n defaultValue: arrayOf(string),\n questions: questionsPropType,\n addStaticFields: bool,\n staticFields: arrayOf(shape({})),\n isSingle: bool,\n onChange: func,\n hasForm: bool,\n formTitle: string,\n menuTargetRef: shape({}),\n isButtonVisible: bool,\n fieldsLabelText: string,\n useMultipleForms: bool,\n formArray: arrayOf(shape({})),\n isDark: bool,\n usePortal: bool,\n popoverClassName: string,\n showOptionValue: bool,\n showProtectedTag: bool,\n onVisibilityChange: func,\n duplicatedEmails: shape(),\n isEncrypted: bool\n};\n\nFormFields.defaultProps = {\n usedFromWorkflow: false,\n anotherFieldDropdown: false,\n defaultValue: [],\n questions: [],\n addStaticFields: false,\n staticFields: STATIC_FIELDS_WITH_PLACEHOLDER,\n isSingle: false,\n onChange: f => f,\n hasForm: true,\n formTitle: '',\n menuTargetRef: null,\n isButtonVisible: true,\n fieldsLabelText: 'Form Fields',\n useMultipleForms: false,\n formArray: [],\n isDark: false,\n usePortal: false,\n popoverClassName: null,\n showOptionValue: false,\n showProtectedTag: false,\n onVisibilityChange: () => null,\n duplicatedEmails: [],\n isEncrypted: false\n};\n\nexport default FormFields;\n","import Styled from 'styled-components';\n\nexport const ScSuggestions = Styled.div`\n font-size: 16px;\n line-height: 1em;\n border-radius: 4px;\n box-shadow: 0 2px 7px 0 rgba(0, 0, 0, 0.5);\n background-color: #fff;\n width: clamp(320px, 100%, 640px);\n padding: .375em 0;\n height: 260px;\n overflow-x: hidden;\n\n .suggestion {\n display: flex;\n align-items: center;\n padding: .75em 1.25em;\n position: relative;\n cursor: pointer;\n transition: background-color .15s;\n\n &-email-container {\n display: flex;\n justify-content: flex-start;\n margin-right: 10px;\n }\n\n &-email {\n text-overflow: ellipsis;\n width: 16em;\n overflow: hidden;\n white-space: nowrap;\n }\n\n &-info {\n font-size: .875em;\n color: #2c3345;\n color: #6a6e8f;\n flex: 1 1 auto;\n position: relative;\n }\n\n &-teamlist {\n background-color: #2b3245;\n border-radius: 0.25em;\n z-index: 1;\n width: auto;\n position: absolute;\n right: -10em;\n }\n\n &-teamitem {\n background-color: #2b3245;\n color: #abadb4;\n padding: 0.5em 0.6875em;\n text-align: left;\n display: flex;\n right: 0em;\n width: 14.0625em;\n z-index: 1;\n }\n\n &-avatar {\n flex: 0 0 32px;\n height: 32px;\n border: 2px solid #fff;\n border-radius: 50%;\n overflow: hidden;\n font-size: .75em;\n margin-right: 1em;\n\n div {\n height: 100%;\n line-height: 32px;\n color: #fff;\n text-align: center;\n font-weight: 500;\n background-color: #b9bbd2;\n background-repeat: no-repeat;\n background-size: cover;\n text-transform: uppercase;\n }\n }\n .expand-list {\n background-color: #EBEDF3;\n color: #2C3345;\n border-radius: 1em;\n text-align: center;\n width: 5em;\n height: 1.5em;\n white-space: nowrap;\n margin-left: 2em;\n\n &:hover {\n background-color: rgba(84, 180, 92, 0.1);\n }\n }\n\n & + .suggestion:before {\n content: \"\";\n display: block;\n height: 1px;\n right: 1em;\n left: 1em;\n position: absolute;\n top: 0;\n background-color: #eaebf2;\n }\n\n &:hover {\n background-color: rgba(84, 180, 92, 0.1);\n }\n } \n`;\n\nexport const ScList = Styled.div`\n .suggestion {\n display: flex;\n align-items: center;\n position: relative;\n cursor: default;\n\n &-teamlist {\n background-color: #2b3245;\n border-radius: 0.25em;\n z-index: 1;\n width: auto;\n position: absolute;\n top: -1em;\n right: -10em ;\n max-height: 40em;\n overflow-y: scroll;\n }\n\n &-info {\n font-size: .875em;\n color: white;\n flex: 1 1 auto;\n position: relative;\n max-width: 13em;\n }\n\n\n &-email {\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n color: #A9AACB;\n }\n\n &-teamitem {\n background-color: #2b3245;\n color: #abadb4;\n padding: 0.5em 0.6875em;\n text-align: left;\n display: flex;\n right: 0em;\n width: 16em;\n z-index: 1;\n border-radius: 1em;\n }\n\n &-avatar {\n flex: 0 0 32px;\n height: 32px;\n border: 2px solid #fff;\n border-radius: 50%;\n overflow: hidden;\n font-size: .75em;\n margin-right: 1em;\n\n div {\n height: 100%;\n line-height: 32px;\n color: #fff;\n text-align: center;\n font-weight: 500;\n background-color: #b9bbd2;\n background-repeat: no-repeat;\n background-size: cover;\n text-transform: uppercase;\n }\n }\n\n &:after {\n border: 0.3125em solid transparent;\n border-bottom-color: #000;\n bottom: 1em;\n content: \" \";\n left: -3em;\n margin-left: -0.3125em;\n position: absolute;\n }\n`;\n","import React, { useEffect, useRef, useState } from 'react';\nimport {\n string, func, arrayOf, shape, bool\n} from 'prop-types';\nimport { Popover, Utils } from '@jotforminc/uikit';\n\nimport { ScSuggestions, ScList } from './styles';\n\nconst SubMember = ({\n name, avatar, subMemberList\n}) => {\n const [isListExpanded, setIsListExpanded] = useState(false);\n const targetRef = useRef();\n\n return (\n <>\n
        \n {avatar}\n
        \n
        \n
        {name}
        \n
        \n
        \n {subMemberList.map(member => (member.email)).toString()}\n
        \n setIsListExpanded(true)}\n onMouseLeave={() => setIsListExpanded(false)}\n ref={targetRef}\n >\n {`+ ${subMemberList.length} More`}\n
        \n
        \n {isListExpanded && (\n \n \n
        \n
        \n {subMemberList.map(member => {\n return (\n
        \n
        \n
        \n
        \n
        \n
        {member.username}
        \n
        {member.email}
        \n
        \n
        \n );\n })}\n
        \n
        \n \n \n )}\n
        \n \n );\n};\n\nSubMember.propTypes = {\n name: string.isRequired,\n avatar: string.isRequired,\n subMemberList: arrayOf(shape({\n name: string,\n email: string,\n avatarUrl: string\n })).isRequired\n};\n\nconst UserList = ({\n list, onClick, useMouseDown, useKeyboardEvents, preventClickDefault, onBlurEventHandler\n}) => {\n const containerRef = useRef();\n const tabIndex = useKeyboardEvents ? { tabIndex: 0 } : {};\n const keyHandler = event => {\n const relatedKeyCodes = [40, 38];\n // Don't handle if key is not arrowdown/arrowup\n if (relatedKeyCodes.indexOf(event.keyCode) === -1 || !containerRef.current) { return; }\n event.preventDefault();\n const { activeElement } = document;\n let nextElement;\n const ownElement = containerRef.current.contains(activeElement);\n if (ownElement && !activeElement.classList.contains('suggestion')) {\n return;\n }\n\n const direction = event.keyCode === 40 ? 'down' : 'up';\n switch (true) {\n case ownElement && direction === 'down' && !!activeElement.nextElementSibling:\n nextElement = activeElement.nextElementSibling;\n break;\n case ownElement && direction === 'up' && !!activeElement.previousElementSibling:\n nextElement = activeElement.previousElementSibling;\n break;\n default:\n nextElement = containerRef.current.querySelector('.suggestion'); // First Suggestion\n break;\n }\n nextElement.focus();\n };\n if (useKeyboardEvents) {\n useEffect(() => {\n document.addEventListener('keydown', keyHandler);\n return () => document.removeEventListener('keydown', keyHandler);\n }, []);\n }\n return (\n \n {list.map(user => {\n const {\n name, email, avatarUrl, username, subMembers\n } = user;\n const handleClick = e => {\n // to prevent looping behavior with input onBlur\n if (preventClickDefault) {\n e.preventDefault();\n }\n return onClick(user);\n };\n const handleKeyDown = event => Utils.isPressedKeyEnterOrSpace(event) && onClick(user);\n\n const identifier = name || email || username;\n const avatar = avatarUrl\n ?
        \n :
        {identifier[0]}
        ;\n\n const handler = {\n [useMouseDown ? 'onMouseDown' : 'onClick']: handleClick,\n onBlur: onBlurEventHandler\n };\n if (subMembers) {\n return (\n \n \n
        \n );\n }\n return (\n \n
        \n {avatar}\n
        \n
        \n
        {name}
        \n
        {email}
        \n
        \n \n );\n })}\n
        \n );\n};\n\nUserList.propTypes = {\n list: arrayOf(shape({\n name: string,\n email: string,\n avatarUrl: string\n })).isRequired,\n onClick: func.isRequired,\n useMouseDown: bool,\n useKeyboardEvents: bool,\n preventClickDefault: bool,\n onBlurEventHandler: func\n};\n\nUserList.defaultProps = {\n useMouseDown: false,\n useKeyboardEvents: false,\n preventClickDefault: false,\n onBlurEventHandler: f => f\n};\n\nexport default UserList;\n","import compose from 'lodash/fp/compose';\n\nimport {\n getPlaceholder,\n getPlaceholderList,\n getQuestionByPlaceholder\n} from '@jotforminc/utils';\n\nexport const tagifyQuestion = ({\n question, asString = true, mode, key = '', returnAll = false\n}) => {\n const placeholderRaw = getPlaceholder(question);\n const placeholders = Array.isArray(placeholderRaw) ? placeholderRaw : [placeholderRaw];\n const allTagifiedQuestions = placeholders.map(({ placeholder, text }) => {\n const tagifyObject = { name: placeholder, value: text, editable: mode !== 'mix' };\n if (!asString) {\n return tagifyObject;\n }\n\n const jsonString = JSON.stringify(tagifyObject);\n return mode === 'mix' ? `#start#${jsonString}#end#` : jsonString;\n });\n if (returnAll) {\n return allTagifiedQuestions;\n }\n const tagified = allTagifiedQuestions.find(tagifiedQuestion => (asString ? tagifiedQuestion.includes(`${key}`) : JSON.stringify(tagifiedQuestion).includes(`${key}`)));\n return tagified || allTagifiedQuestions[0];\n};\n\nexport const getStaticFieldsAsSimpleQuestions = fields => fields.map(({ text, placeholder }) => ({ text, name: placeholder.match(/{(.*)}/)[1] }));\n\nconst getQuestionsFromTagifyValue = (tagifyValue, questions, mode) => questions.filter(question => {\n const taggedQuestions = tagifyQuestion({ question, mode, returnAll: true });\n return taggedQuestions.some(tag => tagifyValue.indexOf(tag) > -1);\n});\nconst getQuestionPlaceholderList = questions => getPlaceholderList(questions).map(({ placeholder }) => placeholder);\nexport const getSelectedPlaceholderList = compose(getQuestionPlaceholderList, getQuestionsFromTagifyValue);\n\nexport const tagifyPlaceholder = (placeholder, questionList, mode) => {\n const question = getQuestionByPlaceholder(placeholder, questionList);\n return question ? tagifyQuestion({\n question, asString: false, key: placeholder, mode\n }) : false;\n};\nexport const tagifyPlaceholderList = (placeholderList, questionList, mode) => placeholderList.map(placeholder => tagifyPlaceholder(placeholder, questionList, mode));\n\nexport const getTagifyValue = (sanitizedValue, questions, mode) => {\n if (!sanitizedValue || (Array.isArray(sanitizedValue) && sanitizedValue.length === 0)) {\n return '';\n }\n const usedQuestionNames = {};\n return questions.reduce((prev, question) => {\n switch (question.type) {\n case 'control_mixed':\n case 'control_inline': {\n const placeholderRaw = getPlaceholder(question);\n const placeholders = Array.isArray(placeholderRaw) ? placeholderRaw : [placeholderRaw];\n return (placeholders || []).reduce((sanitized, { placeholder }) => {\n const key = placeholder;\n const tagified = tagifyQuestion({ question, mode, key });\n return sanitized.split(key).join(tagified);\n }, prev);\n }\n default:\n const tagified = tagifyQuestion({ question, mode });\n if (!prev || prev.length < 1) {\n return '';\n }\n // If tagified value is inserted do not recurse\n if (usedQuestionNames[question.name]) {\n return prev;\n }\n usedQuestionNames[question.name] = true;\n return prev.split(`{${question.name}}`).join(tagified);\n }\n },\n sanitizedValue);\n};\n\nexport const getSanitizedValue = (isModeMix, tagifyValue, selectedPlaceholderList, questionsWithStaticFieldsList) => {\n if (!isModeMix) {\n return (tagifyValue && JSON.parse(tagifyValue));\n }\n const sanitizedValue = selectedPlaceholderList.reduce((prev, placeholder) => {\n const question = getQuestionByPlaceholder(placeholder, questionsWithStaticFieldsList);\n let key;\n let from;\n switch (question.type) {\n case 'control_inline':\n case 'control_mixed':\n {\n const placeholderRaw = getPlaceholder(question);\n const placeholders = Array.isArray(placeholderRaw) ? placeholderRaw : [placeholderRaw];\n const tag = placeholders.find(({ placeholder: tmp }) => prev.includes(tmp) && tmp === placeholder);\n key = tag?.placeholder;\n from = key;\n }\n break;\n default:\n key = '';\n from = `{${question.name}}`;\n }\n const tagifiedQuestion = tagifyQuestion({ question, mode: 'mix', key });\n const re = new RegExp(tagifiedQuestion.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), 'g');\n return prev.replace(re, from);\n }, tagifyValue).replace(/[\\u200B-\\u200D\\uFEFF]/g, '');\n\n return (sanitizedValue);\n};\n\nexport const sanitizeTextBeforeSet = data => {\n return data.replace(/(<([^>]+)>)/ig, '');\n};\n","const patchTagify = tagify => {\n const clonedTagify = tagify;\n clonedTagify.addMixTags = function addMixTags(tagsItems) {\n const {\n settings: {\n pattern, transformTag, classNames, tagSuffix, focusAfterAddingTag\n },\n state: { tag: { prefix: tagPrefix } = {} }\n } = clonedTagify;\n\n const defaultPrefix = tagPrefix || (pattern?.source || [])[0];\n const prefixedTagItems = tagsItems.map(tagItem => ({ ...tagItem, prefix: tagItem.prefix || defaultPrefix }));\n\n return prefixedTagItems.map(tagItem => {\n transformTag.call(clonedTagify, tagItem);\n const tagElement = clonedTagify.createTagElem(tagItem);\n\n try {\n if (!clonedTagify.replaceTextWithNode(tagElement)) {\n if (clonedTagify.DOM.input.lastChild && clonedTagify.DOM.input.lastChild.tagName === 'BR') {\n clonedTagify.DOM.input.insertBefore(tagElement, clonedTagify.DOM.input.lastChild);\n } else {\n clonedTagify.DOM.input.appendChild(tagElement);\n }\n }\n } catch {\n clonedTagify.DOM.input.appendChild(tagElement);\n }\n\n if (tagSuffix) {\n clonedTagify.insertAfterTag(tagElement, tagSuffix);\n }\n\n if (focusAfterAddingTag) {\n clonedTagify.DOM.input.focus();\n clonedTagify.placeCaretAfterNode(tagElement);\n }\n\n setTimeout(() => tagElement.classList.add(classNames.tagNoAnimation), 300);\n\n clonedTagify.value.push(tagItem);\n clonedTagify.update();\n\n clonedTagify.trigger('add', { tag: tagElement, data: tagItem });\n return tagElement;\n });\n };\n\n clonedTagify.DOM.input.addEventListener('keypress', e => {\n if (e?.keyCode === 13) {\n clonedTagify.DOM.input.blur();\n e.preventDefault();\n }\n });\n\n return clonedTagify;\n};\n\nexport default patchTagify;\n","export const STATIC_FIELDS_WITH_PLACEHOLDER_FOR_SACL = [\n { text: 'Form Title', placeholder: '{form_title}' }\n];\n\nexport const EMAIL_TEMPLATE_TYPES = {\n WORKFLOW_APPROVE_START: 'WORKFLOW_APPROVE_START',\n WORKFLOW_APPROVE_APPROVED: 'WORKFLOW_APPROVE_APPROVED',\n WORKFLOW_APPROVE_REJECTED: 'WORKFLOW_APPROVE_REJECTED',\n WORKFLOW_SEND_EMAIL_GENERAL: 'WORKFLOW_SEND_EMAIL_GENERAL',\n WORKFLOW_APPROVE_REASSIGN: 'WORKFLOW_APPROVE_REASSIGN',\n WORKFLOW_APPROVE_REASSIGN_APPROVER: 'WORKFLOW_APPROVE_REASSIGN_ASSIGNEE',\n WORKFLOW_ASSIGN_START: 'WORKFLOW_ASSIGN_START',\n FORM_SUBMIT_AUTORESPONDER: 'autorespond',\n FORM_SUBMIT_NOTIFICATION: 'notification',\n FORM_SAVE_AND_CONTINUE_LATER: 'sacl',\n FORM_SUBMIT_CONDITIONAL: 'FORM_SUBMIT_CONDITIONAL',\n FORM_SHARE: 'FORM_SHARE',\n FORM_REMINDER: 'FORM_REMINDER',\n APPOINTMENT_REMINDER: 'APPOINTMENT_REMINDER',\n WORKFLOW_ASSIGN_FORM_NOTIFICATION: 'WORKFLOW_ASSIGN_FORM_NOTIFICATION',\n WORKFLOW_SEND_PDF: 'WORKFLOW_SEND_PDF',\n WORKFLOW_SEND_REPORT: 'WORKFLOW_SEND_REPORT'\n};\n","import React, {\n useRef, useState, useEffect, useMemo, useCallback, forwardRef, useImperativeHandle\n} from 'react';\nimport {\n string, bool, shape, oneOfType, arrayOf, func, elementType\n} from 'prop-types';\nimport { Hooks, Popover } from '@jotforminc/uikit';\nimport { tagDuplicateQuestions, isBright } from '@jotforminc/utils';\nimport { useFuse } from '@jotforminc/hooks';\nimport FormFields from '@jotforminc/form-fields-menu';\nimport UserList from '@jotforminc/user-list';\nimport { STATIC_FIELDS_WITH_PLACEHOLDER } from '@jotforminc/constants';\n\nimport difference from 'lodash/difference';\nimport Tagify from '@yaireo/tagify/dist/react.tagify';\nimport uniqBy from 'lodash/uniqBy';\nimport '@yaireo/tagify/dist/tagify.css';\n\nimport './styles/TagInput.scss';\nimport {\n getTagifyValue, getSelectedPlaceholderList,\n tagifyQuestion, tagifyPlaceholderList,\n getStaticFieldsAsSimpleQuestions, getSanitizedValue,\n sanitizeTextBeforeSet\n} from './utils';\nimport patchTagify from './patch';\nimport {\n STATIC_FIELDS_WITH_PLACEHOLDER_FOR_SACL,\n EMAIL_TEMPLATE_TYPES\n} from './constants';\n\nconst FIELD_REGEX = /\\{[^}]+\\}/gi;\n\nconst getAvailableUsers = (userList, addedTags) => {\n if (!addedTags) {\n return userList;\n }\n return userList.filter(a => !addedTags.find(tag => tag.value === a.email));\n};\n\n// eslint-disable-next-line max-statements\nconst TagInput = forwardRef(({\n value, defaultValue, addFormFields, addStaticFields, questions: questionsProp, allowDuplicateFields, formTitle, onRemove,\n settings, onChange, userList, popoverProps, SuggestionRenderer, onBlur, showFormFieldsOnClick, staticFieldsList, onFocus, isEncrypted,\n isSingleEntry, fieldsLabelText, useMultipleForms, formArray, showProtectedTag, showFormFieldsButtonOnFocus, validateSelectedBeforeAdd, keepInvalidTags, onAddTag,\n duplicatedEmails, useTextToTag, ...tagifyProps\n}, ref) => {\n const { mode, emailType } = settings;\n const isModeMix = mode === 'mix';\n const isEmailTypeSACL = emailType === EMAIL_TEMPLATE_TYPES.FORM_SAVE_AND_CONTINUE_LATER;\n const questions = useMemo(() => (useMultipleForms ? formArray.flatMap(({ questions: q }) => q) : questionsProp), [formArray, questionsProp, useMultipleForms]);\n const questionList = useMemo(() => tagDuplicateQuestions(Array.isArray(questions) ? questions : Object.values(questions || [])), [questions]);\n\n const staticFieldsAsSimpleQuestions = useMemo(() => getStaticFieldsAsSimpleQuestions(useMultipleForms ? formArray.flatMap(f => {\n const newPlaceholder = p => (f.isMain ? p.placeholder : p.placeholder.replace('{', `{f${f.id}_`));\n return staticFieldsList.map(s => ({ ...s, placeholder: newPlaceholder(s) }));\n }) : staticFieldsList), [staticFieldsList, formArray]);\n const staticFieldQuestionList = useMemo(() => (addStaticFields ? staticFieldsList : []), [addStaticFields]);\n const questionsWithStaticFieldsList = useMemo(() => [...questionList, ...staticFieldsAsSimpleQuestions], [questionList, staticFieldsAsSimpleQuestions]);\n const whiteList = useRef([]);\n\n useEffect(() => {\n whiteList.current = [\n ...whiteList.current,\n ...questionsWithStaticFieldsList.map(question => tagifyQuestion({ question, asString: false, mode })).filter(q => q)\n ];\n whiteList.current = uniqBy(whiteList.current, 'name');\n }, [questionsWithStaticFieldsList]);\n\n const sanitizedValue = useMemo(() => sanitizeTextBeforeSet(value || defaultValue), [value, defaultValue]);\n const tagifyRef = useRef(false);\n const suggestionListRef = useRef(false);\n const formFieldsRef = useRef(false);\n const tagifyContRef = useRef(false);\n const inputRef = { current: tagifyRef.current?.DOM?.input };\n const tagInputRef = useRef(false);\n const rootRef = Hooks.useCombinedRefs(tagInputRef, ref);\n const [textInputValue, setTextInputValue] = useState('');\n const [isFocused, setFocus] = useState(false);\n const [isFormFieldsVisible, setFormFieldsVisible] = useState(false);\n const [isSuggestionVisible, setSuggestionVisibility] = Hooks.useClickOutsideState(false, [suggestionListRef, inputRef]);\n const [tagifyValue, setTagifyValue] = useState(getTagifyValue(sanitizedValue, questionsWithStaticFieldsList, mode));\n const selectedPlaceholderList = getSelectedPlaceholderList(tagifyValue, questionsWithStaticFieldsList, mode);\n const userListSource = useMemo(() => getAvailableUsers(userList, tagifyRef.current.value), [tagifyValue]);\n const suggestedUserList = useFuse(userListSource, textInputValue);\n\n const handleSelectionChange = placeholderList => {\n if (!validateSelectedBeforeAdd(placeholderList)) return;\n\n if (isSingleEntry) {\n tagifyRef.current.removeAllTags();\n } else {\n const removedPlaceholderList = !allowDuplicateFields ? difference(selectedPlaceholderList, placeholderList) : [];\n tagifyRef.current.removeTags(tagifyPlaceholderList(removedPlaceholderList, questionsWithStaticFieldsList, mode).map(({ value: tmpValue }) => tmpValue));\n }\n onAddTag(placeholderList);\n const addedPlaceholderList = !allowDuplicateFields ? difference(placeholderList, selectedPlaceholderList) : placeholderList;\n const tags = tagifyPlaceholderList(addedPlaceholderList, questionsWithStaticFieldsList, mode);\n if (!tagifyRef.current.state?.selection?.range || tags.length > 1) {\n tagifyRef.current.addTags(tags);\n } else if (tags.length === 1) {\n const tagElem = tagifyRef.current.createTagElem(tags[0]);\n tagifyRef.current.injectAtCaret(tagElem);\n if (tagElem.previousSibling?.wholeText !== ' ') tagElem.before(document.createTextNode(' '));\n tagifyRef.current.placeCaretAfterNode(tagifyRef.current.insertAfterTag(tagElem));\n }\n };\n\n const splitTagsAndTexts = (addedTags = [], node) => {\n const invalidsShouldRemoved = !validateSelectedBeforeAdd(addedTags);\n const duplicatsShouldRemoved = !allowDuplicateFields && selectedPlaceholderList.some(item => addedTags.includes(item));\n\n if (invalidsShouldRemoved || duplicatsShouldRemoved) {\n node.textContent = node.textContent.replace(FIELD_REGEX, ''); // eslint-disable-line no-param-reassign\n tagifyRef.current.placeCaretAfterNode(node);\n tagifyRef.current.update();\n return;\n }\n\n const tags = tagifyPlaceholderList(addedTags, questionsWithStaticFieldsList, mode);\n if (isSingleEntry) {\n tagifyRef.current.removeAllTags();\n tagifyRef.current.addTags(tags);\n } else {\n const { textContent } = node;\n const [firstPartOfText, lastPartOfText] = textContent.split(FIELD_REGEX);\n node.textContent = `${firstPartOfText} `; // eslint-disable-line no-param-reassign\n const tagElem = tagifyRef.current.createTagElem(tags[0]);\n node.after(tagElem);\n tagElem.after(document.createTextNode(` ${lastPartOfText}`));\n tagifyRef.current.placeCaretAfterNode(tagElem);\n tagifyRef.current.update();\n }\n onAddTag([...selectedPlaceholderList, ...addedTags]);\n };\n\n const textToTag = () => {\n inputRef.current.childNodes.forEach(node => {\n const matchedTags = node.textContent.match(FIELD_REGEX) || [];\n if (node.nodeType === global.Node.TEXT_NODE && matchedTags.length > 0) {\n splitTagsAndTexts(matchedTags, node);\n }\n });\n };\n\n const colorifyTags = useCallback(() => {\n tagifyRef.current.getTagElms().forEach(elm => {\n const name = /{f(\\d*)_/gm.exec(elm.__tagifyTagData.name)?.[1];\n const { color } = formArray.find(({ id }) => id.toString() === name?.toString?.()) || formArray[0];\n const isDark = isBright(color);\n elm.style.setProperty('--tag-bg', color);\n elm.style.setProperty('--tag-text-color', isDark ? '#000' : '#fff');\n elm.setAttribute('data-state', isDark ? 'dark' : 'light');\n });\n }, [formArray]);\n\n const handleTagifyChange = ({ target: { value: tmpValue } }) => {\n const sanitizedText = sanitizeTextBeforeSet(tmpValue);\n setTagifyValue(sanitizedText);\n if (useMultipleForms && formArray.length && formArray[0].color && tagifyRef.current?.getTagElms?.()?.length) {\n colorifyTags();\n }\n if (useTextToTag) textToTag();\n };\n const handleInputChange = e => {\n const { detail: { textContent, value: tmpValue } } = e;\n const nextValue = (isModeMix ? textContent.split(/\\n/).pop().trim() : tmpValue);\n if (isSingleEntry) {\n tagifyRef.current.removeTags();\n }\n\n tagifyRef.current.update();\n setTextInputValue(nextValue);\n };\n\n const handleSuggestionClick = ({ email }) => {\n setTextInputValue('');\n\n if (isSingleEntry) {\n tagifyRef.current.removeAllTags();\n\n if (inputRef.current) {\n inputRef.current.innerHTML = email;\n }\n\n tagifyRef.current.update();\n setSuggestionVisibility(false);\n return;\n }\n\n tagifyRef.current.addTags([email]);\n return !isModeMix\n ? tagifyRef.current.input.set.call(tagifyRef.current)\n : inputRef.current.childNodes.forEach(node => {\n if (node.nodeType === global.Node.TEXT_NODE && node.textContent === textInputValue) {\n node.remove();\n }\n });\n };\n\n const addTags = (tagValue, removeAllTags) => {\n const newTagifyValue = getTagifyValue(tagValue, questionsWithStaticFieldsList, mode);\n const newSelectedPlaceholderList = getSelectedPlaceholderList(newTagifyValue, questionsWithStaticFieldsList, mode);\n if (removeAllTags || isSingleEntry) {\n tagifyRef.current.removeAllTags();\n }\n tagifyRef.current.addTags(tagifyPlaceholderList(newSelectedPlaceholderList, questionsWithStaticFieldsList, mode));\n };\n\n const onInputClick = () => {\n if (showFormFieldsOnClick) {\n formFieldsRef.current.setMenuVisibility(true);\n }\n };\n\n useEffect(() => {\n if (tagifyRef.current) {\n tagifyRef.current = patchTagify(tagifyRef.current);\n tagifyRef.current?.DOM?.input?.setAttribute('aria-label', tagifyProps.ariaLabel);\n }\n }, [tagifyRef.current]);\n\n useEffect(() => {\n setSuggestionVisibility(Boolean(textInputValue && suggestedUserList.length > 0));\n }, [textInputValue, suggestedUserList]);\n Hooks.useEffectIgnoreFirst(() => {\n onChange(getSanitizedValue(isModeMix, tagifyValue, selectedPlaceholderList, questionsWithStaticFieldsList));\n }, [tagifyValue]);\n\n const clearWhiteSpaces = () => {\n const textNodes = [...tagifyRef.current.DOM.input.childNodes].filter(node => node.nodeType === global.Node.TEXT_NODE);\n textNodes.forEach((node, i) => {\n const isPrevTag = node.previousSibling?.nodeName === 'TAG';\n const isNextTag = node.nextSibling?.nodeName === 'TAG';\n\n let text = node.nodeValue;\n if (i === 0 && !isPrevTag) {\n text = text.trimStart();\n }\n if (i === textNodes.length - 1 && !isNextTag) {\n text = text.trimEnd();\n }\n text = text.split(/\\s+/).join(' ');\n node.nodeValue = text; // eslint-disable-line no-param-reassign\n });\n tagifyRef.current.update();\n };\n\n Hooks.useEffectIgnoreFirst(() => {\n if (!isFormFieldsVisible) clearWhiteSpaces();\n }, [isFormFieldsVisible]);\n\n const handleBlur = (event, ...params) => {\n const inputValue = event.detail.tagify.DOM.originalInput.value;\n const sanitized = getSanitizedValue(isModeMix, inputValue, selectedPlaceholderList, questionsWithStaticFieldsList);\n // eslint-disable-next-line no-param-reassign\n event.target.value = sanitized;\n onBlur(event, ...params);\n setFocus(false);\n if (!event.detail.relatedTarget || event.detail.relatedTarget.getAttribute('class') !== 'formFields-button') {\n clearWhiteSpaces();\n }\n };\n\n const handleFocus = (event, ...params) => {\n onFocus(event, ...params);\n setFocus(true);\n };\n\n const handleRemove = (event, ...params) => {\n const inputValue = event.detail.tagify.DOM.originalInput.value;\n const sanitized = getSanitizedValue(isModeMix, inputValue, selectedPlaceholderList, keepInvalidTags, questionsWithStaticFieldsList);\n // eslint-disable-next-line no-param-reassign\n event.target.value = sanitized;\n onRemove(event, ...params);\n };\n\n useEffect(() => {\n if (useMultipleForms && formArray.length && formArray[0].color && tagifyRef.current?.getTagElms?.()?.length) {\n colorifyTags();\n }\n }, [formArray, value, colorifyTags, tagifyValue, useMultipleForms]);\n\n useImperativeHandle(rootRef, () => ({\n tagifyRef,\n addTags,\n formFieldsRef\n }));\n\n const isFormFieldsButtonVisible = showFormFieldsButtonOnFocus || !showFormFieldsOnClick;\n const formFieldsMenuTargetRef = showFormFieldsButtonOnFocus || showFormFieldsOnClick ? tagifyContRef : null;\n\n return (\n \n 0 ? { whitelist: whiteList.current, prefix: /{/ } : {}),\n keepInvalidTags: keepInvalidTags,\n addTagOnBlur: false,\n delimiters: ',| ',\n duplicates: allowDuplicateFields,\n mixTagsInterpolator: ['#start#', '#end#'],\n ...settings,\n hooks: {\n beforeRemoveTag: () => {\n tagifyRef.current.update();\n setTextInputValue('');\n return new Promise(resolve => {\n resolve(true);\n });\n }\n },\n callbacks: {\n add: () => setTextInputValue(''),\n remove: () => {\n tagifyRef.current.update();\n }\n }\n }}\n {...tagifyProps}\n tagifyRef={tagifyRef}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onInput={handleInputChange}\n onChange={handleTagifyChange}\n onRemove={handleRemove}\n >\n {isModeMix ? tagifyValue : `[${tagifyValue}]`}\n \n {addFormFields && questions && (\n \n )}\n {isSuggestionVisible && (\n \n \n \n )}\n \n );\n});\n\nTagInput.propTypes = {\n value: string,\n defaultValue: string,\n addFormFields: bool,\n addStaticFields: bool,\n staticFieldsList: arrayOf(shape({})),\n questions: oneOfType([\n shape({}),\n arrayOf(shape({}))\n ]),\n settings: shape({}),\n userList: arrayOf(shape({})),\n popoverProps: shape({}),\n SuggestionRenderer: elementType,\n allowDuplicateFields: bool,\n onChange: func,\n onBlur: func,\n onFocus: func,\n onRemove: func,\n formTitle: string,\n showFormFieldsOnClick: bool,\n isSingleEntry: bool,\n fieldsLabelText: string,\n useMultipleForms: bool,\n formArray: arrayOf(shape({})),\n showProtectedTag: bool,\n showFormFieldsButtonOnFocus: bool,\n validateSelectedBeforeAdd: func,\n keepInvalidTags: bool,\n duplicatedEmails: arrayOf(shape({})),\n isEncrypted: bool,\n onAddTag: func,\n useTextToTag: bool\n};\n\nTagInput.defaultProps = {\n value: '',\n defaultValue: '',\n addFormFields: false,\n addStaticFields: false,\n staticFieldsList: STATIC_FIELDS_WITH_PLACEHOLDER,\n questions: undefined,\n settings: {},\n popoverProps: {},\n userList: [],\n SuggestionRenderer: UserList,\n allowDuplicateFields: true,\n onChange: f => f,\n onBlur: f => f,\n onFocus: f => f,\n onRemove: f => f,\n formTitle: undefined,\n showFormFieldsOnClick: false,\n isSingleEntry: false,\n fieldsLabelText: 'Form Fields',\n useMultipleForms: false,\n formArray: [],\n showProtectedTag: false,\n showFormFieldsButtonOnFocus: false,\n validateSelectedBeforeAdd: () => true,\n keepInvalidTags: true,\n duplicatedEmails: [],\n isEncrypted: false,\n onAddTag: f => f,\n useTextToTag: false\n};\n\nexport default TagInput;\n","import React from 'react';\nimport {\n func, oneOfType, shape, string, arrayOf, bool\n} from 'prop-types';\nimport {\n getQuestionByPlaceholder,\n preparePillObjectFromQuestion,\n preparePillObjectFromEmail,\n computeQuestions\n} from '@jotforminc/utils';\nimport TagInput from '@jotforminc/tag-input';\n\nconst SingleEmailInput = ({\n addFormFields, value, formTitle, questions, userList,\n onChange, useArrayAsValue, isHIPAA, useMultipleForms, formArray, duplicatedEmails, ...props\n}) => {\n const valueAsArray = Array.isArray(value) && value[0] ? value[0].value : '';\n const valArrToStr = Array.isArray(value) && !valueAsArray ? '' : value;\n const calculatedValue = useArrayAsValue && valueAsArray ? valueAsArray : valArrToStr;\n const sanitizedValue = !calculatedValue && typeof value === 'string' ? value : calculatedValue;\n const questionList = useMultipleForms ? formArray.flatMap(q => q.questions) : questions;\n\n const handleChange = tmpValue => {\n if (!tmpValue) {\n return onChange(useArrayAsValue ? [] : '');\n }\n\n const question = getQuestionByPlaceholder(tmpValue, questionList);\n const updatedValue = question ? preparePillObjectFromQuestion(question) : preparePillObjectFromEmail(tmpValue);\n onChange(useArrayAsValue ? [updatedValue] : updatedValue);\n };\n\n const computedQuestions = computeQuestions(questionList, isHIPAA);\n\n return (\n \n );\n};\n\nSingleEmailInput.propTypes = {\n addFormFields: bool,\n useArrayAsValue: bool,\n formTitle: string.isRequired,\n userList: arrayOf(shape({})).isRequired,\n questions: arrayOf(shape({})),\n value: oneOfType([shape(), arrayOf(shape()), string]).isRequired,\n onChange: func.isRequired,\n isHIPAA: bool,\n useMultipleForms: bool,\n formArray: arrayOf(shape({})),\n duplicatedEmails: arrayOf(shape({}))\n};\n\nSingleEmailInput.defaultProps = {\n addFormFields: false,\n useArrayAsValue: false,\n isHIPAA: false,\n useMultipleForms: false,\n formArray: [],\n questions: [],\n duplicatedEmails: []\n};\n\nexport default SingleEmailInput;\n","import React, { useState, useEffect } from 'react';\nimport styled from 'styled-components';\nimport {\n bool, func, number, shape, string\n} from 'prop-types';\nimport classNames from 'classnames';\nimport { EmailDropdown } from '@jotforminc/email-wizards';\nimport SingleEmailInput from '@jotforminc/single-email-input';\nimport { isEmail } from '@jotforminc/utils';\nimport { isEnterprise as isEnterpriseEnv } from '@jotforminc/enterprise-utils';\nimport { Button } from '@jotforminc/magnet';\nimport { t } from '@jotforminc/translation';\nimport { layer, reassignTask } from '../api';\n\nconst MAX_REASSIGN_LIMIT = 3;\n\nconst DropdownWrapper = styled.div`\n--wizard-body-padding: 0 42px;\n--wizard-label-color: #23283a;\n--wizard-item-margin: 21px 0 42px;\n--wizard-item-padding: 21px 0;\n\n--input-color: #23283a;\n--input-background-color: #fff;\n--input-option-background-color-hover: #f3f8fe;\n--input-option-background-color-selected: #e7f1ff;\n--input-option-background-color-bullet-hover: #cee2fd;\n--input-option-background-color-bullet-selected: #5e74e6;\n--input-border-color: #d8dae9;\n--input-border-hover-color: #b7bbd7;\n--input-border-focus-color: #5e74e6;\n--input-border-error-color: #fc8291;\n--input-placeholder-color: #8d8fa8;\n\ninput[type=\"search\"] {\n margin: -1px 26px;\n width: calc(100% - 52px);\n}\n\nul {\n margin: 0 1.625rem;\n max-height: 35vh;\n overflow-y: auto;\n}\n`;\n\nconst WorkflowReassign = ({\n taskID,\n onRenew,\n recordEvent,\n isHIPAA,\n fromError,\n isReassignDisabled,\n displayReassignCount,\n isReassignLimitReached,\n teamInfo\n}) => {\n const [message, setMessage] = useState('');\n const [assigneeEmail, setAssigneeEmail] = useState('');\n const [error, setError] = useState(false);\n const [isMessageVisible, setMessageVisibility] = useState(false);\n const [loading, setLoading] = useState(false);\n const [enterpriseUsers, setEnterpriseUsers] = useState([]);\n const [enterpriseUserList, setEnterpriseUserList] = useState([]);\n\n const isEnterprise = isEnterpriseEnv();\n\n useEffect(() => {\n if (isEnterprise) {\n layer.get('users?bypass=1').then(users => {\n setEnterpriseUsers(users);\n const userList = users.filter(({ email }) => email).map(({ email }) => ({ value: email, text: email }));\n setEnterpriseUserList(userList);\n });\n }\n }, []);\n\n const handleEmailChange = ({ value = '' } = {}) => {\n setAssigneeEmail(value.trim());\n };\n const handleEmailDropdownChange = ([{ value = '' } = {}]) => {\n setAssigneeEmail(value.trim());\n };\n\n const handleMessageButtonClick = () => {\n recordEvent('toggleReassignMessage', 'workflow');\n setMessageVisibility(!isMessageVisible);\n setMessage('');\n };\n\n const handleMessageChange = ({ target: { value } }) => {\n setMessage(value);\n };\n\n const validateInput = () => {\n if (assigneeEmail === '') {\n setError('*Add an email address');\n return false;\n }\n\n const isValidEmail = isEmail(assigneeEmail);\n if (!isValidEmail) {\n setError('*Invalid email address');\n return false;\n }\n\n const regex = /\\+/;\n\n if (regex.test(assigneeEmail)) {\n setError(\"*You can't use + on emails\");\n return false;\n }\n setError('');\n return true;\n };\n\n const onReassignClick = async () => {\n if (!validateInput()) return;\n\n const action = fromError ? 'WF-Error-Reassigned' : 'WF-ParticipantReassigned';\n recordEvent(action, 'workflow');\n\n setLoading(true);\n\n try {\n const result = await reassignTask(taskID, teamInfo, { message, assigneeEmail });\n if (result) onRenew();\n if (!result) setError('something went wrong');\n setLoading(false);\n } catch (e) {\n setError('something went wrong');\n setLoading(false);\n }\n };\n\n const randomId = `assignee_${Math.random().toString(36).substring(2)}`;\n return (\n <>\n \n You can reassign this task to another approver by entering an email address below.\n \n \n You can reassign the same task only three times.\n
        \n {` Assigned ${displayReassignCount} of ${MAX_REASSIGN_LIMIT} times.`}\n
        \n
        \n \n
        \n {\n isEnterprise && isHIPAA ? (\n \n \n \n ) : (\n \n )\n }\n {error\n ? (\n
        \n {error}\n
        \n )\n : null}\n {isMessageVisible ? (\n \n ) : null}\n \n {`${!isMessageVisible ? 'Add' : 'Discard'} Message`}\n \n
        \n \n \n {t('Reassign')}\n \n \n \n \n );\n};\n\nWorkflowReassign.propTypes = {\n onRenew: func.isRequired,\n taskID: string.isRequired,\n recordEvent: func,\n isHIPAA: bool,\n fromError: bool,\n isReassignDisabled: bool,\n displayReassignCount: number,\n isReassignLimitReached: bool,\n teamInfo: shape({\n disableTeamPrefix: bool,\n teamID: string\n })\n};\n\nWorkflowReassign.defaultProps = {\n recordEvent: f => f,\n isHIPAA: false,\n fromError: false,\n isReassignDisabled: false,\n displayReassignCount: 0,\n isReassignLimitReached: false,\n teamInfo: {}\n};\n\nexport default WorkflowReassign;\n","import React, { useEffect, useRef, useState } from 'react';\nimport {\n string, func, bool, shape\n} from 'prop-types';\nimport { Modal } from '@jotforminc/uikit';\n\nimport { Button } from '@jotforminc/magnet';\nimport { IconUsersFilled, IconXmark } from '@jotforminc/svg-icons';\nimport { t as translate } from '@jotforminc/translation';\nimport Outcome from './Outcome';\n\nimport TEXTS from '../constants/texts';\n\nimport {\n ScOverlay, ScBox, ScHeader, ScBody\n} from '../SubmissionThread/scModal';\nimport WorkflowReassign from './IndependentReassign';\nimport { getTaskOccurenceTimeByTaskID } from '../api';\n\nconst Reassign = ({\n id, isSelected, isLoading, isCompleted, t, onTaskListRenew, isHIPAA, useModal, teamInfo\n}) => {\n const modalRef = useRef();\n const MAX_REASSIGN_LIMIT = 3;\n const handleModalHide = () => modalRef.current.hide();\n const handleModalShow = () => modalRef.current.show();\n\n const [displayReassignCount, setDisplayReassignCount] = useState(0);\n const [isReassignLimitReached, setReassignLimitReached] = useState(false);\n const [isReassignDisabled, setDisableReassign] = useState(false);\n\n useEffect(() => {\n try {\n getTaskOccurenceTimeByTaskID(id, teamInfo).then(({ taskOccurenceTime }) => {\n setDisplayReassignCount(taskOccurenceTime);\n if (taskOccurenceTime >= MAX_REASSIGN_LIMIT) {\n setReassignLimitReached(true);\n setDisableReassign(true);\n }\n }).catch(error => {\n console.log('error', error);\n });\n } catch (e) {\n console.log('error', e);\n }\n }, []);\n\n const ReassignComponent = () => (\n \n );\n\n return (\n useModal ? (\n <>\n \n
        \n (\n \n \n Reassign\n \n \n )}\n >\n \n \n \n \n
        \n \n ) : ()\n );\n};\n\nReassign.propTypes = {\n id: string.isRequired,\n isLoading: bool,\n isCompleted: bool,\n isSelected: bool,\n onTaskListRenew: func,\n t: func,\n isHIPAA: bool,\n useModal: bool,\n teamInfo: shape({\n disableTeamPrefix: bool,\n teamID: string\n })\n};\n\nReassign.defaultProps = {\n isLoading: false,\n isCompleted: false,\n isSelected: false,\n onTaskListRenew: f => f,\n t: text => text,\n isHIPAA: false,\n useModal: true,\n teamInfo: {}\n};\n\nexport default Reassign;\n","import { useEffect, useCallback, useState } from 'react';\nimport { usePropState } from '@jotforminc/hooks';\n\nimport {\n getTaskBySubmissionID, completeTask, reassignTask\n} from '../api';\n\nexport const useSubmissionTaskInfo = ({\n taskList,\n submissionID,\n fetchTaskFromApi,\n instanceStatus = false,\n onComplete,\n onRenew = f => f,\n teamInfo = {}\n}) => {\n const [taskListState, setTaskList] = usePropState(taskList);\n const [isInitialized, setInitialized] = useState(!fetchTaskFromApi);\n const [instanceStatusState, setInstanceStatus] = usePropState(instanceStatus);\n\n const TaskActionTypes = {\n COMPLETE: 'COMPLETE',\n REASSIGN: 'REASSIGN',\n RENEW_TASK_LIST: 'RENEW_TASK_LIST'\n };\n\n const TaskErrorObject = (isErrored = false, reason = '') => {\n return isErrored ? { isErrored, reason } : { isErrored };\n };\n\n const TaskActionValidator = (action, params = {}) => {\n switch (action) {\n case TaskActionTypes.COMPLETE:\n if (params.commentRequired && !params.comment) {\n return TaskErrorObject(true, 'comment');\n }\n break;\n case TaskActionTypes.REASSIGN:\n if (!params.assigneeEmail) {\n return TaskErrorObject(true, 'reassign');\n }\n break;\n case TaskActionTypes.RENEW_TASK_LIST:\n if (!params.submissionID) return TaskErrorObject(true, 'submissionID');\n break;\n default:\n return TaskErrorObject();\n }\n return TaskErrorObject();\n };\n\n const renewTaskList = async forceInitialization => {\n const validationResult = TaskActionValidator(TaskActionTypes.COMPLETE, { submissionID });\n if (validationResult.isErrored) {\n return validationResult;\n }\n onRenew();\n\n const result = await getTaskBySubmissionID(submissionID, teamInfo);\n if (Array.isArray(result) && !result.length) return;\n const [{ taskList: tempTaskList, instance_status: tempInstanceStatus }] = result;\n\n setInstanceStatus(tempInstanceStatus);\n\n const isInitializing = !isInitialized || forceInitialization;\n if (isInitializing) {\n setInitialized(true);\n setTaskList(tempTaskList);\n } else {\n const { length: newLength } = tempTaskList;\n const { length: oldLength } = taskListState || [];\n const lengthDiff = Math.max(newLength - oldLength, 0);\n setTaskList([\n ...tempTaskList.slice(0, -lengthDiff),\n ...tempTaskList.slice(-lengthDiff).map(task => ({ ...task, isNew: true }))\n ]);\n }\n\n if (!isInitializing && ['COMPLETED', 'CANCELED'].indexOf(tempInstanceStatus) > -1) {\n onComplete();\n }\n\n return TaskErrorObject();\n };\n\n const onTaskCompleteGenerator = (taskID, commentRequired = false) => async ({ outcomeID, comment, signature }) => {\n const validationResult = TaskActionValidator(TaskActionTypes.COMPLETE, { commentRequired, comment });\n if (validationResult.isErrored) {\n return validationResult;\n }\n const result = await completeTask(taskID, teamInfo, { outcomeID, comment, signature });\n return result ? renewTaskList() : TaskErrorObject(true, 'api');\n };\n\n const onTaskReassignGenerator = taskID => async ({ assigneeEmail, message }) => {\n const validationResult = TaskActionValidator(TaskActionTypes.COMPLETE, { assigneeEmail });\n if (validationResult.isErrored) {\n return validationResult;\n }\n const result = await reassignTask(taskID, teamInfo, { assigneeEmail, message });\n return result ? renewTaskList() : TaskErrorObject(true, 'api');\n };\n\n useEffect(() => {\n setInitialized(!fetchTaskFromApi);\n\n if (fetchTaskFromApi) {\n setTaskList([]);\n renewTaskList(true);\n }\n window.activeSubmissionID = submissionID;\n }, [fetchTaskFromApi, submissionID]);\n\n return {\n isInitialized,\n taskListState,\n TaskActionTypes,\n TaskActionValidator,\n instanceStatusState,\n onTaskCompleteGenerator,\n onTaskReassignGenerator\n };\n};\n\nexport const useLastHistoryByType = history => useCallback(\n type => history.filter(({ action_type: tempActionType }) => tempActionType === type).slice(-1).pop(), [history]\n);\nexport const useLastHistory = history => {\n const getLastHistoryByType = useLastHistoryByType(history);\n const [lastStartHistory, lastCompleteHistory, lastCanceledHistory] = [getLastHistoryByType('START'), getLastHistoryByType('COMPLETE'), getLastHistoryByType('CANCELED')];\n return lastCanceledHistory || lastCompleteHistory || lastStartHistory || {};\n};\n\nexport const useApiState = () => {\n const [isLoading, setLoading] = useState(false);\n const [isErrored, setErrored] = useState(false);\n const [errorReason, setErrorReason] = useState(false);\n const [clickedOutcome, setClickedOutcome] = useState({});\n\n const apiRequestGenerator = apiFN => async (params, outcome) => {\n try {\n setLoading(true);\n setErrored(false);\n setErrorReason('');\n setClickedOutcome(outcome);\n\n const { isErrored: tmpIsErrored, reason } = await apiFN(params);\n\n setLoading(false);\n setErrored(tmpIsErrored);\n setErrorReason(tmpIsErrored ? reason : '');\n } catch (e) {\n setLoading(false);\n setErrored(true);\n setErrorReason(e.toString());\n }\n };\n\n return {\n isLoading,\n setLoading,\n isErrored,\n setErrored,\n errorReason,\n setErrorReason,\n clickedOutcome,\n setClickedOutcome,\n apiRequestGenerator\n };\n};\n","import {\n string, shape, oneOf, arrayOf, oneOfType, number\n} from 'prop-types';\n\nexport const ElementPropTypes = {\n type: oneOf([\n 'workflow_start_point',\n 'workflow_approval',\n 'workflow_send_email',\n 'workflow_end_point'\n ]).isRequired\n};\n\nexport const HistoryPropTypes = {\n action_type: string,\n user: shape({\n name: string,\n email: string,\n avatarUrl: string\n }).isRequired\n};\n\nexport const PropertiesPropType = oneOfType([\n shape({ outcomeID: oneOfType([string, number]) }),\n arrayOf(shape())\n]);\n\nexport const TaskPropTypes = {\n id: string.isRequired,\n element: shape(ElementPropTypes).isRequired,\n history: arrayOf(shape(HistoryPropTypes)).isRequired,\n properties: PropertiesPropType\n};\n\nexport const InstanceStatusPropType = oneOf(['ACTIVE', 'COMPLETED', 'CANCELED']);\n","import React, {\n useState, useEffect, useRef, useMemo\n} from 'react';\nimport {\n bool, func, shape, string\n} from 'prop-types';\nimport classNames from 'classnames';\nimport { useStateWithAutoReset } from '@jotforminc/hooks';\nimport ShortDate from '@jotforminc/short-date';\nimport UserAccount from '../components/UserAccount';\nimport Comment from '../components/Comment';\nimport Outcome from '../components/Outcome';\nimport Reassign from '../components/Reassign.new';\nimport { useApiState, useLastHistory } from '../hooks';\nimport { getOutcomeByID, isOutcomeBelongsToSystem, isWorkflowSystemUser } from '../utils';\nimport TEXTS from '../constants/texts';\nimport { TaskPropTypes } from '../constants/propTypes';\n\n// eslint-disable-next-line complexity\nconst TaskSection = ({\n id,\n isNew,\n isCompleteAllowed,\n isOwner,\n history,\n properties: {\n assigneeUser,\n outcomeID,\n comment,\n isReassigned,\n isEscalated,\n reassignEmail\n },\n element: {\n name,\n outcomes,\n comment__commentRequired: commentRequired,\n reassign__reassignTask: reassignTask\n },\n highlightActiveTask,\n onTaskComplete,\n onTaskListRenew,\n t,\n showUserInfo,\n isHIPAA,\n teamInfo,\n parent\n}) => {\n const commentRef = useRef(false);\n const lastHistory = useLastHistory(history);\n const [isClean, setClean] = useState(true);\n const [isHighlighted, setHighlight] = useStateWithAutoReset(false);\n const {\n isLoading,\n isErrored,\n setErrored,\n errorReason,\n setErrorReason,\n clickedOutcome,\n apiRequestGenerator\n } = useApiState();\n\n const { action_type: actionType, created_at: createdAt, user } = lastHistory;\n if (actionType === 'CANCELED') {\n return null;\n }\n\n const isGroupApproval = Boolean(parent);\n const isCompleted = actionType === 'COMPLETE';\n const isSystemUser = isCompleted && isWorkflowSystemUser(user?.username);\n const isReassignEnabled = reassignTask === 'Yes';\n const isReassignAllowed = isGroupApproval ? (isOwner && isReassignEnabled) : isReassignEnabled;\n const hasCommentError = isErrored && errorReason === 'comment';\n const isCommentRequired = commentRequired === 'Yes';\n const { outcomeID: selectedOutcomeID } = isCompleted ? getOutcomeByID(outcomeID, outcomes) : clickedOutcome;\n const isSystemOutcome = isOutcomeBelongsToSystem(outcomeID);\n const handleOutcomeClick = outcome => () => apiRequestGenerator(onTaskComplete)({ ...outcome, comment: commentRef.current ? commentRef.current.innerText.trim() : '' }, outcome);\n\n const handleCommentInput = () => {\n setErrored(false);\n setErrorReason('');\n setClean(commentRef.current.innerText.trim().length === 0);\n };\n\n useEffect(() => {\n if (hasCommentError && commentRef.current) {\n commentRef.current.focus();\n }\n }, [hasCommentError, commentRef.current]);\n\n useEffect(() => {\n setHighlight(highlightActiveTask);\n }, [highlightActiveTask]);\n\n const targetUserInfo = (isSystemUser || isCompleted) ? user : assigneeUser;\n const systemComment = useMemo(() => {\n switch (true) {\n case isEscalated === '1' || isEscalated === 1:\n return `Escalated to ${reassignEmail}.`;\n case isReassigned === '1' || isReassigned === 1:\n return `Reassigned to ${reassignEmail}.`;\n default:\n return '';\n }\n }, [isReassigned, isEscalated]);\n const computedComment = useMemo(() => (systemComment ? `${systemComment} ${comment}` : comment), [systemComment, comment]);\n\n const containerClassNames = classNames(\n 'wmApproval-task-container',\n {\n isNew,\n isClean,\n isLoading,\n isErrored,\n isCompleted,\n isReassigned,\n isEscalated,\n isCommentRequired,\n hasComment: Boolean(comment),\n hasCommentError,\n isHighlighted: isHighlighted && !isCompleted,\n isActionPrevented: !isCompleted && !isCompleteAllowed\n }\n );\n const activeOutcomes = outcomes?.filter?.(({ linkID }) => !!linkID) || [];\n return (\n <>\n {isSystemUser && (\n
        \n
        \n
        {name}
        \n
        \n \n
        \n\n
        \n {isCompleted && (\n
        \n
        \n \n
        \n \n {t('The task was not completed in the time allowed.')}\n \n
        \n )}\n
        \n )}\n
        \n {showUserInfo && (\n
        \n
        {name}
        \n
        \n {targetUserInfo ? (\n \n ) : 'User ERROR!' }\n
        \n
        \n )}\n
        \n {isCompleted && (\n
        \n \n
        \n )}\n {(!isCompleted || (isCompleted && !!computedComment)) && (\n \n )}\n
        \n {(isSystemOutcome && isCompleted) ? (\n \n ) : null}\n {activeOutcomes.map(outcome => (\n \n ))}\n {isReassignAllowed && (\n \n )}\n
        \n
        \n {t(TEXTS.SOMETHING_WENT_WRONG)}\n
        \n
        \n
        \n \n );\n};\n\nTaskSection.propTypes = {\n ...TaskPropTypes,\n isNew: bool,\n isCompleteAllowed: bool,\n isOwner: bool,\n highlightActiveTask: bool,\n showUserInfo: bool,\n isHIPAA: bool,\n t: func,\n onTaskComplete: func,\n onTaskListRenew: func,\n teamInfo: shape({\n disableTeamPrefix: bool,\n teamID: string\n }),\n parent: string\n};\n\nTaskSection.defaultProps = {\n isNew: false,\n isCompleteAllowed: false,\n isOwner: false,\n highlightActiveTask: false,\n showUserInfo: true,\n isHIPAA: false,\n t: text => text,\n onTaskComplete: f => f,\n onTaskListRenew: f => f,\n teamInfo: {},\n parent: null\n};\n\nexport default TaskSection;\n","import React, { useEffect, useState } from 'react';\nimport {\n func, bool, string, shape\n} from 'prop-types';\nimport qs from 'querystring';\n\nimport { renderSignatureModal } from '@jotforminc/signature';\nimport { usePropState } from '@jotforminc/hooks';\nimport Task from '../sections/Task';\nimport { useSubmissionTaskInfo } from '../hooks/index';\nimport { TaskPropTypes } from '../constants/propTypes';\nimport { useWorkflow } from '../contexts';\nimport { didActiveSubmissionChange } from '../utils';\n\nconst TaskSection = ({\n submissionID,\n onRenew,\n isCommentRequired,\n commentPlaceholder,\n task,\n recordEvent,\n isHIPAA,\n user,\n isTakeOver,\n teamInfo\n}) => {\n const {\n onTaskCompleteGenerator,\n TaskActionValidator,\n TaskActionTypes\n } = useSubmissionTaskInfo({\n submissionID, task, onRenew, onComplete: f => f, teamInfo\n });\n\n const {\n undoTimeout,\n undoFns,\n setUndoFns,\n completeFns,\n setCompleteFns,\n fakeEntries,\n setFakeEntries,\n undoTaskToastShow,\n isFormOwner,\n onRenewSubmission,\n canUndo\n } = useWorkflow();\n\n const { id } = task;\n const [taskState, setTaskState] = usePropState(task);\n const [prevTaskState, setPrevTaskState] = useState(task);\n const [timeoutExpired, setTimeoutExpired] = useState(false);\n const generatedTaskComplete = onTaskCompleteGenerator(id, isCommentRequired);\n\n const removeCurrentTaskFn = (store, setStore) => () => {\n const { [id]: _tempFN, ...rest } = store;\n setStore(rest);\n };\n const removeUndoFn = removeCurrentTaskFn(undoFns, setUndoFns);\n const removeCompleteFn = removeCurrentTaskFn(completeFns, setCompleteFns);\n\n const completeTask = async (...args) => {\n if (isTakeOver) {\n recordEvent(`${isFormOwner ? 'WF-FlowOwnerTakeOver' : 'WF-ParticipantTakeOver'}`, 'workflow');\n } else {\n recordEvent(`${isFormOwner ? 'WF-FlowOwnerCompleted' : 'WF-ParticipantCompleted'}`, 'workflow');\n }\n removeCurrentTaskFn(completeFns, setCompleteFns);\n const result = await generatedTaskComplete(...args);\n\n // This was added in order to refresh the left panel on inbox,\n // to update the status of previous or current submission\n if (didActiveSubmissionChange(submissionID)) {\n onRenewSubmission(submissionID, false);\n }\n return result;\n };\n\n const prepareToUndoAndComplete = async (outcome, ...args) => {\n // Complete task and cleanup if timeout expires\n if (!canUndo) {\n await completeTask(...args);\n return;\n }\n const timeout = setTimeout(async () => {\n await completeTask(...args);\n setTimeoutExpired(true);\n removeUndoFn();\n }, undoTimeout);\n // Store the complete function\n setCompleteFns({\n ...completeFns,\n [id]: async () => {\n clearTimeout(timeout);\n await completeTask(...args);\n setTimeoutExpired(true);\n removeUndoFn();\n }\n });\n // Set fake entry of the task\n setFakeEntries({\n ...fakeEntries,\n [id]: outcome\n });\n // Store the undo function of task\n setUndoFns({\n ...undoFns,\n [id]: () => {\n recordEvent('WF-ParticipantUndid', 'workflow');\n if (!timeoutExpired) {\n setTaskState(prevTaskState);\n }\n clearTimeout(timeout);\n removeUndoFn();\n removeCompleteFn();\n }\n });\n };\n\n const onTaskComplete = async (...args) => {\n const validation = TaskActionValidator(TaskActionTypes.COMPLETE, { commentRequired: isCommentRequired, ...args[0] });\n if (validation.isErrored) {\n return validation;\n }\n const modifiedArgs = args;\n const outcome = args[0];\n if (outcome && outcome?.outcomeSign === 'Yes') {\n const signature = await renderSignatureModal({ required: true, confirmButtonText: 'sign', renderMode: 'workflow_embed' });\n if (!signature) {\n return { isErrored: false };\n }\n modifiedArgs[0].signature = signature;\n }\n\n const properties = {\n ...task.properties,\n ...outcome\n };\n setPrevTaskState(task);\n setTaskState({\n ...task, user, history: [{ action_type: 'COMPLETE', created_at: new Date() }], properties\n });\n await prepareToUndoAndComplete(outcome, ...modifiedArgs);\n if (outcome) {\n undoTaskToastShow(true);\n }\n return { isErrored: false };\n };\n\n const clearOutcomeIDFromWindow = () => {\n const params = new URLSearchParams(document.location.search);\n params.delete('outcomeID');\n params.delete('taskID');\n window.history.replaceState(null, '', `?${params}`);\n };\n\n useEffect(() => {\n if (!window.taskAutoCompleted) {\n const queries = qs.parse(document.location.search.split('?')[1]);\n const { outcomeID, taskID = false } = queries;\n if (taskID && taskID !== task.id) {\n return;\n }\n const { element = {} } = task || {};\n const { outcomes = [] } = element || {};\n const linkedOutcomes = outcomes.filter(outcome => outcome.linkID);\n\n if (outcomeID) {\n const selectedOutcome = linkedOutcomes.find(({ outcomeID: tmpOutcomeID }) => outcomeID.toString() === tmpOutcomeID.toString());\n if (selectedOutcome) {\n onTaskComplete(selectedOutcome);\n }\n window.taskAutoCompleted = true;\n }\n if (queries && (queries.approve === '' || queries.deny === '')) {\n const type = queries.approve === '' ? 'APPROVE' : 'DENY';\n const selectedOutcome = linkedOutcomes.find(({ type: outcomeType }) => outcomeType === type);\n if (selectedOutcome) {\n onTaskComplete(selectedOutcome);\n }\n window.taskAutoCompleted = true;\n }\n clearOutcomeIDFromWindow();\n }\n }, []);\n\n useEffect(() => {\n const textarea = document.querySelector('.wmApproval-task-comment-textarea');\n if (textarea) textarea.dataset.placeholder = commentPlaceholder;\n }, [commentPlaceholder]);\n\n return (\n \n );\n};\n\nTaskSection.propTypes = {\n ...TaskPropTypes,\n onRenew: func,\n commentPlaceholder: string,\n isCommentRequired: bool.isRequired,\n recordEvent: func,\n isHIPAA: bool,\n isTakeOver: bool,\n teamInfo: shape({\n disableTeamPrefix: bool,\n teamID: string\n })\n};\n\nTaskSection.defaultProps = {\n commentPlaceholder: 'Add your comment here.',\n onRenew: f => f,\n recordEvent: f => f,\n isHIPAA: false,\n isTakeOver: false,\n teamInfo: {}\n};\n\nexport default TaskSection;\n","import React, { useRef } from 'react';\nimport { Modal } from '@jotforminc/uikit';\nimport {\n string, node, func, elementType\n} from 'prop-types';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport { Button as CloseButton } from '@jotforminc/magnet';\nimport { IconXmark } from '@jotforminc/svg-icons';\nimport { t } from '@jotforminc/translation';\nimport {\n ScOverlay, ScBox, ScHeader, ScBody\n} from '../SubmissionThread/scModal';\n\nconst ActionButton = ({\n title, icon, onClick, component, ComponentRenderer\n}) => {\n const modalRef = useRef();\n const handleModalHide = () => modalRef.current.hide();\n const handleModalShow = () => modalRef.current.show();\n\n return (\n <>\n \n {title}\n \n { (component || ComponentRenderer) && !onClick\n ? (\n null}\n HeaderRenderer={() => (\n \n {icon || null}\n {title}\n \n \n )}\n >\n \n {ComponentRenderer ? : component}\n \n \n )\n : null }\n \n );\n};\n\nActionButton.propTypes = {\n title: string.isRequired,\n icon: node.isRequired,\n component: node,\n onClick: func.isRequired,\n ComponentRenderer: elementType\n};\n\nActionButton.defaultProps = {\n component: null,\n ComponentRenderer: null\n};\n\nexport default ActionButton;\n","import React, { useEffect, useRef } from 'react';\nimport {\n arrayOf, shape, node, bool\n} from 'prop-types';\nimport classNames from 'classnames';\nimport Tethered from 'react-tether';\nimport { Hooks } from '@jotforminc/uikit';\n\nimport ActionButton from './ActionButton';\n\nconst MoreButton = ({ components, children, disabled }) => {\n const menuRef = useRef();\n const buttonRef = useRef();\n const tetherMenuRef = useRef();\n const componentsFiltered = components && components.filter(val => val);\n const [isMenuVisible, setMenuVisibility] = Hooks.useClickOutsideState(false, [buttonRef]);\n\n useEffect(() => {\n if (isMenuVisible) {\n tetherMenuRef?.current?.children[0]?.focus();\n }\n }, [isMenuVisible]);\n\n return (\n
        \n \n setMenuVisibility(!isMenuVisible)}\n >\n more\n \n
        \n {children || null}\n {componentsFiltered ? componentsFiltered.map(({\n title, icon, onClick, component, button, ComponentRenderer\n }) => (\n button || (\n \n )))\n : null}\n
        \n \n
        \n );\n};\n\nMoreButton.propTypes = {\n components: arrayOf(\n shape(ActionButton.propTypes)\n ),\n children: node,\n disabled: bool\n};\n\nMoreButton.defaultProps = {\n components: null,\n children: null,\n disabled: false\n};\n\nexport default MoreButton;\n","import React from 'react';\nimport { SingleAvatarWithDetails } from '@jotforminc/avatar-groups';\nimport { bool, shape } from 'prop-types';\nimport { useActionComponents } from '../hooks/useActionComponents';\nimport MoreButton from './MoreButton';\nimport { defaultAvatarValues, getDateValue } from '../utils/helper';\n\nconst SingleAvatarMoreButton = val => {\n const { takeover: singleTakeover } = useActionComponents(val);\n\n return (\n \n );\n};\n\nconst AvatarWithApprovalAction = ({\n forTask, subtasks, task, isTeamApproval, ...rest\n}) => {\n const renderAvatars = subtasks.map(subtask => {\n const {\n updated_at: updatedAt, timestamp = null, comment, status, properties: {\n outcomeInfo, signature, notRequired, contentText, takenOver, notQualifiedReason\n }, name, email, avatarUrl, user = [], ...eachTask\n } = subtask;\n const { isCompleteAllowed = false } = task;\n const { buttonColor, type, text } = defaultAvatarValues(outcomeInfo, notRequired, notQualifiedReason) || {};\n const isCompleted = status && status === 'COMPLETED';\n const isCanceled = status && status === 'CANCELED';\n const userValue = name || email;\n const contentTextForUser = takenOver ? `on behalf of ${userValue}` : '';\n const isTakenOver = takenOver && user && !Array.isArray(user);\n const userNameValue = isTakenOver ? (user?.name || user?.username || user?.email) : name;\n const userEmailValue = isTakenOver ? user?.email : email;\n const userAvatarValue = isTakenOver ? user?.avatarUrl : avatarUrl;\n const date = getDateValue(timestamp, updatedAt);\n return (\n \n )}\n />\n );\n });\n\n return (\n <>\n {isTeamApproval && (\n

        \n Team Members\n

        \n )}\n
        \n {renderAvatars}\n
        \n \n );\n};\n// TODO: check proptypes\nAvatarWithApprovalAction.propTypes = {\n forTask: bool,\n isTeamApproval: bool,\n subtasks: shape({}),\n task: shape({})\n};\n\nAvatarWithApprovalAction.defaultProps = {\n forTask: false,\n isTeamApproval: false,\n subtasks: {},\n task: {}\n};\n\nexport default AvatarWithApprovalAction;\n","import React, { useRef } from 'react';\nimport { func } from 'prop-types';\n\nconst HiddenFrame = ({ onLoad }) => {\n const uploadFrameRef = useRef(false);\n\n const handleLoad = () => {\n let content = false;\n const { current: iframe } = uploadFrameRef;\n switch (true) {\n case Boolean(iframe.contentDocument):\n content = iframe.contentDocument.body.innerHTML;\n break;\n case Boolean(iframe.contentWindow):\n content = iframe.contentWindow.document.body.innerHTML;\n break;\n case Boolean(iframe.document):\n content = iframe.document.body.innerHTML;\n break;\n default:\n break;\n }\n\n return onLoad({ content, iframe });\n };\n\n return (\n \n );\n};\n\nHiddenFrame.propTypes = {\n onLoad: func\n};\n\nHiddenFrame.defaultProps = {\n onLoad: f => f\n};\n\nexport default HiddenFrame;\n","import React from 'react';\nimport { elementType, func } from 'prop-types';\n\nimport { useDragState, useEffectIgnoreFirst } from '../../utils/hooks';\n\nconst DragContainer = ({\n ContainerRenderer, onDragStateChange, onDragOver, onDragLeave, onDrop, onDragEnter, ...props\n}) => {\n const [isDragging, dragEventHandlers] = useDragState(false, {\n onDragOver,\n onDragLeave,\n onDrop,\n onDragEnter\n });\n\n useEffectIgnoreFirst(() => {\n onDragStateChange(isDragging);\n }, [isDragging]);\n\n return ;\n};\n\nDragContainer.propTypes = {\n ContainerRenderer: elementType,\n onDragStateChange: func,\n onDragOver: func,\n onDragLeave: func,\n onDrop: func,\n onDragEnter: func\n};\n\nDragContainer.defaultProps = {\n ContainerRenderer: props =>
        ,\n onDragStateChange: f => f,\n onDragOver: f => f,\n onDragLeave: f => f,\n onDrop: f => f,\n onDragEnter: f => f\n};\n\nexport default DragContainer;\n","import React from 'react';\nimport { shape } from 'prop-types';\n\nconst Text = ({ style, ...props }) =>
        ;\n\nText.propTypes = {\n style: shape({})\n};\n\nText.defaultProps = {\n style: {}\n};\n\nexport default Text;\n","import React from 'react';\nimport { shape } from 'prop-types';\n\nconst Form = ({ style, ...props }) => (\n \n);\n\nForm.propTypes = {\n style: shape({})\n};\n\nForm.defaultProps = {\n style: {}\n};\n\nexport default Form;\n","import React from 'react';\n\nconst Wrapper = props =>
        ;\n\nexport default Wrapper;\n","import React from 'react';\nimport { shape, string } from 'prop-types';\n\nconst ErrorText = ({ className, style, ...props }) => (\n \n);\n\nErrorText.propTypes = {\n className: string,\n style: shape({})\n};\n\nErrorText.defaultProps = {\n className: '',\n style: {}\n};\n\nexport default ErrorText;\n","import React, { useRef } from 'react';\nimport { bool, func, string } from 'prop-types';\nimport { Button } from '@jotforminc/magnet';\nimport { IconArrowDownToLine } from '@jotforminc/svg-icons';\nimport { isPressedKeyEnterOrSpace } from '../../../utils';\n\nconst FileInput = ({\n putFileInput, translate, buttonText, ...inputProps\n}) => {\n const inputRef = useRef();\n const isBrowserMsEdge = global.isMsEdge && global.isMsEdge === true;\n const handleLabelClick = () => isBrowserMsEdge && inputRef.current && inputRef.current.click();\n const handleLabelKeyDown = event => isPressedKeyEnterOrSpace(event) && handleLabelClick();\n const onUploadBtnClick = () => inputRef.current.click();\n\n return (\n <>\n {\n onUploadBtnClick();\n handleLabelClick();\n }}\n onKeyDown={handleLabelKeyDown}\n startIcon={IconArrowDownToLine}\n className='fileInputBtn min-h-8 h-auto py-3'\n aria-label={translate(buttonText)}\n >\n {translate(buttonText)}\n \n {putFileInput && (\n \n )}\n \n );\n};\n\nFileInput.propTypes = {\n buttonText: string,\n putFileInput: bool,\n translate: func\n};\n\nFileInput.defaultProps = {\n buttonText: 'Upload File',\n putFileInput: true,\n translate: f => f\n};\n\nexport default FileInput;\n","import React from 'react';\nimport {\n shape, string, func, elementType\n} from 'prop-types';\nimport { shortenString } from '@jotforminc/utils';\n\nimport { isPressedKeyEnterOrSpace } from '../../../utils';\n\nconst FilePreview = ({\n file, translate, changeModeToUpload, Thumbnail, removeButtonText\n}) => {\n const { name, type } = file;\n const shortName = shortenString(name);\n const isImage = type.indexOf('image') !== -1;\n\n const handleKeyDown = event => isPressedKeyEnterOrSpace(event) && changeModeToUpload();\n return (\n \n
        \n \n
        \n
        \n
        \n {shortName}\n \n {translate(removeButtonText)}\n \n
        \n
        \n
        \n );\n};\n\nFilePreview.propTypes = {\n file: shape({\n name: string,\n type: string,\n url: string\n }),\n translate: func,\n changeModeToUpload: func,\n Thumbnail: elementType,\n removeButtonText: string\n};\n\nFilePreview.defaultProps = {\n file: {},\n translate: f => f,\n changeModeToUpload: f => f,\n Thumbnail: props => \"file-upload-thumbnail\",\n removeButtonText: 'Remove File'\n};\n\nexport default FilePreview;\n","import React from 'react';\nimport { string } from 'prop-types';\n\nconst TextWrapper = ({ className, ...props }) =>
        ;\n\nTextWrapper.propTypes = {\n className: string\n};\n\nTextWrapper.defaultProps = {\n className: ''\n};\n\nexport default TextWrapper;\n","import React from 'react';\n\nconst DragContainer = props =>
        ;\n\nexport default DragContainer;\n","import React, { useMemo } from 'react';\nimport { shape, string } from 'prop-types';\n\nconst Thumbnail = ({ file: { type, url } }) => {\n const [imageURL, style = { height: '64px' }] = useMemo(() => {\n switch (true) {\n case type.indexOf('image') !== -1: {\n return [url, {\n width: '120px', minHeight: '64px', maxHeight: '120px', objectFit: 'contain'\n }];\n }\n case type.indexOf('application/pdf') !== -1: {\n return ['//cdn.jotfor.ms/assets/img/builder/pdf_icon.png'];\n }\n case type.indexOf('msword') !== -1 || type.indexOf('officedocument') !== -1: {\n return ['//cdn.jotfor.ms/assets/img/builder/doc_icon.png'];\n }\n default: {\n return ['//cdn.jotfor.ms/assets/img/builder/other_file_icon.png'];\n }\n }\n }, [type, url]);\n\n return (\n \"\"\n );\n};\n\nThumbnail.propTypes = {\n file: shape({\n name: string,\n type: string\n })\n};\n\nThumbnail.defaultProps = {\n file: {}\n};\n\nexport default Thumbnail;\n","import { elementType, func } from 'prop-types';\nimport React from 'react';\n\nconst LoadingScreen = ({\n Wrapper, translate\n}) => {\n return (\n \n {translate('Uploading...')}\n \n );\n};\n\nLoadingScreen.propTypes = {\n Wrapper: elementType,\n translate: func\n};\n\nLoadingScreen.defaultProps = {\n Wrapper: props =>
        ,\n translate: f => f\n};\n\nexport default LoadingScreen;\n","import React, { Component } from 'react';\nimport {\n shape, string, bool, func, node, elementType\n} from 'prop-types';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqual from 'lodash/isEqual';\n\nimport HiddenFrame from '../HiddenFrame';\nimport DragContainer from '../DragContainer';\nimport {\n Form as DefaultForm,\n Text as DefaultText,\n Wrapper as DefaultWrapper,\n ErrorText as DefaultErrorText,\n Thumbnail as DefaultThumbnail,\n FileInput as DefaultFileInput,\n FilePreview as DefaultFilePreview,\n TextWrapper as DefaultTextWrapper,\n DragContainer as DefaultDragContainer,\n LoadingScreen as DefaultLoadingScreen\n} from './defaults';\n\nimport { createFileMetadata } from '../../utils';\nimport { SERVER_ERROR, FILE_TYPE_ERROR } from '../../utils/constants';\n\nlet apiKey = '';\nconst isThereInvitation = global.location.href.match(/iak=([\\d | \\w | -]*)/) !== null && global.location.href.match(/iak=([\\d | \\w | -]*)/).length === 2;\nlet invitationAPIKey = '';\nif (isThereInvitation) {\n [, invitationAPIKey] = global.location.href.match(/iak=([\\d | \\w | -]*)/);\n}\nif (isThereInvitation && invitationAPIKey.length > 0) {\n apiKey = `${invitationAPIKey}`;\n}\n// We have duplicated above apiKey logic from form-builder/api.js for a fast secuirty fix of #5463996\n// And we need to put it to global scope unfortunately because these iak params gets deleted on page navigations.\n// an unfortunate lazy and fast fix :(\n\nclass FileUpload extends Component {\n constructor(props) {\n super(props);\n this.currentlyUploadingFile = null;\n\n const { showFile } = props;\n const isModeDisplay = showFile && showFile.name;\n const uploadedFiles = isModeDisplay ? [showFile] : [];\n const mode = isModeDisplay ? 'display' : 'upload';\n this.state = {\n mode,\n uploadedFiles,\n init: true,\n isDragging: false,\n isUploading: false\n };\n\n const xhr = new global.XMLHttpRequest();\n this.supportXHR2 = xhr.upload && window.File && window.FileList && window.FileReader;\n }\n\n static getDerivedStateFromProps = (nextProps, prevState) => {\n const { showFile } = nextProps;\n const { uploadedFiles } = prevState;\n if (showFile?.name && !isEqual(showFile, uploadedFiles[0])) {\n return {\n mode: 'display',\n uploadedFiles: [showFile],\n init: true,\n isDragging: false,\n isUploading: false\n };\n }\n return null;\n };\n\n handleFormSubmit = () => this.setState({ isUploading: true, init: false });\n\n handleUploadFrameLoad = ({ content }) => {\n const [serverMessage] = (content.match(/\\{.*\\}/) || ['']);\n try {\n const response = JSON.parse(serverMessage);\n if (response.success !== true) {\n this.fileUploadError(SERVER_ERROR);\n return;\n }\n const { multipleFileUpload } = this.props;\n if (multipleFileUpload && !this.checkMultipleUploadError(response)) {\n return;\n }\n this.fileUploadComplete(response);\n } catch (e) {\n this.fileUploadError(SERVER_ERROR);\n }\n };\n\n handleDragStateChange = isDragging => this.setState({ isDragging });\n\n get uploadURL() {\n const { targetURL, optimize } = this.props;\n const isQueryStringExist = /[?&](.*?)=/.test(targetURL);\n const extraParameter = optimize ? `${isQueryStringExist ? '&' : '?'}optimize=1` : '';\n return `${targetURL}${extraParameter}`;\n }\n\n uploadFile = e => {\n // is file uploading\n const { onFileUploading, limitType, multipleFileUpload } = this.props;\n onFileUploading(true);\n\n const fd = new global.FormData();\n let files = e.target.files || e.dataTransfer.files;\n if (multipleFileUpload) {\n files = (files.length && !Array.isArray(files)) ? Array.from(files) : files;\n }\n\n if (!this.controlUploadingFiles(files)) {\n return;\n }\n\n if (multipleFileUpload) {\n files.forEach((file, index) => {\n if (index < 10 && this.checkFileType(file)) {\n fd.append('file[]', file);\n }\n });\n } else {\n [this.currentlyUploadingFile] = files;\n const newFileName = this.currentlyUploadingFile.name.split('\\'').join('');\n fd.append('file', this.currentlyUploadingFile, newFileName);\n }\n\n if (limitType) {\n fd.append('limit_type', limitType);\n }\n\n this.setState({\n isUploading: true,\n isUploadFailed: false,\n init: false\n }, () => {\n const request = new global.XMLHttpRequest();\n request.open('POST', this.uploadURL);\n if (apiKey) { // for collaborator auths\n request.setRequestHeader('apiKey', apiKey);\n }\n request.onreadystatechange = () => {\n if (request.status === 200) {\n if (request.readyState === 4) {\n try {\n const response = JSON.parse(request.responseText);\n if (response.success !== true) {\n this.fileUploadError(SERVER_ERROR);\n return;\n }\n\n if (multipleFileUpload && !this.checkMultipleUploadError(response, files)) {\n return;\n }\n\n this.fileUploadComplete(response);\n } catch (err) {\n this.fileUploadError(SERVER_ERROR);\n }\n }\n } else { // request not success\n this.fileUploadError(SERVER_ERROR);\n }\n };\n request.send(fd);\n });\n };\n\n fileUploadComplete = resp => {\n let { uploadedFiles: uploadedFilesArr } = this.state;\n const {\n multipleFileUpload, displayUpload, onFileUpload, multi, onFileUploading, onDisplayModeChange\n } = this.props;\n\n // is file uploading complete\n onFileUploading(false);\n\n const url = encodeURI(resp.message);\n const newFileRecord = createFileMetadata(this.currentlyUploadingFile, url);\n\n let urls = [];\n if (resp.message.length > 0) {\n urls = resp.message;\n }\n if (multipleFileUpload) {\n urls.forEach((currentUrl, index) => {\n if (typeof currentUrl !== 'object' && (typeof currentUrl === 'string' && !currentUrl.match(/\\{.*\\}/))) { // The object file means it's an error.\n uploadedFilesArr.push(createFileMetadata(this.currentlyUploadingFile[index], currentUrl));\n }\n });\n } else {\n uploadedFilesArr = [newFileRecord];\n }\n\n const nextMode = displayUpload ? 'display' : 'upload';\n this.setState({\n uploadedFiles: uploadedFilesArr,\n isUploading: false,\n init: false,\n isDragging: false,\n mode: nextMode\n });\n\n onDisplayModeChange(nextMode);\n if (!onFileUpload) {\n return;\n }\n\n if (multipleFileUpload) {\n onFileUpload(uploadedFilesArr);\n } else if (multi) {\n const fileNames = uploadedFilesArr.map(file => file.name);\n onFileUpload(fileNames);\n } else {\n onFileUpload(newFileRecord);\n }\n };\n\n checkMultipleUploadError = (response, files) => {\n const { addNotification } = this.props;\n\n const errors = [];\n if (Array.isArray(response.message)) {\n response.message.forEach(file => {\n if (typeof file === 'object') {\n errors.push(file.error);\n } else if (typeof file === 'string' && file.match(/\\{.*\\}/)) {\n errors.push(JSON.parse(file).error);\n }\n });\n\n if (errors.length === response.message.length) {\n this.fileUploadError(errors.join('\\n'));\n return false;\n }\n\n if (errors.length > 0 && addNotification) {\n errors.forEach(error => {\n setTimeout(() => {\n // SetTimeout is necessary to send all errors.\n addNotification({\n message: error,\n autoDismiss: 7,\n level: 'error'\n });\n }, 100);\n });\n }\n\n if (files && files.length > 10 && addNotification) {\n addNotification({\n autoDismiss: 7,\n level: 'error',\n message: `${10 - errors.length} of the images were uploaded succesfully. ${files.length - 10} images couldn't be attached due to file limit (max 10 images)`\n });\n }\n\n return true;\n }\n\n if (typeof response.message === 'string' && response.message.match(/\\{.*\\}/)) {\n const errorMessage = JSON.parse(response.message).error;\n this.fileUploadError(errorMessage);\n return false;\n }\n\n this.fileUploadError(SERVER_ERROR);\n return false;\n };\n\n fileUploadError = message => {\n const { init, isDragging } = this.state;\n if (init && !isDragging) {\n return;\n }\n\n const { onError, onFileUploading } = this.props;\n onFileUploading(false);\n onError(message);\n\n this.setState({\n isDragging: false,\n isUploadFailed: true,\n isUploading: false,\n errorMessage: message\n });\n };\n\n controlUploadingFiles = files => {\n const { multipleFileUpload, addNotification, onFileUploading } = this.props;\n if (!multipleFileUpload) {\n [this.currentlyUploadingFile] = files;\n return Boolean(this.checkFileType());\n }\n\n const errors = [];\n\n files.forEach(file => {\n this.currentlyUploadingFile = file;\n if (!this.checkFileType()) {\n errors.push(FILE_TYPE_ERROR);\n }\n });\n\n if (errors.length === files.length) {\n this.fileUploadError(FILE_TYPE_ERROR);\n onFileUploading(false);\n return false;\n }\n\n if (errors.length > 0) {\n errors.forEach(error => {\n setTimeout(() => {\n addNotification({\n message: error,\n autoDismiss: 7,\n level: 'error'\n });\n }, 100);\n });\n }\n\n this.currentlyUploadingFile = files;\n return true;\n };\n\n checkFileType = checkingFile => {\n const { imageUpload, allowedTypes, typeErrorMessage } = this.props;\n const file = checkingFile || this.currentlyUploadingFile;\n if (imageUpload) {\n if (file.type.indexOf('image') < 0 || file.type.indexOf('image/heic') > -1) {\n this.fileUploadError(FILE_TYPE_ERROR);\n return false;\n }\n\n return true;\n }\n\n if (isEmpty(allowedTypes)) {\n return true;\n }\n\n const accepted = allowedTypes.split(',').map(el => el.trim());\n if (accepted.indexOf('image/*') >= 0 && file.type.indexOf('image') < 0 && accepted.indexOf(file.type) < 0) {\n this.fileUploadError(typeErrorMessage || FILE_TYPE_ERROR);\n return false;\n }\n\n if (accepted.indexOf(file.type) < 0) {\n this.fileUploadError(typeErrorMessage || FILE_TYPE_ERROR);\n return false;\n }\n\n return true;\n };\n\n changeModeToUpload = () => {\n const { onFileRemove, onDisplayModeChange } = this.props;\n this.setState({\n mode: 'upload',\n uploadedFiles: []\n }, () => {\n onDisplayModeChange('upload');\n });\n\n if (onFileRemove) {\n onFileRemove();\n }\n };\n\n renderForm() {\n const { isDragging } = this.state;\n const {\n children, buttonText, multipleFileUpload, putFileInput, imageUpload, allowedTypes, translate,\n FileInputRenderer, FormRenderer, TextRenderer\n } = this.props;\n\n const containerDisplay = isDragging ? 'none' : 'block';\n const accept = (imageUpload && !allowedTypes) ? 'image/*' : allowedTypes;\n const inputEl = children || (\n this.setState({ init: false })}\n />\n );\n\n if (!putFileInput) {\n return (\n \n {inputEl}\n \n );\n }\n\n return (\n \n {inputEl}\n \n );\n }\n\n render() {\n const {\n multipleFileUpload, putFileInput, translate,\n WrapperRenderer, FilePreviewRenderer, DragContainerRenderer, TextRenderer,\n ErrorTextRenderer, TextWrapperRenderer, LoadingScreenRenderer, isFileUploading,\n removeButtonText, Thumbnail\n } = this.props;\n const {\n isUploadFailed, mode, isUploading, errorMessage, isDragging, uploadedFiles\n } = this.state;\n\n const [file] = uploadedFiles;\n\n const isStillFileUploading = isUploading || isFileUploading;\n\n return (\n \n {!multipleFileUpload && file && (\n \n )}\n \n {putFileInput && (\n \n )}\n \n {!isStillFileUploading && this.renderForm()}\n {this.supportXHR2 && !isStillFileUploading && (\n \n {translate('or drag and drop here')}\n \n )}\n {(isDragging && !isStillFileUploading) && (\n \n {translate('Drop files here')}\n \n )}\n {isStillFileUploading && (\n \n )}\n {isUploadFailed && (\n \n {translate(errorMessage)}\n \n )}\n \n \n \n );\n }\n}\n\nFileUpload.propTypes = {\n TextRenderer: elementType,\n FormRenderer: elementType,\n WrapperRenderer: elementType,\n ErrorTextRenderer: elementType,\n FileInputRenderer: elementType,\n FilePreviewRenderer: elementType,\n TextWrapperRenderer: elementType,\n DragContainerRenderer: elementType,\n children: node,\n showFile: shape({\n name: string\n }),\n buttonText: string,\n allowedTypes: string,\n typeErrorMessage: string,\n targetURL: string,\n limitType: string,\n multi: bool,\n multipleFileUpload: bool,\n imageUpload: bool,\n putFileInput: bool,\n displayUpload: bool,\n optimize: bool,\n onFileUpload: func,\n onFileRemove: func,\n addNotification: func,\n translate: func,\n LoadingScreenRenderer: elementType,\n onFileUploading: func,\n isFileUploading: bool,\n removeButtonText: string,\n Thumbnail: elementType,\n onError: func,\n onDisplayModeChange: func\n};\n\nFileUpload.defaultProps = {\n TextRenderer: DefaultText,\n FormRenderer: DefaultForm,\n WrapperRenderer: DefaultWrapper,\n ErrorTextRenderer: DefaultErrorText,\n FileInputRenderer: DefaultFileInput,\n FilePreviewRenderer: DefaultFilePreview,\n TextWrapperRenderer: DefaultTextWrapper,\n DragContainerRenderer: DefaultDragContainer,\n Thumbnail: DefaultThumbnail,\n children: null,\n showFile: {},\n buttonText: 'Upload File',\n allowedTypes: '',\n typeErrorMessage: '',\n limitType: '',\n targetURL: '/server.php?action=uploadImageS3',\n putFileInput: true,\n optimize: false,\n multipleFileUpload: false,\n multi: false,\n imageUpload: false,\n displayUpload: false,\n onFileUpload: f => f,\n onFileRemove: f => f,\n addNotification: f => f,\n translate: f => f,\n LoadingScreenRenderer: DefaultLoadingScreen,\n onFileUploading: f => f,\n isFileUploading: false,\n removeButtonText: 'Remove File',\n onError: f => f,\n onDisplayModeChange: f => f\n};\n\nexport {\n DefaultText as Text,\n DefaultForm as Form,\n DefaultWrapper as Wrapper,\n DefaultFileInput as FileInput,\n DefaultThumbnail as Thumbnail,\n DefaultErrorText as ErrorText,\n DefaultFilePreview as FilePreview,\n DefaultTextWrapper as TextWrapper,\n DefaultDragContainer as DragContainer,\n DefaultLoadingScreen as LoadingScreen\n};\n\nexport default FileUpload;\n","import React from 'react';\n\nconst Wrapper = props =>
        ;\n\nexport default Wrapper;\n","import React from 'react';\nimport { node } from 'prop-types';\n\nconst TabListContainer = ({ children = null, ...props }) =>
        {children}
        ;\n\nTabListContainer.propTypes = {\n children: node.isRequired\n};\n\nexport default TabListContainer;\n","import React from 'react';\nimport { node } from 'prop-types';\n\nconst TabButtonContainer = ({ children = null, ...props }) =>
        {children}
        ;\n\nTabButtonContainer.propTypes = {\n children: node.isRequired\n};\n\nexport default TabButtonContainer;\n","import React from 'react';\n\nconst TablistWrapper = props => (\n \n);\n\nexport default TablistWrapper;\n","import React, { forwardRef } from 'react';\nimport { elementType, node } from 'prop-types';\n\nimport TabList from './TabList';\nimport './components/TabList.scss';\n\nimport {\n Wrapper,\n TabListContainer,\n TabButtonContainer,\n TabButton\n} from './components';\n\nconst TabListWithStyles = forwardRef(({\n children, ...props\n}, tabListRef) => (\n \n {children}\n \n));\n\nTabListWithStyles.propTypes = {\n children: node,\n Wrapper: elementType,\n TabListContainer: elementType,\n TabButtonContainer: elementType,\n TabButton: elementType\n};\n\nTabListWithStyles.defaultProps = {\n children: null,\n Wrapper,\n TabListContainer,\n TabButtonContainer,\n TabButton\n};\n\nexport default TabListWithStyles;\n","import { cva } from 'class-variance-authority';\nimport { CVAType } from '../../types';\nimport { TextareaProps } from './textarea.types';\n\ntype TextareaCVAType = CVAType>\ntype TextareaContainerCVAType = CVAType>\ntype TextareaBarCVAType = CVAType>\n\nexport const textareaCVA = cva('magnet-textarea resize-none', {\n variants: {\n size: {\n small: 'p-3',\n medium: 'p-3',\n large: 'py-3 px-4'\n }\n }\n});\n\nexport const textareaContainerCVA = cva('magnet-textarea-container flex-col', {\n variants: {\n resize: {\n both: 'resize-both',\n none: 'resize-none',\n horizontal: 'resize-x',\n vertical: 'resize-y'\n }\n },\n compoundVariants: [\n {\n resize: ['both', 'horizontal', 'vertical'],\n className: 'overflow-auto'\n }\n ]\n});\n\nexport const textareaBarCVA = cva('flex items-center justify-end pb-2 gap-2', {\n variants: {\n size: {\n small: 'px-3 text-sm',\n medium: 'px-3 text-sm',\n large: 'px-4 text-md'\n },\n theme: {\n light: 'color-navy-200',\n dark: 'color-gray-200'\n }\n }\n});\n","import { ComponentPropsWithoutRef } from 'react';\nimport { FormControlContextType, commonInputDefaults } from '../../contexts';\n\nexport type NativeTextareaTypes = Omit, keyof FormControlContextType | 'maxLength'>\nexport type TextareaProps = FormControlContextType & NativeTextareaTypes & {\n resize?: 'none' | 'both' | 'horizontal' | 'vertical',\n maxLength?: number,\n ghost?: boolean\n}\n\nexport const textareaDefaultProps:Partial = {\n ...commonInputDefaults,\n resize: 'none'\n};\n","import React, {\n ChangeEvent, ComponentPropsWithRef, forwardRef, useEffect, useRef, useState\n} from 'react';\nimport { cx } from 'class-variance-authority';\nimport { IconLockFilled } from '@jotforminc/svg-icons';\n\nimport { useFormControl } from '../../contexts';\nimport { commonFormControlCVA } from '../../constants/common.cva';\n\nimport { textareaBarCVA, textareaCVA, textareaContainerCVA } from './textarea.cva';\nimport { TextareaProps, textareaDefaultProps } from './textarea.types';\n\nimport '@jotforminc/jotform.css';\n\nexport const Textarea = forwardRef((\n props: TextareaProps,\n ref: ComponentPropsWithRef<'textarea'>['ref']\n):JSX.Element => {\n const {\n colorStyle,\n readOnly,\n disabled,\n size,\n theme,\n resize,\n maxLength,\n onChange,\n className,\n value,\n ghost,\n ...rest\n } = useFormControl(props);\n\n const [count, setCount] = useState(0);\n const readOnlyVariant = readOnly && !disabled;\n const textareaContainerRef = useRef(null);\n\n const handleChange = (e: ChangeEvent) => {\n setCount(e.target.value.length);\n if (onChange) onChange(e);\n };\n\n const textareaContainerClassName = cx(\n className,\n commonFormControlCVA.container({\n colorStyle,\n readOnly: !!readOnlyVariant,\n disabled: !!disabled,\n theme,\n ghost: !!ghost\n }),\n textareaContainerCVA({ resize })\n );\n\n const textareaClassName = cx(\n commonFormControlCVA.input({\n disabled: !!disabled,\n theme,\n size\n }),\n textareaCVA({ size })\n );\n\n const getTextAreaLength = (textarea: HTMLTextAreaElement, inputValue: string | number | readonly string[] | undefined) => {\n if (Array.isArray(inputValue)) {\n return inputValue?.join(',').length;\n } if (typeof inputValue === 'string') {\n return inputValue?.length;\n }\n return textarea.value.length;\n };\n\n useEffect(() => {\n if (textareaContainerRef.current) {\n const textarea = (textareaContainerRef.current as HTMLDivElement).firstChild as HTMLTextAreaElement;\n const length = getTextAreaLength(textarea, value);\n setCount(length);\n }\n }, [value]);\n\n return (\n
        \n \n {(readOnly || !!maxLength)\n && (\n
        \n {readOnly && }\n {!!maxLength && (\n \n {count}\n /\n {maxLength}\n \n )}\n
        \n )}\n
        \n );\n});\n\nTextarea.defaultProps = textareaDefaultProps;\n","import React, { Suspense } from 'react';\nimport { Loading } from '@jotforminc/loading';\nimport { safeLazy } from '@jotforminc/safe-lazy-import';\n\nconst LibIconSelector = safeLazy(() => import(/* webpackChunkName: \"LibIconSelector\" */'./LibIconSelector'));\n\nconst IconSelector = props => {\n return (\n }>\n \n \n );\n};\n\nexport default IconSelector;\n","import React from 'react';\nimport {\n arrayOf, bool, func, oneOfType, string, shape\n} from 'prop-types';\nimport { v4 as uuid } from 'uuid';\nimport isObject from 'lodash/isObject';\nimport { t } from '@jotforminc/translation';\n\nconst UploadedImagesPanel = ({\n onImageSelect, selectedImage, allowMultipleSelection, onImageDeselect, uploadedImageList, noUploadedImageText\n}) => {\n const hasQueryParams = (url = '') => url.indexOf('?') !== -1;\n\n const renderUploadedImages = () => {\n return uploadedImageList.map(image => {\n const isImgObject = isObject(image);\n const imgThumb = isImgObject ? image.urlThumb : image;\n const urlThumb = hasQueryParams(imgThumb) ? imgThumb : `${imgThumb}?height=80`;\n const urlType = image.urlFull !== undefined ? image.urlFull : image.urlThumb;\n const urlFull = isImgObject ? urlType : image;\n const imgUserInfo = isImgObject ? image.userInfo : '';\n const key = isImgObject ? `${image.id}_${uuid()}` : urlFull;\n const isImageSelected = allowMultipleSelection ? (selectedImage.indexOf(urlFull) > -1) : (urlFull === selectedImage);\n const imageAltLabel = image.alt !== undefined ? image.alt : '';\n return (\n \n {imageAltLabel}\n {imgUserInfo && (\n

        \n by \n {imgUserInfo}\n

        \n )}\n
        \n );\n });\n };\n\n const renderNoImageScreen = () => {\n return (\n
        \n {noUploadedImageText}\n
        \n );\n };\n\n return (\n <>\n {uploadedImageList.length ? renderUploadedImages() : renderNoImageScreen()}\n \n );\n};\n\nUploadedImagesPanel.propTypes = {\n onImageSelect: func,\n selectedImage: oneOfType([string, arrayOf(string)]),\n allowMultipleSelection: bool,\n onImageDeselect: func,\n uploadedImageList: oneOfType([arrayOf(string), arrayOf(shape({}))]),\n noUploadedImageText: string\n};\n\nUploadedImagesPanel.defaultProps = {\n onImageSelect: f => f,\n selectedImage: '',\n allowMultipleSelection: false,\n onImageDeselect: f => f,\n uploadedImageList: [],\n noUploadedImageText: t('There is no image to show!')\n};\n\nexport default UploadedImagesPanel;\n","import React from 'react';\nimport {\n elementType,\n func, number, oneOfType, shape, string\n} from 'prop-types';\n\nimport { Utils } from '@jotforminc/uikit';\nimport { Button } from '@jotforminc/magnet';\nimport { t } from '@jotforminc/translation';\nimport { formatBytes } from '@jotforminc/utils';\n\nconst ImagePreview = ({\n file, changeModeToUpload, Thumbnail, removeButtonText\n}) => {\n const { name, size } = file;\n const sizeText = formatBytes(size);\n\n const handleKeyDown = event => Utils.isPressedKeyEnterOrSpace(event) && changeModeToUpload();\n return (\n \n \n \n
        \n
        \n
        \n {name}\n {sizeText}\n
        \n \n {t(removeButtonText)}\n \n
        \n
        \n );\n};\n\nImagePreview.propTypes = {\n file: shape({\n name: string,\n url: string,\n size: oneOfType([string, number])\n }),\n changeModeToUpload: func,\n Thumbnail: elementType,\n removeButtonText: string\n};\n\nImagePreview.defaultProps = {\n file: {},\n changeModeToUpload: f => f,\n Thumbnail: ({ url }) => \"ImageUpload-preview_alternative\", // eslint-disable-line react/prop-types\n removeButtonText: 'Remove Image'\n};\n\nexport default ImagePreview;\n","import React from 'react';\nimport { t } from '@jotforminc/translation';\n\nconst LoadingScreen = () => {\n return (\n <>\n
        \n
        {t('Uploading...')}
        \n \n );\n};\n\nexport default LoadingScreen;\n","import { FileUtils } from '@jotforminc/upload-fields';\n\nexport const filterImages = imageList => imageList.filter(image => FileUtils.isImage(image));\n","import { RequestLayer, Interceptors } from '@jotforminc/request-layer';\n\nimport { filterImages } from '../utils';\n\nconst layer = new RequestLayer('/API', {\n interceptorConfig: {\n teamID: global.teamID,\n customResponseInterceptors: [Interceptors.requestManagerResponseNormalizer]\n }\n});\n\nexport const deleteSelectedImage = url => {\n const requestURL = Array.isArray(url) ? url.join('\",\"') : url;\n return layer.post(`/server.php?action=deleteUserUpload&file=[\"${requestURL}\"]`, null, { disableResponseInterceptors: true });\n};\n\nexport const getUploadedUserImage = showOnlyImages => {\n return layer.post('/server.php?action=getUploadedImages', null, { disableResponseInterceptors: true })\n .then(response => {\n const { data: { files = [] } = {} } = response;\n // Files may be both array and object\n const fileList = Array.isArray(files) ? files : Object.values(files);\n return showOnlyImages ? filterImages(fileList) : fileList;\n });\n};\n\nexport const searchUnsplash = (keyword, count = 16, page = 1) => {\n return layer.get(`image/searchUnsplash?keyword=${keyword}&limit=${count}&page=${page}`);\n};\n\nexport const getRandomImagesFromUnsplash = (count = 16) => {\n return layer.get(`unsplash/photos/random?count=${count}`);\n};\n","import React from 'react';\nimport { t } from '@jotforminc/translation';\n\nimport { Button } from '@jotforminc/magnet';\nimport UnsplashIcon from '../assets/svg/unsplash_icon.svg';\n\nexport const DEFAULT_TAB_LIST = {\n upload: { label: 'UPLOAD' },\n choose: { label: 'MY IMAGES' },\n link: { label: 'ENTER URL' },\n icon: { label: 'SELECT ICON' },\n gallery: { label: 'GALLERY' },\n groupedGallery: { label: 'GALLERY' },\n unsplash: {\n label: (\n
        \n \n Unsplash\n
        \n )\n }\n};\n\nexport const THEME_MAP = {\n isDark: 'isDark',\n isLight: 'isLight',\n isTransparent: 'isTransparent'\n};\n\n/* eslint-disable */\nexport const DefaultDeleteButton = ({ onClick, disabled }) => {\n return (\n \n )\n};\n\nexport const DefaultSelectButton = ({ onClick }) => (\n \n)\n/* eslint-enable */\n\nexport const modesRequireUploadedImages = ['imageUpload'];\n","/* eslint-disable max-statements */\nimport React, {\n useEffect, useState, useRef, useCallback, forwardRef, useImperativeHandle\n} from 'react';\nimport {\n array, arrayOf, bool, elementType, func, shape, string\n} from 'prop-types';\nimport InfiniteScroll from 'react-infinite-scroll-component';\nimport { FileUpload } from '@jotforminc/uikit';\nimport { t } from '@jotforminc/translation';\nimport { TabListWithStyles, Tab } from '@jotforminc/tabs';\nimport { useDebounce } from '@jotforminc/hooks';\nimport {\n Button, InputText, Textarea, FormLabel, FormControl, FormHelperText\n} from '@jotforminc/magnet';\nimport { IconMagnifyingGlass } from '@jotforminc/svg-icons';\nimport IconSelector from './IconSelector';\n\nimport UploadedImagesPanel from './UploadedImagesPanel';\nimport ImagePreview from './ImagePreview';\nimport LoadingScreen from './LoadingScreen';\n\nimport '../styles/ImageUpload.scss';\n\nimport {\n deleteSelectedImage, getUploadedUserImage, searchUnsplash, getRandomImagesFromUnsplash\n} from '../actions';\nimport {\n DEFAULT_TAB_LIST, THEME_MAP, DefaultDeleteButton, DefaultSelectButton, modesRequireUploadedImages\n} from '../constants';\nimport { filterImages } from '../utils';\n\nconst ImageUpload = forwardRef(({\n onImageUpload,\n onImageSelect,\n onImageChange,\n onImageRemove,\n isAltTextActive,\n onAltTextChange,\n renderTabs,\n allowMultipleSelection,\n forceSelect,\n optimize,\n addNotification,\n limitType,\n multipleFileUpload,\n targetURL,\n onlyColoredIcons,\n linkTextInputDefaultValue,\n onLinkTextInputSubmit,\n linkTextInputPlaceholder,\n imgDescInputPlaceholder,\n imageList: originalImageList,\n galleryImageList,\n useAPI,\n theme,\n showLabel,\n showActionButtons,\n SelectButtonRenderer,\n DeleteButtonRenderer,\n ActionButtonsWrapper,\n onLinkInputChange,\n ImageUploadPreviewRenderer,\n ImageLoadingScreenRenderer,\n allowedTypes,\n allowImageUpload,\n onFileUploading,\n onFileRemove,\n isFileUploading,\n value: uploadedFile,\n removeButtonText,\n PreviewThumbnail,\n FileInputRenderer,\n showOnlyImages,\n mode,\n TextWrapperRenderer,\n onFileUploadError,\n noUploadedImageText,\n galleryMode,\n inputButtonText,\n initialSelectedImage,\n groupedGalleryClass,\n groupedGalleryImageList,\n isDeleteSelectedDisabled\n}, ref) => {\n const [imageList, setImageList] = useState(showOnlyImages ? filterImages(originalImageList) : originalImageList);\n const [altText, setAltText] = useState('');\n const [fileUploadDisplayMode, setFileUploadDisplayMode] = useState(uploadedFile.url ? 'display' : 'upload');\n const defaultSelectedImg = initialSelectedImage || '';\n const [selectedImage, setSelectedImage] = useState(allowMultipleSelection ? [] : defaultSelectedImg);\n const [isActionButtonsVisible, setActionButtonsVisible] = useState(false);\n const [unsplashImageList, setUnsplashImageList] = useState([]);\n const [randomUnsplashImageList, setRandomUnsplashImageList] = useState([]);\n const [unsplashPageNumber, setUnsplashPageNumber] = useState(1);\n const [stopLoadMore, setStopLoadMore] = useState(false);\n const allowGettingUploadedImages = modesRequireUploadedImages.includes(mode);\n const textInputRef = useRef();\n const unsplashSearchInputRef = useRef();\n const isBranding21 = true;\n\n useImperativeHandle(ref, () => ({\n setSelectedImage\n }));\n\n const prepareTabTitleList = () => {\n return renderTabs.reduce((prev, tabKey) => {\n return {\n ...prev,\n [tabKey]: {\n ...DEFAULT_TAB_LIST[tabKey],\n label: t(DEFAULT_TAB_LIST[tabKey]?.label)\n }\n };\n }, {});\n };\n const [tabTitleList, setTabTitleList] = useState(prepareTabTitleList());\n\n const handleGetUploadedImages = () => {\n getUploadedUserImage(showOnlyImages)\n .then((images = []) => setImageList(images));\n };\n\n const handleAltTextChange = ({ target: { value } }) => {\n setAltText(value);\n };\n\n const handleImageSelect = url => () => {\n onImageChange(url, selectedImage);\n\n if (allowMultipleSelection) {\n setSelectedImage([\n ...selectedImage,\n url\n ]);\n } else {\n if (forceSelect || !showActionButtons) {\n onImageSelect(url);\n }\n setSelectedImage(url);\n }\n };\n\n const handleImageDeselect = url => () => {\n if (allowMultipleSelection) {\n setSelectedImage(selectedImage.filter(image => image !== url));\n }\n };\n\n const handleUseSelectedImage = url => {\n onImageSelect(url);\n };\n\n const handleImageUpload = fileData => {\n onImageUpload(fileData);\n };\n\n const handleLinkTextClick = () => {\n const { current: { value } } = textInputRef;\n onLinkTextInputSubmit(value);\n };\n\n const handleFileUploadDisplayModeChange = displayMode => {\n setFileUploadDisplayMode(displayMode);\n };\n\n const renderAltTextInput = () => (\n
        \n \n {t('Image Description')}\n \n \n {t('Add alt text for accessibility and SEO purposes. This text will be shown if the image can\\'t be loaded.')}\n \n \n
        \n );\n\n const handleDeleteSelectedImage = () => {\n setSelectedImage('');\n setImageList(imageList.filter(image => !selectedImage.includes(image)));\n if (useAPI) {\n deleteSelectedImage(selectedImage)\n .then(() => handleGetUploadedImages());\n }\n onImageRemove(selectedImage);\n };\n\n const renderActionButtons = () => (\n \n handleDeleteSelectedImage()} disabled={isDeleteSelectedDisabled} />\n {\n !forceSelect\n && handleUseSelectedImage(selectedImage)} />\n }\n \n );\n\n const renderLinkTabInput = () => {\n if (allowMultipleSelection) {\n return (\n onLinkInputChange(value)}\n defaultValue={linkTextInputDefaultValue}\n placeholder={linkTextInputPlaceholder}\n rows={5}\n resize=\"both\"\n />\n );\n }\n return (\n onLinkInputChange(value)}\n defaultValue={linkTextInputDefaultValue}\n placeholder={linkTextInputPlaceholder}\n />\n );\n };\n\n const renderEnterUrl = () => (\n
        \n \n {showLabel && (\n {t('Enter URL')}\n )}\n {renderLinkTabInput()}\n \n {/* eslint-disable */}\n {showActionButtons &&
        \n \n
        }\n {/* eslint-enable */}\n
        \n );\n\n const renderUploadImage = () => {\n return (\n <>\n
        \n handleImageUpload(fileData)}\n allowedTypes={allowedTypes}\n targetURL={targetURL}\n multipleFileUpload={multipleFileUpload}\n optimize={optimize}\n addNotification={addNotification}\n limitType={limitType}\n displayUpload={true}\n translate={t}\n FilePreviewRenderer={ImageUploadPreviewRenderer}\n LoadingScreenRenderer={ImageLoadingScreenRenderer}\n onFileRemove={onFileRemove}\n removeButtonText={removeButtonText}\n Thumbnail={PreviewThumbnail}\n FileInputRenderer={FileInputRenderer}\n TextWrapperRenderer={TextWrapperRenderer}\n onError={onFileUploadError}\n onDisplayModeChange={handleFileUploadDisplayModeChange}\n buttonText={inputButtonText}\n />\n
        \n {fileUploadDisplayMode === 'display' && isAltTextActive && renderAltTextInput()}\n {fileUploadDisplayMode === 'upload' && isAltTextActive && renderEnterUrl()}\n \n );\n };\n\n const renderChooseImage = () => (\n <>\n
        \n \n
        \n {isAltTextActive && renderAltTextInput()}\n {isActionButtonsVisible && showActionButtons && renderActionButtons()}\n \n );\n\n const renderGallery = () => (\n <>\n
        \n \n
        \n {isAltTextActive && renderAltTextInput()}\n {isActionButtonsVisible && showActionButtons && renderActionButtons()}\n \n );\n\n const renderGroupedGallery = () => {\n return (\n
        \n {groupedGalleryImageList.map(list => (\n
        \n {t(list.text)}\n
        \n () => {\n setSelectedImage(url);\n onImageSelect(url);\n }}\n onImageDeselect={url => () => {\n setSelectedImage('');\n onImageRemove(url);\n }}\n selectedImage={selectedImage}\n />\n
        \n
        \n ))}\n
        \n );\n };\n\n const createUnsplashImageList = (list = []) => list.map(image => {\n const {\n id = '',\n urls: { full = '', thumb = '' } = {},\n user: { name = '' } = {}\n } = image;\n\n return {\n urlFull: full,\n urlThumb: thumb,\n userInfo: name,\n id\n };\n });\n\n const getRandomUnsplashImages = () => {\n getRandomImagesFromUnsplash().then(response => {\n const list = createUnsplashImageList(response);\n const newList = [...randomUnsplashImageList, ...list];\n setRandomUnsplashImageList(newList);\n setUnsplashImageList(newList);\n }).catch(() => {});\n };\n\n const getUnsplashImages = loadMore => {\n const keyword = unsplashSearchInputRef && unsplashSearchInputRef.current && unsplashSearchInputRef.current.value;\n\n if (keyword) {\n if (loadMore && stopLoadMore) return;\n const count = 16;\n const page = loadMore ? unsplashPageNumber + 1 : 1;\n\n searchUnsplash(keyword, count, page).then(response => {\n const newImageList = createUnsplashImageList(response);\n setUnsplashImageList(currList => (loadMore ? [...currList, ...newImageList] : newImageList));\n setUnsplashPageNumber(page);\n setStopLoadMore(response.length < count);\n }).catch(() => {\n setUnsplashImageList([]);\n setStopLoadMore(true);\n });\n } else if (loadMore) {\n getRandomUnsplashImages();\n } else {\n setUnsplashImageList(randomUnsplashImageList);\n }\n };\n\n const renderUnsplash = () => {\n return (\n
        \n {\n setUnsplashPageNumber(1);\n setStopLoadMore(false);\n getUnsplashImages();\n }, 600)}\n prefix={{ icon: IconMagnifyingGlass }}\n />\n getUnsplashImages(true)}\n className=\"prevUploads-list\"\n height=\"190px\"\n >\n () => {\n setSelectedImage(urlFull);\n onImageSelect(urlFull);\n }}\n onImageDeselect={urlFull => () => {\n setSelectedImage('');\n onImageRemove(urlFull);\n }}\n selectedImage={selectedImage}\n />\n \n
        \n );\n };\n\n const renderLinkTab = () => (\n <>\n \n {showLabel && (\n {t('Enter URL')}\n )}\n {renderLinkTabInput()}\n \n {isAltTextActive && (\n
        \n \n {t('Add Alt Text')}\n \n \n
        \n )}\n {/* eslint-disable */}\n {showActionButtons &&
        \n \n
        }\n {/* eslint-enable */}\n \n );\n\n const renderIconSelector = () => (\n handleUseSelectedImage(res.url)}\n onRemove={() => handleUseSelectedImage('')}\n onlyColored={onlyColoredIcons}\n />\n );\n\n const tabPanelRendererMap = {\n upload: renderUploadImage,\n choose: renderChooseImage,\n link: renderLinkTab,\n icon: renderIconSelector,\n gallery: renderGallery,\n groupedGallery: renderGroupedGallery,\n unsplash: renderUnsplash\n };\n\n const getRootClassNames = () => {\n const classNames = ['imageUpload'];\n if (isBranding21) classNames.push('branding21');\n if (THEME_MAP[theme]) classNames.push(THEME_MAP[theme]);\n\n return classNames.join(' ');\n };\n\n useEffect(() => {\n setActionButtonsVisible(selectedImage.length > 0);\n }, [selectedImage]);\n\n useEffect(() => {\n setTabTitleList(prepareTabTitleList());\n }, [renderTabs]);\n\n useEffect(() => {\n if (!imageList.length && useAPI && allowGettingUploadedImages) {\n handleGetUploadedImages();\n }\n\n if (renderTabs.indexOf('unsplash') > -1) {\n getRandomUnsplashImages();\n }\n }, []);\n\n useEffect(() => {\n setImageList(showOnlyImages ? filterImages(originalImageList) : originalImageList);\n }, [originalImageList]);\n\n useEffect(() => {\n onAltTextChange(altText);\n }, [altText]);\n\n return (\n
        , [])}\n TabButtonContainer={useCallback(props =>
        , [])}\n Wrapper={useCallback(props =>
        , [])}\n TabListContainer={useCallback(props =>
        , [])}\n >\n {\n renderTabs\n .filter(tabKey => Object.keys(tabPanelRendererMap)\n .includes(tabKey))\n .map(tabKey => (\n \n {tabPanelRendererMap[tabKey]()}\n \n ))\n }\n \n );\n});\n\nImageUpload.propTypes = {\n onImageUpload: func,\n onImageSelect: func,\n onImageChange: func,\n onImageRemove: func,\n addNotification: func,\n onAltTextChange: func,\n onLinkInputChange: func,\n onLinkTextInputSubmit: func,\n isAltTextActive: bool,\n allowMultipleSelection: bool,\n forceSelect: bool,\n optimize: bool,\n multipleFileUpload: bool,\n onlyColoredIcons: bool,\n useAPI: bool,\n showLabel: bool,\n showActionButtons: bool,\n limitType: string,\n targetURL: string,\n linkTextInputDefaultValue: string,\n linkTextInputPlaceholder: string,\n imgDescInputPlaceholder: string,\n imageList: arrayOf(string),\n galleryImageList: array,\n theme: string,\n renderTabs: array,\n ActionButtonsWrapper: elementType,\n SelectButtonRenderer: elementType,\n DeleteButtonRenderer: elementType,\n ImageUploadPreviewRenderer: elementType,\n ImageLoadingScreenRenderer: elementType,\n allowedTypes: string,\n allowImageUpload: bool,\n onFileUploading: func,\n onFileRemove: func,\n isFileUploading: bool,\n value: shape({\n name: string,\n type: string,\n url: string,\n size: string\n }),\n removeButtonText: string,\n PreviewThumbnail: elementType,\n TextWrapperRenderer: elementType,\n FileInputRenderer: elementType,\n mode: string,\n showOnlyImages: bool,\n onFileUploadError: func,\n noUploadedImageText: string,\n galleryMode: string,\n inputButtonText: string,\n initialSelectedImage: string,\n groupedGalleryClass: string,\n groupedGalleryImageList: arrayOf(shape({})),\n isDeleteSelectedDisabled: bool\n};\n\nImageUpload.defaultProps = {\n onImageUpload: f => f,\n onImageSelect: f => f,\n onImageChange: f => f,\n onImageRemove: f => f,\n onAltTextChange: f => f,\n addNotification: f => f,\n onLinkTextInputSubmit: f => f,\n onLinkInputChange: f => f,\n isAltTextActive: false,\n allowMultipleSelection: false,\n forceSelect: false,\n optimize: false,\n multipleFileUpload: false,\n onlyColoredIcons: false,\n useAPI: false,\n showLabel: false,\n showActionButtons: true,\n limitType: '',\n linkTextInputDefaultValue: '',\n theme: '',\n linkTextInputPlaceholder: 'https://',\n imgDescInputPlaceholder: t('Alternative Text'),\n renderTabs: ['upload', 'choose', 'link'],\n imageList: [],\n galleryImageList: [],\n targetURL: undefined,\n ActionButtonsWrapper: props =>
        ,\n DeleteButtonRenderer: ({ onClick, disabled }) => , // eslint-disable-line react/prop-types\n SelectButtonRenderer: ({ onClick }) => , // eslint-disable-line react/prop-types\n ImageUploadPreviewRenderer: ImagePreview,\n ImageLoadingScreenRenderer: LoadingScreen,\n allowedTypes: 'image/*',\n allowImageUpload: true,\n onFileUploading: f => f,\n onFileRemove: f => f,\n isFileUploading: false,\n value: {},\n removeButtonText: 'Remove Image',\n PreviewThumbnail: undefined,\n TextWrapperRenderer: undefined,\n FileInputRenderer: undefined,\n mode: 'imageUpload',\n showOnlyImages: true,\n onFileUploadError: f => f,\n noUploadedImageText: t('There is no image to show!'),\n galleryMode: '',\n inputButtonText: 'Upload File',\n initialSelectedImage: '',\n groupedGalleryClass: '',\n groupedGalleryImageList: [],\n isDeleteSelectedDisabled: false\n};\n\nexport default ImageUpload;\n","import React, { Suspense } from 'react';\n\nimport 'emoji-mart/css/emoji-mart.css';\nimport { safeLazy } from '@jotforminc/safe-lazy-import';\n\nconst PickerComponent = safeLazy(() => import(/* webpackChunkName: \"emoji_mart_picker\" */'emoji-mart/dist/components/picker/picker'));\n\nconst Picker = props => (\n }>\n \n \n);\n\nexport default Picker;\n","import React, {\n useState, Suspense\n} from 'react';\nimport { bool, func, shape } from 'prop-types';\nimport { Picker } from '@jotforminc/emoji-mart';\nimport { t } from '@jotforminc/translation';\nimport { Loading } from '@jotforminc/loading';\nimport { Tab, TabListWithStyles } from '@jotforminc/tabs';\nimport { safeLazy } from '@jotforminc/safe-lazy-import';\n\nconst IconSelector = safeLazy(() => import(/* webpackChunkName: \"IconEmojiSelector_IconSelector\" */'../../IconSelector'));\n\nconst IconEmojiSelector = ({\n emojiPickerProperties, isEmojiFirst, ...props\n}) => {\n const {\n handleEmojiClick, ...otherProps\n } = emojiPickerProperties;\n const [activeTab, setActiveTab] = useState(false);\n\n return (\n \n \n }>\n \n \n \n \n \n \n \n );\n};\n\nIconEmojiSelector.propTypes = {\n emojiPickerProperties: shape({\n handleEmojiClick: func\n }),\n isEmojiFirst: bool\n};\n\nIconEmojiSelector.defaultProps = {\n emojiPickerProperties: {\n handleEmojiClick: f => f\n },\n isEmojiFirst: false\n};\n\nexport default IconEmojiSelector;\n","import React from 'react';\nimport { string } from 'prop-types';\n\nconst Color = ({ color }) => (\n \n
        \n \n);\n\nColor.propTypes = {\n color: string\n};\n\nColor.defaultProps = {\n color: ''\n};\n\nexport default Color;\n","import React from 'react';\n\nconst Wrapper = props =>
        ;\n\nexport default Wrapper;\n","import React, { useState, useMemo, useRef } from 'react';\nimport {\n elementType, string, func, oneOf, arrayOf, shape\n} from 'prop-types';\nimport * as ColorPickerList from 'react-color';\nimport { isRGB, rgbToHex, isHexColor } from '@jotforminc/utils';\n\nimport Popover from '../Popover';\nimport TextInput from '../TextInput';\nimport { Color as DefaultColorRenderer, Wrapper as DefaultWrapperRenderer } from './defaults';\n\nimport { useEffectIgnoreFirst, useClickOutsideState } from '../../utils/hooks';\n\nexport const validateCSSColor = color => {\n const dummyElement = document.createElement('div');\n dummyElement.style.color = color;\n\n const validColor = dummyElement.style.color.split(/\\s+/).join('').toLowerCase(); /* e.g.: rgb(255, 255, 255) */\n if (validColor && !isRGB(color) && isHexColor(color)) {\n return rgbToHex(validColor);\n }\n return validColor;\n};\n\nconst defaultColorStringGenerator = ({ hex, rgb }) => (rgb.a === 1 ? hex : `rgba(${rgb.r},${rgb.g},${rgb.b},${rgb.a})`);\n\nconst ColorPicker = ({\n type, defaultValue, value, id, presetColors, popoverProps,\n ColorRenderer, WrapperRenderer, TextInputRenderer, ColorPickerWrapper,\n onChange, pickerProps, onInputRemove, colorStringGenerator, ariaLabel, isVisible\n}) => {\n const containerRef = useRef(false);\n const textInputRef = useRef(false);\n const indicatorRef = useRef(false);\n const ColorPickerComponent = useMemo(() => ColorPickerList[`${type}Picker`], [type]);\n\n const [color, setColor] = useState(value || defaultValue);\n const [isColorPickerVisible, setColorPickerVisibility] = useClickOutsideState(false, [containerRef, textInputRef, indicatorRef]);\n const isPickerVisible = isVisible ?? isColorPickerVisible;\n\n useEffectIgnoreFirst(() => {\n setColor(value);\n }, [value]);\n\n const handleTextInputChange = ({ target: { value: inputValue } }) => {\n const trimmedValue = inputValue.trim();\n const validatedColorValue = validateCSSColor(trimmedValue);\n if (validatedColorValue || value === '') {\n onChange(validatedColorValue);\n setColor(validatedColorValue);\n }\n if (inputValue === '') {\n onInputRemove();\n }\n };\n\n const handleTextInputFocus = () => {\n setColorPickerVisibility(true);\n };\n\n const handleChangeComplete = pickedColor => {\n const currentColor = colorStringGenerator(pickedColor);\n setColor(currentColor);\n onChange(currentColor);\n };\n\n const toggleVisibility = () => {\n setColorPickerVisibility(!isColorPickerVisible);\n };\n\n return (\n \n \n \n {isPickerVisible && (\n \n \n \n \n \n )}\n \n );\n};\n\nColorPicker.propTypes = {\n type: oneOf(['Alpha', 'Block', 'Chrome', 'Circle', 'Compact', 'Custom', 'Github', 'Hue', 'Material', 'Photoshop', 'Sketch', 'Slider', 'Swatches', 'Twitter']),\n id: string,\n value: string,\n defaultValue: string,\n presetColors: arrayOf(string),\n popoverProps: shape(Popover.propTypes),\n ColorRenderer: elementType,\n WrapperRenderer: elementType,\n TextInputRenderer: elementType,\n ColorPickerWrapper: elementType,\n onChange: func,\n pickerProps: shape({}),\n onInputRemove: func,\n colorStringGenerator: func,\n ariaLabel: string,\n isVisible: oneOf([null, false, true])\n\n};\n\nColorPicker.defaultProps = {\n type: 'Sketch',\n id: '',\n value: '',\n defaultValue: '',\n presetColors: [\n '#D0021B', '#F5A623', '#F8E71C', '#8B572A', '#7ED321', '#417505', '#BD10E0', '#9013FE', '#4A90E2', '#50E3C2', '#B8E986', '#000000', '#4A4A4A', '#9B9B9B', '#FFFFFF', 'rgba(255,255,255,0)'\n ],\n popoverProps: Popover.defaultProps,\n ColorRenderer: DefaultColorRenderer,\n WrapperRenderer: DefaultWrapperRenderer,\n ColorPickerWrapper: DefaultWrapperRenderer,\n TextInputRenderer: TextInput,\n onChange: f => f,\n pickerProps: {},\n onInputRemove: f => f,\n colorStringGenerator: defaultColorStringGenerator,\n ariaLabel: 'Color',\n isVisible: null\n};\n\nexport default ColorPicker;\n","import axios, { AxiosRequestConfig, AxiosResponse } from 'axios';\n\ninterface ApiCallProps {\n path: string,\n options?: Partial,\n method?: AxiosRequestConfig['method'],\n url?: string,\n headers?: AxiosRequestConfig['headers'],\n callback?: (response: AxiosResponse) => void,\n handleError?: (error: any) => void\n}\n\nexport const apiCall = ({\n path,\n options = {},\n method = 'get',\n url = '/API',\n headers = {},\n callback = ({ data: { content } = {} }) => content,\n handleError = () => {}\n}: ApiCallProps): Promise => {\n return axios({\n method,\n url: `${url}${path}`,\n withCredentials: true,\n headers,\n ...options\n }).then(callback).catch(error => {\n // eslint-disable-next-line no-console\n handleError(error);\n });\n};\n","import qs from 'qs';\nimport { apiCall } from '../../utils/api';\n\nexport const getTeam = (id: string, fetchTeamProperties: boolean, returnMemberRoles: boolean): Promise => {\n const query = qs.stringify({\n ...fetchTeamProperties ? { returnTeamProperties: '1' } : {},\n ...returnMemberRoles ? { returnMembers: '1', returnMembersRoles: '1' } : {}\n });\n return apiCall({ path: `/team/${id}?${query}`, headers: { 'jf-team-id': id }, callback: f => f });\n};\n\nexport const updateTeamProperties = (id: string, data: { [key: string]: any }): Promise => {\n return apiCall({\n path: `/team/${id}/properties?${qs.stringify(data)}`,\n headers: { 'jf-team-id': id },\n method: 'put',\n callback: f => f\n });\n};\n","/* eslint-disable camelcase */\nimport { KeyboardEvent } from 'react';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\n\nimport {\n AccountType, User, ACCOUNTS, PrettyUser, RolesType, ServerTeamSettingsType\n} from '../types';\nimport { ACCOUNT_TYPES } from './constants';\nimport { TeamRoleDescription as getTeamRoleDescription } from '../components/TeamRoleDescription';\nimport { apiCall } from './api';\n\nexport const handleKeyUp = (e: KeyboardEvent, func: () => void): void => {\n if (e.keyCode === 13 || e.keyCode === 32) {\n func();\n }\n};\n\nexport const visibleName = (accountType: AccountType): string => ACCOUNT_TYPES[accountType].visibleName;\n\nexport const toFormattedNumber = (num: number): string => {\n return num ? num.toLocaleString('en-US') : '0';\n};\n\nexport const isDataOnlyUser = (user: User | PrettyUser): boolean => {\n return user.isDataOnlyUser === '1';\n};\n\nexport const mappedAccountType = (user: User | PrettyUser | false): AccountType => {\n if (!user) return ACCOUNTS.USER;\n if (isDataOnlyUser(user)) return ACCOUNTS.DATA_ONLY_USER;\n return user.account_type === ACCOUNTS.ADMIN ? ACCOUNTS.ADMIN : ACCOUNTS.USER;\n};\n\nexport const parseUser = (user: User | PrettyUser, isTeamMember?: boolean): PrettyUser => ({\n ...user,\n fullText: `${user.username}${user.name}${user.email}${user.jobTitle}`,\n avatar: isTeamMember ? user.avatar : user.avatarUrl,\n visibleUserType: isTeamMember ? user?.role?.role_name || '' : visibleName(mappedAccountType(user)),\n visibleUserName: user.name || '',\n formCount: user.form_count,\n formCountForUI: toFormattedNumber(user.form_count)\n});\n\n// eslint-disable-next-line\nexport const isErrored = (res: any): boolean => !res || (res.responseCode && res.responseCode !== 200) || (res.data && res.data.responseCode && res.data.responseCode !== 200);\n\nexport const createTeamRolesWithDescriptions = (teamRoles: RolesType[]): RolesType[] => teamRoles.map(role => ({\n ...role,\n role_description: role.role_description || getTeamRoleDescription(role.role_slug)\n}));\n\nexport const checkUserCanInviteMembers = (): boolean => isEnterprise();\n\nexport const checkUserCanCreateTeam = (teamCount: number): boolean => isEnterprise() || !teamCount || teamCount < 5;\n\nexport const isPrivacyFeatureEnabled = (): boolean => isEnterprise();\n\nexport const hasQueryParams = (url: string): boolean => !!url && url.indexOf('?') > -1;\n\nexport const isServerTeamSettingsEnabled = (): boolean => isEnterprise();\n\nexport const canAddNewUsers = (serverTeamSettings: ServerTeamSettingsType, accountType: string): boolean => {\n return !serverTeamSettings?.teamNewUserInvitation || serverTeamSettings?.teamNewUserInvitation !== '0' || accountType === 'ADMIN';\n};\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const canCreateTeam = (isTeamCreationDisabled: boolean, accountType: any): boolean => !isTeamCreationDisabled || accountType === 'ADMIN' || accountType?.name === 'ADMIN';\n\nexport const addBodyClass = (className: string): void => document.body.classList.add(className);\n\nexport const removeBodyClass = (className: string): void => document.body.classList.remove(className);\n\nexport const isBillingTabActive = async (): Promise => {\n const { host } = window.location;\n\n const isDevelopmentEnv = host.indexOf('jotform.biz') > -1;\n const testEnvironmentList = [\n 'invoicetestinternal.jotform.com', 'www.jotformers.com',\n 'portosudeste.jotform.com', 'talend.jotform.com', 'chcsno.jotform.com', 'sierrageotech.jotform.com',\n 'vivachicken.jotform.com', 'vyanet.jotform.com', 'batsoncook.jotform.com', 'bespokeguardians.jotform.com',\n 'solidplatforms.jotform.com', 'campallen.jotform.com', '1callclosers.jotform.com', '3deventsla.jotform.com',\n 'baycare.jotform.com', 'lgcypower.jotform.com', 'atomsupplies.jotform.com', 'cjrdc.jotform.com',\n 'nfpcanada.jotform.com', 'metroplains.jotform.com', 'engglo.jotform.com', 'mjelectric.jotform.com'\n ];\n\n // Old method of checking for feature flag. Use the api instead to update the server config\n if ((testEnvironmentList.indexOf(host) > -1 || isDevelopmentEnv)) return true;\n\n return apiCall({ path: '/enterprise-dashboard/server/customization/billing/status' });\n};\n\nexport const getDateFilter = (dateFilter?: string | { start: string, end: string }): {[key: string]: string} => {\n if (!dateFilter) return {};\n\n return typeof dateFilter === 'string' ? { date: dateFilter } : { date: 'range', startDate: dateFilter.start, endDate: dateFilter.end };\n};\n\n/**\n * @description Filters a list of users against a search term and/or an excluded user list\n */\nexport const filterUsers = ({\n searchTerm, destinations, excludedUsers\n}: {\n searchTerm: string,\n destinations: Partial[],\n excludedUsers?: Partial[]\n}): Partial[] => {\n return destinations.filter(destination => {\n const { name = '', username = '', email = '' } = destination;\n\n const searchRegex = new RegExp(searchTerm, 'i');\n\n // Filter out users we're from excluded users list\n if (excludedUsers?.some(excludedUser => excludedUser.username === username)) return false;\n\n // Filter target destination list by search term\n return searchRegex.test(name) || searchRegex.test(username) || searchRegex.test(email);\n });\n};\n","import { updateTeamProperties } from './api';\nimport { TeamProps } from '../../types';\nimport { isErrored } from '../../utils';\n\nexport const handleUpdateTeamProps = async (\n teamId: string,\n newData: TeamProps,\n onUpdate: (newData: TeamProps) => void,\n setTeam: (f: (TeamProps | ((currTeam: TeamProps) => TeamProps))) => void\n): Promise => {\n try {\n const res = await updateTeamProperties(teamId, newData);\n if (!isErrored(res)) {\n setTeam((currTeam: TeamProps): TeamProps => ({ ...currTeam, ...newData }));\n onUpdate(newData);\n }\n } catch (e) {\n // handle errors\n }\n};\n","import React, { forwardRef } from 'react';\nimport { string } from 'prop-types';\n\ntype Props = {\n color?: string\n};\n\nconst ColorRenderer = forwardRef(({ color, ...rest }, ref) => (\n \n));\n\nColorRenderer.propTypes = {\n color: string\n};\n\nColorRenderer.defaultProps = {\n color: '#FFFFFF'\n};\n\nexport default ColorRenderer;\n","export const BG_IMAGE_SET = [\n {\n text: 'NATURE',\n images: [\n 'https://images.unsplash.com/photo-1497436072909-60f360e1d4b1?w=1200&h=80',\n 'https://images.unsplash.com/photo-1491147334573-44cbb4602074?w=1200&h=80',\n 'https://images.unsplash.com/photo-1490358930084-2d26f21dc211?w=1200&h=80',\n 'https://images.unsplash.com/photo-1576806817362-9ed6edf33591?w=1200&h=80',\n 'https://images.unsplash.com/photo-1500964757637-c85e8a162699?w=1200&h=80',\n 'https://images.unsplash.com/photo-1556103727-777acb371272?w=1200&h=80',\n 'https://images.unsplash.com/photo-1551376347-075b0121a65b?w=1200&h=80'\n ]\n },\n {\n text: 'ART & CULTURE',\n images: [\n 'https://images.unsplash.com/photo-1621886292650-520f76c747d6?w=1200&h=80',\n 'https://images.unsplash.com/photo-1515448315142-dca41dcde981?w=1200&h=80',\n 'https://images.unsplash.com/photo-1547891654-e66ed7ebb968?w=1200&h=80',\n 'https://images.unsplash.com/photo-1554139681-1adb48e035cb?w=1200&h=80'\n ]\n },\n {\n text: 'SPACE',\n images: [\n 'https://images.unsplash.com/photo-1419242902214-272b3f66ee7a?w=1200&h=80',\n 'https://images.unsplash.com/photo-1519681393784-d120267933ba?w=1200&h=80',\n 'https://images.unsplash.com/photo-1532798369041-b33eb576ef16?w=1200&h=80',\n 'https://images.unsplash.com/photo-1545243424-0ce743321e11?w=1200&h=80',\n 'https://images.unsplash.com/photo-1589225529399-8705282f98e2?w=1200&h=80',\n 'https://images.unsplash.com/photo-1451187580459-43490279c0fa?w=1200&h=80'\n ]\n },\n {\n text: 'BUSINESS',\n images: [\n 'https://images.unsplash.com/photo-1507904139316-3c7422a97a49?w=1200&h=80',\n 'https://images.unsplash.com/photo-1535498730771-e735b998cd64?w=1200&h=80',\n 'https://images.unsplash.com/photo-1498036882173-b41c28a8ba34?w=1200&h=80',\n 'https://images.unsplash.com/photo-1526374965328-7f61d4dc18c5?w=1200&h=80'\n ]\n }\n];\n\nexport const AVATAR_SET = [\n {\n text: 'ANIMALS',\n images: [\n 'https://images.unsplash.com/photo-1517849845537-4d257902454a',\n 'https://images.unsplash.com/photo-1537151608828-ea2b11777ee8',\n 'https://images.unsplash.com/photo-1581300134629-4c3a06a31948',\n 'https://images.unsplash.com/photo-1547721064-da6cfb341d50',\n 'https://images.unsplash.com/photo-1514571948039-d3cb9e8f9750',\n 'https://images.unsplash.com/photo-1535076766578-839cd64d7a73',\n 'https://images.unsplash.com/photo-1535062311770-93adb0401917',\n 'https://images.unsplash.com/photo-1612372992697-81c95501d0d1',\n 'https://images.unsplash.com/photo-1605092676920-8ac5ae40c7c8',\n 'https://images.unsplash.com/photo-1590079015089-875baa76cc8d',\n 'https://images.unsplash.com/photo-1522069169874-c58ec4b76be5',\n 'https://images.unsplash.com/photo-1590787996529-a542c86ca267',\n 'https://images.unsplash.com/photo-1591025207163-942350e47db2'\n ]\n },\n {\n text: 'NATURE',\n images: [\n 'https://images.unsplash.com/photo-1522688306378-fbb315c6ba9a',\n 'https://images.unsplash.com/photo-1606041008023-472dfb5e530f',\n 'https://images.unsplash.com/photo-1540490190210-9e2825f75418',\n 'https://images.unsplash.com/photo-1604820849194-837928614a4a',\n 'https://images.unsplash.com/photo-1453791052107-5c843da62d97',\n 'https://images.unsplash.com/photo-1502003148287-a82ef80a6abc'\n ]\n },\n {\n text: 'BUSINESS',\n images: [\n 'https://images.unsplash.com/photo-1513171920216-2640b288471b',\n 'https://images.unsplash.com/photo-1555323912-3526a765162b'\n ]\n },\n {\n text: 'ARTS & CULTURE',\n images: [\n 'https://images.unsplash.com/photo-1646001943936-f1edc87d4ac5',\n 'https://images.unsplash.com/photo-1634986666676-ec8fd927c23d',\n 'https://images.unsplash.com/photo-1628526799996-0cfe210f5fbc'\n ]\n },\n {\n text: 'TECHNOLOGY',\n images: [\n 'https://images.unsplash.com/photo-1485827404703-89b55fcc595e',\n 'https://images.unsplash.com/photo-1536697246787-1f7ae568d89a'\n ]\n }\n];\n\nexport const DEFAULT_SELECTED_OPTIONS = {\n teamAvatarURL: '',\n teamAvatarIcon: '',\n teamAvatarIconSvgRef: '',\n teamAvatarIconColor: '',\n teamAvatarIconBgColor: '#18235C',\n teamAvatarEmojiId: 'european_castle'\n};\n\nexport const DEFAULT_TEAM = {\n id: '',\n name: '',\n showCoverImage: '',\n teamAvatarIconBgColor: '',\n teamAvatarIconColor: '',\n teamAvatarURL: '',\n teamAvatarIcon: '',\n teamAvatarEmojiId: '',\n coverTitleColor: '',\n teamAvatarIconSvgRef: '',\n coverBgImageURL: '',\n coverBgColor: '',\n coverBgImageCropInfo: '',\n members: []\n};\n","/* eslint-disable max-len */\nimport styled from 'styled-components';\n\nexport const CustomizationWrapper = styled.div`\n background: #FFFFFF;\n max-width: 350px;\n width: 100%;\n border-radius: 4px;\n background: #FFFFFF;\n border: 1px solid #B2B4CC;\n box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.08);\n\n &.cover {\n max-width: 485px;\n width: 100%;\n\n // FIXME: This is a hack to fix the width of the cover\n .content-fileupload .imageUpload .tabContent .galleryWrapper > div .prevUploads-list .prevUploads-listItem {\n width: 100%;\n height: auto;\n border-radius: 4px;\n aspect-ratio: 16 / 9;\n\n img {\n height: 100% !important;\n }\n }\n }\n\n .heading {\n height: 40px;\n font-size: 14px;\n line-height: 18px;\n font-weight: 600;\n color: #2E3345;\n padding: 12px 16px;\n }\n\n .content-heading {\n align-self: flex-start;\n color: #141E46;\n font-weight: 500;\n margin-bottom: 8px;\n position: relative;\n\n &.centering {\n align-self: center;\n margin: 0;\n }\n }\n\n .content-option-colorpicker {\n position: relative;\n\n input {\n background: #FFFFFF;\n border: 1px solid #B2B4CC;\n border-radius: 4px;\n color: #333A71;\n font-size: 14px;\n line-height: 18px;\n padding: 8px 32px 8px 8px;\n\n html[dir=\"rtl\"] & {\n padding: 8px 43px 8px 8px;\n }\n }\n .jfColors-picker {\n position: absolute;\n top: 6px;\n right: 6px;\n width: 24px;\n height: 24px;\n border-radius: 2px;\n\n &:before {\n content: '';\n width: 1px;\n height: 34px;\n background-color: #B2B4CC;\n display: block;\n position: absolute;\n right: 30px;\n top: -5px;\n }\n }\n }\n\n .content {\n .content-wrapper {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n width: 100%;\n\n &.col {\n flex-direction: column;\n\n input {width: 100%}\n }\n }\n\n .double-wrapper {\n display: flex;\n justify-content: space-between;\n align-items: center; \n flex: 1 0 auto;\n flex-wrap: wrap;\n z-index: 5;\n position: relative;\n\n &.midSize {\n max-width: 70%;\n\n @media (max-width: 768px) {\n max-width: 100%;\n }\n }\n\n .col {\n width: 50%;\n }\n }\n\n .forBody {\n @media screen and (max-width: 600px) {\n max-height: 35vh;\n }\n\n @media screen and (max-height: 568px) {\n max-height: 20vh;\n }\n }\n }\n\n .content-fileupload {\n width: 100%;\n border: 1px solid #B2B4CC;\n border-radius: 4px;\n\n div[data-tabid=\"unsplash\"] {\n .prevUploads-listItem {\n height: auto;\n cursor: pointer;\n\n img {\n width: 100%;\n max-height: 100% !important;\n aspect-ratio: 16 / 9;\n object-fit: cover;\n }\n\n p {\n margin: 0;\n padding: 0;\n width: 100%;\n font-size: 10px;\n color: #999;\n overflow: hidden;\n height: 12px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n a {\n color: inherit;\n margin-left: 2px;\n }\n }\n }\n }\n\n .imageUpload {\n .tabMenu {\n border-bottom: 1px solid #B2B4CC\n }\n \n .tabMenu-inner-link {\n padding: 6px 0;\n font-size: 12px;\n color: #333A71;\n border-bottom-width: 2px;\n border-right: 1px solid #B2B4CC;\n display: grid;\n place-items: center;\n line-height: 1;\n\n &:last-of-type {\n border-right: none;\n }\n\n &.is-active {\n border-bottom-color: #18235C;\n border-bottom-width: 2px;\n }\n }\n\n .tabUnsplash {\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n\n svg {\n margin-right: 4px;\n }\n }\n\n .tabContent {\n padding: 12px 8px;\n max-height: 300px;\n overflow: auto;\n min-width: 314px;\n\n .galleryWrapper {\n > div {\n color: #9FA0B9;\n font-size: 12px;\n line-height: 16px;\n font-weight: 600;\n text-align: left;\n margin-bottom: 16px;\n\n .prevUploads-list {\n border: none;\n padding: 0;\n margin: 6px auto 24px;\n min-height: auto;\n max-height: auto;\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding: 4px;\n\n @media (max-width: 768px) {\n gap: 1vw;\n }\n\n .prevUploads-listItem {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n overflow: hidden;\n display: flex;\n margin: 5px;\n cursor: pointer;\n margin: 0;\n\n img {\n width: 100%;\n height: 100% !important;\n object-fit: cover;\n }\n }\n }\n }\n }\n\n div[data-tabid=\"upload\"] {\n label.fileUploadLabel {\n background-color: #0099FF;\n }\n .fileUpload {\n min-height: 135px;\n\n &-verticalAlign-text {\n color: #9FA0B9;\n font-size: 12px;\n line-height: 16px;\n margin-top: 8px;\n }\n }\n }\n\n div[data-tabid=\"unsplash\"] {\n .prevUploads-list {\n border: none;\n overflow: auto;\n margin: 0;\n padding: 0;\n\n display: grid;\n grid-gap: 8px;\n grid-template-columns: repeat(auto-fit, minmax(102px, 1fr));\n margin-top: 12px;\n\n .prevUploads-listItem {\n width: 100%;\n max-width: 100%;\n float: initial;\n overflow: initial;\n margin: initial;\n }\n }\n\n .searchBox {\n background-color: #F5F6FE;\n border: 1px solid #C8CEED;\n border-radius: 4px;\n font-size: 14px;\n line-height: 18px;\n }\n }\n\n div[data-tabid=\"link\"] {\n label {\n display: flex;\n\n input {\n background: #F5F6FE;\n border: 1px solid #C8CEED;\n border-radius: 4px;\n color: #797EA8;\n }\n }\n\n .line {\n margin-top: 12px;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n\n a.btn {\n background-color: #0099FF;\n border-radius: 4px;\n line-height: 1.5;\n\n display: flex;\n align-items: center;\n justify-content: center;\n }\n }\n }\n }\n }\n }\n\n .withBorder {\n border-bottom: 1px solid rgba(225, 226, 236, 0.7);\n }\n\n .jfTabs-body {\n padding: 0;\n }\n\n .icon-selector-wizard {\n padding: 0;\n\n svg {\n fill: #18235C;\n }\n }\n\n .icon-tab-wrapper {\n width: 100%;\n\n .jfTabs {\n border: 1px solid #B2B4CC;\n border-radius: 4px;\n }\n\n .forTabs { \n z-index: 4;\n\n .jfTabs-tabs {\n min-height: 32px;\n height: 32px;\n border-bottom: 1px solid #B2B4CC;\n\n &-button {\n color: #333A71;\n font-size: 12px;\n line-height: 16px;\n border-right: 1px solid #B2B4CC;\n\n &:last-of-type {\n border-right: none;\n }\n }\n }\n }\n\n .forBody {\n .iconSelectorPanel {\n .tabMenu {\n background-color: #F3F3FE;\n display: flex;\n justify-content: space-around;\n align-items: center;\n padding: 8px;\n\n .tabMenu-link.is-active {\n position: relative;\n\n &:after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 2px;\n background-color: #0061FF;\n bottom: -7px;\n left: 0;\n }\n }\n\n input {\n margin: 0;\n background-color: #FFF !important;\n color: #797EA8;\n background-position: 5%;\n padding: .625em .625em .625em 40px;\n }\n\n a {\n cursor: pointer;\n\n svg {\n fill: #797EA8;\n }\n }\n }\n\n .tabContent {\n .SeachIconWrapper {\n input {\n margin: 0;\n padding: 8px 0 8px 36px;\n background-color: transparent !important;\n color: #797EA8;\n background-position: 12px center;\n border-bottom: 1px solid #E1E2EC;\n border-radius: 0 !important;\n }\n }\n .LogoIconsWrapper {\n .content-item-wrapper {\n border-radius: 50%;\n }\n .content-item-label {\n border-radius: 50%;\n\n &:hover {\n background-color: #7698EF;\n\n svg {\n fill: #B4C8FC;\n }\n }\n }\n }\n }\n }\n .emoji-mart {\n button:not(.emoji-mart-search-icon) {\n border: none;\n padding: 8px;\n }\n\n &-search-icon {\n padding: 0 4px 0 0;\n border: none;\n min-height: auto;\n }\n\n &-category-label {\n color: #9FA0B9;\n font-size: 12px;\n line-height: 16px;\n font-weight: 600;\n text-align: left;\n }\n }\n }\n }\n`;\n\nexport const CoverImgWrapper = styled.div`\n svg.jfLoading-loader {\n width: 40px;\n top: 50px;\n left: 50px;\n }\n`;\nexport const CoverWrapper = styled.div`\n display: flex;\n height: 100%;\n width: 100%;\n\n .teamCardWrapper &:hover {\n .teamcover .teamcover-container {\n transform: translateY(-100px);\n }\n\n .teamcover-bg::before {\n background: initial;\n }\n\n .teamcover-container {\n bottom: 8px;\n }\n .teamName {\n margin-top: 8px;\n }\n \n .teamMembers-count-normal {\n display: none\n }\n .teamMembers-count-hover {\n display: block;\n }\n }\n\n @media screen and (max-width: 768px) {\n position: relative;\n z-index: 0;\n\n .isMyaccount & {\n position: relative;\n z-index: 20;\n }\n }\n\n body.jfWizard--isVisible:not(.jfWizard--isModalView) & {\n display: none;\n }\n\n .teamcover {\n width: 100%;\n min-height: 200px;\n text-align: center;\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n position: relative;\n // overflow: hidden;\n transition: all .2s;\n\n &-container {\n position: relative;\n z-index: 10;\n width: 100%;\n display: flex;\n flex-direction: column;\n }\n\n &-imageCropper {\n position: relative;\n\n .wrapper {\n height: 200px;\n position: relative;\n }\n \n .wrapperButtons {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n height: 51px;\n\n position: absolute;\n right: 0;\n bottom: 4px;\n background: #FFFFFF61;\n padding: 8px;\n border-radius: 4px;\n \n button {\n cursor: pointer;\n transition: .2s all ease;\n margin: 0;\n padding: 0;\n border: none;\n outline: none;\n font-family: inherit;\n border-radius: 4px;\n width: 72px;\n height: 28px;\n font-size: 12px;\n }\n .wrapperCancel {\n background-color: #dddfe9;\n color: #23283a;\n margin-right: 12px;\n }\n .wrapperSave {\n background-color: #4573e3;\n color: #fff;\n margin-right: 15px;\n }\n }\n\n &-info {\n position: absolute;\n z-index: 10;\n color: #141E46;\n top: 50%;\n background: rgba(255, 255, 255, 0.8);\n padding: 8px;\n border-radius: 4px;\n left: 50%;\n margin: -16px 0 0 -96px;\n pointer-events: none;\n }\n }\n\n &-avatar {\n position: relative;\n background-color: transparent;\n border: none;\n width: 64px;\n margin: 0 auto;\n\n &-wrapper {\n width: 64px;\n height: 64px;\n border: 2px solid #fff;\n border-radius: 50%;\n overflow: hidden;\n margin: 0 auto;\n padding: 0;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n \n img {\n object-fit: cover;\n height: 100%;\n width: 100%;\n }\n \n &.hasBgColor {\n // padding: 12px;\n }\n \n .jfIconSVG-wrapper {\n width: 100%;\n height: 100%;\n padding: 12px;\n }\n \n .emoji-mart-emoji {\n // transform: scale(.7);\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n \n span {\n font-size: 40px;\n align-self: center;\n display: flex;\n justify-content: center;\n align-items: center;\n //margin: 2px 0 0 0;\n } \n \n .emoji-mart-search {\n .emoji-mart-search-icon {\n //padding: 0 4px 0 0 !important; // FIXME\n }\n }\n }\n } \n \n img {\n width: 100%;\n background-size: cover;\n height: 100%;\n }\n \n &-edit {\n position: absolute;\n width: 24px;\n height: 24px;\n background-color: #D3DCEF;\n border-radius: 50%;\n padding: 4px;\n right: -2px;\n bottom: -2px;\n filter: drop-shadow(0px 4px 4px rgba(0, 0, 0, 0.25)); \n }\n \n .hoverSettingButton {\n opacity: 1;\n transition: all .1s ease;\n }\n \n &:hover {\n .hoverSettingButton {\n opacity: 1;\n }\n }\n }\n\n &-name {\n color: #fff;\n font-weight: 600;\n font-size: 24px;\n line-height: 30px;\n margin: 8px 0 0 0;\n word-break: break-all;\n }\n\n &-members {\n position: absolute;\n top: 0;\n right: 12px;\n z-index: 15;\n display: flex;\n justify-content: center;\n align-items: center;\n\n html[dir=\"rtl\"] & {\n right: initial;\n left: 12px;\n }\n }\n\n &-btnset {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: flex-end;\n align-items: flex-end;\n padding: 12px;\n\n & > * {\n margin-left: 4px;\n }\n\n .teamSettingsButton {\n padding: 4px;\n border-radius: 4px;\n background: rgba(255, 255, 255, 0.8);\n width: 24px;\n height: 24px;\n cursor: pointer;\n transition: background .2s ease;\n z-index: 2;\n order: 2;\n \n &:hover + .teamcover-btnset-customization {\n opacity: 1;\n visibility: visible;\n transform: translate(0, 0);\n }\n }\n\n &-customization {\n display: flex;\n background-color: rgba(255, 255, 255, 0.8);\n border-radius: 4px;\n border: none;\n transition: background-color .2s ease;\n\n order: 1;\n\n button {\n display: flex;\n justify-content: center;\n align-items: center;\n\n border: none;\n background-color: transparent;\n padding: 4px 8px;\n color: #141E46;\n font-weight: 500;\n font-size: 12px;\n line-height: 16px;\n border-right: 1px solid #141E46;\n\n &:last-of-type {\n border-right: none;\n }\n\n svg {\n width: 12px;\n margin-right: 4px;\n\n html[dir=\"rtl\"] & {\n margin-right: 0px;\n margin-left: 4px;\n }\n }\n }\n }\n }\n\n &-bg {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n right: 0;\n bottom: 0;\n z-index: 0;\n border: none;\n margin: 0;\n padding: 0;\n overflow: hidden;\n\n &::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: linear-gradient(180deg, rgba(159, 160, 185, 0.6) 0%, rgba(159, 160, 185, 0) 123.33%);\n mix-blend-mode: multiply;\n }\n\n &-wrapper {\n position: relative;\n top: 0;\n left: 0;\n transition: background .3s ease;\n width: 100%;\n height: 100%;\n display: flex;\n overflow: hidden;\n }\n\n &-img {\n max-width: 100%;\n max-height: 100%;\n margin: auto;\n position: absolute;\n inset: 0;\n z-index: 1;\n will-change: transform; \n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n }\n\n &-invite {\n margin-left: auto;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin: 12px 0 12px auto;\n\n ul {\n display: flex;\n\n li {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-left: -6px;\n \n img {\n width: 100%;\n object-fit: cover;\n height: 100%;\n }\n\n button {\n border: none;\n width: 100%;\n height: 100%;\n color: #6F76A7;\n background-color: #E2E6F9;\n display: flex;\n margin: 0;\n padding: 0;\n justify-content: center;\n align-items: center;\n\n width: 32px;\n height: 32px;\n overflow: hidden;\n border-radius: 50%;\n border: 1px solid rgb(200, 206, 237);\n }\n\n .jfTooltipNew-body {\n span {\n display: block;\n margin-bottom: 8px;\n text-align: left;\n\n &:nth-child(1) {\n color: #fff;\n font-size: 15px;\n font-weight: 500;\n }\n &:nth-child(2) {\n color: #a9aacb;\n }\n &:nth-child(3) {\n background-color: #404b6b;\n border-radius: 30px;\n color: #f3f7ff;\n font-size: 12px;\n padding: 8px 16px;\n align-self: flex-start;\n margin-bottom: 0;\n white-space: nowrap;\n }\n }\n }\n }\n }\n\n > button {\n background: rgba(255, 255, 255, 0.8);\n padding: 4px 12px;\n border-radius: 4px;\n border: none;\n color: #141E46;\n font-weight: 500;\n line-height: 24px;\n font-size: 12px;\n transition: background .2s ease;\n margin-left: 8px;\n\n html[dir=\"rtl\"] & {\n margin-left: 0;\n margin-right: 8px;\n }\n\n &:hover {\n background: rgba(255, 255, 255, 1);\n } \n }\n }\n\n &-cta {\n background: #0A1551;\n border-radius: 4px;\n border: none;\n color: #FFF;\n padding: 6px;\n line-height: 22px;\n }\n\n &-select {\n display: flex;\n justify-content: center;\n align-items: flex-start;\n\n label {\n color: #141E46;\n font-size: 16px;\n line-height: 21px;\n margin-right: 12px;\n }\n\n select {\n background: #E3E5F5;\n border-radius: 4px;\n }\n }\n\n &-wrapper {\n z-index: 7;\n width: 100%;\n\n [data-popper-placement] {\n z-index: 7;\n }\n\n &.isEditable {\n z-index: 8;\n .teamcover-bg {\n border-top-left-radius: 8px;\n border-top-right-radius: 8px;\n }\n }\n }\n }\n`;\n","/* eslint-disable react/require-default-props */\nimport React, {\n ReactNode,\n forwardRef,\n FunctionComponent,\n useState,\n useRef\n} from 'react';\nimport debounce from 'lodash/debounce';\nimport { ImageUpload } from '@jotforminc/image-upload';\nimport { IconEmojiSelector } from '@jotforminc/icon-selector';\nimport { TabListWithStyles, Tab } from '@jotforminc/tabs';\nimport { t } from '@jotforminc/translation';\nimport { ColorPicker as UIKitColorPicker, Popover } from '@jotforminc/uikit';\nimport { handleUpdateTeamProps } from './utils';\n\nimport ColorRenderer from './ColorRenderer';\nimport { AVATAR_SET, DEFAULT_SELECTED_OPTIONS } from './constants';\nimport { TeamProps } from '../../types';\nimport { CustomizationWrapper } from './StyledElements';\nimport { ImageUploadRefType } from './types';\n\ntype Props = {\n teamId?: string,\n teamAvatarURL?: string,\n teamAvatarIcon?: string,\n teamAvatarIconColor?: string,\n teamAvatarIconBgColor?: string,\n buttonRef: ReactNode,\n setTeam?: (f: (TeamProps | ((currTeam: TeamProps) => TeamProps))) => void,\n onUpdate?: (newData: TeamProps) => void,\n notUpdateOnSelection?: boolean,\n popoverProps?: { [key: string]: any },\n useOnUpdateProp?: boolean\n};\n\nconst CustomizeTeamAvatar = forwardRef(({\n teamId,\n teamAvatarURL,\n teamAvatarIcon,\n teamAvatarIconColor,\n teamAvatarIconBgColor,\n buttonRef,\n onUpdate = f => f,\n setTeam = f => f,\n notUpdateOnSelection,\n popoverProps = {},\n useOnUpdateProp\n}, ref) => {\n const imageUploadRef = useRef(null);\n const [activeTab, setActiveTab] = useState();\n\n const update = (newData: TeamProps) => {\n if (notUpdateOnSelection || useOnUpdateProp) {\n onUpdate(newData);\n } else {\n handleUpdateTeamProps(teamId as string, newData, onUpdate, setTeam);\n }\n };\n\n const selectImage = (url: string) => update({\n teamAvatarURL: url,\n teamAvatarIcon: '',\n teamAvatarIconSvgRef: '',\n teamAvatarEmojiId: '',\n teamAvatarIconColor: '',\n teamAvatarIconBgColor: ''\n });\n\n const handleResetSelectedImage = () => {\n if (imageUploadRef?.current?.setSelectedImage) {\n imageUploadRef.current.setSelectedImage('');\n }\n };\n\n const removeImage = () => {\n update(DEFAULT_SELECTED_OPTIONS);\n handleResetSelectedImage();\n };\n\n const selectIcon = (val: { url: string, iconSvgRef: string }) => {\n update({\n teamAvatarIcon: val?.url,\n teamAvatarIconSvgRef: val?.iconSvgRef,\n teamAvatarURL: '',\n teamAvatarEmojiId: '',\n ...(!teamAvatarIconBgColor && { teamAvatarIconBgColor: '#0099FF' })\n });\n handleResetSelectedImage();\n };\n\n const selectEmoji = (emoji: { id: string }) => {\n update({\n teamAvatarEmojiId: emoji?.id,\n teamAvatarURL: '',\n teamAvatarIcon: '',\n teamAvatarIconSvgRef: '',\n ...(!teamAvatarIconBgColor && { teamAvatarIconBgColor: '#0099FF' })\n });\n handleResetSelectedImage();\n };\n\n const onLinkTextInputSubmit = (url?: string) => {\n if (!url) return;\n selectImage(url);\n handleResetSelectedImage();\n };\n\n const TABS = {\n image: { label: t('IMAGE') },\n icon: { label: t('ICON') }\n };\n\n return (\n 768 ? 'right-start' : 'bottom-end',\n modifiers: [\n { name: 'offset', options: { offset: [0, 5] } }\n ]\n }}\n {...popoverProps}\n >\n \n
        \n {t('TEAM AVATAR')}\n
        \n
        \n \n \n
        \n
        \n {\n selectImage(file?.url);\n handleResetSelectedImage();\n }}\n onLinkTextInputSubmit={onLinkTextInputSubmit}\n onFileRemove={removeImage}\n onImageSelect={selectImage}\n onImageRemove={removeImage}\n />\n
        \n
        \n
        \n \n
        \n
        \n
        \n {t('Icon Color')}\n
        \n
        \n update({ teamAvatarIconColor: val }), 400)}\n onInputRemove={() => update({ teamAvatarIconColor: '' })}\n ariaLabel={t('Icon Color')}\n />\n
        \n
        \n
        \n
        \n {t('Background Color')}\n
        \n
        \n update({ teamAvatarIconBgColor: val }), 400)}\n onInputRemove={() => update({ teamAvatarIconBgColor: '' })}\n ariaLabel={t('Background Color')}\n />\n
        \n
        \n
        \n
        \n
        \n \n
        \n
        \n
        \n \n
        \n
        \n \n );\n});\n\nCustomizeTeamAvatar.defaultProps = {\n teamId: '',\n teamAvatarURL: '',\n teamAvatarIcon: '',\n teamAvatarIconColor: '',\n teamAvatarIconBgColor: '',\n notUpdateOnSelection: false,\n popoverProps: {},\n useOnUpdateProp: false\n};\n\nexport default CustomizeTeamAvatar;\n","/* eslint-disable react/require-default-props */\nimport React, {\n ReactNode, forwardRef, FunctionComponent, useRef\n} from 'react';\nimport debounce from 'lodash/debounce';\nimport { ImageUpload } from '@jotforminc/image-upload';\nimport { t } from '@jotforminc/translation';\nimport { ColorPicker as UIKitColorPicker, Popover } from '@jotforminc/uikit';\nimport ColorRenderer from './ColorRenderer';\nimport { BG_IMAGE_SET } from './constants';\nimport { TeamProps } from '../../types';\nimport { handleUpdateTeamProps } from './utils';\nimport { CustomizationWrapper } from './StyledElements';\nimport { ImageUploadRefType } from './types';\n\ntype Props = {\n teamId?: string,\n coverBgColor?: string,\n coverTitleColor?: string,\n coverBgImageURL?: string,\n buttonRef: ReactNode,\n setTeam?: (f: (TeamProps | ((currTeam: TeamProps) => TeamProps))) => void,\n onUpdate?: (newData: TeamProps) => void,\n useOnUpdateProp?: boolean\n};\n\nconst CustomizeCover = forwardRef(({\n teamId,\n coverBgColor,\n coverTitleColor,\n coverBgImageURL,\n buttonRef,\n onUpdate = f => f,\n setTeam = f => f,\n useOnUpdateProp\n}, ref) => {\n const imageUploadRef = useRef(null);\n const update = (newData: TeamProps) => (useOnUpdateProp ? onUpdate(newData) : handleUpdateTeamProps(teamId as string, newData, onUpdate, setTeam));\n\n const handleResetSelectedImage = () => {\n if (imageUploadRef?.current?.setSelectedImage) {\n imageUploadRef.current.setSelectedImage('');\n }\n };\n\n const removeHeightParam = (url: string) => {\n const heightParam = new RegExp(/(&h=80)$/, 'gm');\n return url.replace(heightParam, '');\n };\n\n const selectImage = (url: string) => update({ coverBgColor: '', coverBgImageURL: removeHeightParam(url), coverBgImageCropInfo: '' });\n const removeImage = () => {\n update({ coverBgImageURL: '' });\n handleResetSelectedImage();\n };\n\n const onLinkTextInputSubmit = (url?: string) => {\n if (!url) return;\n selectImage(url);\n handleResetSelectedImage();\n };\n\n return (\n \n \n
        \n {t('CUSTOMIZE COVER')}\n
        \n
        \n
        \n
        \n
        \n {t('Background Color')}\n
        \n
        \n update({ coverBgImageURL: '', coverBgColor: val }), 400)}\n onInputRemove={() => update({ coverBgColor: '' })}\n />\n
        \n
        \n
        \n
        \n {t('Title Color')}\n
        \n
        \n update({ coverTitleColor: val }), 400)}\n onInputRemove={() => update({ coverTitleColor: '' })}\n />\n
        \n
        \n
        \n
        \n
        \n {\n selectImage(file?.url);\n handleResetSelectedImage();\n }}\n onLinkTextInputSubmit={onLinkTextInputSubmit}\n onFileRemove={removeImage}\n onImageSelect={selectImage}\n onImageRemove={removeImage}\n />\n
        \n
        \n
        \n
        \n \n );\n});\n\nCustomizeCover.defaultProps = {\n teamId: '',\n coverBgColor: '',\n coverTitleColor: '',\n coverBgImageURL: '',\n useOnUpdateProp: false\n};\n\nexport default CustomizeCover;\n","import React, {\n FunctionComponent,\n ReactNode,\n useEffect,\n useRef\n} from 'react';\nimport { t } from '@jotforminc/translation';\nimport { Hooks } from '@jotforminc/uikit';\nimport CustomizeTeamAvatar from './CustomizeTeamAvatar';\nimport CustomizeCover from './CustomizeCover';\nimport { TeamProps } from '../../types';\n\ntype Props = {\n teamId?: string,\n type?: string,\n buttonClass?: string,\n buttonStyles?: { [key: string]: any },\n onVisibilityChange?: (isCustomizationVisible: boolean) => void,\n isVisible?: boolean,\n children?: ReactNode,\n coverBgColor?: string,\n coverTitleColor?: string,\n coverBgImageURL?: string,\n teamAvatarURL?: string,\n teamAvatarIcon?: string,\n teamAvatarIconColor?: string,\n teamAvatarIconBgColor?: string,\n setTeam?: (f: (TeamProps | ((currTeam: TeamProps) => TeamProps))) => void,\n onUpdate?: (newData: TeamProps) => void,\n notUpdateOnSelection?: boolean,\n popoverProps?: { [key: string]: any },\n useOnUpdateProp?: boolean\n};\n\nexport const CustomizationButton: FunctionComponent = ({\n type,\n buttonClass,\n buttonStyles,\n children,\n onVisibilityChange = f => f,\n isVisible,\n ...otherProps\n}) => {\n const ActiveComponent = type === 'cover' ? CustomizeCover : CustomizeTeamAvatar;\n const popoverRef = useRef(null);\n const buttonRef = useRef(null);\n const [isCustomizationVisible, setCustomizationVisibility] = Hooks.useClickOutsideStateMouseDown(!!isVisible, [popoverRef, buttonRef]);\n\n useEffect(() => {\n onVisibilityChange(isCustomizationVisible);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isCustomizationVisible]);\n\n useEffect(() => {\n setCustomizationVisibility(!!isVisible);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isVisible]);\n\n return (\n <>\n setCustomizationVisibility(true)}\n data-testid={`customization-button-${type}`}\n aria-label={t('Customization')}\n >\n {children}\n \n {isCustomizationVisible && }\n \n );\n};\n\nCustomizationButton.defaultProps = {\n teamId: '',\n type: '',\n buttonClass: '',\n buttonStyles: {},\n onVisibilityChange: f => f,\n isVisible: false,\n children: null,\n coverBgColor: '',\n coverTitleColor: '',\n coverBgImageURL: '',\n teamAvatarURL: '',\n teamAvatarIcon: '',\n teamAvatarIconColor: '',\n teamAvatarIconBgColor: '',\n setTeam: f => f,\n onUpdate: f => f,\n notUpdateOnSelection: false,\n popoverProps: undefined,\n useOnUpdateProp: false\n};\n","import React, { Suspense } from 'react';\nimport { safeLazy } from '@jotforminc/safe-lazy-import';\n\nimport 'emoji-mart/css/emoji-mart.css';\n\nconst EmojiComponent = safeLazy(() => import(/* webpackChunkName: \"emoji_mart_emoji\" */'emoji-mart/dist/components/emoji/emoji'));\n\nconst Emoji = props => (\n }>\n \n \n);\n\nexport default Emoji;\n","import React from 'react';\nimport { Emoji } from '@jotforminc/emoji-mart';\nimport { string, oneOfType, number } from 'prop-types';\n\nconst EmojiRenderer = ({ id, size }) => (\n \n);\n\nEmojiRenderer.propTypes = {\n id: string,\n size: oneOfType([number, string])\n};\n\nEmojiRenderer.defaultProps = {\n id: '',\n size: 55\n};\n\nexport default EmojiRenderer;\n","/* eslint-disable max-len */\nimport styled from 'styled-components';\n\nexport const centerer = `\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport const AvatarWrapper = styled.div`\n .jfIconSVG-wrapper {\n ${centerer}\n padding: 8px;\n\n > div {\n ${centerer}\n }\n }\n`;\n","import React, { FunctionComponent } from 'react';\nimport { SVGIcon, EmojiRenderer } from '@jotforminc/icon-selector';\nimport { AvatarWrapper } from './StyledElements';\n\ntype ImageProps = {\n url?: string,\n icon?:string,\n emojiId?: string,\n emojiSize?: number | string,\n iconColor?: string,\n iconSvgRef?: string\n urlParams?: string\n};\n\nconst Image: FunctionComponent = ({\n url = '',\n urlParams = '',\n icon = '',\n emojiId = '',\n emojiSize = 16,\n iconColor = '',\n iconSvgRef = ''\n}) => {\n if (url) return (\"Team);\n\n if (emojiId) return ();\n\n const isIconSpriteLoaded = !!document.getElementById('team-avatar-icons');\n\n return isIconSpriteLoaded && iconSvgRef ? (\n \n
        \n \n \n \n
        \n
        \n ) : (\n \n \n \n );\n};\n\nexport default Image;\n","/* eslint-disable react/require-default-props */\nimport React, { FunctionComponent } from 'react';\nimport { CustomizationButton } from '../Cover/CustomizationButton';\nimport { TeamProps } from '../../types';\nimport Image from '.';\nimport { hasQueryParams } from '../../utils';\nimport '../../styles/Image.scss';\n\ntype Props = {\n iconBgColor?: string,\n hasCustomization?:boolean,\n isVisible?: boolean,\n onVisibilityChange?: (isCustomizationVisible: boolean) => void,\n url?: string,\n icon?: string,\n iconColor?: string,\n teamId?: string,\n onUpdate?: (newData: TeamProps) => void,\n customClass?: string,\n emojiId?: string,\n iconSvgRef?: string,\n emojiSize?: number | string\n};\n\nexport const ImageWithWrapper: FunctionComponent = ({\n iconBgColor = '',\n hasCustomization = false,\n isVisible = false,\n onVisibilityChange = f => f,\n teamId = '',\n customClass = '',\n onUpdate = f => f,\n url = '',\n icon = '',\n iconColor = '',\n ...props\n}) => {\n const imageProps = {\n urlParams: url ? `${hasQueryParams(url) ? '&' : '?'}h=128` : '',\n url,\n icon,\n iconColor,\n ...props\n };\n return hasCustomization ? (\n <>\n \n \n \n \n ) : (\n
        \n \n
        \n );\n};\n","import React from 'react';\nimport { ImageWithWrapper } from '@jotforminc/enterprise-components';\nimport { shape, string } from 'prop-types';\n\nconst TeamImageWithWrapper = ({ team, customClass }) => {\n return (\n \n );\n};\n\nTeamImageWithWrapper.propTypes = {\n team: shape({\n teamAvatarIconBgColor: string,\n teamAvatarURL: string,\n teamAvatarIcon: string,\n teamAvatarEmojiId: string,\n teamAvatarIconColor: string,\n teamAvatarIconSvgRef: string\n }),\n customClass: string\n};\n\nTeamImageWithWrapper.defaultProps = {\n team: {},\n customClass: ''\n};\n\nexport default TeamImageWithWrapper;\n","import React, { useMemo, useState } from 'react';\nimport { bool, shape, string } from 'prop-types';\nimport { IconChevronRight, IconFormCheckFilled } from '@jotforminc/svg-icons';\nimport RightPanel from '@jotforminc/right-panel';\nimport { safeJSONParse } from '@jotforminc/utils';\nimport Collapse from '@jotforminc/collapse';\nimport { t } from '@jotforminc/translation';\nimport '../styles/jfWorkflowPanel.scss';\nimport AvatarWithApprovalAction from './AvatarWithApprovalAction';\nimport { useWorkflow } from '../contexts';\nimport TeamImageWithWrapper from './TeamImageWithWrapper';\nimport { isTeamApproval } from '../utils/helper';\n\nconst getApproverTitle = (type, teamInfo = null) => {\n if (type === 'workflow_approval') {\n return 'Approvers';\n }\n if (type === 'workflow_approval_with_sign') {\n return 'Signers';\n }\n if (type === 'workflow_team_approval') {\n return teamInfo?.teamName || 'Team Approvals';\n }\n};\n\nconst APPROVAL_OPTIONS = {\n workflow_approval: {\n all: t('Require response from all'),\n first: t('Require response from one person'),\n amount: t('Require certain number of responses'),\n majority: t('Require response from majority')\n },\n workflow_approval_with_sign: {\n all: t('Require response from all'),\n first: t('Require response from one person'),\n amount: t('Require certain number of responses'),\n majority: t('Require response from majority')\n },\n workflow_team_approval: {\n all: t('Require response from all'),\n first: t('Require response from one person'),\n amount: t('Require certain number of responses'),\n majority: t('Require response from majority')\n },\n workflow_completion_text: ({ value, max }) => ({\n all: t('All responded'),\n first: t('One person responded'),\n amount: t(`${value} out of ${max} people responded`),\n majority: t('Majority responded'),\n escalated: t('Task escalated'),\n expired: t('Task expired'),\n taken_over: t('Task taken over'),\n auto_completed: t('Task automatically completed'),\n reassigned: t('Task reassigned')\n })\n};\n\nconst WORKFLOW_STATUS = {\n ACTIVE: 'Waiting',\n NOT_STARTED: 'Not Started',\n APPROVE: 'Approved',\n DENY: 'Denied',\n CANCELED: 'Canceled',\n COMPLETED: 'Completed',\n ERRORED: 'Errored',\n ESCALATED: 'Escalated',\n EXPIRED: 'Expired',\n TAKEN_OVER: 'Taken Over',\n AUTO_COMPLETED: 'Auto Completed',\n REASSIGNED: 'Reassigned'\n};\n\nconst WorkflowInformationPanel = props => {\n const {\n elementType,\n subType,\n approvalOptions,\n approverCount,\n status,\n updated_at: updatedAt,\n sentDate = null,\n customOutcomeStatus,\n subtasks,\n task: {\n team = null\n },\n cancelReason,\n teamProps = null\n } = props;\n\n const teamData = teamProps || team;\n const [visible, setVisible] = useState(false);\n const textType = safeJSONParse(approvalOptions, approvalOptions).option;\n const { formatDate } = useWorkflow();\n const { text: customText = null, color: customColor = null } = customOutcomeStatus;\n const outcomeCount = subtasks.filter(subtask => subtask.properties.outcomeInfo).length;\n const statusType = cancelReason || status;\n const teamApproval = useMemo(() => isTeamApproval(subType || elementType, teamData), [subType, elementType, teamData]);\n const showRightPanel = () => setVisible(true);\n const hideRightPanel = () => setVisible(false);\n\n const headerTitle = (\n
        \n
        \n { `${getApproverTitle(subType || elementType || t('Approvers'), teamData)} `}\n { subType !== 'workflow_team_approval' && !teamData && `(${approverCount}) `}\n
        \n {teamApproval && (\n
        \n {`${approverCount} members`}\n
        \n )}\n
        \n );\n\n const headerIcon = (\n
        \n {teamApproval ? : }\n
        \n );\n\n return (\n
        \n \n \n
        \n
        \n
        \n {`${t('Status')}`}\n
        \n \n {customText || WORKFLOW_STATUS[statusType]}\n
        \n
        \n \n
        \n \n \n {status !== 'ACTIVE' && (\n \n )}\n \n \n
        \n
        \n \n
        \n );\n};\n\nconst DetailRenderer = ({ title, text }) => {\n return (\n
        \n
        \n {title}\n
        \n
        \n {text}\n
        \n
        \n );\n};\n\nDetailRenderer.propTypes = {\n title: string.isRequired,\n text: string.isRequired\n};\n\nWorkflowInformationPanel.propTypes = {\n elementType: string,\n subType: string,\n approvalOptions: shape({}),\n approverCount: string,\n status: string,\n forTask: bool,\n task: shape({}),\n subtasks: shape({}),\n updated_at: string,\n sentDate: string,\n customOutcomeStatus: shape({}),\n cancelReason: string,\n teamProps: shape({})\n};\nWorkflowInformationPanel.defaultProps = {\n elementType: '',\n subType: '',\n approvalOptions: {},\n approverCount: '',\n status: '',\n forTask: false,\n task: {},\n subtasks: [],\n updated_at: '',\n sentDate: '',\n customOutcomeStatus: {},\n cancelReason: '',\n teamProps: null\n};\n\nexport default WorkflowInformationPanel;\n","import { arrayOf } from 'prop-types';\nimport React from 'react';\nimport AvatarGroupWithContact from './AvatarGroupWithContact';\nimport WorkflowInformationPanel from './WorkflowInformationPanel';\n\nconst AvatarGroupWithPanel = ({ items, ...informationProps }) => {\n return (\n \n \n \n );\n};\n\nexport default AvatarGroupWithPanel;\n\nAvatarGroupWithPanel.propTypes = {\n items: arrayOf({})\n};\n\nAvatarGroupWithPanel.defaultProps = {\n items: []\n};\n","import React from 'react';\nimport { number, shape, string } from 'prop-types';\nimport classNames from 'classnames';\nimport '../styles/jfAvatar.scss';\n\nconst ThreadAvatar = ({\n user: {\n name, email, avatarUrl = ''\n },\n color,\n className,\n assigneeEmail,\n maxCharShow\n}) => {\n const isDefaultAvatar = avatarUrl === '' || avatarUrl?.includes?.('Podo-Guest');\n const firstTwoLetterOfEmail = (name || email || assigneeEmail || '').slice(0, maxCharShow).toUpperCase();\n const backgroundImage = typeof avatarUrl === 'string' ? `url(\"${avatarUrl}\")` : undefined;\n const avatarF = typeof avatarUrl === 'function' ? avatarUrl() : undefined;\n\n return (\n avatarUrl || isDefaultAvatar || assigneeEmail ? (\n \n {avatarF}\n {isDefaultAvatar ? firstTwoLetterOfEmail : ''}\n
        \n ) : null\n );\n};\n\nThreadAvatar.propTypes = {\n user: shape({}).isRequired,\n color: string,\n className: string,\n assigneeEmail: string,\n maxCharShow: number\n};\n\nThreadAvatar.defaultProps = {\n color: '',\n className: '',\n assigneeEmail: '',\n maxCharShow: 2\n};\n\nexport default ThreadAvatar;\n","/* eslint-disable no-constant-condition */\n/* eslint-disable complexity */\nimport React, { useCallback, useMemo, useRef } from 'react';\nimport { t } from '@jotforminc/translation';\nimport {\n rgba, lighten, readableColor, darken\n} from 'polished';\nimport {\n arrayOf, bool, func, shape\n} from 'prop-types';\nimport classnames from 'classnames';\nimport styled, { css } from 'styled-components';\nimport { Hooks } from '@jotforminc/uikit';\nimport Tethered from 'react-tether';\nimport { isTeamApproval } from '../utils/helper';\nimport EntryTypes, { entryFiltererGenerator, convertTasks, statusTexts } from '../SubmissionThread/EntryTypes';\nimport ThreadAvatar from './ThreadAvatar';\n\nimport '../styles/_jfWorkflowStatus.scss';\nimport '../styles/_jfMenu.scss';\nimport TeamImageWithWrapper from './TeamImageWithWrapper';\n\nexport const WORKFLOW_STATUS = {\n ACTIVE: 'In Progress',\n NOT_STARTED: 'Not Started',\n APPROVE: 'Approved',\n DENY: 'Denied',\n CANCELED: 'Canceled',\n COMPLETED: 'Completed',\n ERRORED: 'Error'\n};\n\nconst TEAM_APPROVAL_STATUS_TEXT = {\n APPROVE: 'Approved',\n DENY: 'Denied',\n EXPIRE: 'Expired',\n AUTO: 'Automatically Finished',\n ESCALATE: 'Escalated',\n REASSIGN: 'Reassigned',\n CANCEL: 'Canceled',\n CUSTOM_EMAIL: 'Email Sent',\n REPLY: 'Replied',\n RESTART: 'Restarted',\n TASK: 'Waiting',\n REQUEST_MORE_INFO: 'Requested more info',\n EDIT_SUBMISSION: 'Edit submission',\n ASSIGN_FORM_SUBMISSION: 'Form Submitted',\n ASSIGN_FORM_NOTIFICATION_MAIL: 'Form Assigned',\n MULTIPLE_APPROVAL_MAIL: 'Team Approval'\n};\n\nconst { useClickOutsideState } = Hooks;\n\nconst entryFilterer = entryFiltererGenerator('workflow');\n\nconst StatusPill = styled.div`\n${({ color }) => {\n if (!color) return null;\n\n return css`\n color: ${color};\n background-color: ${rgba(color, 0.2)};\n\n &:hover {\n border: 1px solid ${color};\n box-shadow: 0 0 0 1px ${rgba(color, 0.2)};\n }\n `;\n }\n}\n`;\n\nconst StatusText = styled.div`\n${({ color }) => {\n const statusColor = color || '#5E74E6';\n const backgroundColor = rgba(statusColor, 0.20);\n const textColor = readableColor(backgroundColor, lighten(0.2, statusColor), statusColor, false);\n const borderColor = readableColor(backgroundColor, color, darken(0.2, statusColor), false);\n\n return css`\n color: ${textColor};\n border-color: ${borderColor};\n background-color: ${backgroundColor};\n `;\n }\n}\n`;\n\nconst WorkflowStatus = ({\n isFormOwner,\n showTaskStatus,\n submission: {\n id: submissionID,\n tasks = null,\n workflowStatus,\n workflowStatusDetails: {\n showOutcome = false,\n buttonColor: color = ''\n } = {}\n },\n onClick,\n showPopover,\n thread,\n setSubmission\n}) => {\n const isCustomOutcome = showOutcome && !!color;\n\n const renderPill = () => {\n const list = useMemo(() => {\n const tasksConverted = tasks?.filter(task => task.taskName !== 'Merge Point')?.map(convertTasks);\n const entriesFiltered = thread?.filter(entryFilterer);\n\n return [].concat(tasksConverted, entriesFiltered).filter(e => !!e);\n }, [thread, tasks]);\n\n const status = WORKFLOW_STATUS[workflowStatus.toUpperCase()] || workflowStatus;\n const className = workflowStatus?.toLowerCase();\n\n const wrapperRef = useRef();\n const popoverRef = useRef();\n\n const [isPopoverVisible, setPopoverVisibility] = useClickOutsideState(false, [wrapperRef, popoverRef]);\n\n const shouldListRender = showPopover && list?.length;\n\n const handleClick = useCallback(async e => {\n if (typeof setSubmission === 'function') await setSubmission(e);\n if (typeof onClick === 'function') onClick(e);\n if (shouldListRender) setPopoverVisibility(!isPopoverVisible);\n }, [onClick, isPopoverVisible, shouldListRender]);\n\n return (\n \n e.stopPropagation()}\n onMouseDown={handleClick}\n aria-hidden=\"true\"\n color={isCustomOutcome ? color : null}\n >\n {isCustomOutcome ? status : t(status)}\n \n {shouldListRender ? (\n \n \n \n {`Status: ${status}`}\n
        \n
        \n
        \n {list?.map(({\n actionType, actionDetails, user: userRaw\n }, index) => {\n const entryType = actionType.toLowerCase();\n const EntryComp = EntryTypes[entryType];\n const assigneeUser = actionDetails?.assigneeUser;\n const assigneeEmail = actionDetails?.assigneeEmail;\n if (!EntryComp) return null;\n\n const user = EntryComp?.user ? EntryComp.user(actionDetails, userRaw) : userRaw;\n const actionSubType = actionDetails?.type?.toLowerCase();\n const isCustomAction = actionType === 'APPROVE_REJECT' && actionSubType === 'custom';\n const getAssignFormText = actionType === 'MAIL' && actionDetails?.reason === 'ASSIGN_FORM_NOTIFICATION_MAIL' ? actionDetails?.reason : undefined;\n const userName = user?.name || user?.email || assigneeUser?.name || assigneeEmail;\n const statusText = actionDetails?.team\n ? TEAM_APPROVAL_STATUS_TEXT[(actionDetails?.text || getAssignFormText || actionSubType || actionType)?.toUpperCase()] || actionDetails?.text\n : statusTexts[(actionDetails?.text || getAssignFormText || actionSubType || actionType)?.toUpperCase()] || actionDetails?.text;\n const isTeamApprovalAction = isTeamApproval(actionDetails?.subType, actionDetails?.team) && user?.team;\n // if (!user) return null;\n\n return (\n \n
        \n {index + 1}\n .\n
        \n { user && !isTeamApprovalAction ? (\n
        \n \n
        \n ) : null }\n {\n isTeamApprovalAction && (\n
        \n \n
        \n )\n }\n
        \n {userName ?
        {userName}
        : null}\n
        \n {/* eslint-disable-next-line no-nested-ternary */}\n {EntryComp.PopoverDescription\n ? \n : (false && user?.name && user?.email ? user?.email : null) }\n
        \n
        \n
        \n \n {statusText}\n \n
        \n
        \n );\n })}\n
        \n
        \n\n ) : null}\n \n );\n };\n\n return workflowStatus && WORKFLOW_STATUS[workflowStatus.toUpperCase()] !== WORKFLOW_STATUS.NOT_STARTED && (isFormOwner || showTaskStatus)\n ? renderPill()\n : null;\n};\n\nWorkflowStatus.defaultProps = {\n showPopover: true,\n onClick: f => f,\n setSubmission: f => f,\n thread: null\n};\n\nWorkflowStatus.propTypes = {\n isFormOwner: bool.isRequired,\n showTaskStatus: bool.isRequired,\n submission: shape({}).isRequired,\n thread: arrayOf(shape()),\n showPopover: bool,\n setSubmission: null,\n onClick: func\n};\n\nexport default WorkflowStatus;\n","import React, {\n Children, cloneElement, useEffect, useRef\n} from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport PropTypes from 'prop-types';\nimport throttle from 'lodash/throttle';\nimport { Hooks, Popover } from '@jotforminc/uikit';\n\nimport './PortalTooltip.scss';\n\n// TODO: Create common function\nconst isTouchDevice = () => (\n ('ontouchstart' in window) || (window?.navigator?.maxTouchPoints > 0) || (window?.navigator?.msMaxTouchPoints > 0)\n);\n\n/**\n * Tooltip Props\n * @typedef {Object} TooltipProps\n * @property {string} [bgColor='bg-gray-800'] - Set the Tooltip's background colour. Default = 'bg-gray-800'.\n * @property {string} [className=''] - Attach additional classes to the tooltip. Default = ''.\n * @property {React.ReactElement} [label=undefined] - The tooltip text to be displayed. If no label is provided, it will render just the children with no tooltip. Default = undefined.\n * @property {'top'|'bottom'|'left'|'right'} [placement='bottom'] - position of the tooltip. Default = 'bottom'.\n * @property {number} [tooltipDistance=10] - Number of pixels of whitespace between the tooltip and target element. Default = 10.\n * @property {boolean} [touchDisabled=false] - Prevent touch events displaying the tooltip. Default = False.\n*/\n/**\n * Tooltip Component.\n * @type {React.FC}\n * @returns {React.ReactElement}\n * @desc Tooltip that uses a React Portal. This allows the Tooltip to be displayed inside elements with overflow auto.\n * It also allows us to dynamically set the elements position based on its context. For example, positioning it above\n * an element if there's no room on the page t display it below.\n */\nexport const PortalTooltip = ({\n children, className, bgColor, label, placement, tooltipDistance, touchDisabled\n}) => {\n // Don't render a tooltip if a label wasn't passed, or if we've disabled touch on mobile\n if (!label || (isTouchDevice() && touchDisabled)) return <>{children};\n\n const targetRef = useRef(null);\n const tooltipRef = useRef(null);\n const [isVisible, setIsVisible] = Hooks.useClickOutsideState(false, [targetRef]);\n\n useEffect(() => {\n // These events only need to be fired if the tooltip is currently visible\n if (isVisible) {\n const scrollHandler = throttle(() => setIsVisible(false), 100);\n\n window.addEventListener(isTouchDevice() ? 'touchmove' : 'wheel', scrollHandler);\n\n return () => {\n window.removeEventListener(isTouchDevice() ? 'touchmove' : 'wheel', scrollHandler);\n };\n }\n }, [isVisible]);\n\n // Ensure tooltip has only one child node\n const child = Children.only(children);\n\n // Clone the passed child element, so we can apply handlers and a ref to the target\n const trigger = cloneElement(\n child,\n {\n ...child.props,\n ref: targetRef,\n // We need to check for touch device to prevent synthetic mouse events firing, causing the tooltip to open/close unexpectedly\n ...(isTouchDevice() ? {\n onTouchStart: () => setIsVisible(prevState => !prevState)\n } : {\n onMouseEnter: () => setIsVisible(true),\n onMouseLeave: () => setIsVisible(false)\n })\n }\n );\n\n return (\n <>\n {/* Passed child element that triggers tooltip visibility */}\n {trigger}\n\n {/* The tooltip element */}\n \n {status => (\n \n {label}\n
        \n
        \n
        \n \n )}\n \n \n );\n};\n\nPortalTooltip.propTypes = {\n children: PropTypes.node.isRequired,\n className: PropTypes.string,\n bgColor: PropTypes.string,\n label: PropTypes.oneOfType([PropTypes.node, PropTypes.string, PropTypes.number]),\n placement: PropTypes.oneOf(['left', 'right', 'top', 'bottom']),\n tooltipDistance: PropTypes.number,\n touchDisabled: PropTypes.bool\n};\n\nPortalTooltip.defaultProps = {\n className: '',\n bgColor: 'bg-gray-800',\n label: undefined,\n placement: 'bottom',\n tooltipDistance: 10,\n touchDisabled: false\n};\n","import React, { forwardRef } from 'react';\nimport { string, shape, node } from 'prop-types';\nimport { Tooltip } from '@jotforminc/tooltip';\n\nimport SVG from '../SVG';\nimport './GhostButton.scss';\n\nimport { classNames } from '../../utils';\n\nconst GhostButton = forwardRef(({\n icon,\n className,\n svgProps,\n tooltipProps,\n tooltip,\n children,\n ...remainingProps\n}, ref) => (\n
        \n \n {children &&
        {children}
        }\n {tooltip && (\n \n )}\n
        \n));\n\nGhostButton.propTypes = {\n children: node,\n className: string,\n icon: string,\n svgProps: shape({}),\n tooltipProps: shape({}),\n tooltip: string\n};\n\nGhostButton.defaultProps = {\n children: null,\n className: null,\n icon: '',\n svgProps: {},\n tooltipProps: {},\n tooltip: null\n};\n\nexport default GhostButton;\n","import React, { useState, useEffect } from 'react';\nimport {\n string,\n func,\n arrayOf,\n oneOfType,\n bool\n} from 'prop-types';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport { TwoButtonPopup } from '@jotforminc/two-button-popup';\nimport { IconTrashExclamationFilled } from '@jotforminc/svg-icons';\nimport keyboardJS from '../../vendor/keyboard';\n\nimport SVG from '../SVG';\nimport GhostButton from '../GhostButton';\n\nimport { translatedProps } from '../../constants/proptypes';\nimport { classNames, isEditingText } from '../../utils';\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\n\nconst PurgeButton = ({\n eventTarget,\n onPurge,\n cancelText,\n buttonText,\n icon,\n saveText,\n dialogHeader,\n dialogTitle,\n dialogSubtitle,\n useGhostButton,\n enableDeleteKey,\n disableButtonIcon,\n disableDeleteConfirmation,\n disabled,\n className,\n t,\n purgeAll,\n onDiscard,\n onClose\n}) => {\n const [isWarningVisible, setWarningVisibility] = useState(false);\n const containerDom = global.document.getElementById('modal-container');\n const onPurgeClick = () => {\n const action = purgeAll ? 'EmptyTrashNow-AllTrashedSubmissions' : 'Purge-SelectedSubmissions';\n WatchmanRecorder.recordEvent(action, eventTarget);\n\n if (disableDeleteConfirmation) {\n return onPurge();\n }\n\n setWarningVisibility(true);\n };\n\n const onKeyboardDelete = e => {\n if (!isEditingText()) {\n e.preventDefault();\n onPurgeClick();\n }\n };\n\n const onWarningClose = () => {\n setWarningVisibility(false);\n onClose();\n };\n\n const onPurgeSubmit = () => {\n onWarningClose();\n onPurge();\n };\n\n useEffect(() => {\n if (enableDeleteKey) {\n keyboardJS.bind('delete', onKeyboardDelete);\n return () => keyboardJS.unbind('delete', onKeyboardDelete);\n }\n }, [enableDeleteKey]);\n\n return (\n <>\n {!useGhostButton ? (\n }\n onClick={onPurgeClick}\n disabled={disabled}\n >\n {buttonText || t.PURGE}\n \n ) : (\n \n )}\n {isWarningVisible && (\n \n
        \n \n
        \n
        \n {dialogHeader || t.DELETE_SUBMISSION}\n
        \n

        \n {dialogTitle || t.ARE_YOU_SURE_TO_PERMANENTLY_DELETE_SUBMISSIONS}\n

        \n

        \n {dialogSubtitle || [t.CURRENT_SUBMISSION_WILL_BE_DELETED_PERMANENTLY, t.THIS_ACTION_CANNOT_BE, t.UNDONE]}\n

        \n
        \n )}\n className=\"dialog warning forDelete withIcon forDiscard\"\n onClose={onWarningClose}\n onSave={onPurgeSubmit}\n onDiscard={onDiscard}\n modalContainer={containerDom}\n saveText={saveText || t.PURGE}\n cancelText={cancelText || t.CANCEL}\n showClose={true}\n />\n )}\n \n );\n};\n\nPurgeButton.propTypes = {\n onPurge: func.isRequired,\n eventTarget: string,\n buttonText: string,\n saveText: string,\n icon: string,\n cancelText: string,\n dialogHeader: string,\n dialogTitle: string,\n disabled: oneOfType([string, bool]),\n dialogSubtitle: arrayOf(string),\n disableButtonIcon: bool,\n disableDeleteConfirmation: bool,\n enableDeleteKey: bool,\n useGhostButton: bool,\n purgeAll: bool,\n onDiscard: func,\n onClose: func,\n ...translatedProps\n};\n\nPurgeButton.defaultProps = {\n eventTarget: 'toolbar',\n buttonText: '',\n saveText: '',\n cancelText: '',\n dialogHeader: '',\n icon: 'IconTrashFilled',\n dialogTitle: '',\n dialogSubtitle: null,\n disableButtonIcon: false,\n disableDeleteConfirmation: false,\n enableDeleteKey: false,\n useGhostButton: false,\n disabled: '',\n purgeAll: false,\n onDiscard: f => f,\n onClose: f => f\n};\n\nexport default PurgeButton;\n","import React, { memo } from 'react';\nimport {\n string, bool, node, shape\n} from 'prop-types';\n\nimport { classNames } from '../../utils';\n\nimport { translatedProps } from '../../constants/proptypes';\n\nconst SubmissionHeader = memo(({\n title,\n subtitle,\n className,\n t,\n isDraft,\n noteCount,\n activeTab,\n RequestDeleteTooltip,\n subtitleVisible,\n isAllSentbox,\n answerTag,\n myPreviousOrder,\n isForSubmissionPanel\n}) => {\n const showDraftTitle = isDraft && activeTab === 'sentbox';\n return (\n \n <>\n
        \n {!isForSubmissionPanel && (\n
        \n {showDraftTitle &&
        {t.DRAFT}
        }\n {React.isValidElement(title) || typeof title === 'string' ? title : ''}\n {(activeTab === 'inbox' || activeTab === 'trash' || activeTab === 'sentbox') && RequestDeleteTooltip}\n {noteCount > 0 && {noteCount}}\n
        \n )}\n
        \n {subtitleVisible && !isAllSentbox && !isForSubmissionPanel && (\n
        \n
        \n { subtitle }\n
        \n
        \n )}\n {!isForSubmissionPanel && myPreviousOrder && (\n
        \n \n {`${myPreviousOrder.count} `}\n { Number(myPreviousOrder.count) > 1 ? t.ITEMS : t.ITEM}\n {', Total: '}\n {myPreviousOrder.total}\n \n
        \n )}\n {answerTag && isAllSentbox && (answerTag)}\n \n
        \n );\n});\n\nSubmissionHeader.propTypes = {\n className: string,\n isDraft: bool,\n RequestDeleteTooltip: node,\n subtitleVisible: bool,\n myPreviousOrder: shape({\n count: string,\n total: string\n }),\n ...translatedProps\n};\n\nSubmissionHeader.defaultProps = {\n className: '',\n isDraft: false,\n RequestDeleteTooltip: null,\n subtitleVisible: true,\n myPreviousOrder: null\n};\n\nexport default SubmissionHeader;\n","import React, { Suspense } from 'react';\nimport { safeLazy } from '@jotforminc/safe-lazy-import';\n\nconst Preview = safeLazy(() => import(/* webpackChunkName: \"CommonPreview\" */ './CommonPreview'));\n\nconst LazyPreview = ({ ...props }) => (\n loading}>\n \n \n);\n\nexport default LazyPreview;\n","export const IMAGE_ERROR_FALLBACK = 'https://cdn.jotfor.ms/resources/assets/icon/jotform-logomark-white-400x400.png';\n","/* istanbul ignore file */\n\nimport React, { useState } from 'react';\nimport {\n shape, number, string, bool, arrayOf\n} from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { Unsupported, downloadURI } from '@jotforminc/preview';\nimport { IconArrowDownToLine } from '@jotforminc/svg-icons';\nimport LazyPreview from './LazyPreview/LazyPreview';\n// import FileUploadIcon from './FileUploadIcon';\nimport { removeExtension } from '../utils';\nimport { IMAGE_ERROR_FALLBACK } from '../constants';\n\nimport '../styles/index.scss';\n\nconst File = ({\n files,\n file,\n index,\n isEmail,\n fileSize,\n isDownloadButtonShow,\n iconName\n}) => {\n const {\n fileUrl, fileName, extension, isImageFile\n } = file;\n const [isPreviewOpen, handlePreviewVisibility] = useState(false);\n\n const updatePreviewVisibility = state => {\n handlePreviewVisibility(state);\n\n if (state) {\n global.document.body.classList.add('jfInbox--isPreview');\n } else {\n global.document.body.classList.remove('jfInbox--isPreview');\n }\n };\n\n const downloadFile = async _fileUrl => {\n if (!_fileUrl) return;\n\n if (!isImageFile) {\n downloadURI({ fileUrl: _fileUrl, fileName });\n return;\n }\n\n // problematic image urls converted to blob\n try {\n const replacedFileUrl = _fileUrl.replace('www.jotform.com', window.location.host);\n const response = await fetch(replacedFileUrl);\n const blobFile = await response.blob();\n const blobFileUrl = URL.createObjectURL(blobFile);\n\n downloadURI({ fileUrl: blobFileUrl, fileName });\n\n window.URL.revokeObjectURL(blobFileUrl);\n } catch (err) {\n console.log(err);\n }\n };\n\n return (\n
        \n updatePreviewVisibility(true)}\n onKeyDown={null}\n data-index={index}\n >\n {isImageFile\n ? (\n {\n e.target.onerror = null;\n e.target.src = IMAGE_ERROR_FALLBACK;\n }}\n />\n )\n : (\n <>\n \n \n )}\n
        \n
        \n \n \n {removeExtension(fileName)}\n \n .\n {extension.toLowerCase()}\n \n \n {fileSize && (\n \n {fileSize}\n \n )}\n
        \n {!isEmail && isDownloadButtonShow && (\n
        \n downloadFile(fileUrl)}\n >\n \n {t('Download')}\n \n
        \n )}\n {isPreviewOpen && files && (\n updatePreviewVisibility(false)}\n isPreviewContextMenuOpened={false}\n togglePreviewContextMenu={f => f}\n />\n )}\n
        \n
        \n );\n};\n\nFile.propTypes = {\n files: arrayOf(shape({})).isRequired,\n file: shape({\n fileName: string,\n fileURL: string,\n isImageFile: bool,\n extension: string\n }).isRequired,\n index: number,\n isEmail: bool,\n fileSize: string,\n isDownloadButtonShow: bool,\n iconName: string\n};\n\nFile.defaultProps = {\n index: 0,\n isEmail: false,\n fileSize: null,\n isDownloadButtonShow: true,\n iconName: ''\n};\n\nexport default File;\n","/* istanbul ignore file */\n\nimport React, { useEffect, useState } from 'react';\nimport {\n string,\n oneOfType,\n arrayOf,\n shape,\n bool\n} from 'prop-types';\n\nimport { FileUploadList, FileUtils } from '@jotforminc/upload-fields';\nimport { formatBytes } from '@jotforminc/utils';\nimport { getUploadFields } from '../../api';\nimport { classNames } from '../../utils';\n\nconst FileUpload = ({\n answer, text, isEmail, formID, submissionID\n}) => {\n const files = FileUtils.prepareFiles(answer);\n const [fileSizes, setFileSizes] = useState([]);\n\n useEffect(() => {\n if (!formID || !submissionID) return;\n try {\n getUploadFields({ formID: formID, submissionID: submissionID }).then(uploadFields => {\n const sizes = uploadFields || [];\n setFileSizes(sizes);\n }).catch(() => {\n setFileSizes([]);\n });\n } catch {\n setFileSizes([]);\n }\n }, [formID, submissionID]);\n\n const getFileSize = fileName => {\n const el = fileSizes?.filter(fileSize => {\n return fileSize.name === fileName;\n });\n\n if (!el) return null;\n const { 0: sizeEl } = el;\n return sizeEl ? formatBytes(sizeEl.size) : null;\n };\n\n return (\n
        \n
        \n
        {text}
        \n
        \n
        \n
        \n {files.map((file, index) => {\n return (\n \n );\n })}\n
        \n
        \n
        \n );\n};\n\nFileUpload.propTypes = {\n text: string,\n answer: oneOfType([arrayOf(string), shape({})]),\n isEmail: bool,\n formID: string,\n submissionID: string\n};\n\nFileUpload.defaultProps = {\n text: '',\n answer: [''],\n isEmail: false,\n formID: '',\n submissionID: ''\n};\n\nexport default FileUpload;\n","import { Fields } from '@jotforminc/answer-fields';\n\nimport FileUpload from '../components/FileUpload';\nimport { normalizeFieldName } from '.';\n\n/**\n * Returns appropriate answer fields component to be used in render\n */\nexport const getAnswerField = (questionType = '') => {\n if (questionType === 'control_head') {\n return Fields[normalizeFieldName('control_text')];\n }\n\n const Types = { ...Fields, Fileupload: FileUpload };\n return questionType ? Types[normalizeFieldName(questionType)] : null;\n};\n","import React, { Component } from 'react';\nimport {\n string,\n bool,\n func,\n node,\n elementType,\n oneOfType\n} from 'prop-types';\n\nimport '../styles/style.scss';\n\nexport class Checkbox extends Component {\n get classNames() {\n const {\n className,\n checked,\n size,\n backgroundColor\n } = this.props;\n\n return [\n 'jfCheckbox-wrapper',\n className,\n checked ? 'isChecked' : null,\n size ? 'hasSize' : null,\n backgroundColor === 'transparent' ? 'isTransparent' : null\n ].filter(a => a).join(' ');\n }\n\n render() {\n const {\n tabIndex,\n name,\n icon,\n checked,\n indeterminate,\n onChange,\n onClick,\n backgroundColor,\n borderColor,\n disabled,\n dataId,\n size,\n ariaLabel\n } = this.props;\n\n return (\n \n {\n input ? input.indeterminate = indeterminate : null; // eslint-disable-line\n }}\n aria-label={ariaLabel}\n />\n {icon ? (\n
        {icon}
        \n ) : (\n
        \n
        \n
        \n )}\n
        \n );\n }\n}\n\nCheckbox.propTypes = {\n name: string,\n className: string,\n icon: oneOfType([elementType, node]),\n indeterminate: bool,\n checked: bool,\n onChange: func,\n onClick: func,\n backgroundColor: string,\n borderColor: string,\n disabled: bool,\n dataId: string,\n tabIndex: string,\n size: string,\n ariaLabel: string\n};\n\nCheckbox.defaultProps = {\n name: '',\n className: '',\n icon: null,\n indeterminate: false,\n checked: false,\n onChange: f => f,\n onClick: f => f,\n backgroundColor: null,\n borderColor: null,\n disabled: false,\n dataId: null,\n tabIndex: '-1',\n size: null,\n ariaLabel: ''\n};\n","import React, { Component } from 'react';\nimport {\n string,\n bool,\n func,\n node,\n oneOfType,\n elementType,\n shape\n} from 'prop-types';\n\nimport { Checkbox } from './Checkbox';\n\nclass CheckboxItem extends Component {\n constructor(props) {\n super(props);\n this.name = props.name || `checkbox-${Math.random().toString(36).substr(2, 8)}`;\n }\n\n get classNames() {\n const {\n className,\n checked,\n isReverse,\n backgroundColor\n } = this.props;\n\n return [\n 'jfCheckbox-item',\n className,\n checked ? 'isChecked' : null,\n isReverse ? 'isReverse' : null,\n backgroundColor === 'transparent' ? 'isTransparent' : null\n ].filter(a => a).join(' ');\n }\n\n render() {\n const {\n children,\n indeterminate,\n checked,\n onChange,\n onClick,\n backgroundColor,\n borderColor,\n icon,\n disabled,\n dataId,\n tabIndex,\n size,\n forwardedRef, // eslint-disable-line react/prop-types\n ariaLabel,\n labelProps = {}\n } = this.props;\n\n return (\n \n \n
        {children}
        \n \n );\n }\n}\n\nCheckboxItem.propTypes = {\n children: oneOfType([node, elementType]),\n icon: oneOfType([node, elementType]),\n name: string,\n indeterminate: bool,\n checked: bool,\n onChange: func,\n onClick: func,\n className: string,\n isReverse: bool,\n backgroundColor: string,\n borderColor: string,\n disabled: bool,\n dataId: string,\n tabIndex: string,\n size: string,\n ariaLabel: string,\n labelProps: shape({})\n};\n\nCheckboxItem.defaultProps = {\n children: null,\n icon: null,\n name: null,\n indeterminate: false,\n checked: false,\n onChange: f => f,\n onClick: f => f,\n className: null,\n isReverse: false,\n backgroundColor: null,\n borderColor: null,\n disabled: false,\n dataId: null,\n tabIndex: null,\n size: null,\n ariaLabel: '',\n labelProps: {}\n};\n\nexport default React.forwardRef((props, ref) => );\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport {\n string,\n oneOfType,\n arrayOf,\n func,\n node,\n bool,\n shape\n} from 'prop-types';\nimport { CheckboxItem } from '@jotforminc/checkbox';\n\nimport { withInboxEnhancer } from '../../hocs/InboxEnhancer';\nimport { updateQuestion } from '../../actions';\nimport { formSelector } from '../../selectors';\n\nconst InlineWrapper = ({\n children, formId, qid, updateQData, fullContent, showSublabels, t\n}) => (\n <>\n
        \n
        \n \n
        \n {fullContent === 'Yes' && (\n updateQData(formId, qid, { showSublabels: e.target.checked })}\n checked={showSublabels}\n >\n {t.SHOW_SUBLABELS}\n \n )}\n
        \n {children}\n \n);\n\nInlineWrapper.propTypes = {\n children: oneOfType([\n arrayOf(node),\n node\n ]).isRequired,\n fullContent: string,\n showSublabels: bool,\n qid: string.isRequired,\n formId: string.isRequired,\n updateQData: func.isRequired,\n t: shape({}).isRequired\n};\n\nInlineWrapper.defaultProps = {\n fullContent: 'No',\n showSublabels: true\n};\n\nconst mapStateToProps = stateProps => ({\n formId: formSelector(stateProps).id\n});\n\nconst mapDispatchToProps = {\n updateQData: updateQuestion\n};\n\nconst enhance = withInboxEnhancer('fillInTheBlanks', connect(mapStateToProps, mapDispatchToProps));\n\nexport default enhance(InlineWrapper);\n","import React, { useRef, useState, useMemo } from 'react';\nimport {\n bool, func, string, shape\n} from 'prop-types';\nimport { DEFAULT_DATE_FORMAT } from '@jotforminc/constants';\nimport classNames from 'classnames';\n\nconst Entry = props => {\n const {\n isExpanded, id, EntryComp, entryType, user, timestamp, actionDetails, dateFormat, userTimeZone, LayoutComp, entryLayout, activeTab, actionType\n } = props;\n const [entryState, setEntryState] = useState(undefined);\n const [attachmentState, setAttachmentState] = useState(undefined);\n const [isThreadExpanded, setIsThreadExpanded] = useState(false);\n const layoutRef = useRef();\n\n const compUser = EntryComp.user ? EntryComp.user(actionDetails, user) : null;\n const name = useMemo(() => {\n switch (true) {\n case Boolean(compUser?.name):\n return compUser.name;\n case Boolean(user.name):\n return user.name;\n case Boolean(user.username):\n return user.username;\n case Boolean(user.email):\n return user.email;\n case Boolean(actionDetails?.assigneeUser?.name):\n return actionDetails.assigneeUser.name;\n case Boolean(actionDetails?.assigneeUser?.assigneeEmail):\n return actionDetails.assigneeUser.assigneeEmail;\n case Boolean(actionDetails?.assigneeEmail):\n return actionDetails.assigneeEmail;\n case entryType === 'edit_submission':\n return 'User';\n case entryType && entryType === 'reassign' && Boolean(actionDetails?.previousAssigneeEmail) && Boolean(actionDetails?.newAssigneeUser):\n return actionDetails.previousAssigneeEmail;\n default:\n return '';\n }\n }, [compUser, user, actionDetails]);\n\n const isSystem = compUser?.isSystem;\n\n const avatarUrl = compUser\n ? compUser.avatarUrl\n : (user.avatarUrl || `https://ui-avatars.com/api/?name=${global.encodeURI(name)}`);\n\n const {\n actionDetails: {\n type = '', parentType, parentID\n } = {}\n } = props;\n const typeClass = type.toLowerCase();\n\n const additionalProps = {\n name,\n timestamp,\n setExpanded: val => layoutRef.current?.setExpanded(val),\n entryState,\n isThreadExpanded,\n setEntryState,\n attachmentState,\n setAttachmentState,\n openSubThread: () => layoutRef.current?.setSubThreadExpanded(true),\n entryLayout,\n parentID\n };\n\n const entryID = `entry_${id || actionDetails.id}`;\n\n return (\n : null,\n status: EntryComp.Status ? : null,\n context: EntryComp.Context ? : null,\n timestamp,\n email: user?.email,\n color: compUser?.color,\n dateFormat: dateFormat || DEFAULT_DATE_FORMAT,\n userTimeZone,\n team: compUser?.team\n }}\n AttachComp={EntryComp.Attachment ? : null}\n // eslint-disable-next-line react/no-children-prop\n children={typeof EntryComp === 'function' ? : null}\n ref={layoutRef}\n activeTab={activeTab}\n />\n );\n};\n\nEntry.propTypes = {\n isExpanded: bool,\n changeVisibility: func.isRequired,\n actionType: string.isRequired,\n user: shape({}).isRequired,\n timestamp: string.isRequired,\n actionDetails: shape({}),\n id: string,\n entryType: string.isRequired,\n LayoutComp: shape({}).isRequired,\n EntryComp: shape({}).isRequired,\n dateFormat: string.isRequired,\n userTimeZone: string.isRequired,\n entryLayout: string,\n activeTab: string\n};\n\nEntry.defaultProps = {\n isExpanded: false,\n actionDetails: null,\n id: false,\n entryLayout: 'EntryLayout',\n activeTab: ''\n};\n\nexport default Entry;\n","import React, { useState } from 'react';\nimport {\n arrayOf, shape, string, bool, func\n} from 'prop-types';\nimport { usePermissions } from '@jotforminc/permissions';\n\n// eslint-disable-next-line import/no-cycle\nimport SubmissionThread from '.';\nimport { useThread } from '../contexts';\n\nconst SubThread = ({\n parentID,\n parentType,\n entryLayout,\n entries,\n threadVisible,\n editorVisible,\n setExpanded,\n renderedFrom,\n activeTab\n}) => {\n const { NoteEditor, subThreads, actionHandler } = useThread();\n const permissions = usePermissions();\n\n const [showCommentButtons, setShowCommentButtons] = useState(false);\n if (!subThreads) return null;\n\n const onCancel = () => {\n if (!entries || entries?.length === 0) {\n setExpanded(false);\n }\n };\n\n return (\n <>\n \n {NoteEditor && editorVisible && permissions?.editNotes ? (\n setTimeout(() => setShowCommentButtons(false), 25)}\n onFocus={() => setShowCommentButtons(true)}\n onCancel={onCancel}\n placeholder={activeTab === 'sentbox' ? 'Write a message.' : 'Reply. Use @ to mention.'}\n afterSave={() => actionHandler('click', `Comment-Reply ${renderedFrom === 'inline' ? 'inline' : 'entry'} `)}\n buttonTexts={{ save: 'Reply' }}\n editorType=\"subThread\"\n />\n ) : null}\n \n );\n};\n\nSubThread.propTypes = {\n parentID: string.isRequired,\n parentType: string.isRequired,\n entries: arrayOf(shape({})).isRequired,\n threadVisible: bool.isRequired,\n editorVisible: bool.isRequired,\n entryLayout: string,\n setExpanded: func,\n renderedFrom: string,\n activeTab: string\n};\n\nSubThread.defaultProps = {\n entryLayout: 'EntryLayout',\n setExpanded: f => f,\n renderedFrom: '',\n activeTab: ''\n};\n\nexport default SubThread;\n","import { useMemo } from 'react';\nimport { useThread } from '../contexts';\n\nconst useSubThread = ({ parentID, parentType }) => {\n const { data: { thread: globalEntries } = {} } = useThread();\n\n const entries = useMemo(() => (\n globalEntries\n ? globalEntries.filter(entry => entry?.actionDetails && entry.actionDetails.parentID === parentID && entry.actionDetails.parentType === parentType)\n : []\n ), [globalEntries, parentID, parentType]);\n\n const users = useMemo(() => (\n Object.values(\n entries.reduce((acc, { user }) => {\n acc[user.email || user.username] = user;\n return acc;\n }, { })\n )\n ), [entries]);\n\n return { users, entries };\n};\n\nexport { useSubThread };\n","/* eslint-disable max-len */\nimport React from 'react';\nimport styled from 'styled-components';\nimport classNames from 'classnames';\nimport { rgba } from 'polished';\nimport {\n arrayOf, shape, string, func, bool\n} from 'prop-types';\n\nimport { useThread } from '../contexts';\nimport ThreadAvatar from '../components/ThreadAvatar';\n\nconst Avatar = styled.img`\n width: 20px;\n height: 20px;\n border-radius: 50%;\n position: relative;\n z-index: 1;\n transition: margin-left 300ms cubic-bezier(.79,0,.15,1);\n\n &:hover {\n z-index: 2;\n }\n`;\n\nconst Text = styled.span``;\n\nconst Toggle = styled.div`\n display: inline-flex;\n align-items: center;\n padding: 3px 6px;\n margin: -3px -6px;\n border-radius: 4px;\n cursor: pointer;\n\n ${Text} {\n color: #6A6E8F;\n font-size: 13px;\n line-height: 20px;\n margin-left: 6px;\n }\n\n ${({ expanded }) => (expanded ? '&,' : '')}\n &:hover {\n background-color: ${rgba('#D5DAE8', 0.40)};\n\n ${Text} {\n color: #121C48;\n }\n\n &::after{\n content:'';\n background-image: url(\"data:image/svg+xml,%3Csvg width='8' height='5' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M6.686 1.05L4 3.558 1.316 1.05a.188.188 0 00-.26.27L3.87 3.95a.189.189 0 00.256 0L6.94 1.324a.189.189 0 00.005-.27.187.187 0 00-.26-.003z' fill='%232B3245' stroke='%234573E3' stroke-width='1.5'/%3E%3C/svg%3E\");\n font-family: 'Circular', sans-serif;\n font-weight: 500;\n width: 8px;\n height: 5px;\n margin-left: 12px;\n transform: scaleY(${({ expanded }) => (expanded ? -1 : 1)});\n }\n }\n\n ${Avatar} + ${Avatar} {\n margin-left: -4px;\n }\n`;\n\nconst SubThreadToggle = ({\n entries,\n users,\n expanded,\n style,\n className,\n onClick\n}) => {\n const { subThreads } = useThread();\n\n if (!subThreads || !entries?.length) return null;\n\n return (\n \n {users.map(user => (\n \n ))}\n \n {`${entries.length} Repl${entries.length === 1 ? 'y' : 'ies'}`}\n \n \n );\n};\n\nSubThreadToggle.propTypes = {\n entries: arrayOf(shape({})).isRequired,\n users: arrayOf(shape({\n name: string,\n username: string,\n email: string,\n avatarUrl: string\n })).isRequired,\n expanded: bool.isRequired,\n style: shape({}),\n className: string,\n onClick: func.isRequired\n};\n\nSubThreadToggle.defaultProps = {\n style: {},\n className: ''\n};\n\nexport default SubThreadToggle;\n","import React from 'react';\nimport { t } from '@jotforminc/translation';\nimport { bool, func } from 'prop-types';\n\nimport { IconEyeFilled } from '@jotforminc/svg-icons';\nimport MoreButton from './MoreButton';\n\nimport TEXTS from '../constants/texts';\n\nimport IconRequestMoreInfo from '../assets/iconRequestMoreInfo.svg';\n\nconst TaskMoreButton = ({\n requestMoreInfo, requestMoreVisible, viewFormVisible, viewForm\n}) => {\n const components = [\n requestMoreVisible && {\n icon: ,\n title: t(TEXTS.REQUEST_MORE_INFO),\n onClick: requestMoreInfo\n },\n viewFormVisible && {\n icon: ,\n title: t(TEXTS.VIEW_ASSIGNED_FORM),\n onClick: viewForm\n }\n ].filter(val => val);\n\n return (\n \n );\n};\n\nTaskMoreButton.propTypes = {\n requestMoreInfo: func.isRequired,\n requestMoreVisible: bool.isRequired,\n viewFormVisible: bool,\n viewForm: func\n};\n\nTaskMoreButton.defaultProps = {\n viewFormVisible: false,\n viewForm: f => f\n};\n\nexport default TaskMoreButton;\n","import React from 'react';\nimport {\n arrayOf, shape, bool, func\n} from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { parseFieldValues } from '@jotforminc/utils';\nimport { operators } from './constants';\nimport '../styles/_jfFilter.scss';\nimport '@jotforminc/jotform.css';\n\nexport const getFilterRules = ({\n getQuestionText = null,\n filters,\n checkQid = true,\n getFilterQuestion,\n getFilterValue = null,\n getSubmissionFilterRules = null,\n isNumbered = true\n}) => {\n if (!filters) return null;\n return Object.keys(filters).map((r, i) => {\n const conditionTerms = r.split(':');\n let [qid, operator,, tagColor, fieldColor] = conditionTerms;\n let branchName = conditionTerms?.[2];\n if (branchName) {\n [qid, operator, branchName,, tagColor, fieldColor] = conditionTerms;\n }\n const labelsForQid = {\n selectedFormTitle: { operatorLabel: 'EQUALS', questionLabel: 'Form' }\n };\n\n if (checkQid && (qid === 'flag' || qid === 'new' || qid === 'ai_agent_id' || qid === 'conversation_type')) {\n return getSubmissionFilterRules(r, i);\n }\n\n // Value DropdownField\n const filterValue = Object.values(filters)[i];\n // If Dropdown field\n const questionID = qid.replace('q', '');\n const fieldsIds = parseFieldValues(questionID, '|');\n const question = getFilterQuestion(fieldsIds);\n const questionLabel = labelsForQid[qid]?.questionLabel || ((question && getQuestionText) ? getQuestionText(question, { value: questionID }) : '');\n const questionIcon = question ? question.icon : '';\n const operatorLabel = labelsForQid[qid]?.operatorLabel\n || operators.find(o => o.name === operator)?.text\n || operator;\n\n const filterValueElement = color => {\n if (color && filterValue) {\n return (\n \n {filterValue}\n \n );\n }\n if (filterValue) {\n return (\n \n {filterValue}\n \n );\n }\n };\n\n const valueRenderer = (value, color) => {\n switch (true) {\n case !!value && !!color:\n return filterValueElement(color);\n case !!value:\n return (\n \n {value}\n \n );\n default:\n return filterValueElement();\n }\n };\n\n return (\n
        \n { isNumbered && ({`${i + 1}.`})}\n \n {questionIcon}\n {questionLabel}\n \n \n {t(operatorLabel.toUpperCase())}\n \n {getFilterValue ? getFilterValue(r) : valueRenderer(filterValue, fieldColor)}\n
        \n );\n });\n};\n\nconst FilterHoverText = ({\n getQuestionText = undefined,\n filters,\n questions,\n isNumbered = true\n}) => {\n const getFilterQuestion = fieldsIds => {\n const mainField = fieldsIds?.questionID;\n return questions.find(q => q.qid === mainField || q.name === mainField);\n };\n\n return (\n
        \n {getFilterRules({\n filters, getFilterQuestion, checkQid: false, isNumbered, getQuestionText\n })}\n
        \n );\n};\n\nFilterHoverText.propTypes = {\n questions: arrayOf(shape({})).isRequired,\n filters: shape({}).isRequired,\n isNumbered: bool,\n getQuestionText: func\n};\n\nexport default FilterHoverText;\n","import { arrayOf, string } from 'prop-types';\n\nexport const ContactPropTypes = {\n name: string,\n email: string,\n additionalInfo: arrayOf(string),\n formName: string\n};\n\nexport const ContactDefaultProps = {\n name: '',\n additionalInfo: [],\n formName: 'Form'\n};\n","const getFirstChar = (target, splitter) => {\n return target.split(splitter).filter(t => t).map(t => t.slice(0, 1)).join('')\n .slice(0, 1)\n .toLocaleUpperCase();\n};\n\nexport const hasValidAvatar = avatarUrl => {\n return typeof avatarUrl === 'string' && avatarUrl.length > 3;\n};\n\nexport const getAvatarHolder = (name = '', email = '') => {\n switch (true) {\n case (name && name.length > 0):\n return getFirstChar(name, ' ');\n case (email && email.length > 0):\n const [beforeAt] = email.split('@');\n if (beforeAt.indexOf('.') > -1) {\n return getFirstChar(beforeAt, '.');\n }\n if (beforeAt.indexOf('_') > -1) {\n return getFirstChar(beforeAt, '_');\n }\n return beforeAt.slice(0, 2).toLocaleUpperCase();\n default: return 'N/A';\n }\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport { shape } from 'prop-types';\nimport { ContactDefaultProps, ContactPropTypes } from '../constants';\nimport { getAvatarHolder, hasValidAvatar } from '../utils';\n\nimport '../styles/Contact.scss';\n\nconst ContactAvatar = ({\n contact\n}) => {\n const { avatarUrl, name, email } = contact;\n const useAvatarHolder = React.useMemo(() => !hasValidAvatar(avatarUrl), [avatarUrl]);\n const holder = React.useMemo(() => {\n if (useAvatarHolder) {\n return getAvatarHolder(name, email);\n }\n return '';\n }, [useAvatarHolder, name, email]);\n\n const isQuestion = contact.isQuestion === true;\n const isAvatar = !isQuestion && useAvatarHolder;\n const isImage = !isQuestion && !useAvatarHolder;\n\n return (\n \n {isAvatar && holder}\n
        \n );\n};\n\nContactAvatar.propTypes = { contact: shape(ContactPropTypes) };\nContactAvatar.defaultProps = { contact: ContactDefaultProps };\n\nexport default ContactAvatar;\n","import { shape } from 'prop-types';\nimport React from 'react';\nimport { t } from '@jotforminc/translation';\n\nimport { ContactDefaultProps, ContactPropTypes } from '../constants';\nimport ContactAvatar from './ContactAvatar';\n\nconst QuestionBasedContactCard = ({ contact }) => {\n const parsed = React.useMemo(() => {\n const [lastPart, firstPart] = t('{fieldName} field {formName}').replace('{fieldName}', contact.name).split('{formName}');\n return (\n <>\n {firstPart}\n {/* eslint-disable-next-line */}\n {contact.formName}\n {lastPart}\n \n ); // TODO: formID\n });\n return (\n
        \n \n
        \n {parsed}\n
        \n
        \n );\n};\n\nQuestionBasedContactCard.propTypes = {\n contact: shape(ContactPropTypes)\n};\n\nQuestionBasedContactCard.defaultProps = {\n contact: ContactDefaultProps\n};\n\nexport default QuestionBasedContactCard;\n","import React from 'react';\nimport {\n arrayOf, func, shape, string, oneOfType\n} from 'prop-types';\nimport { FilterHoverText } from '@jotforminc/search-filter';\nimport { ContactDefaultProps, ContactPropTypes } from '../constants';\nimport ContactAvatar from './ContactAvatar';\n\nimport '../styles/Contact.scss';\nimport QuestionBasedContactCard from './QuestionBasedContactCard';\n\nconst ContactCard = ({\n ContainerRenderer, contact, renderElement, conditionFilter, questions, getQuestionText\n}) => {\n const {\n name, email, additionalInfo = [], isQuestion, role\n } = contact;\n if (renderElement) {\n return (\n \n \n \n );\n }\n if (isQuestion) {\n return (\n \n \n \n );\n }\n return (\n \n
        \n \n
        \n {!isQuestion && name && (\n
        \n {name}\n
        \n )}\n {!isQuestion && email && (\n
        \n {email}\n
        \n )}\n
        \n {role &&
        {role}
        }\n
        \n {additionalInfo.length > 0 && (\n
        \n {additionalInfo.map(info => (\n
        {info}
        \n ))}\n
        \n )}\n
        \n );\n};\n\nContactCard.propTypes = {\n ContainerRenderer: func,\n contact: shape(ContactPropTypes),\n conditionFilter: shape(),\n questions: arrayOf(shape()),\n renderElement: oneOfType([\n shape(),\n string,\n arrayOf(shape())\n ]),\n getQuestionText: func\n};\n\nContactCard.defaultProps = {\n ContainerRenderer: ({ ...props }) =>
        ,\n contact: ContactDefaultProps,\n conditionFilter: null,\n questions: [],\n renderElement: null,\n getQuestionText: null\n};\n\nexport default ContactCard;\n","import React from 'react';\nimport {\n bool, shape, object, oneOfType, element, func, string\n} from 'prop-types';\nimport classNames from 'classnames';\nimport { Popover } from '@jotforminc/uikit';\nimport ContactCard from './ContactCard';\n\nconst ContactCardPopover = ({\n isHovered, contact, targetRef, usePortal, className\n}) => {\n return isHovered && (\n \n \n \n );\n};\n\nContactCardPopover.defaultProps = {\n className: null,\n isHovered: false,\n targetRef: null,\n usePortal: false,\n contact: {}\n};\n\nContactCardPopover.propTypes = {\n className: string,\n isHovered: bool,\n targetRef: oneOfType([\n shape({ current: element }),\n func\n ]),\n usePortal: bool,\n contact: object\n};\n\nexport default ContactCardPopover;\n","import React from 'react';\nimport { useHover } from '@jotforminc/hooks';\nimport { ContactCardPopover } from '@jotforminc/contact-card';\nimport {\n node,\n object\n} from 'prop-types';\n\nconst ContactWithApproval = ({ approver, children }) => {\n const [hoverRef, isHovered] = useHover(300);\n return (\n <>\n \n \n {children}\n \n \n );\n};\n\nContactWithApproval.propTypes = {\n approver: object,\n children: node\n};\n\nContactWithApproval.defaultProps = {\n approver: {},\n children: null\n};\n\nexport default ContactWithApproval;\n","/* eslint-disable complexity */\nimport React, {\n useRef, useState, useEffect, useImperativeHandle, forwardRef\n} from 'react';\nimport {\n bool, string, shape, node, func\n} from 'prop-types';\n\nimport moment from 'moment-timezone';\nimport { useMomentDate } from '@jotforminc/hooks';\nimport ShortDate from '@jotforminc/short-date';\nimport classNames from 'classnames';\nimport { translationRenderer } from '@jotforminc/translation';\nimport { handleCustomNavigation } from '@jotforminc/utils';\nimport { Placeholder } from '@jotforminc/placeholder';\nimport ThreadAvatar from '../components/ThreadAvatar';\n// eslint-disable-next-line import/no-cycle\nimport SubThread from './SubThread';\nimport { useSubThread } from './hooks';\nimport SubThreadToggle from './SubThreadToggle';\nimport TaskMoreButton from '../components/TaskMoreButton';\nimport TeamImageWithWrapper from '../components/TeamImageWithWrapper';\nimport ContactWithApproval from '../components/ContactWithApproval';\n// eslint-disable-next-line import/no-cycle\n\n// eslint-disable-next-line react/prop-types\nconst Header = ({ isVisible, statusRef, ...rest }) => {\n if (!rest && !isVisible) return null;\n\n const {\n name,\n title,\n moreButton,\n description,\n entryName,\n status,\n context,\n onClick,\n timestamp,\n avatarUrl,\n email,\n color,\n dateFormat,\n className,\n preview,\n toggle,\n formLink,\n subThreadExpanded,\n AttachComp,\n actionType,\n team,\n type\n } = rest;\n\n const serverTimezoneOffset = moment().tz('America/New_York').format('Z');\n const [date] = useMomentDate(`${timestamp} ${serverTimezoneOffset}`, 'YYYY-MM-DD HH:mm ZZ');\n const hasAvatar = typeof avatarUrl !== 'undefined' || (actionType === 'APPROVE_REJECT' && !!name);\n\n if (className === 'undo_loading') {\n return (\n
        \n
        \n \n
        \n
        \n \n \n
        \n
        \n {status}\n
        \n
        \n );\n }\n\n const ApproverWrapper = type && type === 'approve_reject' ? ContactWithApproval : React.Fragment;\n\n return (\n \n
        \n {team && (\n \n )}\n { hasAvatar\n ? (\n \n \n \n\n ) : null }\n { title ? (\n
        {translationRenderer('[1[{taskTitle}]] Step')({ renderer1: () => <>{title} })}
        \n ) : null }\n
        \n { name ? (\n {name}\n ) : null }\n { description ? {description} : null }\n { entryName ?
        {entryName}
        : null }\n
        \n
        \n { status\n ? (\n \n \n {status}\n
        \n {(AttachComp && subThreadExpanded && actionType === 'COMMENT') ? AttachComp : null}\n {entryName && preview ? preview : null}\n {toggle ? (\n
        \n {toggle}\n
        \n ) : null}\n \n )\n :
        }\n
        \n { timestamp ? (\n
        \n \n
        \n ) : null }\n { formLink ? (\n f}\n requestMoreVisible={false}\n viewForm={() => handleCustomNavigation(`${formLink}`, '_blank', true)}\n />\n ) : null}\n\n {context || moreButton}\n
        \n
        \n );\n};\n\nconst EntryLayout = forwardRef(({\n id,\n parentID,\n parentType,\n type,\n children,\n AttachComp,\n isHeaderVisible,\n className,\n headerProps,\n isExpanded,\n noPreview,\n activeTab,\n setIsThreadExpanded,\n actionType\n}, ref) => {\n const formLink = headerProps?.entryName?.props?.actionDetails?.defaultFormLink;\n const [entryPreview, setEntryPreview] = useState('');\n const [expanded, setExpanded] = useState(isExpanded);\n const hasIntegrationError = headerProps?.entryName?.props?.actionDetails?.result === 'ERRORED' && headerProps?.entryName?.props?.actionDetails?.partner;\n const [subThreadExpanded, setSubThreadExpanded] = useState(isExpanded);\n const bodyRef = useRef();\n const statusRef = useRef();\n\n const hasBody = !!children;\n useImperativeHandle(ref, () => ({\n setExpanded,\n setSubThreadExpanded,\n subThreadExpanded\n }));\n\n const height = (bodyRef?.current || statusRef?.current)?.clientHeight;\n const html = bodyRef.current?.innerHTML || statusRef.current?.innerHTML || '';\n const noPreviewTypes = [\n 'assign_form_submission',\n 'sign_document',\n 'mail',\n 'integration_trigger',\n 'terminated',\n 'assign_task_complete'\n ];\n\n useEffect(() => {\n if (expanded || noPreview || !height || noPreviewTypes.includes(type)) return;\n const div = document.createElement('div');\n const maxLength = bodyRef?.current ? 250 : 140;\n div.innerHTML = html;\n div.querySelector('.quotationWrapper')?.remove();\n div.querySelector('.quotationButtons')?.remove();\n document.body.append(div);\n const { innerText } = div;\n div.remove();\n\n const hasPreview = height >= 50;\n const previewText = innerText.replace(/(\\n+|\\s+)/g, ' ').trim().substr(0, maxLength) || ' ';\n setEntryPreview(hasPreview ? previewText : null);\n setExpanded(!hasPreview);\n }, [html, expanded]);\n\n useEffect(() => {\n setIsThreadExpanded(subThreadExpanded);\n }, [subThreadExpanded]);\n\n useEffect(() => {\n if (!entryPreview) return;\n setSubThreadExpanded(expanded);\n }, [expanded]);\n\n const handleHeaderClick = () => setExpanded(!expanded);\n\n const preview = entryPreview ? (\n \n {entryPreview}\n \n ) : null;\n\n const showSubThread = (type === 'comment' || type === 'message') && (!parentID || parentType === 'question');\n const { users, entries } = useSubThread({ parentID: id, parentType: type });\n\n return (\n \n {\n setSubThreadExpanded(!subThreadExpanded);\n setExpanded(!subThreadExpanded);\n }}\n />\n )}\n preview={!hasBody && !expanded ? preview : null}\n subThreadExpanded={subThreadExpanded}\n AttachComp={AttachComp}\n actionType={actionType}\n />\n {hasBody && (\n \n {children}\n \n )}\n {hasBody && !expanded ? preview : null}\n {showSubThread ? (\n \n { setSubThreadExpanded(false); setExpanded(false); }}\n />\n \n ) : null}\n {(entryPreview && expanded) ? (\n \n ) : null}\n {\n ((!subThreadExpanded || actionType !== 'COMMENT') && AttachComp) ? AttachComp : null\n }\n \n );\n});\n\nEntryLayout.propTypes = {\n id: string.isRequired,\n type: string.isRequired,\n parentID: string,\n parentType: string.isRequired,\n children: node,\n isHeaderVisible: bool,\n moreButton: node,\n className: string,\n isExpanded: bool,\n headerProps: shape(),\n noPreview: bool,\n AttachComp: node,\n activeTab: string,\n setIsThreadExpanded: func,\n actionType: string\n};\n\nEntryLayout.defaultProps = {\n children: null,\n isHeaderVisible: true,\n moreButton: false,\n className: '',\n isExpanded: false,\n headerProps: null,\n noPreview: false,\n parentID: null,\n AttachComp: null,\n activeTab: '',\n setIsThreadExpanded: f => f,\n actionType: ''\n};\n\nexport default EntryLayout;\n","/* eslint-disable import/no-cycle */\nimport React, { useState } from 'react';\nimport {\n bool, string, shape, node\n} from 'prop-types';\nimport moment from 'moment-timezone';\nimport classNames from 'classnames';\nimport { useMomentDate } from '@jotforminc/hooks';\nimport ThreadAvatar from '../components/ThreadAvatar';\nimport SubThread from './SubThread';\nimport { useSubThread } from './hooks';\nimport SubThreadToggle from './SubThreadToggle';\n\n// eslint-disable-next-line react/prop-types\nconst Header = ({ isVisible, statusRef, ...rest }) => {\n const {\n name,\n moreButton,\n description,\n context,\n timestamp,\n avatarUrl,\n email,\n color,\n dateFormat,\n className\n } = rest;\n\n const serverTimezoneOffset = moment().tz('America/New_York').format('Z');\n const [date] = timestamp ? useMomentDate(`${timestamp} ${serverTimezoneOffset}`, 'YYYY-MM-DD HH:mm ZZ') : null;\n\n return (\n \n
        \n { typeof avatarUrl !== 'undefined'\n ? (\n \n ) : null }\n
        \n { name ? {name} : null }\n { timestamp ? (\n \n {date.format(dateFormat)}\n \n ) : null }\n { moreButton ? {moreButton} : null }\n { description ? {description} : null }\n
        \n
        \n
        \n
        \n {context}\n
        \n
        \n );\n};\n\nconst Layout = ({\n id,\n type,\n parentID,\n parentType,\n isHeaderVisible,\n className,\n headerProps,\n activeTab,\n AttachComp\n}) => {\n const { status: children } = headerProps;\n\n const showSubThread = (type === 'comment' || type === 'message') && (!parentID || parentType === 'question');\n const { users, entries } = useSubThread({ parentID: id, parentType: type });\n const [subThreadExpanded, setSubThreadExpanded] = useState(false);\n\n return (\n \n \n {children && (\n
        \n
        {children}
        \n {AttachComp || null}\n
        \n )}\n {showSubThread ? (\n \n setSubThreadExpanded(!subThreadExpanded)}\n />\n \n \n ) : null}\n \n );\n};\n\nLayout.propTypes = {\n id: string.isRequired,\n type: string.isRequired,\n parentID: string,\n parentType: string.isRequired,\n children: node,\n isHeaderVisible: bool,\n moreButton: node,\n className: string,\n isExpanded: bool,\n headerProps: shape(),\n activeTab: string,\n AttachComp: node\n};\n\nLayout.defaultProps = {\n children: null,\n isHeaderVisible: true,\n moreButton: false,\n className: '',\n isExpanded: false,\n headerProps: null,\n parentID: null,\n activeTab: '',\n AttachComp: null\n};\n\nexport default Layout;\n","/* eslint-disable eqeqeq */\n/* eslint-disable import/no-cycle */\nimport React from 'react';\nimport classNames from 'classnames';\nimport {\n arrayOf, shape, string, bool\n} from 'prop-types';\nimport { DEFAULT_DATE_FORMAT } from '@jotforminc/constants';\nimport { useThread } from '../contexts';\nimport Entry from './Entry';\nimport EntryTypes, { EntryCategories } from './EntryTypes';\nimport '../styles/index.scss';\nimport EntryLayout from './EntryLayout';\nimport AnswerLayout from './AnswerLayout';\n\nconst SubmissionThread = ({\n layout, entries, entryLayout, parentType, parentID, isVisible, activeTab, isQuestion\n}) => {\n const {\n layout: globalLayout,\n loading,\n data: { thread: globalEntries } = {},\n userTimeZone,\n dateFormat = DEFAULT_DATE_FORMAT,\n additionalEntryTypes,\n submissionID\n } = useThread();\n\n const threadLayout = layout || globalLayout;\n const threadEntries = entries || globalEntries;\n\n const entryTypes = { ...EntryTypes, ...additionalEntryTypes };\n\n const layoutTypes = { // Do not move this to outside of the component!\n EntryLayout,\n AnswerLayout\n };\n // const LayoutComp = entryLayout === 'EntryLayout' ? EntryLayout : AnswerLayout;\n const LayoutComp = layoutTypes[entryLayout];\n if (!LayoutComp) return null;\n if (entryLayout === 'AnswerLayout' && (!entries || entries.length <= 0)) return null;\n return (\n \n {threadEntries?.map?.(entry => {\n const { actionType, actionDetails } = entry;\n\n const entryType = entry.actionType.toLowerCase();\n\n if (\n !actionDetails || (!additionalEntryTypes[entryType] && !EntryCategories.all.includes(actionType))\n ) {\n return null;\n }\n\n if (actionType === 'MAIL' && actionDetails?.reason !== 'ASSIGN_FORM_NOTIFICATION_MAIL' && actionDetails?.reason !== 'SEND_SIGN_NOTIFICATION' && actionDetails?.reason !== 'SEND_REMINDER') {\n if (!(actionDetails.type === 'custom_email' && actionDetails.to !== '')) {\n return null;\n }\n }\n\n if (\n actionDetails.parentID != parentID\n && actionDetails.parentType != parentType\n && actionDetails.parentType != 'question'\n && actionDetails.parentID !== '0' // backward compability\n && actionDetails.parentType !== false // backward compability\n ) {\n return null;\n }\n\n const EntryComp = entryTypes[entryType];\n\n if (!EntryComp) return null;\n\n const id = entry.id || actionDetails.id;\n\n const key = [entryType, submissionID, id].join('_');\n\n return (\n \n );\n })}\n \n );\n};\n\nSubmissionThread.propTypes = {\n layout: string,\n isVisible: bool,\n entries: arrayOf(shape({})),\n entryLayout: string,\n parentType: string,\n parentID: string,\n activeTab: string,\n isQuestion: bool\n};\n\nSubmissionThread.defaultProps = {\n layout: null,\n entries: null,\n isVisible: false,\n entryLayout: 'EntryLayout',\n parentType: null,\n parentID: null,\n activeTab: '',\n isQuestion: false\n};\n\nexport default SubmissionThread;\n","import React, { createContext, useState } from 'react';\nimport PropTypes from 'prop-types';\n\n/* In the Submission view, there is a comment thread (answerNotes) for each field.\n * These comment sections depended on a single state\n * and acted without knowing which question/field they belonged to.\n * For this purpose, created a comment context that behaves according to the question id.\n *\n */\n\n/*\n * Question id (qid) can never be '-1'\n * for this reason context initial value was set to -1.\n */\nconst CommentContext = createContext([-1, f => f]);\n\nconst CommentProvider = ({ children }) => {\n return (\n \n {children}\n \n );\n};\n\nCommentProvider.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node\n ]).isRequired\n};\n\nexport { CommentContext };\n\nexport default CommentProvider;\n","import React from 'react';\nimport type { PropsWithChildren } from 'react';\nimport { cx } from 'class-variance-authority';\nimport { DialogContentProps } from './dialog.types';\n\nexport const DialogContent = (props: PropsWithChildren): JSX.Element => {\n const { className, children, ...rest } = props;\n return (\n
        {children}
        \n );\n};\n","import React, { useEffect, useState } from 'react';\nimport {\n Dialog,\n DialogTitle,\n DialogDescription,\n DialogContent,\n DialogBody,\n DialogActions,\n DialogCloseButton,\n Button,\n DialogIcon\n} from '@jotforminc/magnet';\nimport { t } from '@jotforminc/translation';\nimport {\n array,\n bool,\n func,\n node,\n object\n} from 'prop-types';\nimport { IconEnvelopeFormFilled, IconUserFilled } from '@jotforminc/svg-icons';\n\nconst WaitingPermissionDialog = ({\n isOpen,\n config: {\n icon,\n texts,\n emails,\n usersData\n },\n onSave,\n onChangeTextArea,\n onClose\n\n}) => {\n const [isTextAreaShown, setTextAreaShown] = useState(false);\n\n const handleAddMessage = e => {\n e.preventDefault();\n setTextAreaShown(true);\n };\n\n useEffect(() => {\n if (!isOpen) {\n setTextAreaShown(false);\n }\n }, [isOpen]);\n\n return (\n \n \n \n {t(texts.title)}\n {t(texts.description)}\n \n
        \n
        \n \n {t('To:')}\n
        \n
        \n
        \n {emails?.map(email => {\n const foundUser = usersData.find(userInfo => userInfo.email === email);\n const name = foundUser ? (foundUser.name || foundUser.email) : email;\n return (\n \n \n {name}\n
        \n );\n })}\n
        \n
        \n
        \n

        {t(texts.collabText)}

        \n \n {t(texts.canViewEditText)}\n \n
        \n \n
        \n {!isTextAreaShown\n ? (\n \n {t(texts.addMessageText)}\n \n ) : (\n \n )}\n
        \n
        \n
        \n \n \n {t('Cancel')}\n \n \n {t(texts.actionBtn)}\n \n \n \n \n );\n};\n\nWaitingPermissionDialog.propTypes = {\n isOpen: bool,\n config: {\n icon: node,\n texts: object,\n emails: array,\n usersData: array\n },\n onSave: func,\n onChangeTextArea: func,\n onClose: func\n};\n\nWaitingPermissionDialog.defaultProps = {\n isOpen: false,\n config: {\n icon: null,\n texts: {},\n emails: [],\n usersData: []\n },\n onSave: () => {},\n onChangeTextArea: () => {},\n onClose: () => {}\n};\n\nexport default WaitingPermissionDialog;\n","import React, {\n useState, useEffect, useMemo, useRef, Suspense\n} from 'react';\nimport { safeLazy } from '@jotforminc/safe-lazy-import';\nimport { connect } from 'react-redux';\nimport {\n shape, func, bool, string, oneOf, arrayOf, number\n} from 'prop-types';\nimport Fuse from 'fuse.js';\nimport { useRole } from '@jotforminc/permissions';\nimport { useThread } from '@jotforminc/workflow-components';\nimport { formatBytes } from '@jotforminc/utils';\nimport { Loading } from '@jotforminc/loading';\nimport { IconExclamationCircleFilled } from '@jotforminc/svg-icons';\nimport WaitingPermissionDialog from './WaitingPermissionDialog';\n\nimport { requestLayer } from '../../api/requestLayer';\nimport keyboardJS from '../../vendor/keyboard';\nimport SVG from '../SVG';\nimport { classNames, isEmptyNote, replaceBetween } from '../../utils';\nimport {\n updateNote as updateNoteApi, addNote as addNoteApi, removeNoteAttachment, bulkShare\n} from '../../api';\nimport {\n activeSubmissionSelector, answersSelector, formIDSelector, getIsTeamMember, getTeamMemberEmails\n} from '../../selectors';\nimport { answersPropType } from '../../constants/proptypes';\nimport t from '../../constants/texts';\n\nconst NewSocialEditor = safeLazy(() => import(/* webpackChunkName: \"Inbox_NewSocialEditor\" */'../NewSocialEditor'));\n\nconst originalButtonTexts = {\n save: t.ADD_A_NOTE,\n cancel: t.CANCEL\n};\n\nconst moveProgressBar = (percent, index) => {\n const elem = document.querySelector(`#progressBar-${index}`);\n if (!elem) return;\n if (elem.style?.display === 'none') {\n elem.style.display = 'block';\n }\n const bar = elem.querySelector('.bar');\n const { width } = bar.style;\n if (width !== '100%' && percent !== 100) {\n bar.style.width = `${percent}%`;\n } else {\n elem.style.display = 'none';\n }\n};\n\nconst NoteEditor = ({\n value, onCancel, isAllowed, parentID, parentType, onInputClick, onChange, showButtons, className, attachments,\n afterSave, isEditing, actionDetails, submission, editorRefProp, answers, formID, buttonTexts, activeTab,\n editorType, attachmentState, setAttachmentState, uploadRules, user, isTeamMember, teamMemberEmails, ...props\n}) => {\n const editorRef = useRef();\n const [noteAttachments, setNoteAttachments] = useState([]);\n const [errorText, setErrorText] = useState('');\n const [shareMessage, setShareMessage] = useState('');\n const [content, setContent] = useState(value);\n const [loading, setLoading] = useState(false);\n const [waitingForPermissions, setWaitingForPermissions] = useState();\n const { reload, data: { users: usersData = [] } = {} } = useThread();\n\n const oldAttachments = actionDetails.attachments && JSON.parse(actionDetails.attachments);\n const usedButtonTexts = { ...originalButtonTexts, ...buttonTexts };\n const userRole = useRole();\n\n const tokenizedAnswers = useMemo(() => Object.entries(answers).map(([qid, a = { text: '' }]) => ({\n value: a.text,\n id: qid,\n type: 'tag'\n })), [answers]);\n\n const tags = useMemo(() => (\n new Fuse(tokenizedAnswers, {\n keys: [\n 'value',\n 'id'\n ]\n })\n ), [tokenizedAnswers]);\n\n const tokenizedUsers = useMemo(() => (\n usersData ? usersData.map(({\n name, email, username, id, avatarUrl\n }) => ({\n value: name || email || username,\n id,\n name,\n email,\n username,\n avatarUrl,\n type: 'user'\n })) : []\n ), [usersData]);\n\n const users = useMemo(() => (\n new Fuse(tokenizedUsers, {\n threshold: 0.5,\n keys: [\n 'value',\n 'id',\n 'name',\n 'email',\n 'username'\n ]\n })\n ), [tokenizedUsers]);\n\n const suggest = (searchTerm, mentionChar) => {\n if (mentionChar === '#') {\n if (!searchTerm) return tokenizedAnswers;\n return tags.search(searchTerm).map(({ item }) => item);\n }\n\n if (mentionChar === '@') {\n if (!searchTerm) return tokenizedUsers;\n return users.search(searchTerm).map(({ item }) => item);\n }\n };\n\n const changeHandler = newContent => {\n setContent(newContent);\n if (onChange) {\n onChange(newContent);\n }\n };\n\n useEffect(() => {\n if (editorRef && editorRef.current) {\n editorRef.current.setContent(value, false);\n }\n }, [JSON.stringify(value)]);\n\n const deleteContentFromEditor = () => {\n // eslint-disable-next-line no-unused-expressions\n editorRef?.current?.setContent('');\n };\n\n const promptMentions = emails => {\n return new Promise(resolve => {\n setWaitingForPermissions({ resolve, emails });\n }).then(r => {\n setWaitingForPermissions();\n return r;\n });\n };\n\n const handleSave = async e => {\n let mutatedContent = content;\n\n if (e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n if (isEmptyNote(content)) {\n // todo: throw error\n return;\n }\n\n const unkownMentions = [...content.matchAll(/(@+[a-zA-Z0-9._+-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9_-]+)/gim)].map(match => match[1].replace(/^@/, ''));\n const knownMentions = [...editorRef.current.wrapper.current.querySelectorAll('.mention[data-denotation-char=\"@\"]')].map(el => el.getAttribute('data-email'));\n const mentions = [...unkownMentions, ...knownMentions];\n\n let mentionsToPrompt = mentions.filter(mentionedMail => !usersData.find(userInfo => userInfo.email === mentionedMail)?.canMention);\n\n if (isTeamMember && teamMemberEmails.length) {\n mentionsToPrompt = mentionsToPrompt.filter(email => !(teamMemberEmails.indexOf(email) > -1));\n }\n\n if (userRole === 'owner') {\n if (mentionsToPrompt.length) {\n if (!await promptMentions(mentionsToPrompt)) {\n return;\n }\n }\n\n unkownMentions.forEach(m => {\n const startIndex = mutatedContent.indexOf(`@${m}`);\n const endIndex = startIndex + m.length + 1;\n\n // eslint-disable-next-line max-len\n mutatedContent = replaceBetween(mutatedContent, startIndex - 1, endIndex, `@${m}`);\n });\n }\n\n const isContactOwner = activeTab === 'sentbox' ? 1 : 0;\n\n const submissionID = submission.id;\n\n let uploads = [];\n let uploadNames = [];\n\n if (isEditing) {\n // we are merging old attachments (if any) with the new ones.\n const hasAnyAttachment = Array.isArray(oldAttachments) ? oldAttachments : [];\n uploads = [...noteAttachments, ...hasAnyAttachment];\n uploadNames = uploads.map(upload => {\n if (!upload.raw) {\n return upload;\n }\n return `${window.origin}/uploads/${user?.username}/form_files/${upload.raw.name}`;\n });\n } else {\n // attachments appear in the creation of parent thread (comment)\n // noteAttachments appear when replying parent thread (children)\n // this 2 cases are handled in the same statement but one of them will always be empty\n uploads = [...noteAttachments, ...attachments];\n uploadNames = uploads.map(({ raw }) => raw.name);\n }\n\n if (isEditing) {\n const note = { ...actionDetails, content: mutatedContent, submissionID };\n await updateNoteApi({\n submissionID, parentID, parentType, uploadNames, ...note\n });\n } else {\n const result = await addNoteApi({\n submissionID, isContactOwner, parentID, parentType, content: mutatedContent, uploadNames\n });\n\n if (result) {\n setNoteAttachments([]);\n setLoading(false);\n }\n }\n\n reload();\n setContent('');\n deleteContentFromEditor();\n setAttachmentState('');\n if (afterSave) afterSave();\n };\n\n const attachmentError = useMemo(() => {\n const exceedError = `You can only upload ${uploadRules?.numberPerUpload} files.`;\n if (Array.isArray(oldAttachments)) {\n if ((noteAttachments.length + oldAttachments.length) > uploadRules?.numberPerUpload) return exceedError;\n } else if (noteAttachments.length > uploadRules?.numberPerUpload) return exceedError;\n\n if (errorText.indexOf('exist') > -1) return errorText;\n\n return null;\n }, [oldAttachments, noteAttachments]);\n\n const validateUploadFiles = () => {\n const {\n sizePerFile,\n formattedSizePerFile,\n numberPerUpload\n } = uploadRules;\n\n let isNumberPerUploadExceeded;\n let fileAlreadyExist;\n\n if (Array.isArray(oldAttachments)) {\n isNumberPerUploadExceeded = (noteAttachments.length + oldAttachments.length) > numberPerUpload;\n oldAttachments.forEach(oldAtt => {\n noteAttachments.forEach(newAtt => {\n if (newAtt.name === /[^/]*$/.exec(oldAtt)[0]) {\n fileAlreadyExist = newAtt.name;\n }\n });\n });\n } else {\n isNumberPerUploadExceeded = noteAttachments.length > numberPerUpload;\n }\n const isSizePerFileExceeded = noteAttachments.some(({ raw }) => raw.size > sizePerFile);\n\n if (isSizePerFileExceeded) {\n setErrorText(`File size cannot be larger than ${formattedSizePerFile}.`);\n } else if (isNumberPerUploadExceeded) {\n setErrorText(`Number of files cannot be larger than ${numberPerUpload}.`);\n } else if (fileAlreadyExist) {\n setErrorText(`${fileAlreadyExist} is already exist.`);\n } else {\n setErrorText('');\n }\n };\n\n useEffect(() => {\n if (isEditing && attachmentState) {\n if (Array.isArray(oldAttachments)) {\n const newAttachments = oldAttachments.filter(attachment => attachment !== attachmentState);\n if (newAttachments.length !== oldAttachments.length) {\n removeNoteAttachment({ newAttachments, ...actionDetails }).then(result => {\n if (result) {\n reload();\n }\n });\n }\n }\n }\n }, [isEditing, attachmentState]);\n\n useEffect(() => {\n // eslint-disable-next-line no-param-reassign\n editorRefProp.current = {\n deleteContentFromEditor,\n save: handleSave\n };\n });\n\n useEffect(() => {\n validateUploadFiles();\n }, [noteAttachments, oldAttachments]);\n\n useEffect(() => {\n keyboardJS.bind(['command + enter', 'shift + enter'], handleSave);\n return () => keyboardJS.unbind(['command + enter', 'shift + enter'], handleSave);\n }, [content]);\n\n const buttonsDisabled = useMemo(() => isEmptyNote(content), [content]);\n\n const handleCancel = e => {\n e.preventDefault();\n e.stopPropagation();\n\n deleteContentFromEditor();\n setNoteAttachments([]);\n\n if (className?.includes('inlineEdit') || buttonsDisabled) {\n onCancel();\n }\n };\n\n const handleFiles = files => {\n [...files].forEach((file, i) => {\n const reader = new global.FileReader();\n reader.addEventListener('load', result => {\n const newFile = {\n key: `${file.name}-${i}`,\n src: result,\n size: formatBytes(file.size),\n name: file.name,\n raw: file,\n error: file.size > uploadRules?.sizePerFile\n };\n setNoteAttachments(prevState => [...prevState, newFile]);\n });\n reader.readAsDataURL(file);\n });\n };\n\n const onFileChange = e => {\n e.preventDefault();\n e.stopPropagation();\n const files = e.target.files || e.dataTransfer.files;\n handleFiles(files);\n };\n\n const uploadFiles = async (raw, index) => {\n const fd = new global.FormData();\n fd.append('file[]', raw, raw.name);\n\n try {\n const { data: { success, message } } = await requestLayer.post(\n `form/${formID}/projectFiles`,\n fd,\n {\n onUploadProgress: progressEvent => {\n const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);\n moveProgressBar(percentCompleted, index);\n },\n headers: { 'Content-Type': 'multipart/form-data' }\n }\n );\n\n if (success) {\n return true;\n }\n setErrorText(message);\n } catch (err) {\n setErrorText(err);\n }\n };\n\n const prepareFiles = () => {\n if (!loading && errorText === '') {\n setLoading(true);\n\n try {\n let uploadCount = 0;\n noteAttachments.forEach(async ({ raw }, i) => {\n const isUploaded = await uploadFiles(raw, i);\n\n if (isUploaded) {\n uploadCount++;\n }\n if (uploadCount === noteAttachments.length) {\n handleSave();\n }\n });\n } catch (err) {\n setErrorText(err);\n }\n }\n };\n\n useEffect(() => {\n if (editorRef.current) {\n editorRef.current.focus();\n }\n }, []);\n\n const saveAssignees = ({ emails, role }) => bulkShare(formID, { users: emails, role, message: shareMessage }).then(() => {\n setShareMessage('');\n waitingForPermissions.resolve(true);\n });\n\n const AttachmentButton = (\n (\n <>\n \n \n \n \n \n )\n );\n\n const AttachmentPreview = (\n
        \n {\n noteAttachments.map(({\n key, name, size, src, error\n }, i) => (\n \n \n
        \n {name}\n
        \n
        \n (\n {size}\n )\n
        \n
        \n {error ? (\n \n {`File size cannot be larger than ${uploadRules?.formattedSizePerFile}.`}\n \n ) : (\n \n \n \n )}\n !loading && setNoteAttachments(noteAttachments.filter(file => file.key !== key))}\n role=\"button\"\n aria-label={t.REMOVE_ATTACHMENTS}\n tabIndex=\"-1\"\n onMouseDown={e => e.preventDefault()}\n >\n \n \n \n ))\n }\n \n );\n\n // config object for waiting permission dialog\n const waitingPermissionConfig = {\n icon: IconExclamationCircleFilled,\n texts: {\n title: t.NEEDS_ACCESS,\n description: t.ACCESS_WARN,\n actionBtn: t.SHARE,\n collabText: t.COLLABORATOR,\n addMessageText: t.ADD_MESSAGE,\n canViewEditText: t.CANVIEW_EDIT\n },\n emails: waitingForPermissions?.emails,\n usersData: usersData\n };\n\n return (\n <>\n saveAssignees({ emails: waitingForPermissions.emails, role: 'supporter' })}\n onChangeTextArea={e => setShareMessage(e.target.value)}\n onClose={() => waitingForPermissions.resolve(false)}\n />\n
        \n
        \n \n }>\n \n \n
        \n {\n parentType === 'question' && noteAttachments.length > 0\n && AttachmentPreview\n }\n {actionDetails?.id &&
        }\n {\n (editorType === 'subThread' || isEditing) && noteAttachments.length > 0 && (\n AttachmentPreview\n )\n }\n {showButtons ? (\n <>\n
        \n {attachmentError}\n
        \n
        \n {\n (editorType || isEditing) && AttachmentButton\n }\n \n \n {usedButtonTexts.cancel.locale()}\n \n {\n if (noteAttachments.length > 0) {\n prepareFiles();\n } else {\n handleSave();\n }\n }}\n >\n {loading ? t.UPLOADING_FILES : usedButtonTexts.save.locale()}\n \n
        \n
        \n \n ) : null}\n
        \n \n \n );\n};\n\nNoteEditor.propTypes = {\n value: oneOf([shape({}), string]),\n attachments: arrayOf(shape({})),\n activeTab: string,\n onCancel: func,\n uploadRules: shape({\n sizePerFile: number,\n formattedSizePerFile: string,\n numberPerUpload: number\n }),\n onSave: func,\n onInputClick: func,\n disabled: bool,\n isAllowed: bool,\n onChange: func,\n showButtons: bool,\n parentID: string,\n parentType: string,\n className: string,\n user: shape({}),\n afterSave: func,\n isEditing: bool,\n submission: shape({}).isRequired,\n answers: answersPropType.isRequired,\n actionDetails: shape({}),\n editorRefProp: shape({}),\n formID: string,\n buttonTexts: shape({}),\n editorType: bool,\n attachmentState: string,\n setAttachmentState: func,\n isTeamMember: bool,\n teamMemberEmails: arrayOf(string)\n};\n\nNoteEditor.defaultProps = {\n value: '',\n attachments: [],\n activeTab: '',\n onCancel: () => {},\n onSave: () => {},\n onInputClick: () => {},\n disabled: false,\n isAllowed: true,\n onChange: null,\n showButtons: false,\n parentID: null,\n parentType: '',\n className: '',\n user: {},\n afterSave: f => f,\n isEditing: false,\n actionDetails: {},\n editorRefProp: {},\n formID: '',\n buttonTexts: {},\n editorType: '',\n uploadRules: {\n sizePerFile: 5000000, // 5MB per file\n formattedSizePerFile: '5 MB',\n numberPerUpload: 3\n },\n setAttachmentState: f => f,\n attachmentState: '',\n isTeamMember: false,\n teamMemberEmails: []\n};\n\nconst mapStateToProps = state => ({\n submission: activeSubmissionSelector(state),\n answers: answersSelector(state),\n formID: formIDSelector(state),\n isTeamMember: getIsTeamMember(state),\n teamMemberEmails: getTeamMemberEmails(state)\n});\n\nexport default connect(mapStateToProps, null)(NoteEditor);\n","import React, {\n useMemo, useState, useEffect, useContext\n} from 'react';\nimport { connect } from 'react-redux';\nimport { shape, string } from 'prop-types';\nimport Tethered from 'react-tether';\nimport { SubmissionThread, useThread } from '@jotforminc/workflow-components';\nimport { capitalizeFirstLetter } from '@jotforminc/utils';\n\nimport { CommentContext } from '../../contexts/Comment';\nimport NoteEditor from '../NoteEditor';\nimport {\n classNames, toggleHighlightAnswer\n} from '../../utils';\nimport SVG from '../SVG';\nimport { activeTabIDSelector, userRoleSelector } from '../../selectors';\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\n\nconst AnswerNotes = ({\n qid, text, activeTab, permissions, userRole\n}) => {\n const [visibleCommentQid, setVisibleCommentQid] = useContext(CommentContext);\n\n const [iconHover, setIconHover] = useState(false);\n const [showCommentButtons, setShowCommentButtons] = useState(true);\n // const [editorVisibility, setEditorVisibility] = useState(true);\n\n const { data, subThreads } = useThread();\n const entries = data ? (data.thread || data) : [];\n\n const filteredEntries = useMemo(() => (\n entries && entries.filter(entry => entry.actionType === 'COMMENT' && entry.actionDetails.parentType === 'question' && entry.actionDetails.parentID === qid)\n ), [entries]);\n\n const hasComment = !!filteredEntries.length;\n\n useEffect(() => {\n if (filteredEntries.length > 0) {\n setShowCommentButtons(false);\n }\n }, [filteredEntries]);\n\n const onAddNoteClick = () => {\n toggleHighlightAnswer(qid, true);\n setVisibleCommentQid(qid);\n };\n\n useEffect(() => {\n if (visibleCommentQid !== qid) {\n toggleHighlightAnswer(qid, false);\n }\n }, [visibleCommentQid, qid]);\n\n const isCollaborator = userRole === 'owner' || userRole === 'supporter';\n\n const visibilityOfComment = visibleCommentQid === qid;\n\n return (\n
        \n \n {permissions?.editNotes && activeTab !== 'sentbox' && (\n setIconHover(true)}\n onMouseLeave={() => setIconHover(false)}\n >\n \n
        \n )}\n {visibilityOfComment && (\n
        \n <>\n
        \n {'Comments:'.locale()}\n {text}\n
        setVisibleCommentQid(-1)} aria-hidden>\n \n
        \n
        \n
        \n \n {filteredEntries.length <= 0 && (\n setTimeout(() => setShowCommentButtons(false), 25)}\n onFocus={() => setShowCommentButtons(true)}\n onCancel={() => setVisibleCommentQid(-1)}\n afterSave={() => WatchmanRecorder.recordEvent('MentionisDone', capitalizeFirstLetter(activeTab))}\n editorType=\"inline\"\n />\n )}\n
        \n \n
        \n )}\n \n \n );\n};\n\nAnswerNotes.propTypes = {\n qid: string.isRequired,\n text: string.isRequired,\n activeTab: string,\n permissions: shape({}),\n userRole: string\n};\n\nAnswerNotes.defaultProps = {\n activeTab: '',\n permissions: {},\n userRole: ''\n};\n\nconst mapStateToProps = stateProps => ({\n activeTab: activeTabIDSelector(stateProps),\n userRole: userRoleSelector(stateProps)\n});\n\nexport default connect(mapStateToProps, null)(AnswerNotes);\n","import React, { memo, useMemo } from 'react';\nimport {\n string,\n bool,\n shape,\n arrayOf,\n oneOfType,\n number,\n func,\n node\n} from 'prop-types';\n\nimport { useFeatures } from '@paralleldrive/react-feature-toggles';\nimport { Permissions } from '@jotforminc/permissions';\nimport { capitalizeFirstLetter } from '@jotforminc/utils';\n\nimport {\n classNames,\n normalizeFieldName,\n generateSubstituteLabel,\n isPaymentField\n} from '../../utils';\n\nimport { getAnswerField } from '../../utils/getAnswerField';\n\nimport {\n MATRIX_FIELD_TABLEIFY_FIELDS,\n WRAPPED_QUESTIONS,\n WIDGETS\n} from '../../constants';\nimport GhostButton from '../GhostButton';\nimport InlineWrapper from '../InlineWrapper';\nimport AnswerNotes from '../AnswerNotes';\n\nconst areAnswersEqual = (\n {\n answer: prevAnswer, showMap: prevShowMap, locale: prevLocale,\n options_array: prevOptionsArray, fullContent: prevFullContent, showSublabels: prevShowSublabels,\n dateFormat: prevDateFormat, text: prevText, type: prevType\n },\n {\n answer: nextAnswer, showMap: nextShowMap, locale: nextLocale,\n options_array: nextOptionsArray, fullContent: nextFullContent, showSublabels: nextShowSublabels,\n dateFormat: nextDateFormat, text: nextText\n }\n) => {\n const answersEqual = prevAnswer === nextAnswer;\n const showMapsEqual = prevShowMap === nextShowMap;\n const localesEqual = prevLocale === nextLocale;\n const optionsArrayEqual = prevOptionsArray === nextOptionsArray;\n const fullContentEqual = prevFullContent === nextFullContent;\n const showSublabelsEqual = prevShowSublabels === nextShowSublabels;\n const dateFormatsEqual = prevDateFormat === nextDateFormat;\n let answerTextsEqual = true;\n\n const fieldType = prevType;\n\n switch (fieldType) {\n case 'control_text':\n answerTextsEqual = prevText === nextText;\n break;\n default:\n break;\n }\n\n return ![answersEqual, showMapsEqual, localesEqual, optionsArrayEqual, fullContentEqual, showSublabelsEqual, dateFormatsEqual, answerTextsEqual].some(item => item === false);\n};\n\nconst customWrappers = {\n control_inline: InlineWrapper\n};\n\nconst getAnswerFieldWrapper = (children, type, remainingProps) => {\n const Wrapper = customWrappers[type];\n return {children};\n};\n\nconst AnswerFieldWrapper = ({ condition, wrapper, children }) => (condition ? wrapper(children) : children);\n\nclass AnswerFieldErrorBoundary extends React.Component {\n constructor(props) {\n super(props);\n this.state = { error: false };\n }\n\n componentDidCatch = () => {\n this.setState({ error: true });\n };\n\n render() {\n const { children } = this.props;\n const { error } = this.state;\n\n if (error) return null;\n\n return children;\n }\n}\n\nAnswerFieldErrorBoundary.propTypes = {\n children: node.isRequired\n // qid: string.isRequired,\n // type: string.isRequired\n};\n\nconst Answer = memo(props => {\n const text = props.text || generateSubstituteLabel(props);\n\n const {\n type, className, style, addTag, standalone, setReplyVisibilityCustom, ...remainingProps\n } = props;\n const AnswerField = getAnswerField(type);\n const fieldType = `is${normalizeFieldName(type)}`;\n const inputType = remainingProps.inputType && capitalizeFirstLetter(remainingProps.inputType.split(' ').join('').toLowerCase());\n const inputTypeClass = inputType && `for${inputType}`;\n const tableifyClass = inputType && MATRIX_FIELD_TABLEIFY_FIELDS.includes(inputType) && 'isMatrixTable';\n const paymentFieldClass = isPaymentField(type) && 'isPayment';\n const permissions = Permissions?.value?.permissions;\n const features = useFeatures();\n const canUseNotes = permissions.editNotes && features.includes('submissionNotes');\n const isNewComment = features.includes('isNewComment');\n const isInlineWidget = WIDGETS.includes(props.selectedField);\n const handleClick = e => {\n if (fieldType === 'isEmail' && setReplyVisibilityCustom && permissions?.reply) {\n setReplyVisibilityCustom({\n type: 'Reply', useApi: true, title: 'reply', requestMore: false, customEmail: e.currentTarget.innerText\n });\n }\n };\n const notes = useMemo(() => {\n if (!canUseNotes) return null;\n\n if (isNewComment) {\n return (\n \n );\n }\n\n return (\n
        \n \n
        \n );\n }, [canUseNotes, isNewComment]);\n\n const customAnswerProps = useMemo(() => {\n switch (fieldType) {\n case 'isEmail':\n return {\n answerProps: {\n ...remainingProps.answerProps, onClick: e => handleClick(e), 'data-text': 'Reply', style\n }\n };\n case 'isTextarea':\n return {\n wysiwyg: 'Enable'\n };\n default:\n return {};\n }\n }, [remainingProps.answerProps, handleClick, style]);\n\n return AnswerField ? (\n \n getAnswerFieldWrapper(children, type, remainingProps)}\n >\n \n \n {notes}\n \n ) : null;\n}, areAnswersEqual);\n\nAnswer.propTypes = {\n addTag: func,\n type: string,\n text: string,\n className: string,\n style: shape({}),\n editMode: bool,\n labelProps: shape({}),\n optionsArray: arrayOf(shape({})),\n selectedField: string,\n qid: oneOfType([string, number]).isRequired,\n standalone: bool,\n setReplyVisibilityCustom: func\n};\n\nAnswer.defaultProps = {\n addTag: null,\n type: '',\n text: '',\n className: '',\n style: {},\n editMode: false,\n labelProps: {},\n optionsArray: [],\n selectedField: null,\n standalone: false,\n setReplyVisibilityCustom: null\n};\n\nexport default Answer;\n","import React from 'react';\n\nimport Answer from '../Answer';\n\nconst LabellessAnswer = props => (\n \n);\n\nLabellessAnswer.propTypes = Answer.propTypes;\nLabellessAnswer.defaultProps = Answer.defaultProps;\n\nexport default LabellessAnswer;\n","import React, { memo } from 'react';\nimport LabellessAnswer from '../LabellessAnswer';\n\nimport {\n submissionPropType,\n questionPropType\n} from '../../constants/proptypes';\n\nconst areTagsEqual = (\n { submission: { answers: prevAnswers }, question: { qid: prevQid, options_array: prevOptionsArray } },\n { submission: { answers: nextAnswers }, question: { qid: nextQid, options_array: nextOptionsArray } }\n) => (\n (prevAnswers[prevQid] && prevAnswers[prevQid].answer) === (nextAnswers[nextQid] && nextAnswers[nextQid].answer)\n && (prevOptionsArray === nextOptionsArray)\n);\nconst SubmissionWidget = ({ submission, question, ...remainingProps }) => {\n const { options_array: optionsArray = {} } = question;\n const filteredTags = Object.fromEntries(Object.entries(optionsArray).filter(([, value]) => (typeof value.isDeleted !== 'string' && !value.isDeleted) || (value.isDeleted === 'false')));\n return (\n \n );\n};\n\nSubmissionWidget.propTypes = {\n submission: submissionPropType.isRequired,\n question: questionPropType.isRequired\n};\n\nexport default memo(SubmissionWidget, areTagsEqual);\n","import React from 'react';\nimport { string } from 'prop-types';\n\nimport { useMomentDate } from '../../hooks';\nimport { DEFAULT_DATE_FORMAT } from '../../constants';\nimport { translatedProps } from '../../constants/proptypes';\nimport { match, ANY } from '../../vendor/pampy';\n\nconst ShortDate = ({ date, fullDateFormat, t }) => {\n const [currentDate] = useMomentDate();\n const [dateObject] = useMomentDate(date, 'YYYY-MM-DD HH:mm ZZ');\n\n const formattedDate = match(\n dateObject,\n // Same minute\n dateObj => currentDate.diff(dateObj, 'minutes') < 1, dateObj => ({ dateStructure: t.NOW, numericDate: dateObj }),\n // Difference less than 60 mins\n dateObj => currentDate.diff(dateObj, 'minutes') < 60, dateObj => ({ dateStructure: t.X_MINUTE_SHORT, numericDate: currentDate.diff(dateObj, 'minutes') || 1 }),\n // Difference less than 24 hours\n dateObj => currentDate.diff(dateObj, 'hours') < 24, dateObj => ({ dateStructure: t.X_HOUR_SHORT, numericDate: currentDate.diff(dateObj, 'hours') }),\n // Difference less than 7 day\n dateObj => currentDate.diff(dateObj, 'days') < 7, dateObj => ({ dateStructure: t.X_DAY_SHORT, numericDate: currentDate.diff(dateObj, 'days') }),\n // Given date belongs to previous year\n dateObj => currentDate.year() !== dateObj.year(), dateObj => dateObj.format('MMM DD, YYYY'),\n // For the remaining\n ANY, dateObj => dateObj.format('MMM DD')\n );\n // Translate the date if required\n const translatedDate = typeof formattedDate === 'object'\n ? formattedDate.dateStructure.replace('XX', formattedDate.numericDate)\n : formattedDate;\n\n return (\n
        \n
        \n
        \n \n {translatedDate}\n \n
        \n {dateObject.format(fullDateFormat)}\n
        \n
        \n
        \n
        \n );\n};\n\nShortDate.propTypes = {\n date: string.isRequired,\n fullDateFormat: string,\n ...translatedProps\n};\n\nShortDate.defaultProps = {\n fullDateFormat: DEFAULT_DATE_FORMAT\n};\n\nexport default ShortDate;\n","import React from 'react';\nimport {\n string,\n element,\n func,\n oneOfType\n} from 'prop-types';\nimport { Feature } from '@paralleldrive/react-feature-toggles';\nimport { isActiveFeatureName } from '@paralleldrive/feature-toggles';\n\nconst FeatureComponent = ({\n name,\n inactiveComponent,\n activeComponent,\n ...props\n}) => (\n \n {({ features }) => (\n isActiveFeatureName(name, features) ? activeComponent : inactiveComponent\n )}\n \n);\n\nFeatureComponent.propTypes = {\n name: string.isRequired,\n activeComponent: oneOfType([func, element]).isRequired,\n inactiveComponent: oneOfType([func, element])\n};\n\nFeatureComponent.defaultProps = {\n inactiveComponent: null\n};\n\nexport default FeatureComponent;\n","/* eslint-disable complexity */\nimport React, { useState, useMemo } from 'react';\nimport {\n bool,\n func,\n string\n} from 'prop-types';\nimport moment from 'moment-timezone';\nimport { WorkflowStatus, useThread } from '@jotforminc/workflow-components';\nimport { usePermissions, useRole } from '@jotforminc/permissions';\nimport { Checkbox } from '@jotforminc/magnet';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport { safeJSONParse, capitalizeFirstLetter } from '@jotforminc/utils';\nimport { useDelayed } from '@jotforminc/hooks';\n\nimport Tethered from 'react-tether';\nimport { PortalTooltip } from '@jotforminc/tooltip';\nimport { t as translation } from '@jotforminc/translation';\nimport SVG from '../SVG';\nimport GhostButton from '../GhostButton';\nimport PurgeButton from '../PurgeButton';\nimport SubmissionHeader from '../SubmissionHeader';\nimport SubmissionWidget from '../SubmissionWidget';\nimport ShortDate from '../ShortDate';\nimport Feature from '../Feature';\nimport { useMomentDate } from '../../hooks';\nimport WatchmanRecorder, { withWatchMan } from '../../utils/WatchmanRecorder';\nimport { deleteRequest } from '../../api';\n\nimport {\n NUMBER_OR_STRING_PROPTYPE,\n submissionPropType,\n submissionWidgetPropType,\n headerFieldPropType,\n translatedProps\n} from '../../constants/proptypes';\n\nimport {\n classNames,\n getPriceWithCurrency\n} from '../../utils';\nimport { getAnswerTag, getPrimaryAndSecondaryAnswer } from '../../utils/Submissions';\n\n// eslint-disable-next-line max-statements\nconst SubmissionListItem = ({\n userType,\n activeTab,\n isSelected,\n className,\n submission,\n tagQuestion,\n setSubmission,\n onRenewSubmission,\n headerField,\n subheaderField,\n onSetSubmissionFlag,\n fileUploadQid,\n onSelectSubmission,\n onPurgeSubmission,\n submissionIndex = 1,\n submissionDateFormat,\n submissionDateLanguage,\n t,\n isFormOwner,\n changeHighlightPendingApproval,\n isPwa,\n isPreviousOrders,\n isTeamContextAllowed,\n showTaskStatus,\n changeFilter,\n aiAgents\n}) => {\n const permissions = usePermissions();\n const { data: threadData } = useThread();\n const thread = threadData?.thread || null;\n const role = useRole();\n const isFavorite = submission.flag === '1';\n const hasAttachment = submission.answers[fileUploadQid] && submission.answers[fileUploadQid].answer && submission.answers[fileUploadQid].answer.length > 0;\n const isDraft = submission.status === 'ENABLED';\n const isIncomplete = activeTab === 'incompleteSubmissions';\n const isFormUser = userType === 'formuser';\n const showRemaining = activeTab === 'trash';\n const showFavorite = permissions.star && activeTab !== 'trash' && !isIncomplete;\n const deleteInterval = isDraft ? 90 : 30;\n const [isTooltipVisible, setTooltipVisibility] = useState(false);\n const [, clearTooltip, setTooltip] = useDelayed(setTooltipVisibility, 666);\n const showPendingApproval = submission.hasPendingApproval;\n const isAllSentbox = activeTab === 'sentbox' && window.location.pathname.indexOf('/sentbox/all') > -1;\n const answerTag = isAllSentbox ? getAnswerTag({ answers: submission.answers }) : false;\n const isPreviousOrdersMode = isPreviousOrders && isPwa;\n const aiAgent = aiAgents && aiAgents[submission?.aiAgentID];\n\n const product = useMemo(() => {\n if (!isPreviousOrdersMode || !submission) return null;\n const obj = safeJSONParse(submission.answers[11].answer?.paymentArray);\n const products = obj?.shortView?.products || null;\n if (!products) return { images: [], total: 0 };\n const images = products.filter(item => Object.prototype.hasOwnProperty.call(item, 'image'));\n return { ...obj, images: images };\n }, [isPreviousOrdersMode, submission]);\n const onSelect = e => {\n e.stopPropagation();\n onSelectSubmission();\n };\n\n const onFavorite = withWatchMan('Star-SingleSubmission', `${capitalizeFirstLetter(activeTab)} - List Star Icon`, e => {\n e.stopPropagation();\n onSetSubmissionFlag(isFavorite ? '0' : '1');\n });\n\n const onPendingApprovalClick = () => {\n changeHighlightPendingApproval(true);\n };\n\n const getUpdateDate = () => {\n return submission.updated_at === null ? moment() : moment(submission.updated_at);\n };\n\n const getRemainingDays = () => {\n return getUpdateDate().add(deleteInterval, 'days').diff(moment(), 'days');\n };\n\n const serverTimezoneOffset = moment(submission.created_at).tz('America/New_York').format('Z');\n\n const onPurgeRequestedSubmission = () => {\n setTooltipVisibility(false);\n onPurgeSubmission();\n };\n\n const onDiscardDeleteRequest = async () => {\n try {\n const data = await deleteRequest(submission?.deleteRequestID);\n if (data === 'success') {\n onRenewSubmission(submission.id, false);\n }\n } catch {\n console.log('error');\n }\n };\n\n const renderRightCorner = () => (\n
        \n {product ? (\n <>\n
        \n
        {getPriceWithCurrency(product.total, product.currency)}
        \n \n ) : (\n <>\n \n {showFavorite && isTeamContextAllowed && (\n
        \n \n
        \n )}\n \n )}\n
        \n );\n\n const RequestDeleteTooltip = (isFormOwner || role === 'assignee') && (\n \n setTooltip(false)}\n onMouseEnter={() => setTooltipVisibility(true)}\n name=\"IconExclamationCircleFilled\"\n />\n {isTooltipVisible && (\n setTooltipVisibility(false)}\n className='jfTooltip inboxTooltip tooltip-inner arrowLeft'\n onClick={() => setTooltip(true)}\n onKeyDown={() => {}}\n style={{ padding: 16 }}\n >\n {(activeTab === 'sentbox' && role === 'assignee') && t.DELETE_REQUEST_SENT}\n {(activeTab === 'inbox' || activeTab === 'trash') && isFormOwner && (\n \n \n {t.USER_REQUESTED_TO_DELETE.replace('{username}', ((submission?.submittedBy?.name) || 'User'))}\n \n \n \n {t.DISCARD}\n \n setTooltipVisibility(false)}\n />\n \n \n )}\n \n )}\n \n )}\n />\n\n );\n\n const submissionDate = (() => {\n const [formattedDate] = useMomentDate(`${submission.created_at} ${serverTimezoneOffset}`, 'YYYY-MM-DD HH:mm ZZ');\n return formattedDate.format(submissionDateFormat);\n })();\n\n const primaryField = { field: headerField };\n\n const secondaryField = isFormUser && activeTab !== 'inbox' ? (\n
        \n {submissionDate}\n
        \n ) : { field: subheaderField };\n\n // eslint-disable-next-line\n let [headerTitle, headerSubtitle] = getPrimaryAndSecondaryAnswer({\n submission,\n primary: primaryField,\n secondary: secondaryField,\n submissionIndex,\n t,\n formatOptions: {\n locale: submissionDateLanguage,\n dateFormat: submissionDateFormat\n }\n });\n\n if (activeTab === 'sentbox') {\n if (submission?.form?.title && window.location.pathname.indexOf('/sentbox/all') > -1) {\n headerTitle = submission.form.title;\n } else if (isPreviousOrdersMode) {\n headerTitle = submissionDate;\n }\n }\n\n const showWorkflowTaskStatus = showTaskStatus || (submission && submission?.workflowStatus);\n\n const handleFilterByBadge = filter => {\n if (filter['conversation_type:eq'] || filter['ai_agent_id:ne']) {\n // possible action tags: incomplete, submission, ai-conversations\n const actionTag = filter['conversation_type:eq'] ?? 'ai-conversations';\n WatchmanRecorder.recordEvent(`${actionTag}-sl`, 'inbox-ai-transcript');\n }\n\n changeFilter(filter);\n };\n\n return (\n \n
        \n {!isIncomplete ? (\n \n \n
        \n ) :
        }\n
        \n
        \n
        \n
        \n \n
        \n
        \n \n {showRemaining ? (\n
        \n
        \n \n
        \n
        \n {`${getRemainingDays()} days`}\n
        \n
        \n )\n : (renderRightCorner())}\n
        \n {showPendingApproval && (\n \n \n
        \n )}\n />\n )}\n \n \n
        \n )}\n />\n
        \n {hasAttachment && (\n
        \n
        \n \n
        \n
        \n )}\n
        \n \n
        \n { answerTag }\n {product && (\n <>\n
        \n {[...Array(product.images.length > 3 ? 4 : product.images.length)].map((url, index) => {\n if (index === 3) return {`+${product.images.length - 3}`};\n return (\n \n {product.images[index].title}\n \n );\n })}\n
        \n \n )}\n \n )}\n />\n\n
        \n {product && (\n
        \n {`${product.shortView?.products?.length || ''} `}\n {Number(product.shortView?.products?.length) > 1 ? t.ITEMS : t.ITEM}\n
        \n )}\n {\n permissions?.readTags && (\n \n
        \n {tagQuestion && (\n \n )}\n
        \n
        \n )}\n />\n )\n }\n
        \n {submission?.aiAgentChatID && (\n {\n if (activeTab === 'conversations') {\n return;\n }\n\n handleFilterByBadge({ 'ai_agent_id:ne': 'null' });\n }}\n >\n {aiAgent && aiAgent?.avatarIconUrl ? (\n \n \n \n ) : (\n \n )}\n \n )}\n\n {submission?.aiAgentChatID && !submission?.aiIncompleteSubmission && !submission?.aiDraftlessSubmission && activeTab === 'conversations' && (\n handleFilterByBadge({ 'conversation_type:eq': 'submission' })}\n >\n {translation('Submission')}\n \n )}\n \n \n \n \n );\n};\n\nSubmissionListItem.propTypes = {\n onSetSubmissionFlag: func,\n setSubmission: func.isRequired,\n className: string,\n tagQuestion: submissionWidgetPropType.isRequired,\n submission: submissionPropType.isRequired,\n fileUploadQid: string,\n headerField: headerFieldPropType,\n subheaderField: headerFieldPropType,\n onSelectSubmission: func.isRequired,\n submissionIndex: NUMBER_OR_STRING_PROPTYPE.isRequired,\n isSelected: bool,\n submissionDateFormat: string.isRequired,\n submissionDateLanguage: string.isRequired,\n changeHighlightPendingApproval: func,\n showTaskStatus: bool.isRequired,\n isTeamContextAllowed: bool.isRequired,\n ...translatedProps\n};\n\nSubmissionListItem.defaultProps = {\n onSetSubmissionFlag: f => f,\n className: '',\n fileUploadQid: '',\n isSelected: false,\n headerField: '',\n subheaderField: '',\n changeHighlightPendingApproval: f => f\n};\n\nexport default SubmissionListItem;\n","import React from 'react';\nimport {\n node,\n string,\n oneOf,\n func\n} from 'prop-types';\nimport { capitalizeFirstLetter } from '@jotforminc/utils';\nimport { classNames } from '../../utils';\nimport './Pill.scss';\n\nconst Pill = ({\n children,\n className,\n type,\n state,\n icon,\n onClick,\n ...rest\n}) => {\n return (\n \n {icon &&
        {icon}
        }\n
        \n {children}\n
        \n \n );\n};\n\nPill.propTypes = {\n children: node,\n className: string,\n onClick: func,\n type: oneOf(['ghost']),\n state: oneOf(['info']),\n icon: node\n};\n\nPill.defaultProps = {\n children: null,\n className: null,\n onClick: null,\n type: null,\n state: null,\n icon: null\n};\n\nexport default Pill;\n","import React, { forwardRef } from 'react';\nimport { node, bool } from 'prop-types';\nimport { classNames } from '../../utils';\n\nconst ContextMenu = forwardRef(({\n children,\n visible\n}, ref) => {\n return (\n
        \n {children}\n
        \n );\n});\n\nContextMenu.propTypes = {\n children: node,\n visible: bool\n};\n\nContextMenu.defaultProps = {\n children: null,\n visible: null\n};\n\nexport default ContextMenu;\n","import React from 'react';\nimport { bool, func, string } from 'prop-types';\nimport { ButtonField as Button } from '@jotforminc/button-field';\n\nimport GhostButton from '../GhostButton';\nimport { classNames } from '../../utils';\nimport { withWatchMan } from '../../utils/WatchmanRecorder';\n\nimport SVG from '../SVG';\nimport { translatedProps } from '../../constants/proptypes';\n\nconst ArchiveButton = ({\n onClick,\n useGhostButton,\n disabled,\n isArchived,\n iconNameArchive,\n iconNameUnarchive,\n t, // eslint-disable-line\n eventTarget,\n isSingle\n}) => {\n const actionType = isArchived ? 'MovetoInbox' : 'Archive';\n const actionDetail = isSingle ? 'SingleSubmission' : 'SelectedSubmissions';\n const buttonOnClick = withWatchMan(`${actionType}-${actionDetail}`, eventTarget, onClick);\n\n return !useGhostButton ? (\n : }\n onClick={buttonOnClick}\n disabled={disabled}\n >\n {isArchived ? t.MOVE_TO_INBOX : t.ARCHIVE}\n \n ) : (\n \n );\n};\n\nArchiveButton.propTypes = {\n useGhostButton: bool,\n isArchived: bool,\n onClick: func.isRequired,\n disabled: bool,\n iconNameArchive: string,\n iconNameUnarchive: string,\n isSingle: bool,\n ...translatedProps\n};\n\nArchiveButton.defaultProps = {\n useGhostButton: false,\n isArchived: true,\n disabled: false,\n iconNameArchive: 'IconBoxArchiveFilled',\n iconNameUnarchive: 'IconBoxArchiveArrowUpFilled',\n isSingle: false\n};\n\nexport default ArchiveButton;\n","import React from 'react';\nimport { bool, func, string } from 'prop-types';\nimport { ButtonField as Button } from '@jotforminc/button-field';\n\nimport SVG from '../SVG';\nimport { translatedProps } from '../../constants/proptypes';\nimport { withWatchMan } from '../../utils/WatchmanRecorder';\n\nconst ReadButton = ({\n isUnread,\n onClick,\n t, // eslint-disable-line,\n disabled,\n iconNameUnread,\n iconNameRead,\n eventTarget,\n isSingle\n}) => {\n const actionType = isUnread ? 'MarkasRead' : 'MarkasUnread';\n const actionDetail = isSingle ? 'SingleSubmission' : 'SelectedSubmissions';\n const onReadUnread = withWatchMan(`${actionType}-${actionDetail}`, eventTarget, () => {\n onClick(isUnread ? '0' : '1');\n });\n return (\n : }\n onClick={onReadUnread}\n disabled={disabled}\n >\n {isUnread ? t.MARK_AS_READ : t.MARK_AS_UNREAD}\n \n );\n};\n\nReadButton.propTypes = {\n isUnread: bool,\n onClick: func.isRequired,\n iconNameUnread: string,\n iconNameRead: string,\n isSingle: bool,\n ...translatedProps\n};\n\nReadButton.defaultProps = {\n isUnread: null,\n iconNameUnread: 'IconEnvelopeClosedFilled',\n iconNameRead: 'IconEnvelopeOpenedFilled',\n isSingle: false\n};\n\nexport default ReadButton;\n","import React from 'react';\nimport { bool, func, string } from 'prop-types';\nimport { ButtonField as Button } from '@jotforminc/button-field';\n\nimport SVG from '../SVG';\nimport { translatedProps } from '../../constants/proptypes';\nimport { withWatchMan } from '../../utils/WatchmanRecorder';\n\nconst FavoriteButton = ({\n isFavorite,\n onClick,\n t, // eslint-disable-line\n disabled,\n iconNameStar,\n iconNameUnstar,\n eventTarget,\n isSingle\n}) => {\n const action = `Star-${isSingle ? 'SingleSubmission' : 'SelectedSubmissions'}`;\n const onFavorite = withWatchMan(action, eventTarget, () => {\n onClick(isFavorite ? '0' : '1');\n });\n return (\n : }\n onClick={onFavorite}\n disabled={disabled}\n >\n {isFavorite ? t.MARK_AS_UNSTARRED : t.MARK_AS_STARRED}\n \n );\n};\n\nFavoriteButton.propTypes = {\n isFavorite: bool,\n onClick: func.isRequired,\n iconNameStar: string,\n iconNameUnstar: string,\n ...translatedProps\n};\n\nFavoriteButton.defaultProps = {\n isFavorite: null,\n iconNameStar: 'iconStarFilled',\n iconNameUnstar: 'IconStarMinusFilled'\n};\n\nexport default FavoriteButton;\n","import React, { useState, useEffect } from 'react';\nimport {\n string,\n func,\n bool\n} from 'prop-types';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport keyboardJS from '../../vendor/keyboard';\n\nimport SVG from '../SVG';\nimport GhostButton from '../GhostButton';\n\nimport { translatedProps } from '../../constants/proptypes';\nimport { classNames, isEditingText } from '../../utils';\nimport { withWatchMan } from '../../utils/WatchmanRecorder';\n\nconst DeleteButton = ({\n eventTarget,\n onDelete: _onDelete,\n // dialogTitle,\n // dialogSubtitle,\n useGhostButton,\n enableDeleteKey,\n disableDeleteConfirmation,\n disabled,\n activeTab,\n iconName,\n t,\n isSingle\n}) => {\n const [, setWarningVisibility] = useState(false);\n\n const actionType = activeTab === 'drafts' ? 'Discard' : 'MoveToTrash';\n const action = `${actionType}-${isSingle ? 'SingleSubmission' : 'SelectedSubmissions'}`;\n const onDelete = withWatchMan(action, eventTarget, _onDelete);\n\n const onMoveToTrashClick = () => {\n if (disableDeleteConfirmation) {\n return onDelete();\n }\n\n setWarningVisibility(true);\n };\n\n const onKeyboardDelete = e => {\n if (!isEditingText()) {\n e.preventDefault();\n onMoveToTrashClick();\n }\n };\n\n const buttonText = (() => {\n switch (activeTab) {\n case 'drafts':\n return t.DISCARD;\n case 'sentbox':\n return t.MOVE_TO_TRASH;\n default:\n return t.MOVE_TO_TRASH;\n }\n })();\n\n useEffect(() => {\n if (enableDeleteKey) {\n const _onKeyboardDelete = withWatchMan(action, `${activeTab} - Keyboard Delete Button`, onKeyboardDelete);\n keyboardJS.bind('delete', _onKeyboardDelete);\n return () => keyboardJS.unbind('delete', _onKeyboardDelete);\n }\n }, [enableDeleteKey]);\n\n return !useGhostButton ? (\n )}\n onClick={onDelete}\n disabled={disabled}\n >\n {buttonText}\n \n ) : (\n \n );\n};\n\nDeleteButton.propTypes = {\n onDelete: func.isRequired,\n eventTarget: string,\n // dialogTitle: string,\n disabled: string,\n // dialogSubtitle: arrayOf(string),\n disableDeleteConfirmation: bool,\n enableDeleteKey: bool,\n useGhostButton: bool,\n activeTab: string,\n iconName: string,\n isSingle: bool,\n ...translatedProps\n};\n\nDeleteButton.defaultProps = {\n eventTarget: 'toolbar',\n // dialogTitle: '',\n // dialogSubtitle: null,\n disableDeleteConfirmation: false,\n enableDeleteKey: false,\n useGhostButton: false,\n activeTab: '',\n disabled: '',\n iconName: 'IconTrashFilled',\n isSingle: false\n};\n\nexport default DeleteButton;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { defaultMemoize } from 'reselect';\n\nconst findForm = defaultMemoize((forms, formId) => {\n const form = forms.find(f => f.id === formId);\n return form;\n});\n\nconst mapStateToProps = ({ user: { forms } }, { submission: { form_id: formId } }) => {\n return {\n form: findForm(forms, formId)\n };\n};\n\nexport const withFormEnhancer = Comp => connect(mapStateToProps)(props => {\n return ;\n});\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { t } from '@jotforminc/translation';\nimport { safeJSONParse, isBrightColor } from '@jotforminc/utils';\nimport isNaN from 'lodash/isNaN';\nimport {\n IconLockFilled, IconEnvelopeOpenedFilled, IconEnvelopeClosedFilled, IconStar, IconStarFilled, IconXmark,\n IconFunnelFilled, IconAiFilled,\n IconCircleFilled\n} from '@jotforminc/svg-icons';\n\nimport {\n getPreparedFilters,\n ColorList,\n extractColor,\n filtersDifferentiate,\n checkKeyAndValueExistsOnLockedFilters,\n BOARD_SOURCE_FORM_QUESTION,\n BOARD_QUESTION_VALUES\n} from '../utils';\nimport { operators, allTimeStr, customStr } from './constants';\nimport '@jotforminc/jotform.css';\n\nimport '../styles/_jfFilter.scss';\n\nexport default function FilterButton({\n filters: filterObj = {},\n questions = {},\n onClick,\n onDeleteFilter,\n onRemoveSingle = null,\n isNew = false,\n activeViewLockedFilters = {},\n questionValuesMap = {}\n}) {\n const filterKeys = Object.keys(filterObj);\n const submissionFilters = filterKeys.filter(f => (f.includes('flag') || f.includes('new') || f.includes('ai_agent_id') || f.includes('conversation_type')));\n const answerFilters = filterKeys.filter(f => !(f.includes('flag') || f.includes('new') || f.includes('ai_agent_id') || f.includes('conversation_type')));\n const filters = filtersDifferentiate([...submissionFilters, ...answerFilters], filterObj);\n\n const extendedFilters = getPreparedFilters(filters); // for timeFilterText\n\n if (Object.keys(filters).length === 0) {\n return (\n
        \n \n {t('Filter')}\n \n \n
        \n );\n }\n\n const getFilterQuestion = f => {\n const [qid] = f.split(':');\n const questionID = qid.replace('q', '');\n return questions[questionID];\n };\n\n const getValue = f => {\n const value = filters[f].includes('
        ') ? filters[f].split('
        ')[0] : filters[f];\n return value.replace('{', '').replace('}', '');\n };\n\n const getFilterValueColor = (_f, isSample) => {\n const f = _f === 'timeFilterText' ? 'created_at' : _f;\n const question = getFilterQuestion(f);\n const isSheetField = question.sheetField && question.sheetField === 'Yes';\n\n if ((isSheetField && ['control_radio', 'control_checkbox'].indexOf(question.type) > -1) || question.type === 'control_documentStatus') {\n const optionsArray = safeJSONParse(question.options_array, question.options_array);\n const filterValue = getValue(f);\n return optionsArray[filterValue].color;\n }\n if ((isSheetField && question.type === 'control_sheetbox') || (isSample)) {\n return '#FFFFFF';\n }\n\n if (question.optionsExtender && question.optionsExtender !== '{}') {\n const optionsExtender = safeJSONParse(question.optionsExtender || '{}');\n const filterValue = getValue(f);\n const extended = optionsExtender[filterValue];\n if (extended?.color) {\n return extended.color;\n }\n }\n\n const filterIndex = Object.keys(_f === 'timeFilterText' ? filters : extendedFilters).indexOf(_f);\n return extractColor(filterIndex, ColorList).backgroundColor;\n };\n\n const removeFilter = (e, key, value) => {\n e.preventDefault();\n e.stopPropagation();\n if (onRemoveSingle) onRemoveSingle(key, value);\n };\n\n // eslint-disable-next-line complexity, max-statements\n const getFilterValue = (f, isSample, isFilterLocked = false) => {\n const question = getFilterQuestion(f);\n\n if (f === 'selectedFormTitle') {\n return (\n \n {extendedFilters[f]}\n \n );\n }\n let innerElement = extendedFilters[f];\n let prefixElement = null;\n let filterItemClass = '';\n if (!question) return null;\n\n const isSheetField = question.sheetField && question.sheetField === 'Yes';\n const isWorkflowField = question.workflowField && question.workflowField === '1';\n let valueColor = getFilterValueColor(f);\n\n if ((isSheetField && ['control_radio', 'control_checkbox'].indexOf(question.type) > -1) || isWorkflowField || question.type === 'control_documentStatus') {\n const optionsArray = safeJSONParse(question.options_array, question.options_array);\n const filterValue = getValue(f);\n if (optionsArray[filterValue]) innerElement = optionsArray[filterValue].value;\n } else if (isSheetField && question.type === 'control_sheetbox') {\n const filterIcon = extendedFilters[f] === '1' ? : ;\n filterItemClass = 'hasIcon';\n if (isSample) {\n innerElement = (\n <>\n {question.text}\n {filterIcon}\n \n );\n } else {\n const filterValueText = extendedFilters[f] === '1' ? 'Checked' : 'Unchecked';\n innerElement = (\n <>\n {filterIcon}\n {' '}\n {t(filterValueText)}\n \n );\n }\n } else if (question.optionsExtender && question.optionsExtender !== '{}') {\n const optionsExtender = safeJSONParse(question.optionsExtender || '{}');\n const filterValue = getValue(f);\n const extended = optionsExtender[filterValue];\n innerElement = extended ? extended.value : filterValue;\n } else if (question.type === 'control_submissionSubmittedVia' && question.portals) {\n const filteredApp = question.portals[innerElement];\n if (filteredApp) {\n innerElement = filteredApp.title;\n }\n } else if (question.type === 'control_assignee') {\n const optionsArray = safeJSONParse(question?.options_array, {});\n const filterValue = getValue(f);\n const option = optionsArray[filterValue];\n\n innerElement = option?.value?.text || '';\n valueColor = '#fff';\n filterItemClass = classnames({\n assigneeField: true,\n isCurrentUser: option?.isCurrentUser\n });\n prefixElement = {innerElement};\n }\n\n if (question.name === BOARD_SOURCE_FORM_QUESTION.name) {\n const filteredFormsKey = BOARD_QUESTION_VALUES[BOARD_SOURCE_FORM_QUESTION.qid];\n const filterItem = questionValuesMap[filteredFormsKey].find(_q => _q.id === innerElement)?.title || innerElement;\n innerElement = filterItem;\n }\n\n let style = { backgroundColor: valueColor };\n if (question.type === 'control_documentStatus' || question.type === 'control_radio' || question.type === 'control_checkbox') {\n if (isBrightColor(valueColor)) {\n style = { backgroundColor: valueColor, color: '#2b3245' };\n } else {\n style = { backgroundColor: valueColor, color: '#FFF' };\n }\n }\n\n return (\n \n {prefixElement}\n {isFilterLocked && (\n \n \n \n )}\n {innerElement}\n {isNew && isSample && (\n \n removeFilter(e, f, extendedFilters[f])} className=\"jfFilter-filterItem-remove-center\" style={{ padding: 0 }}>\n \n \n \n )}\n \n );\n };\n\n const getSubmissionFilterSample = (r, showText = false) => {\n const [prop, operator] = r.split(':');\n const filterValue = parseInt(filters[r], 10);\n\n if (prop === 'flag' && operator === 'eq') {\n if (filterValue) {\n return ;\n }\n return ;\n }\n\n if (prop === 'ai_agent_id') {\n if (showText) {\n return (\n <>\n \n Conversations\n \n );\n }\n return ;\n }\n\n if (prop === 'conversation_type') {\n if (showText) {\n // eslint-disable-next-line no-use-before-define\n return getSubmissionFilterText(r);\n }\n return ;\n }\n\n if (prop === 'new' && filterValue === 0) {\n if (operator === 'eq') {\n return ();\n }\n return ;\n }\n };\n\n const getSubmissionFilterText = r => {\n const [prop, operator] = r.split(':');\n let filterValue = parseInt(filters[r], 10);\n if (isNaN(filterValue)) {\n filterValue = filters[r];\n }\n\n if (prop === 'flag' && operator === 'eq') {\n if (filterValue) {\n return 'Starred';\n }\n return 'Unstarred';\n }\n\n if (prop === 'formIDs') {\n return 'Form';\n }\n\n if (prop === 'new' && filterValue === 0) {\n if (operator === 'eq') {\n return 'Read';\n }\n return 'Unread';\n }\n\n if (prop === 'ai_agent_id') {\n if (operator === 'ne') {\n return 'Conversations';\n }\n return 'No Conversations';\n }\n\n if (prop === 'conversation_type') {\n if (filterValue === 'submission') {\n return 'Submission';\n }\n return 'Incomplete';\n }\n };\n\n const getSubmissionFilterRules = (r, i) => {\n const filterIcon = getSubmissionFilterSample(r);\n const filterText = getSubmissionFilterText(r);\n return (\n
        \n {`${i + 1}.`}\n Entries EQUALS to\n \n {filterIcon}\n {filterText}\n \n
        \n );\n };\n\n const filterSamples = Object.keys(filters).map((f, i) => {\n const isSubmissionFilter = f.indexOf('flag') > -1 || f.indexOf('new') > -1;\n const isAIFilter = f.indexOf('ai_agent_id') > -1;\n const isAiSubmissionFilter = filters[f] === 'submission';\n const isAiIncompleteFilter = filters[f] === 'incomplete';\n const isConversationFilter = isAiIncompleteFilter || isAiSubmissionFilter;\n const isAllTimeFilter = f.indexOf('timeFilterText') > -1;\n const isFormFilter = f.indexOf('selectedFormTitle') > -1;\n const isFilterLocked = checkKeyAndValueExistsOnLockedFilters(f, filters[f], activeViewLockedFilters);\n\n if (isFormFilter) {\n return (\n \n {filters[f]}\n
        \n );\n }\n\n if (isSubmissionFilter || isAIFilter || isConversationFilter) {\n return (\n \n {getSubmissionFilterSample(f, isConversationFilter || isAIFilter)}\n \n );\n }\n\n if (isAllTimeFilter) {\n if ([allTimeStr, customStr].indexOf(filters[f]) > -1) return;\n return (\n \n {filters[f]}\n \n );\n }\n\n if (i < 2) {\n return getFilterValue(f, true, isFilterLocked);\n }\n if (i === 2) {\n return (\n {`+${Object.keys(filters).length - 2}`}\n );\n }\n return null;\n }).filter(f => f);\n\n const filterRules = Object.keys(extendedFilters).filter(f => f !== 'formIDs:eq').map((r, i) => {\n const isFilterLocked = checkKeyAndValueExistsOnLockedFilters(r, extendedFilters[r], activeViewLockedFilters);\n const question = getFilterQuestion(r);\n // For multiple valued filters, split the given number from the key.\n const [key] = r.split('#');\n const [qid, operator] = key.split(':');\n if (qid === 'flag' || qid === 'new' || qid === 'ai_agent_id' || qid === 'conversation_type') {\n return getSubmissionFilterRules(r, i);\n }\n\n let operatorLabel = '';\n let questionLabel = '';\n let questionIcon = '';\n if (qid === 'selectedFormTitle') {\n operatorLabel = 'EQUALS';\n questionLabel = 'Form';\n } else {\n questionLabel = question ? question.text : '';\n questionIcon = question ? question.icon : '';\n operatorLabel = operators.find(o => o.name === operator)?.text || '';\n }\n if (!question) return null;\n\n return (\n
        \n {`${i + 1}.`}\n \n {questionIcon}\n {questionLabel}\n \n \n {t(operatorLabel).toUpperCase()}\n \n {getFilterValue(r)}\n {isFilterLocked && (\n \n \n \n )}\n
        \n );\n });\n\n return (\n
        \n \n \n {t('Filter')}\n
        {filterSamples}
        \n \n \n \n
        {filterRules}
        \n
        \n \n );\n}\n\nFilterButton.propTypes = {\n filters: PropTypes.shape({}).isRequired,\n activeViewLockedFilters: PropTypes.shape({}),\n questions: PropTypes.shape({}).isRequired,\n onClick: PropTypes.func.isRequired,\n onDeleteFilter: PropTypes.func.isRequired,\n isNew: PropTypes.bool,\n onRemoveSingle: PropTypes.func,\n questionValuesMap: PropTypes.shape({})\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport isEqual from 'lodash/isEqual';\n\nimport { t } from '@jotforminc/translation';\nimport {\n getDefaultHeaderText,\n getSVGbyQuestionType\n} from '../utils';\n\nimport { UNSUPPORTED_QUESTIONS, UTILITY_FIELDS } from './constants';\n\nconst emptyFieldOption = 'Choose a Field';\n\nconst FilterRowFields = ({\n field,\n activeQuestion,\n questions,\n fieldChange,\n filterIndex,\n selectedQuestions,\n disabled\n}) => {\n const dropdownErrorClasses = classNames({\n isAccentLight: field !== '',\n 'isEmpty isAccent': field === ''\n });\n const { width, svg } = getSVGbyQuestionType(activeQuestion.type);\n const getFieldOption = () => {\n if (!activeQuestion || !activeQuestion.qid) return t(emptyFieldOption);\n return getDefaultHeaderText(questions, activeQuestion);\n };\n\n return (\n
        \n
        \n {svg}\n
        {getFieldOption()}
        \n
        \n \n \n {Object.values(questions).map(question => {\n const { qid = '', type = '' } = question;\n const questionValue = UTILITY_FIELDS.indexOf(qid) === -1 ? `q${qid}` : qid;\n\n if (UNSUPPORTED_QUESTIONS.includes(type)) {\n return null;\n }\n\n return (\n \n {getDefaultHeaderText(questions, question)}\n \n );\n })}\n \n
        \n );\n};\n\nFilterRowFields.propTypes = {\n field: PropTypes.string.isRequired,\n activeQuestion: PropTypes.shape({\n type: PropTypes.string,\n qid: PropTypes.string\n }).isRequired,\n questions: PropTypes.shape({}).isRequired,\n fieldChange: PropTypes.func.isRequired,\n filterIndex: PropTypes.number.isRequired,\n selectedQuestions: PropTypes.arrayOf(PropTypes.string).isRequired,\n disabled: PropTypes.bool.isRequired\n};\n\nexport default React.memo(FilterRowFields, (prevProps, nextProps) => isEqual(prevProps, nextProps));\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { t } from '@jotforminc/translation';\nimport { getOperators, getStaticOption } from '../utils';\nimport { operators } from './constants';\n\nconst FilterRowOperators = ({\n operator,\n operatorChange,\n filterIndex,\n genericType,\n filters,\n field,\n disabled = false\n}) => (\n
        \n
        {t(getStaticOption(operators, operator, 'name'))}
        \n \n {getOperators(genericType).map(({ name, text }) => (\n f.field === field).length > 1}\n >\n {`${t(text)}`}\n \n ))}\n \n
        \n);\n\nFilterRowOperators.propTypes = {\n operator: PropTypes.string.isRequired,\n operatorChange: PropTypes.func.isRequired,\n filterIndex: PropTypes.number.isRequired,\n genericType: PropTypes.string.isRequired,\n filters: PropTypes.array.isRequired,\n field: PropTypes.string.isRequired,\n disabled: PropTypes.bool\n};\n\nexport default React.memo(FilterRowOperators);\n","import clsx from 'clsx';\nimport PropTypes from 'prop-types';\nimport React, { useEffect, useState } from 'react';\n\nconst GroupOptionRenderer = ({\n defaultOptionGroupTextClass, optionGroupWrapperClass,\n optionGroupTextClass, optionGroupClass, children, text, color, defaultExpandValue\n}) => {\n const [expanded, setExpanded] = useState(defaultExpandValue);\n\n const toggleExpand = () => {\n setExpanded(!expanded);\n };\n\n useEffect(() => {\n setExpanded(defaultExpandValue);\n }, [defaultExpandValue]);\n\n return (\n \n \n {text}\n \n {expanded && (\n
        \n {children}\n
        \n )}\n \n );\n};\nGroupOptionRenderer.propTypes = {\n defaultOptionGroupTextClass: PropTypes.string,\n optionGroupWrapperClass: PropTypes.string,\n optionGroupTextClass: PropTypes.string,\n optionGroupClass: PropTypes.string,\n text: PropTypes.string,\n color: PropTypes.string,\n children: PropTypes.node,\n defaultExpandValue: PropTypes.bool\n\n};\n\nGroupOptionRenderer.defaultProps = {\n defaultOptionGroupTextClass: 'jfSelect-optionGroup',\n optionGroupWrapperClass: '',\n optionGroupTextClass: '',\n optionGroupClass: '',\n text: '',\n color: null,\n children: null,\n defaultExpandValue: false\n};\n\nexport default GroupOptionRenderer;\n","/* eslint-disable complexity */\nimport PropTypes from 'prop-types';\nimport { createPortal } from 'react-dom';\nimport React, { Component } from 'react';\nimport clsx from 'clsx';\nimport { Portal } from '@jotforminc/magnet';\nimport GroupOptionRenderer from './GroupOptionRenderer';\n\nimport './style.scss';\n\nclass Dropdown extends Component {\n constructor(props) {\n super(props);\n\n this.handleRemoveTag = this.handleRemoveTag.bind(this);\n this.handleInputClick = this.handleInputClick.bind(this);\n this.handleKey = this.handleKey.bind(this);\n this.stopKeyEvent = this.stopKeyEvent.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleSearch = this.handleSearch.bind(this);\n this.handleSearchClear = this.handleSearchClear.bind(this);\n this.handleClickOutside = this.handleClickOutside.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleScroll = this.handleScroll.bind(this);\n this.createTags = this.createTags.bind(this);\n\n this.inputRef = React.createRef();\n this.listRef = React.createRef();\n this.searchRef = React.createRef();\n this.optionListRef = React.createRef();\n this.areAllOptionsDisabled = this.flattenOptions(props.data).every(({ isDisabled }) => isDisabled);\n\n this.state = {\n isOpen: false,\n currentOptionIndex: 0,\n searchTerm: '',\n filteredOptions: props.data || []\n };\n }\n\n componentDidMount() {\n const { searchable } = this.props;\n document.addEventListener('scroll', this.handleScroll, true);\n document.addEventListener('click', this.handleClickOutside, true);\n window.addEventListener('resize', this.handleResize);\n\n if (this.inputRef.current) {\n this.inputRef.current.addEventListener('keyup', this.handleKey);\n this.inputRef.current.addEventListener('keydown', this.stopKeyEvent);\n this.inputRef.current.addEventListener('keypress', this.handleKey);\n }\n\n if (this.listRef.current) this.listRef.current.addEventListener('keyup', this.stopKeyEvent);\n\n if (this.searchRef.current && searchable) {\n this.searchRef.current.addEventListener('keydown', this.handleKey);\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { data, searchable } = this.props;\n const { data: prevData } = prevProps;\n const { isOpen: prevIsOpen } = prevState;\n const { searchTerm, isOpen } = this.state;\n if (prevData !== data) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ filteredOptions: this.filterOptions(data, searchTerm) });\n }\n if (isOpen && !prevIsOpen && searchable) {\n this.searchRef.current.focus();\n } else if (!isOpen && prevIsOpen && searchable) {\n this.searchRef.current.value = '';\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ searchTerm: '', filteredOptions: data });\n }\n }\n\n componentWillUnmount() {\n const { searchable } = this.props;\n document.removeEventListener('click', this.handleClickOutside, true);\n window.removeEventListener('resize', this.handleResize);\n document.removeEventListener('scroll', this.handleScroll);\n\n this.inputRef.current.removeEventListener('keyup', this.handleKey);\n\n this.listRef.current.removeEventListener('keyup', this.stopKeyEvent);\n this.inputRef.current.removeEventListener('keydown', this.stopKeyEvent);\n this.inputRef.current.removeEventListener('keypress', this.handleKey);\n if (searchable) {\n this.searchRef.current.removeEventListener('keydown', this.handleKey);\n }\n }\n\n handleClickOutside(e) {\n const { isOpen } = this.state;\n const isClickedInput = this.inputRef.current && this.inputRef.current.contains(e.target);\n const isClickedWrapper = this.listRef.current && this.listRef.current.contains(e.target);\n\n if (isClickedInput || isClickedWrapper) return;\n if (isOpen) this.hideDropdown(true);\n }\n\n handleResize() {\n const { isOpen } = this.state;\n\n const minKeyboardHeight = 300;\n const visualViewportHeight = window?.visualViewport?.height || window.screen.height;\n const isKeyboardOpen = window.screen.height - minKeyboardHeight > visualViewportHeight;\n\n if (isOpen && !isKeyboardOpen) this.hideDropdown();\n }\n\n handleScroll(e) {\n const { isOpen } = this.state;\n const { isMobile } = this.props;\n const isDisabledScrollHandler = isMobile ? this.searchRef.current !== document.activeElement : true;\n if (e.target !== this.optionListRef.current && isDisabledScrollHandler && isOpen) this.hideDropdown();\n }\n\n handleKey(event) {\n const { isKeyboardHandlingActive, disabled, defaultOptionClass } = this.props;\n const { isOpen, currentOptionIndex, filteredOptions } = this.state;\n\n if (isKeyboardHandlingActive && !disabled) {\n if (event.key === 'Enter') {\n event.stopPropagation();\n\n if (isOpen) {\n const currentOption = this.flattenOptions(filteredOptions)[currentOptionIndex];\n const searchRegExp = /\\s/g; // replacing all ' ' with '.'\n const replaceWith = '.';\n if (currentOption) {\n const currentOptionEl = this.listRef?.current?.querySelector(`.${defaultOptionClass.replace(searchRegExp, replaceWith)}[value=\"${currentOption.value}\"]`);\n currentOptionEl?.focus();\n currentOptionEl?.click();\n } else {\n this.hideDropdown();\n }\n }\n } else if (event.key === 'ArrowDown') {\n if (isOpen) {\n event.preventDefault();\n this.handleArrowKey(1);\n } else {\n this.openDropdown();\n }\n } else if (event.key === 'ArrowUp') {\n if (isOpen) {\n event.preventDefault();\n this.handleArrowKey(-1);\n }\n }\n }\n }\n\n handleArrowKey(indicator) {\n if (this.areAllOptionsDisabled) return;\n const { defaultOptionClass } = this.props;\n this.setState(state => {\n const flattenedOptions = this.flattenOptions(state.filteredOptions);\n const newIndex = (state.currentOptionIndex + indicator + flattenedOptions.length) % flattenedOptions.length;\n return { currentOptionIndex: newIndex };\n }, () => {\n const { currentOptionIndex, filteredOptions } = this.state;\n const { value, isDisabled } = this.flattenOptions(filteredOptions)[currentOptionIndex];\n if (isDisabled) {\n this.handleArrowKey(indicator);\n return;\n }\n const searchRegExp = /\\s/g; // replacing all ' ' with '.'\n const replaceWith = '.';\n const currentOptionEl = this.listRef?.current?.querySelector(`.${defaultOptionClass.replace(searchRegExp, replaceWith)}[value=\"${value}\"]`);\n currentOptionEl?.scrollIntoView({ block: 'nearest' });\n });\n }\n\n handleInputClick() {\n const { isOpen } = this.state;\n const {\n disabled,\n onInputClick,\n autoFocus,\n listAutoFocus\n } = this.props;\n\n if (!disabled) {\n if (!isOpen) {\n this.openDropdown();\n onInputClick();\n if (this.listRef.current && (autoFocus || listAutoFocus)) {\n this.listRef.current.focus();\n }\n }\n this.hideDropdown();\n }\n }\n\n handleSearch(e) {\n const { data, onSearch } = this.props;\n const { value } = e.target;\n\n this.setState({ filteredOptions: this.filterOptions(data, value), searchTerm: value });\n setTimeout(() => { this.handleDropdownPosition(); }, 0);\n onSearch(value);\n }\n\n handleSearchClear() {\n const value = '';\n this.searchRef.current.value = value;\n this.handleSearch({ target: { value } });\n }\n\n handleDropdownPosition() {\n const {\n dropdownLeft,\n dropdownTop,\n dropdownWidth,\n getDropdownPosition,\n isLite,\n dropdownPositionResolver\n } = this.props;\n const listRefStyle = this.listRef?.current?.style || {};\n\n listRefStyle.opacity = 1;\n listRefStyle.visibility = 'visible';\n listRefStyle.width = `${this.inputRef?.current?.offsetWidth}px`;\n\n if (isLite) { return; }\n\n const {\n left = 0,\n top = 0,\n width = 0,\n height = 0,\n right = 0\n } = this.inputRef?.current?.getBoundingClientRect() || {};\n\n const {\n offsetHeight: listRefHeight = 0\n } = this.listRef.current || {};\n\n let positions = {};\n const topOffset = height + top;\n const totalHeight = topOffset + listRefHeight;\n\n positions.left = left;\n positions.width = width;\n\n if (totalHeight > window.innerHeight) {\n positions.top = top - listRefHeight;\n this.listRef?.current?.setAttribute('data-position', 'top');\n this.inputRef?.current?.setAttribute('data-position', 'top');\n getDropdownPosition('top');\n } else {\n positions.top = topOffset;\n this.listRef?.current?.setAttribute('data-position', 'bottom');\n this.inputRef?.current?.setAttribute('data-position', 'bottom');\n getDropdownPosition('bottom');\n }\n\n if (dropdownPositionResolver && typeof dropdownPositionResolver === 'function') {\n positions = {\n ...positions,\n ...dropdownPositionResolver({\n left, top, width, height, right\n })\n };\n }\n\n listRefStyle.top = dropdownTop\n ? `${dropdownTop}px`\n : `${positions.top}px`;\n listRefStyle.left = dropdownLeft\n ? `${dropdownLeft}px`\n : `${positions.left}px`;\n listRefStyle.width = dropdownWidth\n ? `${dropdownWidth}px`\n : `${positions.width}px`;\n }\n\n handleOptionClick = option => e => {\n const { value } = e.currentTarget;\n const {\n multiple, isKeyboardHandlingActive, onOptionClick, autoFocus,\n sendFullOption, listAutoFocus\n } = this.props;\n\n if (isKeyboardHandlingActive) {\n e.stopPropagation();\n e.nativeEvent.stopImmediatePropagation();\n }\n\n if (multiple) {\n setTimeout(() => {\n this.handleDropdownPosition();\n }, 0);\n } else {\n setTimeout(() => {\n this.hideDropdown();\n }, 0);\n }\n onOptionClick(sendFullOption ? option : value, e);\n if (this.inputRef.current && (autoFocus || listAutoFocus)) {\n this.inputRef.current.focus();\n }\n };\n\n handleRemoveTag(e) {\n const { onRemoveTag } = this.props;\n const { value } = e.target;\n onRemoveTag(value, e);\n e.stopPropagation();\n }\n\n handleMouseEnter(e) {\n const { target } = e;\n const { filteredOptions } = this.state;\n const newIndex = this.flattenOptions(filteredOptions).findIndex(opt => opt.value === target.value);\n this.setState({ currentOptionIndex: newIndex });\n }\n\n handleMouseLeave() {\n this.setState({ currentOptionIndex: -1 });\n }\n\n isValueInOption(option, value) {\n if (option?.searchTerm) {\n return option.searchTerm.toLowerCase().indexOf(value?.toLowerCase()) !== -1;\n }\n return typeof option.text === 'string' ? option.text?.toLowerCase().indexOf(value?.toLowerCase()) > -1 : false;\n }\n\n isLastElement(options, index) {\n return options?.length > 0 && options?.length > index + 1;\n }\n\n filterOptions(options, value) {\n return options.reduce((acc, currentOption) => {\n if (currentOption.type === 'group') {\n const groupOptions = this.filterOptions(currentOption.options, value);\n return groupOptions.length > 0 ? [...acc, { ...currentOption, options: groupOptions }] : acc;\n }\n\n return this.isValueInOption(currentOption, value) ? [...acc, currentOption] : acc;\n }, []);\n }\n\n flattenOptions(options) {\n return options.flatMap(option => {\n return option.type === 'group' ? (this.flattenOptions(option?.options) || []) : option;\n });\n }\n\n openDropdown() {\n const { isDropdownOpen, selectedOptionValues, multiple } = this.props;\n\n this.setState(state => {\n const flattenedOptions = this.flattenOptions(state.filteredOptions);\n const currentOptionIndex = multiple ? 0 : flattenedOptions.findIndex(opt => opt.value === selectedOptionValues[0]);\n return {\n isOpen: true,\n currentOptionIndex\n };\n });\n this.handleDropdownPosition();\n isDropdownOpen(true);\n }\n\n stopKeyEvent(event) {\n const { isKeyboardHandlingActive } = this.props;\n const { isOpen } = this.state;\n if (isKeyboardHandlingActive && isOpen) {\n event.stopPropagation();\n }\n }\n\n hideDropdown(noFocus = true) {\n const { isOpen } = this.state;\n const { isDropdownOpen } = this.props;\n\n if (!noFocus && this.inputRef.current) {\n this.inputRef.current.focus();\n }\n\n if (isOpen && this.listRef.current) {\n this.listRef.current.style.opacity = 0;\n this.listRef.current.style.visibility = 'hidden';\n\n this.setState({\n isOpen: false,\n currentOptionIndex: 0\n });\n isDropdownOpen(false);\n }\n }\n\n createTags() {\n const {\n data, defaultTagClass, defaultRemoveButtonClass, tagClass, removeButtonClass, removeButtonIcon, selectedOptionStyles\n } = this.props;\n const { selectedOptionValues } = this.props;\n\n const removeButtonClasses = clsx(defaultRemoveButtonClass, removeButtonClass);\n\n return this.flattenOptions(data).map(option => {\n const {\n value, text, dataAttributes, key, additionalTagClass\n } = option;\n if (selectedOptionValues.indexOf(value) > -1) {\n return (\n \n {text}\n \n {removeButtonIcon}\n \n \n );\n }\n return null;\n });\n }\n\n renderOptionComponent(option, name = 'beforeComponent') {\n return option && option[name] !== undefined ? option[name] : null;\n }\n\n renderOptionItem(option, index) {\n const {\n selectedOptionValues, defaultOptionClass,\n activeOptionClass, disabledOptionClass, hoverOptionClass,\n optionTextClass, inActiveOptionClass\n } = this.props;\n\n const { currentOptionIndex } = this.state;\n const isOptionSelected = selectedOptionValues.indexOf(option.value) > -1;\n return (\n -1}\n value={option.value}\n disabled={option.isDisabled && option.isDisabled === true ? 'true' : null}\n {...option.dataAttributes}\n aria-label={option.ariaLabel || option.text}\n >\n {this.renderOptionComponent(option)}\n {optionTextClass ? {option.text} : option.text}\n {this.renderOptionComponent(option, 'afterComponent')}\n \n );\n }\n\n renderOptionItemGroup(groupOption, groupIndex, isLastElement) {\n const {\n defaultOptionGroupTextClass, optionGroupWrapperClass,\n optionGroupTextClass, optionGroupClass\n } = this.props;\n\n const divider = groupOption.hideLabel && isLastElement;\n return (\n \n { !groupOption.hideLabel && {groupOption.text} }\n
        \n { groupOption.options.map((option, index) => (option.type === 'group'\n ? this.renderOptionItemGroup(option, groupIndex + index, this.isLastElement(groupOption.options, index))\n : this.renderOptionItem(option, groupIndex + index))) }\n
        \n { divider &&
        }\n
        \n );\n }\n\n renderMultipleGroupItem(option, index, isLastElement) {\n const {\n defaultOptionGroupTextClass, optionGroupWrapperClass,\n optionGroupTextClass, optionGroupClass\n } = this.props;\n\n const {\n text, color, options, collapsible, defaultExpandValue\n } = option;\n\n const { filteredOptions, searchTerm } = this.state;\n const isOptionFiltered = searchTerm && filteredOptions?.findIndex(filteredOption => filteredOption === option) > -1;\n\n if (collapsible) {\n return (\n \n {options?.map((val, optionIndex) => (val.type === 'group'\n ? this.renderOptionItemGroup(val, index + optionIndex, this.isLastElement(options, optionIndex))\n : this.renderOptionItem(val, index + optionIndex)))}\n \n );\n }\n return (\n this.renderOptionItemGroup(option, index, isLastElement)\n );\n }\n\n renderOptions() {\n const {\n defaultNotResultFoundClass, notResultFoundClass, notResultFoundText,\n defaultOptionClass, dropdownOpenInEmail, data\n } = this.props;\n\n const { filteredOptions } = this.state;\n const notResultFoundClassses = clsx(defaultNotResultFoundClass, notResultFoundClass);\n\n if (!dropdownOpenInEmail && filteredOptions?.length === 0) {\n return
        {notResultFoundText}
        ;\n }\n\n if (dropdownOpenInEmail && data?.length === 0) {\n return
        {notResultFoundText}
        ;\n }\n\n const filteredValue = dropdownOpenInEmail ? data : filteredOptions;\n\n const { items } = filteredValue.reduce((result, current) => {\n switch (true) {\n case current?.showOutsideButton:\n return {\n itemIndex: result.itemIndex + 1,\n items: [\n ...result.items,\n (\n
        \n {this.renderOptionComponent(current)}\n
        \n )\n ]\n };\n case current.type === 'group':\n return {\n itemIndex: result.itemIndex + current.options.length,\n items: [...result.items, this.renderMultipleGroupItem(current, result.itemIndex, this.isLastElement(current.options, result.itemIndex))]\n };\n default:\n return { itemIndex: result.itemIndex + 1, items: [...result.items, this.renderOptionItem(current, result.itemIndex)] };\n }\n }, { itemIndex: 0, items: [] });\n\n return items;\n }\n\n renderInput() {\n const { isOpen } = this.state;\n const {\n inputAfter,\n inputBefore,\n inputClass,\n inputTextClass,\n tagWrapperClass,\n defaultInputClass,\n defaultInputTextClass,\n defaultOptionText,\n defaultOptionTitle,\n defaultTagWrapperClass,\n activeInputClass,\n selectedOptionValues,\n searchableClass,\n isDarkClass,\n disabledClass,\n multipleClass,\n multiple,\n searchable,\n disabled,\n data,\n inputTabIndex,\n isDark,\n autoFocus,\n defaultInnerInput,\n pdfOptions\n } = this.props;\n\n const inputClasses = clsx(defaultInputClass, inputClass, {\n [activeInputClass]: activeInputClass && isOpen,\n [multipleClass]: multiple,\n [searchableClass]: searchable,\n [disabledClass]: disabled,\n [isDarkClass]: isDark\n });\n\n const inputTextClasses = clsx(defaultInputTextClass, inputTextClass);\n const tagWrapperClasses = clsx(defaultTagWrapperClass, tagWrapperClass);\n\n if (multiple) {\n return (\n \n {inputBefore && inputBefore}\n \n {selectedOptionValues.length === 0 ? defaultOptionText : this.createTags()}\n \n {inputAfter && inputAfter}\n \n );\n }\n const selectedOption = this.flattenOptions(data).find(option => selectedOptionValues[0] === option.value);\n const setOpen = () => this.setState({ isOpen: true });\n const hasNoOptions = pdfOptions?.length === 0;\n\n return (\n 0 ? true : null}\n type=\"button\"\n aria-disabled={disabled}\n aria-haspopup=\"true\"\n aria-expanded={isOpen}\n autoFocus={autoFocus}\n title={(selectedOptionValues.length === 0 || !selectedOption) ? (defaultOptionTitle || defaultOptionText) : (selectedOption.title || selectedOption.text)}\n >\n {inputBefore && inputBefore}\n {selectedOptionValues.length > 0 && this.renderOptionComponent(selectedOption)}\n \n {(selectedOptionValues.length === 0 || !selectedOption) ? defaultOptionText : selectedOption.text}\n \n {selectedOptionValues.length > 0 && this.renderOptionComponent(selectedOption, 'afterComponent')}\n {defaultInnerInput && pdfOptions?.length >= 0 && (\n
        \n {hasNoOptions ? 'Select Document' : `${pdfOptions.length} document${pdfOptions.length > 1 ? 's' : ''} selected`}\n
        \n )}\n {inputAfter && inputAfter}\n \n );\n }\n\n render() {\n const { isOpen, searchTerm } = this.state;\n const {\n defaultWrapperClass,\n wrapperClass,\n activeWrapperClass,\n defaultListClass,\n listClass,\n liteClass,\n searchable,\n multiple,\n searchableClass,\n isDarkClass,\n isDark,\n multipleClass,\n defaultSearchBoxClass,\n searchBoxClass,\n defaultSearchInputClass,\n searchInputClass,\n searchInputPlaceholder,\n zIndex,\n isLite,\n listAriaLabel,\n searchIcon,\n useMagnetPortal,\n clearSearchButtonText\n } = this.props;\n\n const listClasses = clsx(defaultListClass, listClass);\n const wrapperClasses = clsx(defaultWrapperClass, wrapperClass, {\n [activeWrapperClass]: activeWrapperClass && isOpen,\n [multipleClass]: multiple,\n [searchableClass]: searchable,\n [isDarkClass]: isDark,\n [liteClass]: isLite\n });\n const searchBoxClasses = clsx(defaultSearchBoxClass, searchBoxClass);\n const searchInputClasses = clsx(defaultSearchInputClass, searchInputClass);\n\n const renderWrapper = () => {\n return (\n \n {searchable\n && (\n \n \n {searchIcon && searchIcon}\n \n {clearSearchButtonText && searchTerm !== '' && }\n \n )}\n \n {this.renderOptions()}\n \n \n );\n };\n\n return (\n <>\n {isLite ? (\n
        \n {this.renderInput()}\n {renderWrapper()}\n
        \n ) : (\n <>\n {this.renderInput()}\n {!useMagnetPortal ? createPortal(renderWrapper(), document.body) : {renderWrapper()}}\n \n )}\n \n );\n }\n}\n\nDropdown.defaultProps = {\n defaultOptionText: 'Dropdown',\n defaultOptionTitle: 'Select',\n defaultInputClass: 'jfSelect-input',\n defaultInputTextClass: 'jfSelect-inputText',\n defaultWrapperClass: 'jfSelect-wrapper',\n defaultOptionClass: 'jfSelect-option',\n defaultOptionGroupTextClass: 'jfSelect-optionGroup',\n defaultListClass: 'jfSelect-list',\n defaultTagClass: 'jfSelect-tag',\n defaultTagWrapperClass: 'jfSelect-tagWrapper',\n defaultRemoveButtonClass: 'jfSelect-removeButton',\n defaultNotResultFoundClass: 'jfSelect-notResultFound',\n defaultSearchBoxClass: 'jfSelect-searchBox',\n defaultSearchInputClass: 'jfSelect-searchInput',\n defaultOptionTextClass: 'jfSelect-optionText',\n activeWrapperClass: 'isActive',\n activeInputClass: 'isActive',\n activeOptionClass: 'isActive',\n hoverOptionClass: 'isHover',\n searchableClass: 'isSearchable',\n multipleClass: 'isMultiple',\n disabledClass: 'isDisabled',\n disabledOptionClass: 'isDisabled',\n isDarkClass: 'isDark',\n liteClass: 'jfSelect-liteWrapper',\n notResultFoundText: 'No results found.',\n inActiveOptionClass: 'inActive',\n removeButtonIcon:\n \n \n ,\n inputClass: '',\n inputTextClass: '',\n wrapperClass: '',\n listClass: '',\n tagClass: '',\n tagWrapperClass: '',\n notResultFoundClass: '',\n searchBoxClass: '',\n searchInputClass: '',\n removeButtonClass: '',\n optionGroupWrapperClass: '',\n optionGroupTextClass: '',\n optionGroupClass: '',\n inputAfter: '',\n inputBefore: '',\n zIndex: 1000,\n optionTextClass: null,\n dropdownWidth: null,\n dropdownLeft: null,\n dropdownTop: null,\n multiple: false,\n disabled: false,\n isKeyboardHandlingActive: false,\n searchable: false,\n inputTabIndex: 0,\n searchInputPlaceholder: null,\n isDark: false,\n autoFocus: false,\n data: [],\n selectedOptionValues: [],\n selectedOptionStyles: {},\n onInputClick: f => f,\n onOptionClick: f => f,\n onRemoveTag: f => f,\n onSearch: f => f,\n isLite: false,\n defaultInnerInput: false,\n dropdownOpenInEmail: false,\n isDropdownOpen: f => f,\n getDropdownPosition: f => f,\n pdfOptions: null,\n listAriaLabel: null,\n sendFullOption: false,\n dropdownPositionResolver: null,\n listAutoFocus: false,\n isMobile: false,\n searchIcon: null,\n useMagnetPortal: false,\n clearSearchButtonText: null\n};\n\nconst dataOptionType = PropTypes.shape({\n text: PropTypes.string,\n value: PropTypes.string,\n beforeComponent: PropTypes.node,\n afterComponent: PropTypes.node,\n additionalClassName: PropTypes.string\n});\n\nconst dataOptionGroupType = PropTypes.shape({\n type: PropTypes.oneOf(['group']),\n text: PropTypes.string,\n options: PropTypes.arrayOf(dataOptionType),\n beforeComponent: PropTypes.node\n});\n\nDropdown.propTypes = {\n defaultOptionText: PropTypes.string,\n defaultOptionTitle: PropTypes.string,\n defaultInputClass: PropTypes.string,\n defaultInputTextClass: PropTypes.string,\n defaultWrapperClass: PropTypes.string,\n defaultListClass: PropTypes.string,\n defaultOptionClass: PropTypes.string,\n defaultOptionGroupTextClass: PropTypes.string,\n defaultTagClass: PropTypes.string,\n defaultTagWrapperClass: PropTypes.string,\n defaultRemoveButtonClass: PropTypes.string,\n defaultNotResultFoundClass: PropTypes.string,\n defaultSearchBoxClass: PropTypes.string,\n defaultSearchInputClass: PropTypes.string,\n defaultOptionTextClass: PropTypes.string,\n activeWrapperClass: PropTypes.string,\n activeOptionClass: PropTypes.string,\n hoverOptionClass: PropTypes.string,\n activeInputClass: PropTypes.string,\n isKeyboardHandlingActive: PropTypes.bool,\n inputClass: PropTypes.string,\n inputTextClass: PropTypes.string,\n wrapperClass: PropTypes.string,\n tagClass: PropTypes.string,\n zIndex: PropTypes.number,\n tagWrapperClass: PropTypes.string,\n removeButtonClass: PropTypes.string,\n optionGroupWrapperClass: PropTypes.string,\n optionGroupTextClass: PropTypes.string,\n optionGroupClass: PropTypes.string,\n multipleClass: PropTypes.string,\n disabledClass: PropTypes.string,\n searchableClass: PropTypes.string,\n isDarkClass: PropTypes.string,\n listClass: PropTypes.string,\n liteClass: PropTypes.string,\n searchInputClass: PropTypes.string,\n searchBoxClass: PropTypes.string,\n optionTextClass: PropTypes.string,\n notResultFoundClass: PropTypes.string,\n notResultFoundText: PropTypes.string,\n disabledOptionClass: PropTypes.string,\n removeButtonIcon: PropTypes.node,\n inputAfter: PropTypes.node,\n inputBefore: PropTypes.node,\n dropdownWidth: PropTypes.number,\n dropdownLeft: PropTypes.number,\n dropdownTop: PropTypes.number,\n multiple: PropTypes.bool,\n searchable: PropTypes.bool,\n disabled: PropTypes.bool,\n data: PropTypes.arrayOf(PropTypes.oneOfType([dataOptionType, dataOptionGroupType])),\n selectedOptionValues: PropTypes.arrayOf(PropTypes.string),\n selectedOptionStyles: PropTypes.shape({}),\n onInputClick: PropTypes.func,\n onOptionClick: PropTypes.func,\n onSearch: PropTypes.func,\n onRemoveTag: PropTypes.func,\n inputTabIndex: PropTypes.number,\n searchInputPlaceholder: PropTypes.string,\n isDark: PropTypes.bool,\n autoFocus: PropTypes.bool,\n isLite: PropTypes.bool,\n defaultInnerInput: PropTypes.bool,\n dropdownOpenInEmail: PropTypes.bool,\n isDropdownOpen: PropTypes.func,\n getDropdownPosition: PropTypes.func,\n inActiveOptionClass: PropTypes.string,\n pdfOptions: PropTypes.array,\n listAriaLabel: PropTypes.string,\n sendFullOption: PropTypes.bool,\n dropdownPositionResolver: PropTypes.func,\n listAutoFocus: PropTypes.bool,\n isMobile: PropTypes.bool,\n searchIcon: PropTypes.node,\n useMagnetPortal: PropTypes.bool,\n clearSearchButtonText: PropTypes.string\n};\n\nexport default Dropdown;\n","import React from 'react';\nimport { string, object } from 'prop-types';\nimport Styled from 'styled-components';\nimport { SVGIcon } from '@jotforminc/icon-selector';\nimport { ICON_SIZES } from './constants';\nimport { getIconInformationForPortalItem } from '../utils';\n\nconst ScIconRenderer = Styled.div`\n margin: 12px;\n width: 32px;\n height: 32px;\n min-width: 32px;\n min-height: 32px;\n border-radius: 4px;\n\n ${({ backgroundColor }) => (backgroundColor ? `background-color: ${backgroundColor};` : '')}\n\n & > img {\n width: 100%;\n height: 100%;\n border-radius: 4px;\n }\n\n * > img {\n width: 100%;\n height: 100%;\n border-radius: 4px\n }\n\n * > svg.injected-svg {\n width: 100%;\n height: 100%;\n border-radius: 4px;\n padding: 5px;\n }\n\n ${({ iconSize }) => (iconSize === ICON_SIZES.SMALL ? `\n margin: 0 8px 0 0;\n width: 20px;\n height: 20px;\n min-width: 20px;\n min-height: 20px;\n border-radius: 4px;\n ` : '')}\n\n`;\n\nconst IconRenderer = ({\n titleForAlt = '',\n icon = {},\n iconSize: initialIconSize = ICON_SIZES.MEDIUM\n}) => {\n const {\n isSvgIcon,\n url,\n iconColor,\n finalUrl,\n alt,\n svgStyleProps,\n iconSize\n } = getIconInformationForPortalItem(titleForAlt, icon, initialIconSize);\n return (\n \n {isSvgIcon\n ? (\n \n )\n : ({alt})}\n \n );\n};\n\nIconRenderer.propTypes = {\n titleForAlt: string,\n icon: object,\n iconSize: string\n};\n\nexport default IconRenderer;\n","import moment, { isMoment } from 'moment';\nimport React, { PureComponent } from 'react';\nimport DatePicker from 'react-datepicker';\nimport Autocomplete from 'react-autocomplete';\nimport PropTypes, { string, boolean } from 'prop-types';\nimport Dropdown from '@jotforminc/dropdown';\nimport { t } from '@jotforminc/translation';\nimport { safeJSONParse } from '@jotforminc/utils';\nimport { IconProductFormBuilderMono } from '@jotforminc/svg-icons';\nimport {\n emptyValueOperators,\n boolOptions,\n DATE_FORMATS_WITHOUT_TIME, ICON_SIZES, FORMAT_MAP\n} from './constants';\nimport IconRenderer from './IconRenderer';\nimport { BOARD_QUESTION_VALUES } from '../utils';\n\nclass FilterRowValue extends PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n isAutoCompleteOpened: false\n };\n }\n\n handleSubmittedViaOptionChange = selectedOption => {\n const { valueChange, filterIndex } = this.props;\n const onChange = valueChange(filterIndex);\n onChange({ target: { value: selectedOption.value } });\n };\n\n handleDateFormat = args => {\n const {\n filter = {}, project = '', type = '', allowTime = '', dateFormat = ''\n } = args;\n const isMatchesSelected = filter && filter.operator === 'matches' && project === 'inbox';\n let visualFormat = ((type === 'control_datetime') && (allowTime === 'Yes')) || type === 'control_appointment' ? 'MMM D, YYYY HH:mm' : (dateFormat || 'MMM D, YYYY');\n visualFormat = isMatchesSelected ? 'MMM D, YYYY' : visualFormat;\n const showTimeSelect = DATE_FORMATS_WITHOUT_TIME.indexOf(visualFormat) === -1;\n const storageFormat = showTimeSelect ? this.getDatetimeFormatByOperator(filter.operator) : 'YYYY-MM-DD';\n\n return { storageFormat, showTimeSelect, visualFormat };\n };\n\n onChangeDatePicker = value => {\n const {\n valueBlur, filterIndex, activeQuestion, filter, project\n } = this.props;\n const { dateFormat, allowTime, type } = activeQuestion;\n\n const { storageFormat, visualFormat } = this.handleDateFormat({\n filter, project, type, allowTime, dateFormat\n });\n\n if (moment(value).isValid()) {\n valueBlur(filterIndex)({ target: { value: moment(value, visualFormat).format(storageFormat) } });\n }\n };\n\n get questionValuesMap() {\n const { questionValuesMap, activeQuestion } = this.props;\n return activeQuestion.type === 'control_workflowStatus' ? { [activeQuestion.qid]: ['ACTIVE', 'CANCELED'] } : questionValuesMap;\n }\n\n getStaticSubmissionWidgetOption() {\n const { filter, activeQuestion } = this.props;\n const optionsArray = typeof activeQuestion.options_array === 'object' ? activeQuestion.options_array : JSON.parse(activeQuestion.options_array || '{}');\n const questionValue = filter.value.replace('{', '').replace('}', '');\n\n return optionsArray[questionValue] ? optionsArray[questionValue].value : '';\n }\n\n getStaticDropdownOption() {\n const { filter, activeQuestion } = this.props;\n const optionsExtender = safeJSONParse(activeQuestion.optionsExtender || '{}');\n const extended = optionsExtender[filter.value.replace(/{|}/g, '')];\n return extended ? extended.value : filter.value;\n }\n\n getSubmissionWidgetOptions() {\n const { activeQuestion, filters } = this.props;\n const optionsArray = typeof activeQuestion.options_array === 'object' ? activeQuestion.options_array : JSON.parse(activeQuestion.options_array || '{}');\n return Object.keys(optionsArray).map(opt => (\n f.value === `{${optionsArray[opt].key}}`)}\n >\n {`${optionsArray[opt].value}`}\n \n ));\n }\n\n getWorkflowOptions() {\n const { activeQuestion } = this.props;\n const optionsArray = typeof activeQuestion.options_array === 'object' ? activeQuestion.options_array : JSON.parse(activeQuestion.options_array || '{}');\n\n return Object.keys(optionsArray).map(opt => (\n \n {optionsArray[opt].value}\n \n ));\n }\n\n getAssigneeOptions = () => {\n const { activeQuestion, filters } = this.props;\n const optionsArray = safeJSONParse(activeQuestion.options_array, {});\n const filteredOptions = optionsArray && Object.keys(optionsArray).filter(o => !optionsArray[o].isDeleted);\n return filteredOptions.map(optionKey => (\n f.value === `{${optionKey}}`)}\n >\n {optionsArray[optionKey]?.value?.text}\n \n ));\n };\n\n getStaticAssigneeOption = () => {\n const { filter, activeQuestion } = this.props;\n const optionsArray = safeJSONParse(activeQuestion.options_array, {});\n const option = optionsArray[filter.value.replace(/{|}/g, '')];\n return option?.value?.text || '';\n };\n\n getDropdownOptions() {\n const { activeQuestion, filters } = this.props;\n const {\n qid = '',\n options: stringOptions = '',\n optionsExtender: _optionsExtender = '{}'\n } = activeQuestion;\n\n const optionsExtender = safeJSONParse(_optionsExtender);\n const options = stringOptions.split('|');\n let uniqueOptions = [];\n uniqueOptions = this.getSingularList(uniqueOptions, options);\n\n const { [qid]: questionValues = [] } = this.questionValuesMap;\n const filteredOptions = questionValues.filter(opt => options.indexOf(opt) === -1);\n\n uniqueOptions = this.getSingularList(uniqueOptions, filteredOptions);\n\n return uniqueOptions.map(opt => {\n const extended = optionsExtender[opt.replace(/{|}/g, '')];\n if (extended) {\n return ;\n }\n return ;\n });\n }\n\n getSingularList(uniqueOptions, options) {\n let uniqueList = uniqueOptions;\n options.forEach(opt => {\n const splittedOpts = opt.split('
        ');\n splittedOpts.forEach(singularOpt => {\n if (uniqueList.indexOf(singularOpt) === -1) {\n uniqueList = [...uniqueList, singularOpt];\n }\n });\n });\n return uniqueList;\n }\n\n getScaleOptions() {\n const { questionValuesMap, activeQuestion, filters } = this.props;\n const { qid = '', scaleFrom, type } = activeQuestion;\n let minValue = parseInt(scaleFrom, 10);\n let maxValue = parseInt(activeQuestion[(type === 'control_rating' ? 'stars' : 'scaleAmount')], 10);\n const { [qid]: valuesList = [] } = questionValuesMap;\n\n valuesList.forEach(value => {\n const parsedValue = parseInt(value, 10);\n if (parsedValue > maxValue) {\n maxValue = parsedValue;\n } else if (parsedValue < minValue) {\n minValue = parsedValue;\n }\n });\n\n const optionsList = [];\n for (let i = minValue; i <= maxValue; i++) {\n optionsList.push(i.toString());\n }\n\n return optionsList.map(opt => {\n return (\n \n );\n });\n }\n\n getTextValues() {\n const { questionValuesMap, activeQuestion, genericType } = this.props;\n const { qid = '' } = activeQuestion;\n const questionId = genericType === BOARD_QUESTION_VALUES[qid] ? BOARD_QUESTION_VALUES[qid] : qid;\n const { [questionId]: questionValues = [] } = questionValuesMap;\n return questionValues;\n }\n\n getDatetimeFormatByOperator(operator) {\n const defaultFormat = 'YYYY-MM-DD HH:mm';\n const fullFormat = `${defaultFormat}:00`;\n\n const formats = {\n matches: defaultFormat,\n lte: fullFormat,\n gte: fullFormat\n };\n\n return formats[operator] || defaultFormat;\n }\n\n // eslint-disable-next-line complexity\n render() {\n const {\n filter,\n genericType,\n filterIndex,\n valueChange,\n valueBlur,\n activeQuestion,\n project\n } = this.props;\n\n const {\n isAutoCompleteOpened\n } = this.state;\n\n switch (genericType) {\n case 'submissionWidget':\n return (\n
        \n
        {this.getStaticSubmissionWidgetOption()}
        \n \n {this.getSubmissionWidgetOptions()}\n \n
        \n );\n case 'dropdown':\n return (\n
        \n
        \n {this.getStaticDropdownOption()}\n
        \n \n {this.getDropdownOptions()}\n \n
        \n );\n case 'eq':\n case 'workflow':\n return (\n
        \n
        \n {this.getStaticSubmissionWidgetOption()}\n
        \n \n {this.getWorkflowOptions()}\n \n
        \n );\n case 'assignee':\n return (\n
        \n
        \n {this.getStaticAssigneeOption()}\n
        \n \n {this.getAssigneeOptions()}\n \n
        \n );\n case 'scale':\n return (\n
        \n
        \n {filter.value}\n
        \n \n {this.getScaleOptions()}\n \n
        \n );\n case 'text':\n return (\n item}\n inputProps={{ className: 'searchFilter-autocomplete-hiddenInput' }}\n items={this.getTextValues()}\n wrapperProps={{ className: `searchFilter-input px-2.5 forTerm isLight w-full${emptyValueOperators.indexOf(filter.operator) === -1 && filter.value === '' ? ' isEmpty' : ''}` }}\n shouldItemRender={(item, value) => item.toLowerCase().indexOf(value.toLowerCase()) > -1}\n onMenuVisibilityChange={isOpen => {\n this.setState({ isAutoCompleteOpened: isOpen });\n }}\n open={isAutoCompleteOpened && filter.value.length > 0}\n renderItem={(item, isHighlighted) => (\n
        \n {item}\n
        \n )}\n renderMenu={children => {\n return (\n
        \n {children.length > 0 &&
        Suggested results
        }\n {children}\n
        \n );\n }}\n value={filter.value}\n onChange={valueChange(filterIndex)}\n onSelect={value => valueBlur(filterIndex)({ target: { value } })}\n />\n );\n case 'date': {\n const {\n dateFormat,\n allowTime,\n type\n } = activeQuestion;\n\n const { storageFormat, showTimeSelect, visualFormat } = this.handleDateFormat({\n filter, project, type, allowTime, dateFormat\n });\n const selected = filter.value ? moment(filter.value, storageFormat) : moment();\n\n const fixedFormat = FORMAT_MAP[visualFormat] || 'MMM d, yyyy';\n const _selectedDate = isMoment(selected) ? selected.toDate() : null;\n\n return (\n
        \n \n
        \n );\n }\n case 'bool': {\n const selectedOption = boolOptions.find(option => option.value === filter.value) || boolOptions[0];\n\n return (\n
        \n
        \n {selectedOption.text}\n
        \n \n {boolOptions.map(option => )}\n \n
        \n );\n }\n case 'submittedVia':\n const selectedApps = filter.value ? [filter.value] : [];\n const appItems = this.getTextValues();\n const appsList = appItems.map(appItem => {\n return {\n text: appItem.title,\n value: appItem.id,\n beforeComponent:\n (\n \n )\n };\n });\n return (\n { valueChange(filterIndex)({ target: { value } }); }}\n zIndex={1005}\n inputTabIndex={-10}\n defaultOptionText={t('Please Select App')}\n notResultFoundText={t('There Are No Apps')}\n searchInputPlaceholder=\"Search\"\n selectedOptionValues={selectedApps}\n searchable={appsList.length > 2}\n inputClass=\"searchFilter-input px-2.5 searchFilter-select isLight forSubmittedVia h-10\"\n wrapperClass=\"forSubmittedVia\"\n data={appsList}\n isLite\n isKeyboardHandlingActive\n />\n );\n case 'sheetViewForm':\n const selectedSourceForms = filter.value ? [filter.value] : [];\n const sourceForms = this.getTextValues();\n const sourceFormList = sourceForms.map(formItem => {\n return {\n text: formItem.title,\n value: formItem.id,\n beforeComponent:\n (\n \n )\n };\n });\n return (\n { valueChange(filterIndex)({ target: { value } }); }}\n zIndex={1005}\n inputTabIndex={-10}\n defaultOptionText={t('Please Select Form')}\n notResultFoundText={t('There Are No Forms')}\n searchInputPlaceholder=\"Search\"\n selectedOptionValues={selectedSourceForms}\n searchable={sourceFormList.length > 2}\n inputClass=\"searchFilter-input px-2.5 searchFilter-select isLight forSheetViewForm h-10\"\n wrapperClass=\"forSheetViewForm\"\n data={sourceFormList}\n isLite\n isKeyboardHandlingActive\n />\n );\n default:\n return (\n \n );\n }\n }\n}\n\nFilterRowValue.propTypes = {\n filter: PropTypes.shape({\n isValueDisabled: boolean,\n operator: string,\n value: string\n }).isRequired,\n project: PropTypes.string,\n filterIndex: PropTypes.number.isRequired,\n valueChange: PropTypes.func.isRequired,\n valueBlur: PropTypes.func.isRequired,\n questionValuesMap: PropTypes.shape({}).isRequired,\n activeQuestion: PropTypes.shape({\n allowTime: string,\n dateFormat: string,\n options_array: PropTypes.string,\n options: string,\n optionsExtender: string,\n qid: string,\n scaleFrom: string,\n type: string\n }).isRequired,\n genericType: PropTypes.string.isRequired,\n filters: PropTypes.array.isRequired\n};\n\nFilterRowValue.defaultProps = {\n project: ''\n};\n\nexport default FilterRowValue;\n","import React, { useMemo, useState } from 'react';\nimport PropTypes, { string } from 'prop-types';\nimport { IconTrashFilled, IconLockFilled, IconUnlockFilled } from '@jotforminc/svg-icons';\nimport { t } from '@jotforminc/translation';\nimport { createPortal } from 'react-dom';\nimport classNames from 'classnames';\nimport FilterRowFields from './FilterRowFields';\nimport FilterRowOperators from './FilterRowOperators';\nimport FilterRowValue from './FilterRowValue';\n\nconst FilterRow = ({\n hasEmpty,\n filter,\n filterIndex,\n activeQuestion,\n questions,\n fieldChange,\n operatorChange,\n genericType,\n removeFilter,\n valueChange,\n valueBlur,\n questionValuesMap,\n selectedQuestions,\n disabled,\n filters,\n lockableFilters = false,\n lockPropertyChange,\n checkIsFilled = f => f,\n isAllRowDisabled = false,\n project = ''\n}) => {\n const [showToolTip, setShowToolTip] = useState(false);\n const [tooltipPosition, setTooltipPosition] = useState({ left: 0, top: 0 });\n const { isFilled } = useMemo(() => checkIsFilled(filter), [filter]);\n\n const handleTooltip = (isVisible, e) => {\n setShowToolTip(isVisible);\n if (e.target) {\n const { left, top, height } = e.target.getBoundingClientRect();\n setTooltipPosition({ left, top: top + height });\n }\n };\n\n const wrapperClasses = classNames('searchFilter-filterGroup px-4', {\n hasEmpty: hasEmpty,\n locked: filter.lock === '1',\n disabled: isAllRowDisabled\n });\n\n return (\n
        \n \n \n \n
        \n \n \n
        \n {lockableFilters && (\n <>\n {\n if (isFilled) {\n lockPropertyChange(filterIndex, filter.lock === '0' ? '1' : '0');\n }\n }}\n onKeyUp={() => { }}\n onMouseEnter={e => handleTooltip(true, e)}\n onMouseLeave={e => handleTooltip(false, e)}\n >\n {filter.lock === '0' ? () : ()}\n
        \n {showToolTip && isFilled && filter.lock === '0' && (\n createPortal(\n \n {t('Lock Filter')}\n
        \n {t(\"Collaborators can't see or change locked filters.\")}\n
        ,\n document.body\n )\n )}\n \n )}\n \n \n );\n};\n\nFilterRow.propTypes = {\n filter: PropTypes.shape({\n field: string,\n operator: string,\n lock: string\n }).isRequired,\n filterIndex: PropTypes.number.isRequired,\n questions: PropTypes.shape({}).isRequired,\n activeQuestion: PropTypes.shape({}).isRequired,\n hasEmpty: PropTypes.bool.isRequired,\n fieldChange: PropTypes.func.isRequired,\n operatorChange: PropTypes.func.isRequired,\n genericType: PropTypes.string.isRequired,\n removeFilter: PropTypes.func.isRequired,\n questionValuesMap: PropTypes.shape({}).isRequired,\n valueChange: PropTypes.func.isRequired,\n valueBlur: PropTypes.func.isRequired,\n lockPropertyChange: PropTypes.func.isRequired,\n selectedQuestions: PropTypes.arrayOf(PropTypes.string).isRequired,\n disabled: PropTypes.bool.isRequired,\n filters: PropTypes.array.isRequired,\n checkIsFilled: PropTypes.func,\n lockableFilters: PropTypes.bool,\n isAllRowDisabled: PropTypes.bool,\n project: PropTypes.string\n};\n\nexport default FilterRow;\n","import React, {\n memo, useMemo, useState, useRef, useEffect, useCallback\n} from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport moment, { isMoment } from 'moment';\nimport DatePicker from 'react-datepicker';\nimport { createPortal } from 'react-dom';\n\nimport { t } from '@jotforminc/translation';\nimport { useSetAttributeToElement, useEventListener, usePrevious } from '@jotforminc/hooks';\nimport '../styles/_jfTimeRange.scss';\nimport '@jotforminc/jotform.css';\nimport {\n defaultFormat,\n defaultStorageFormat,\n startFormat,\n endFormat,\n startAllTime,\n lessThanStr,\n greaterThanStr,\n customStr,\n allTimeStr,\n timeOptionList,\n oldLessThanStr,\n oldGreaterThanStr,\n DAY_ABBREVIATIONS\n} from './constants';\nimport { getDateThresholdRange, getTrueDateTimeStr } from '../utils';\n\nconst ContextWrapper = ({ usePortal, children }) => {\n return !usePortal ? children : createPortal(children, document.body);\n};\n\nContextWrapper.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node\n ]).isRequired\n};\n\nconst FilterTimeRange = ({\n isDisabled = false,\n timeFilterText = allTimeStr,\n filters,\n onRangeChange = () => { },\n showPredefinedTimeOptions = false,\n customTimeOptionList = timeOptionList,\n closeOnSelect = false,\n customHeader = false,\n usePortal = false,\n maxDate = false,\n minDate = false\n}) => {\n const [timeFilterType, setTimeFilterType] = useState(timeFilterText);\n const [timeRange, setTimeRange] = useState({\n startDate: (filters[oldGreaterThanStr] && moment(filters[oldGreaterThanStr])) || startAllTime,\n endDate: (filters[oldLessThanStr] && moment(filters[oldLessThanStr])) || moment(),\n selectedDate: '',\n showDatePicker: 'start'\n });\n const {\n startDate, selectedDate, endDate, showDatePicker\n } = timeRange;\n const [isShowContextMenu, setIsShowContextMenu] = useState(false);\n const [isClickedTimeOptions, setIsClickedTimeOptions] = useState(false);\n const wrapperRef = useRef();\n const prevTimeFilterText = usePrevious(timeFilterText);\n const prevFilters = usePrevious(filters);\n const [popupStyle, setPopupStyle] = useState({});\n\n const dateRange = useCallback(() => {\n if (timeFilterText === allTimeStr) {\n return {\n startDate: startAllTime,\n endDate: moment(),\n showDatePicker: 'start'\n };\n }\n\n const startDateStr = getTrueDateTimeStr(filters[greaterThanStr] || startAllTime.format(defaultStorageFormat));\n const endDateStr = getTrueDateTimeStr(filters[lessThanStr] || moment().format(defaultStorageFormat));\n\n return {\n startDate: moment(startDateStr, startDateStr.includes(':') ? defaultStorageFormat : 'YYYY-MM-DD', true),\n endDate: moment(endDateStr, endDateStr.includes(':') ? defaultStorageFormat : 'YYYY-MM-DD', true)\n };\n }, [\n timeFilterText,\n filters\n ]);\n\n const handleRangeChange = useCallback(() => {\n const newFilter = { ...filters };\n\n if (timeFilterType === allTimeStr) {\n delete newFilter[lessThanStr];\n delete newFilter[greaterThanStr];\n } else {\n Object.keys(newFilter).filter(key => key !== lessThanStr || key !== greaterThanStr)\n .forEach(k => delete newFilter[k]); // all created_at related keys should be removed\n newFilter[lessThanStr] = endDate.format(endFormat);\n newFilter[greaterThanStr] = startDate.format(startFormat);\n }\n\n onRangeChange(timeFilterType, newFilter);\n }, [timeFilterType, startDate, endDate]);\n\n const handleClickOutside = e => {\n if (wrapperRef && !wrapperRef.current.contains(e.target)) {\n e.stopPropagation();\n handleRangeChange(timeRange);\n setIsShowContextMenu(false);\n }\n };\n\n const handleCollapseOnResize = () => {\n if (wrapperRef && wrapperRef.current) {\n handleRangeChange(timeRange);\n setIsShowContextMenu(false);\n }\n };\n\n useEventListener('click', handleClickOutside, { condition: isShowContextMenu, element: document.body, capture: true });\n\n useEventListener('resize', handleCollapseOnResize, { condition: usePortal, element: window, capture: true });\n\n useEffect(() => {\n setTimeFilterType(timeFilterText);\n }, [timeFilterText]);\n\n useEffect(() => {\n if ((prevTimeFilterText && (prevTimeFilterText !== timeFilterText))\n || (filters[greaterThanStr] !== (prevFilters && prevFilters[greaterThanStr]))\n || (filters[lessThanStr] !== (prevFilters && prevFilters[lessThanStr]))\n ) {\n setTimeRange({ ...timeRange, ...dateRange() });\n }\n }, [\n prevTimeFilterText,\n timeFilterText,\n prevFilters,\n filters,\n timeRange\n ]);\n\n useEffect(() => {\n if (closeOnSelect && isClickedTimeOptions) {\n handleRangeChange(timeRange);\n setIsShowContextMenu(false);\n setIsClickedTimeOptions(false);\n }\n }, [timeFilterType]);\n\n const customButtonText = useMemo(() => {\n if (timeFilterType === customStr && startDate.isValid() && endDate.isValid()) {\n return `${startDate.format(defaultFormat)} — ${endDate.format(defaultFormat)}`;\n }\n return timeFilterType === allTimeStr ? t(allTimeStr) : timeFilterType;\n }, [timeFilterType, startDate, endDate]);\n\n const handleChangeStart = _startDate => {\n const newStartDate = moment(_startDate);\n if (newStartDate.isAfter(timeRange.endDate)) {\n setTimeRange({\n ...timeRange,\n endDate: newStartDate,\n selectedDate: newStartDate\n });\n } else {\n setTimeRange({\n ...timeRange,\n startDate: newStartDate,\n selectedDate: timeRange.endDate,\n showDatePicker: 'end'\n });\n }\n setTimeFilterType(customStr);\n };\n\n const handleChangeEnd = _endDate => {\n const newEndDate = moment(_endDate);\n if (newEndDate.isBefore(timeRange.startDate)) {\n setTimeRange({\n ...timeRange,\n startDate: newEndDate,\n selectedDate: newEndDate\n });\n } else {\n setTimeRange({\n ...timeRange,\n endDate: newEndDate,\n showDatePicker: 'start',\n selectedDate: timeRange.startDate\n });\n }\n setTimeFilterType(customStr);\n };\n const handleTimeRangeOptionClick = _timeFilterType => () => {\n if (_timeFilterType !== timeFilterType) {\n const newDateTresholdRange = getDateThresholdRange(_timeFilterType);\n setTimeRange({ ...timeRange, ...newDateTresholdRange });\n setTimeFilterType(_timeFilterType);\n setIsClickedTimeOptions(true);\n }\n };\n\n const handleOpenMenu = ({ target }) => {\n if (!isDisabled) {\n if (usePortal) {\n const rect = target.getBoundingClientRect();\n setPopupStyle({\n position: 'absolute',\n left: rect.left,\n top: rect.top + 50,\n right: 'unset',\n width: rect.width,\n zIndex: 10000\n });\n }\n setIsShowContextMenu(true);\n }\n };\n\n useSetAttributeToElement('react-datepicker__week', 'tabindex', 0, isShowContextMenu);\n\n const _selectedDate = isMoment(selectedDate) ? selectedDate.toDate() : null;\n const _start = isMoment(startDate) ? startDate.toDate() : null;\n const _end = isMoment(endDate) ? endDate.toDate() : null;\n\n // To fix the datepickers month header not translating issue\n const CustomDatePickerHeader = ({\n // eslint-disable-next-line react/prop-types\n date, decreaseMonth, increaseMonth\n }) => {\n const formattedMonth = moment(date).format('MMMM');\n const formattedYear = moment(date).format('YYYY');\n return (\n
        \n \n \n {'<'}\n \n \n \n {t(formattedMonth)}\n  \n {formattedYear}\n \n \n \n {'>'}\n \n \n
        \n );\n };\n\n return (\n
        \n { }}\n >\n {/* */}\n {t(customButtonText)}\n
        \n {isShowContextMenu && (\n \n \n
        \n (\n \n )\n : undefined\n }\n formatWeekDay={nameOfDay => t(DAY_ABBREVIATIONS[nameOfDay])}\n {...maxDate ? { maxDate } : {}}\n {...minDate ? { minDate } : {}}\n />\n (\n \n )\n : undefined\n }\n formatWeekDay={nameOfDay => t(DAY_ABBREVIATIONS[nameOfDay])}\n {...maxDate ? { maxDate } : {}}\n {...minDate ? { minDate } : {}}\n />\n
        \n {showPredefinedTimeOptions && (\n
        \n
          \n {customTimeOptionList.map(opt => (\n \n \n {t(opt)}\n \n \n ))}\n
        \n
        \n )}\n \n
        \n )}\n \n );\n};\n\nFilterTimeRange.propTypes = {\n filters: PropTypes.shape({}).isRequired,\n isDisabled: PropTypes.bool,\n onRangeChange: PropTypes.func,\n timeFilterText: PropTypes.string,\n showPredefinedTimeOptions: PropTypes.bool,\n customTimeOptionList: PropTypes.array,\n closeOnSelect: PropTypes.bool,\n customHeader: PropTypes.bool,\n usePortal: PropTypes.bool,\n maxDate: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.instanceOf(Date)\n ]),\n minDate: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.instanceOf(Date)\n ])\n};\n\nexport default memo(FilterTimeRange);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport FilterTimeRange from './FilterTimeRange';\nimport {\n getFilterGroup,\n getFilterGroupText,\n getFilterTimeRange\n} from '../utils';\n\nconst SearchInRow = ({\n filters,\n filterGroups,\n mutatedFilters = {},\n timeFilterText,\n allFilterText,\n handleFilterGroupchange,\n handleTimeRangeChange,\n showTimeRange,\n showPredefinedTimeOptions,\n autoFocus = false\n}) => (\n
        \n \n
        \n
        {t(getFilterGroupText([...filters, mutatedFilters], allFilterText))}
        \n \n {filterGroups.map(f => (\n \n ))}\n \n
        \n {showTimeRange && (\n \n )}\n
        \n);\n\nSearchInRow.propTypes = {\n filters: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n filterGroups: PropTypes.arrayOf(PropTypes.shape()).isRequired,\n timeFilterText: PropTypes.string.isRequired,\n allFilterText: PropTypes.string.isRequired,\n handleFilterGroupchange: PropTypes.func.isRequired,\n handleTimeRangeChange: PropTypes.func.isRequired,\n showPredefinedTimeOptions: PropTypes.bool.isRequired,\n showTimeRange: PropTypes.bool.isRequired,\n autoFocus: PropTypes.bool,\n mutatedFilters: PropTypes.shape({})\n};\n\nexport default React.memo(SearchInRow);\n","import moment from 'moment';\nimport React, { Component, forwardRef } from 'react';\nimport PropTypes from 'prop-types';\n\nimport trimStart from 'lodash/trimStart';\nimport isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport range from 'lodash/range';\nimport differenceBy from 'lodash/differenceBy';\n\nimport { t } from '@jotforminc/translation';\nimport { capitalizeFirstLetter } from '@jotforminc/utils';\nimport { Button } from '@jotforminc/magnet';\nimport { IconPlus } from '@jotforminc/svg-icons';\nimport FilterRow from './FilterRow';\nimport SearchInRow from './SearchInRow';\nimport '@jotforminc/jotform.css';\n\nimport {\n getOperators,\n getNextFilterID,\n convertFiltersObjectToArray,\n convertFiltersArrayToObject,\n getPreparedFilters,\n getUpdatedTimeFilterText,\n mergeTwoFiltersObjects,\n BOARD_QUESTION_VALUES,\n BOARD_SOURCE_FORM_QUESTION\n} from '../utils';\n\nimport {\n allTimeStr,\n defaultFilter,\n genericTypesMap,\n emptyValueOperators,\n defaultFilterGroups,\n UTILITY_QUESTIONS,\n UTILITY_FIELDS_WITH_Q,\n customStr,\n lessThanStr,\n greaterThanStr,\n oldGreaterThanStr,\n oldLessThanStr,\n whiteListedFilters\n} from './constants';\n\nimport '../styles/_jfSearchFilter.scss';\n\nclass SearchFilter extends Component {\n constructor(props) {\n super(props);\n\n const { timeFilterText = (props.filters[oldGreaterThanStr] || props.filters[oldLessThanStr]) ? customStr : allTimeStr } = props.filters;\n const newFilters = { ...props.filters, timeFilterText };\n const filtersArray = convertFiltersObjectToArray(mergeTwoFiltersObjects(getPreparedFilters(newFilters), props.activeViewLockedFilters), props.activeViewLockedFilters);\n this.state = {\n errors: [],\n filters: filtersArray.length ? filtersArray : [{ ...defaultFilter }],\n timeFilterText\n };\n\n this.valueBlur = this.valueBlur.bind(this);\n this.fieldChange = this.fieldChange.bind(this);\n this.valueChange = this.valueChange.bind(this);\n this.removeFilter = this.removeFilter.bind(this);\n this.addNewFilter = this.addNewFilter.bind(this);\n this.operatorChange = this.operatorChange.bind(this);\n this.lockPropertyChange = this.lockPropertyChange.bind(this);\n this.getGenericType = this.getGenericType.bind(this);\n this.getFilteredSubmissions = this.getFilteredSubmissions.bind(this);\n this.handleFilterGroupchange = this.handleFilterGroupchange.bind(this);\n this.handleTimeRangeChange = this.handleTimeRangeChange.bind(this);\n this.clearAllFilters = this.clearAllFilters.bind(this);\n this.unlockFilters = this.unlockFilters.bind(this);\n }\n\n componentDidMount() {\n const { filters } = this.state;\n const { fetchQuestionValues, questionValuesMap } = this.props;\n if (isEmpty(questionValuesMap)) {\n const fieldsRequiringQuestionValues = filters.filter(({ field: qid }) => qid === 'submittedVia')\n .map(f => f.field);\n fieldsRequiringQuestionValues.forEach(fieldName => fetchQuestionValues(fieldName));\n }\n }\n\n componentDidUpdate(prevProps) {\n const { filters } = this.props;\n\n if (prevProps.filters !== filters) {\n const removedFilters = differenceBy(\n convertFiltersObjectToArray(prevProps.filters),\n convertFiltersObjectToArray(filters),\n this.filterToString\n );\n\n if (removedFilters.length > 0) {\n const removedFiltersLookup = removedFilters.map(this.filterToString);\n const isThereRemovedTimeFilter = removedFilters.some(f => f.type === 'datetime');\n\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState(state => {\n const updatedFilters = state.filters.filter(f => !removedFiltersLookup.includes(this.filterToString(f)));\n const timeFilterText = isThereRemovedTimeFilter\n ? getUpdatedTimeFilterText(removedFilters[0], state.timeFilterText, updatedFilters)\n : state.timeFilterText;\n\n return {\n filters: updatedFilters.length > 0 ? updatedFilters : [{ ...defaultFilter }],\n timeFilterText\n };\n });\n }\n }\n }\n\n handleFilterGroupchange(e) {\n const { value } = e.target;\n const {\n recordWatchmanEvent, project, filterGroups, onFormChange\n } = this.props;\n const { filters } = this.state;\n let newFilters = Object.assign([], filters);\n\n newFilters = newFilters.filter(f => f.field !== 'new' && f.field !== 'flag' && f.field !== 'formIDs' && f.field !== 'ai_agent_id' && f.field !== 'conversation_type');\n const filterItem = { ...defaultFilter, id: getNextFilterID(newFilters), isFilled: true };\n if (value !== 'all') {\n if (value === 'unread') {\n filterItem.field = 'new';\n filterItem.value = '0';\n filterItem.operator = 'ne';\n } else if (value === 'read') {\n filterItem.field = 'new';\n filterItem.value = value === 'unread' ? '1' : '0';\n filterItem.operator = 'eq';\n } else if (value === 'flag' || value === 'unflag') {\n filterItem.field = 'flag';\n filterItem.value = value === 'flag' ? '1' : '0';\n filterItem.operator = 'eq';\n } else if (project === 'allSentbox') {\n filterItem.field = 'formIDs';\n filterItem.value = [value];\n filterItem.operator = 'eq';\n filterItem.text = filterGroups.filter(group => group.value === value)[0]?.text;\n onFormChange(value);\n } else if (value === 'ai_agent_id') {\n filterItem.field = 'ai_agent_id';\n filterItem.value = 'null';\n filterItem.operator = 'ne';\n } else if (value === 'submission') {\n filterItem.field = 'conversation_type';\n filterItem.value = 'submission';\n filterItem.operator = 'eq';\n } else if (value === 'incomplete') {\n filterItem.field = 'conversation_type';\n filterItem.value = 'incomplete';\n filterItem.operator = 'eq';\n }\n\n newFilters.push(filterItem);\n }\n\n this.setState({ filters: newFilters });\n\n const action = project === 'inbox' ? `Filter-${capitalizeFirstLetter(value)}` : 'filterGroupChanged';\n recordWatchmanEvent({ action, target: value });\n }\n\n handleTimeRangeChange(timeFilterText, newFilter) {\n const { recordWatchmanEvent } = this.props;\n const { filters } = this.state;\n let newFilters = Object.assign([], filters);\n\n newFilters = newFilters.filter(f => {\n return f.field !== 'created_at' && !isEqual(f, defaultFilter);\n });\n if (timeFilterText !== allTimeStr) {\n Object.keys(newFilter).forEach(key => {\n const filterItem = { ...defaultFilter, id: getNextFilterID(newFilters), isFilled: true };\n const [field, operator, type] = key.split(':');\n filterItem.field = field;\n filterItem.value = newFilter[key];\n filterItem.operator = operator;\n filterItem.type = type;\n\n newFilters.push(filterItem);\n });\n }\n\n this.setState({ filters: newFilters, timeFilterText });\n\n recordWatchmanEvent({ action: 'filterTimeRangeChanged', target: timeFilterText });\n }\n\n // eslint-disable-next-line complexity, max-statements\n onPropertyChange(index, propName, propValue) {\n const {\n questions, fetchQuestionValues, questionValuesMap, project\n } = this.props;\n const { filters } = this.state;\n const filter = this.checkIsFilled({ ...filters[index], [propName]: propValue });\n this.changeErrorState(filter, index);\n\n const genericType = this.getGenericType(propValue);\n if (propName === 'field') {\n const id = propValue.replace('q', '');\n const question = questions[id] || {};\n if (UTILITY_FIELDS_WITH_Q.indexOf(propValue) !== -1 || UTILITY_QUESTIONS.includes(question.type)) {\n filter.field = filter.field.replace('q', '');\n }\n\n filter.type = '';\n filter.value = '';\n filter.isFilled = false;\n const currentFilters = filters.filter(f => f.field === filter.field);\n\n let operators = getOperators(genericType);\n // If there is a filter with same field and we can select this field again it means it's operator is not equal\n // Because there can only be one equal operator\n operators = (currentFilters.length > 0 && operators.filter(f => f.name !== 'eq')) || operators;\n const firstOperatorName = (operators && operators[0] && operators[0].name) || 'eq';\n\n if (genericType === 'submissionWidget' || genericType === 'assignee') {\n const optionsArray = typeof question.options_array === 'object' ? question.options_array : JSON.parse(question.options_array || '{}');\n const values = Object.keys(optionsArray).filter(f => !currentFilters.find(v => v.value === `{${f}}`));\n filter.value = (values && values[0] && `{${values[0]}}`) || '';\n filter.isFilled = true;\n } else if (genericType === 'dropdown' || genericType === 'workflow' || genericType === 'eq') {\n if (question.type !== 'control_workflowStatus' || question.type !== 'control_eq') fetchQuestionValues(id);\n const options = (question.options || '').split('|');\n const values = options && options.filter(o => !currentFilters.find(f => f.value === o));\n filter.value = (values && values[0]) || '';\n filter.isFilled = true;\n } else if (genericType === 'scale') {\n fetchQuestionValues(id);\n const minValue = parseInt(question.scaleFrom, 10);\n const maxValue = parseInt(question[(question.type === 'control_rating' ? 'stars' : 'scaleAmount')], 10);\n const values = range(minValue, maxValue + 1, 1).filter(r => !currentFilters.find(f => f.value === `${r}`));\n filter.value = (values.length && `${values[0]}`) || '';\n filter.isFilled = true;\n } else if (genericType === 'text') {\n fetchQuestionValues(id);\n } else if (genericType === 'date') {\n const { allowTime } = question;\n\n // Matches operator was causing a issue in date filters.\n // Because we are sending time with exact hour and minutes but we do not let users to choose exact minutes.\n const isMatchesSelected = project === 'inbox' && filter.operator === 'matches';\n const dateFormat = !isMatchesSelected && allowTime === 'Yes' ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD';\n\n filter.value = moment().format(dateFormat);\n filter.isFilled = true;\n if (question.type === 'control_appointment') {\n filter.type = 'appointment';\n } else {\n filter.type = 'datetime';\n }\n } else if (genericType === 'numeric' && Object.prototype.hasOwnProperty.call(question, 'currency')) {\n filter.type = 'currency';\n } else if (genericType === 'bool') {\n filter.value = '0';\n filter.isFilled = true;\n } else if (genericType === 'submittedVia') {\n if (isEmpty(questionValuesMap)) {\n fetchQuestionValues(id);\n }\n }\n\n filter.operator = firstOperatorName;\n }\n if (project === 'inbox' && propName === 'operator' && (filter.type === 'datetime' || filter.type === 'appointment')) {\n const id = filter.field.replace('q', '');\n const question = questions[id] || {};\n const { allowTime } = question;\n const isMatchesSelected = project === 'inbox' && filter.operator === 'matches';\n const dateFormat = !isMatchesSelected && allowTime === 'Yes' ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD';\n filter.value = moment().format(dateFormat);\n }\n this.changeFilter(index, filter);\n }\n\n getGenericType(qid) {\n const { questions } = this.props;\n const {\n type: qType,\n name: qName,\n submissionWidget,\n sheetField,\n options_array: optionsArray = '{}',\n formula,\n inputType = ''\n } = questions[qid?.replace('q', '')] || {};\n\n if (qType === 'control_submissionSubmitter') {\n return 'submitter';\n }\n if (qType === 'control_submissionSubmittedVia') {\n return 'submittedVia';\n }\n if ((sheetField === 'Yes' && !!formula) || qType === 'control_number') {\n if (qName === BOARD_SOURCE_FORM_QUESTION.name) {\n return BOARD_QUESTION_VALUES[qid?.replace('q', '')];\n }\n return 'numeric';\n }\n\n if (qType === 'control_assignee') {\n return 'assignee';\n }\n\n const keys = Object.keys(genericTypesMap);\n\n if (submissionWidget === 'Yes' || (sheetField === 'Yes' && optionsArray !== '{}')) {\n return 'submissionWidget';\n }\n\n if (qType === 'control_appointment') {\n return 'date';\n }\n\n if (qType === 'control_matrix') {\n if (inputType === 'Emoji Slider') {\n return 'numeric';\n }\n }\n\n if (qType === 'control_documentStatus') {\n return 'workflow';\n }\n\n if (qType === 'control_documentCreationTime' || qType === 'control_documentModificationTime') {\n return 'date';\n }\n\n for (let i = 0; i < keys.length; i++) {\n if (genericTypesMap[keys[i]].indexOf(qType) !== -1) {\n return keys[i];\n }\n }\n\n return 'other';\n }\n\n getFilteredSubmissions(save = false) {\n const { filters, timeFilterText } = this.state;\n const { recordWatchmanEvent, closeFilter } = this.props;\n\n return () => {\n const errors = filters.reduce((acc, filter, index) => {\n if (filter.isFilled === false) acc.push(index);\n return acc;\n }, []);\n\n if (errors.length === 0) {\n this._getFilteredSubmissions(filters, timeFilterText, save);\n } else {\n const clearedFilters = filters.filter((filter, index) => errors.indexOf(index) === -1);\n this._getFilteredSubmissions(clearedFilters, timeFilterText, save);\n }\n\n closeFilter();\n recordWatchmanEvent({ action: 'filterPanelSearchClick' });\n };\n }\n\n filterToString({ field, operator, value }) {\n return `${field}:${operator}:${value}`;\n }\n\n saveFilter(filters) {\n const { tempFilters, saveFilter } = this.props;\n\n const onlyPersistentFilters = Object.entries((tempFilters.filterObj || {}))\n .filter(([key, value]) => filters[key] !== value)\n .reduce((prev, [key, value]) => ({ ...prev, [key]: value }), filters);\n\n saveFilter({ filters: onlyPersistentFilters });\n }\n\n _getFilteredSubmissions(filters, timeFilterText, save = false) {\n const { tempFilters, showTimeRange, handleCurrentFilters } = this.props;\n const {\n filterObj: {\n 'created_at:gte': timeRangeFilterStart,\n 'created_at:lte': timeRangeFilterEnd\n } = {}\n } = tempFilters;\n\n const filterObj = convertFiltersArrayToObject(filters, currentFilters => {\n handleCurrentFilters(currentFilters);\n });\n\n let tempFiltersCopy = tempFilters;\n if (timeRangeFilterStart && (!filterObj['created_at:gte'] || filterObj['created_at:gte'] !== timeRangeFilterStart)) {\n const { filterObj: { 'created_at:gte': tempCreatedAtGte, ...remainingFilterObj } = {} } = tempFiltersCopy;\n tempFiltersCopy = {\n ...tempFiltersCopy,\n text: 'All time',\n filterObj: remainingFilterObj\n };\n }\n\n if (timeRangeFilterEnd && (!filterObj.get('created_at:lte') || filterObj.get('created_at:lte') !== timeRangeFilterEnd)) {\n const { filterObj: { 'created_at:lte': tempCreatedAtLte, ...remainingFilterObj } = {} } = tempFiltersCopy;\n tempFiltersCopy = {\n ...tempFiltersCopy,\n text: 'All time',\n filterObj: remainingFilterObj\n };\n }\n\n if (timeFilterText && showTimeRange) {\n filterObj.timeFilterText = timeFilterText;\n if (timeFilterText !== allTimeStr && timeFilterText !== customStr) {\n delete filterObj[lessThanStr];\n delete filterObj[greaterThanStr];\n }\n }\n\n if (filterObj['formIDs:eq'] && filterObj['formIDs:eq']?.slice(-1)?.[0] === 'allForms') {\n delete filterObj['formIDs:eq'];\n }\n this.applyFilterAndSearch(filterObj, tempFiltersCopy);\n\n if (save) this.saveFilter(filterObj);\n }\n\n applyFilterAndSearch(filters, tempFilters) {\n const {\n questions,\n setTempFilters,\n getOrderByValue,\n fetchSubmissions\n } = this.props;\n\n if (tempFilters) {\n setTempFilters(tempFilters);\n }\n\n const params = {\n filter: filters,\n orderby: getOrderByValue(questions)\n };\n\n fetchSubmissions({ params });\n }\n\n addFulltextToFilter(filterObject) {\n return {\n ...filterObject\n };\n }\n\n addNewFilter() {\n const { recordWatchmanEvent } = this.props;\n\n this.setState(state => ({\n filters: [...state.filters, { ...defaultFilter, id: getNextFilterID(state.filters) }]\n }));\n\n recordWatchmanEvent({ action: 'addFilterClick' });\n }\n\n changeFilter(index, filter) {\n this.setState(state => ({\n filters: [\n ...state.filters.slice(0, index),\n filter,\n ...state.filters.slice(index + 1, state.filters.length)\n ],\n timeFilterText: filter.field === 'created_at' && (filter.operator === 'lte' || filter.operator === 'gte') ? customStr : state.timeFilterText\n }));\n }\n\n fieldChange(index) {\n return ({ target: { value } }) => this.onPropertyChange(index, 'field', value);\n }\n\n operatorChange(index) {\n return ({ target: { value } }) => this.onPropertyChange(index, 'operator', value);\n }\n\n valueChange(index) {\n return ({ target: { value } }) => this.onPropertyChange(index, 'value', trimStart(value));\n }\n\n lockPropertyChange(index, value) {\n const { recordWatchmanEvent } = this.props;\n this.onPropertyChange(index, 'lock', value);\n recordWatchmanEvent({ action: 'filterLockIconClicked' });\n }\n\n valueBlur(index) {\n return ({ target: { value } }) => this.onPropertyChange(index, 'value', value);\n }\n\n removeFilter(index) {\n return () => {\n const { recordWatchmanEvent } = this.props;\n this.setState(state => {\n const removedFilter = state.filters[index];\n const updatedFilters = [...state.filters.slice(0, index), ...state.filters.slice(index + 1, state.filters.length)];\n const timeFilterText = getUpdatedTimeFilterText(removedFilter, state.timeFilterText, updatedFilters);\n return { filters: updatedFilters.length > 0 ? updatedFilters : [{ ...defaultFilter }], timeFilterText };\n });\n\n recordWatchmanEvent({ action: 'removeFilterClick' });\n };\n }\n\n clearAllFilters() {\n const { recordWatchmanEvent } = this.props;\n this.setState({\n errors: [],\n filters: [{ ...defaultFilter }],\n timeFilterText: allTimeStr\n });\n recordWatchmanEvent({ action: 'removeAllFilterClicked' });\n }\n\n checkIsFilled(filter) {\n return {\n ...filter,\n isFilled: filter.field !== '' && (emptyValueOperators.indexOf(filter.operator) !== -1 || filter.value !== ''),\n isValueDisabled: emptyValueOperators.indexOf(filter.operator) !== -1,\n value: emptyValueOperators.indexOf(filter.operator) !== -1 ? '' : filter.value,\n isValid: filter.value !== undefined && filter.operator !== undefined\n };\n }\n\n changeErrorState(filter, index) {\n const { errors } = this.state;\n\n if (filter.isFilled && errors.indexOf(index) !== -1) {\n this.setState(state => {\n const errorIndex = state.errors.indexOf(index);\n const _errors = [...state.errors.slice(0, errorIndex), ...state.errors.slice(errorIndex + 1, state.errors.length)];\n return {\n errors: _errors\n };\n });\n }\n }\n\n unlockFilters() {\n const { recordWatchmanEvent } = this.props;\n\n this.setState(state => {\n const unlockAll = state.filters.map(filter => {\n return { ...filter, lock: '0' };\n });\n\n return {\n ...state,\n filters: unlockAll\n };\n });\n recordWatchmanEvent({ action: 'unlockAllFilters' });\n }\n\n render() {\n const {\n innerRef,\n filterGroups,\n questions,\n questionValuesMap,\n showTimeRange,\n showPredefinedTimeOptions,\n autoFocus,\n uniqueFilters,\n forceQuestions,\n project,\n mutatedFilters,\n NoFilterRenderer,\n allFilterText,\n lockableFilters,\n customSearchInner\n } = this.props;\n const {\n filters: stateFilters,\n errors,\n timeFilterText\n } = this.state;\n\n const filters = [...stateFilters];\n const customQuestions = Object.keys(forceQuestions).length !== 0;\n const disableRows = (project === 'allSentbox' && (filters.every(filter => filter?.field !== 'formIDs') || filters.some(filter => filter?.text === 'All Forms')));\n\n const hideFilters = (project === 'allSentbox'\n && (filters.every(filter => (filter?.text === 'All Forms' || (filter?.field !== 'created_at' && filter?.field !== 'formIDs'))) || (filters.length === 1 && filters[0]?.operator === 'matches'))\n );\n\n // Getting question ids to prevent duplicate question selection.\n // This ids will be used on FilterRowFields to disable selected questions.\n // Additionally This is used for disabling questions that has filter with equal operator\n const selectedQuestions = filters.map(e => {\n if (e.operator === 'eq') {\n const _replacedField = e.field?.replace('q', '') || '';\n return `${_replacedField}`;\n }\n // User can prefer date/time filtering with range.\n if (e.type && (whiteListedFilters.includes(e.type))) return '';\n if (uniqueFilters) {\n const _replacedField = e.field?.replace('q', '') || '';\n return `${_replacedField}`;\n }\n return '';\n }).filter(f => f);\n\n if (filters.filter(f => f.field !== 'new' && f.field !== 'ai_agent_id' && f.field !== 'flag' && f.field !== 'formIDs' && f.field !== 'conversation_type').length === 0) {\n filters.push({ ...defaultFilter });\n this.setState({ filters: filters });\n }\n\n const lockColumnCount = filters.reduce((acc, filter) => {\n if (filter.lock === '1') {\n return acc + 1;\n }\n return acc;\n }, 0);\n\n // apply filter button disabled for advanced filters in board\n const disabledApplyFilterButton = project === 'board' && !filters.some(_filter => !!(_filter.field));\n\n const renderSearchInnerComponent = () => {\n if (customSearchInner) {\n const CustomSearchInner = customSearchInner;\n return ;\n }\n\n return (\n \n );\n };\n\n return (\n
        \n
        \n {renderSearchInnerComponent()}\n
        \n\n {\n !hideFilters ? (\n <>\n
        \n \n {lockableFilters && filters.length >= 2 && (\n \n {t('Clear All Filters')}\n \n )}\n
        \n
        \n {filters.map((filter, filterIndex) => {\n const { field: qid, id } = filter;\n const { isValid } = this.checkIsFilled(filter);\n\n if (qid === 'new' || qid === 'flag' || qid === 'formIDs' || qid === 'ai_agent_id' || qid === 'conversation_type') return null;\n if (!isValid) return null;\n\n const useQuestions = customQuestions ? forceQuestions : questions;\n\n const activeQuestion = useQuestions[qid?.replace('q', '')] || {};\n\n const disabled = Boolean(((disableRows && (qid === 'created_at')) || activeQuestion?.disableFilter));\n\n const isAllRowDisabled = activeQuestion?.disableFilter;\n\n const fieldFilters = filters.filter(f => f.field === qid);\n return (\n \n );\n })}\n
        \n {lockColumnCount !== 0 && (\n
        \n \n \n {`${lockColumnCount} ${t('filters locked.')} `}\n \n {t(\"Collaborators can't see or change locked filters.\")}\n \n { }}\n type=\"button\"\n >\n {t('Unlock All Filters')}\n \n
        \n )}\n \n )\n : (NoFilterRenderer)\n }\n\n
        \n
        \n {\n !hideFilters && !disableRows && (\n \n {t('Add New Filter')}\n \n )\n }\n \n {t('Apply Filter')}\n \n
        \n
        \n
        \n );\n }\n}\n\nSearchFilter.propTypes = {\n questions: PropTypes.objectOf(PropTypes.shape({})).isRequired,\n closeFilter: PropTypes.func.isRequired,\n questionValuesMap: PropTypes.shape({}),\n innerRef: PropTypes.oneOfType([PropTypes.shape({}), PropTypes.func]),\n recordWatchmanEvent: PropTypes.func,\n filters: PropTypes.shape({\n timeFilterText: PropTypes.string\n }),\n fetchQuestionValues: PropTypes.func,\n tempFilters: PropTypes.shape({\n filterObj: PropTypes.shape({})\n }),\n saveFilter: PropTypes.func,\n onFormChange: PropTypes.func,\n forceQuestions: PropTypes.shape({}),\n mutatedFilters: PropTypes.shape({}),\n setTempFilters: PropTypes.func,\n getOrderByValue: PropTypes.func,\n filterGroups: PropTypes.arrayOf(PropTypes.shape()),\n fetchSubmissions: PropTypes.func,\n project: PropTypes.string,\n showPredefinedTimeOptions: PropTypes.bool,\n showTimeRange: PropTypes.bool,\n autoFocus: PropTypes.bool,\n uniqueFilters: PropTypes.bool,\n NoFilterRenderer: PropTypes.node,\n allFilterText: PropTypes.string,\n lockableFilters: PropTypes.bool,\n handleCurrentFilters: PropTypes.func,\n activeViewLockedFilters: PropTypes.shape({}),\n customSearchInner: PropTypes.func\n};\n\nSearchFilter.defaultProps = {\n innerRef: f => f,\n fetchSubmissions: f => f,\n setTempFilters: f => f,\n saveFilter: f => f,\n onFormChange: f => f,\n getOrderByValue: f => f,\n fetchQuestionValues: f => f,\n recordWatchmanEvent: f => f,\n forceQuestions: {},\n mutatedFilters: {},\n filters: [],\n filterGroups: defaultFilterGroups,\n questionValuesMap: {},\n NoFilterRenderer: null,\n tempFilters: {},\n project: '',\n showTimeRange: false,\n showPredefinedTimeOptions: false,\n autoFocus: false,\n uniqueFilters: false,\n allFilterText: 'All Submissions',\n lockableFilters: false,\n handleCurrentFilters: f => f,\n activeViewLockedFilters: {},\n customSearchInner: null\n};\n\nexport default forwardRef((props, ref) => );\n","import React, { Component } from 'react';\nimport {\n func, string, bool, number\n} from 'prop-types';\n\nimport { classNames } from '../../utils';\nimport { NUMBER_OR_STRING_PROPTYPE } from '../../constants/proptypes';\n\nimport './TextInput.scss';\n\nclass TextInput extends Component {\n constructor(props) {\n super(props);\n\n this.resetValue = this.resetValue.bind(this);\n this.onDebouncedChange = this.onDebouncedChange.bind(this);\n this.onInputChange = this.onInputChange.bind(this);\n this.resettableInput = null;\n\n this.state = {\n inputValue: null\n };\n }\n\n onDebouncedChange(callback, ms) {\n return (...args) => {\n if (this.interval) clearTimeout(this.interval);\n this.interval = setTimeout(() => {\n callback(...args);\n }, ms);\n };\n }\n\n onInputChange(e) {\n const { debounce, onChange } = this.props;\n this.setState({ inputValue: e.target.value });\n if (debounce) {\n this.onDebouncedChange(onChange, debounce)(e);\n } else {\n onChange(e);\n }\n }\n\n get renderResettable() {\n const { value } = this.props;\n\n return (\n
        \n {this.renderInput}\n
        \n
        \n );\n }\n\n get renderInput() {\n const { inputValue } = this.state;\n const {\n onChange,\n placeholder,\n resettable,\n value,\n ...remainingProps\n } = this.props;\n\n return (\n { this.resettableInput = r; }}\n value={inputValue ?? value}\n {...remainingProps}\n />\n );\n }\n\n resetValue() {\n const {\n onChange\n } = this.props;\n this.resettableInput.focus();\n this.setState({ inputValue: null });\n onChange({ target: { value: '' } });\n }\n\n render() {\n const { resettable } = this.props;\n return resettable ? this.renderResettable : this.renderInput;\n }\n}\nTextInput.propTypes = {\n onChange: func,\n value: NUMBER_OR_STRING_PROPTYPE,\n placeholder: string,\n resettable: bool,\n type: string,\n debounce: number\n};\n\nTextInput.defaultProps = {\n onChange: f => f,\n value: '',\n placeholder: '',\n resettable: false,\n type: 'text',\n debounce: 0\n};\n\nexport default TextInput;\n","import React, {\n useRef, useMemo, useState, useEffect\n} from 'react';\nimport {\n bool,\n func,\n string,\n shape,\n arrayOf\n} from 'prop-types';\n\nimport Tethered from 'react-tether';\nimport { SearchFilter, FilterButton } from '@jotforminc/search-filter';\nimport { capitalizeFirstLetter } from '@jotforminc/utils';\n\nimport {\n getFormQuestions\n} from '../../api';\n\nimport SVG from '../SVG';\nimport TextInput from '../TextInput';\nimport WatchmanRecorder, { withWatchMan } from '../../utils/WatchmanRecorder';\n\nimport { classNames } from '../../utils';\nimport { useClickOutsideState } from '../../hooks';\nimport {\n FILTER_TEXT_LIMIT, INITIAL_QUESTIONS, NON_INPUT_QUESTIONS, IGNORED_PREVIOUS_ORDERS_QUESTIONS, PREVIOUS_ORDERS_TYPES\n} from '../../constants';\nimport { translatedProps, questionsPropType } from '../../constants/proptypes';\n\nconst getIconNameFromQuestion = q => {\n switch (q?.type) {\n case 'control_checkbox':\n return 'IconTagsFilled';\n case 'control_submissionDate':\n case 'control_date':\n return 'IconCalendarEventCheckFilled';\n case 'control_email':\n return 'IconAt';\n case 'control_workflowStatus':\n return 'IconConditionalBranchFilled';\n default:\n return 'IconText';\n }\n};\n\nconst getAllSubmissionText = previousOrdersType => {\n switch (previousOrdersType) {\n case PREVIOUS_ORDERS_TYPES.STORE:\n return 'All Orders';\n case PREVIOUS_ORDERS_TYPES.DONATION:\n return 'All Donations';\n default:\n return 'All Submissions';\n }\n};\n\nconst AdvanceSearch = ({\n t,\n filters,\n questions,\n isLoading,\n inputValue,\n setFilters,\n questionValues,\n onInputValueChange,\n fetchQuestionValues,\n activeTab,\n setFilterText,\n userForms,\n isAllSentBox,\n isPreviousOrders,\n previousOrdersType,\n form\n}) => {\n const [formID, setFormID] = useState('');\n const [forceQuestions, setForceQuestions] = useState({});\n const searchFilterRef = useRef();\n const searchDropdownRef = useRef();\n const filterKeys = Object.keys(filters);\n const numberOfFilters = filterKeys.length;\n const advancedFilters = filterKeys\n .reduce((prev, curr) => {\n return {\n ...prev,\n [curr]: filters[curr]\n };\n }, {});\n\n const mutatedFilters = useMemo(() => {\n const formIDs = filters['formIDs:eq'];\n\n if (formIDs) {\n const selectedFormTitle = userForms.filter(f => f?.id === formIDs[0])[0]?.title;\n return {\n ...filters,\n selectedFormTitle\n };\n }\n return filters;\n }, [filters]);\n\n const filterGroups = (userForms.length > 0 && isAllSentBox) ? [{\n value: 'allForms', text: 'All Forms'\n },\n ...userForms.map(f => {\n return {\n text: f.title,\n value: f.id\n };\n })] : [\n { value: 'all', text: getAllSubmissionText(previousOrdersType) },\n ...(\n activeTab !== 'conversations'\n && form?.isAIAgentCreated === '1'\n ? [{ value: 'ai_agent_id', text: 'Conversations' }]\n : []\n ),\n ...(\n activeTab === 'conversations'\n && form?.isAIAgentCreated === '1'\n ? [\n { value: 'incomplete', text: 'Incomplete' },\n { value: 'submission', text: 'Submission' }\n ]\n : []\n ),\n { value: 'unread', text: 'Unread' },\n { value: 'read', text: 'Read' },\n { value: 'flag', text: 'Starred' },\n { value: 'unflag', text: 'Unstarred' }\n ];\n\n useEffect(() => {\n if (formID && formID !== 'allForms') {\n getFormQuestions(formID).then(formQuestions => {\n const values = Object.values(formQuestions)\n .filter(({ type }) => ['control_head', ...NON_INPUT_QUESTIONS].indexOf(type) === -1)\n .reduce((prev, curr) => {\n return {\n ...prev,\n [curr.qid]: curr\n };\n }, INITIAL_QUESTIONS);\n setForceQuestions(values);\n });\n }\n }, [formID]);\n\n useEffect(() => {\n if (isPreviousOrders) {\n const values = Object.values(questions).filter(({ type }) => [...IGNORED_PREVIOUS_ORDERS_QUESTIONS].indexOf(type) === -1).reduce((prev, curr) => {\n const currentQuestion = curr;\n if (currentQuestion.type === 'control_submissionDate') {\n currentQuestion.text = `${previousOrdersType === PREVIOUS_ORDERS_TYPES.DONATION ? 'Donation' : 'Order'} Date`;\n }\n return {\n ...prev,\n [currentQuestion.qid]: currentQuestion\n };\n }, {});\n setForceQuestions(values);\n }\n }, [isPreviousOrders]);\n\n const isAllTimeFilter = advancedFilters.timeFilterText === 'All time' && numberOfFilters === 1;\n const eventTarget = capitalizeFirstLetter(activeTab);\n\n const [isFilterPanelVisible, setFilterPanelVisibility] = useClickOutsideState(false, [searchFilterRef, searchDropdownRef]);\n\n const onDropdownIconClick = () => {\n setFilterPanelVisibility(!isFilterPanelVisible);\n setFilterText(inputValue);\n };\n\n const onFilterReset = e => {\n e.stopPropagation();\n setFilterPanelVisibility(false);\n setFilters({});\n };\n\n const onSearchFilterClose = () => setFilterPanelVisibility(false);\n const onSearchFilterSave = withWatchMan('ApplyFilter', eventTarget, ({ filters: { fullText, ...filtersToSave } }) => {\n setFilters(filtersToSave);\n });\n const onInputKeyPress = e => {\n const code = e.keyCode || e.charCode;\n if (e.key === 'Enter' || code === 13) {\n e.currentTarget.blur();\n }\n };\n\n const translateFilterTexts = (prevFilters => {\n Object.values(prevFilters).forEach(el => {\n const result = el;\n result.text = el.text && el.text.locale();\n });\n return prevFilters;\n });\n\n const handleRemoveSingle = e => {\n const newFiltered = Object.keys(filters).filter(key => key !== e).reduce((newObj, key) => {\n // eslint-disable-next-line no-param-reassign\n newObj[key] = filters[key];\n return newObj;\n }, {});\n setFilters(newFiltered);\n };\n\n const onSearchFilterEvent = ({ action }) => WatchmanRecorder.recordEvent(action, eventTarget);\n const isRegular = isAllSentBox ? 'allSentbox' : 'inbox';\n\n const questionsExtended = useMemo(() => {\n return Object.keys(questions).reduce((acc, key) => {\n const question = questions[key];\n if (!question) return acc;\n\n const iconName = getIconNameFromQuestion(question);\n const q = {\n ...question,\n icon: \n };\n acc[key] = q;\n return acc;\n }, {});\n });\n\n return (\n \n <>\n
        \n \n
        \n \n \n {numberOfFilters && !isAllTimeFilter ? (\n \n ) : (\n
        setFilters({})}>\n

        {t.FILTER}

        \n \n
        \n )}\n
        \n \n {isFilterPanelVisible && (\n \n \n To use advanced search, please select a form.\n \n)}\n />\n )}\n \n );\n};\n\nAdvanceSearch.propTypes = {\n questions: questionsPropType.isRequired,\n isLoading: bool,\n inputValue: string,\n filters: shape({}),\n questionValues: shape({}),\n setFilters: func,\n onInputValueChange: func,\n fetchQuestionValues: func,\n setFilterText: func,\n userForms: arrayOf(shape({})),\n isAllSentBox: bool,\n isPreviousOrders: bool,\n previousOrdersType: string,\n ...translatedProps\n};\n\nAdvanceSearch.defaultProps = {\n isLoading: false,\n inputValue: '',\n filters: {},\n questionValues: {},\n setFilters: f => f,\n userForms: [],\n onInputValueChange: f => f,\n fetchQuestionValues: f => f,\n setFilterText: f => f,\n isAllSentBox: false,\n isPreviousOrders: false,\n previousOrdersType: ''\n};\n\nexport default AdvanceSearch;\n","import React from 'react';\nimport {\n string,\n func,\n bool,\n oneOfType\n} from 'prop-types';\nimport { ButtonField as Button } from '@jotforminc/button-field';\n\nimport SVG from '../SVG';\nimport GhostButton from '../GhostButton';\n\nimport { translatedProps } from '../../constants/proptypes';\nimport { classNames } from '../../utils';\nimport { withWatchMan } from '../../utils/WatchmanRecorder';\n\nconst RestoreButton = ({\n onRestore,\n useGhostButton,\n disabled,\n t,\n eventTarget\n}) => {\n const restore = withWatchMan('Restore-SelectedSubmissions', eventTarget, onRestore);\n return (\n <>\n {!useGhostButton ? (\n }\n onClick={restore}\n disabled={disabled}\n >\n {t.RESTORE}\n \n ) : (\n \n )}\n \n );\n};\n\nRestoreButton.propTypes = {\n onRestore: func.isRequired,\n disabled: oneOfType([string, bool]),\n useGhostButton: bool,\n ...translatedProps\n};\n\nRestoreButton.defaultProps = {\n // dialogTitle: '',\n // dialogSubtitle: null,\n useGhostButton: false,\n disabled: ''\n};\n\nexport default RestoreButton;\n","import React from 'react';\nimport { func, string } from 'prop-types';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport { capitalizeFirstLetter } from '@jotforminc/utils';\n\nimport SVG from '../SVG';\nimport { translatedProps } from '../../constants/proptypes';\nimport { withWatchMan } from '../../utils/WatchmanRecorder';\n\nconst EditButton = ({\n onClick,\n t, // eslint-disable-line\n disabled,\n iconName,\n activeTab,\n className\n}) => {\n const onEdit = withWatchMan('SubmitEdit', capitalizeFirstLetter(activeTab), onClick);\n return (\n }\n onClick={onEdit}\n >\n {t.EDIT_SUBMISSION}\n \n );\n};\n\nEditButton.propTypes = {\n onClick: func.isRequired,\n iconName: string,\n className: string,\n ...translatedProps\n};\n\nEditButton.defaultProps = {\n className: '',\n iconName: 'IconPencilToSquare'\n};\n\nexport default EditButton;\n","import React, { useMemo } from 'react';\nimport { objectOf, bool } from 'prop-types';\nimport { FeatureToggles } from '@paralleldrive/react-feature-toggles';\nimport { filterObjectKeysByValue } from '@jotforminc/utils';\n\nconst FeatureTogglesComponent = ({ features, ...props }) => {\n const normalizedFeatures = useMemo(() => filterObjectKeysByValue(features), [features]);\n return (\n \n );\n};\n\nFeatureTogglesComponent.propTypes = {\n features: objectOf(bool).isRequired\n};\n\nexport default FeatureTogglesComponent;\n","import React from 'react';\nimport { string } from 'prop-types';\nimport { Feature } from '@paralleldrive/react-feature-toggles';\nimport { isActiveFeatureName } from '@paralleldrive/feature-toggles';\nimport { propTypes } from '@jotforminc/constants';\n\nconst FeatureComponent = ({\n name,\n activeComponent,\n inactiveComponent,\n ...props\n}) => (\n \n {({ features }) => (\n isActiveFeatureName(name, features) ? activeComponent : inactiveComponent\n )}\n \n);\n\nFeatureComponent.propTypes = {\n name: string.isRequired,\n activeComponent: propTypes.renderable,\n inactiveComponent: propTypes.renderable\n};\n\nFeatureComponent.defaultProps = {\n activeComponent: null,\n inactiveComponent: null\n};\n\nexport default FeatureComponent;\n","/* eslint-disable max-len */\n/* eslint-disable max-lines */\nimport styled from 'styled-components';\n\nexport const commonStyles = `\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizeLegibility;\n font-size: 16px;\n`;\n\nconst colors = {\n white: '#ffffff',\n black: '#2C3345',\n gray: '#EDEDF4',\n darkGray: '#8583A9',\n blue: '#4277FF',\n green: '#01BD6F',\n red: '#f90321'\n};\n\nconst onMobile = 'screen and (max-width: 480px)';\nconst onTablet = 'screen and (min-width: 480.01px) and (max-width: 722px)';\n\nconst wBoxPadding = 2;\n\nexport const ScWrapper = styled.div`\n * { box-sizing: border-box; }\n ${commonStyles}\n color: #2c3345;\n\n ${({ opensInModal }) => (opensInModal ? `\n padding: ${wBoxPadding}rem !important;\n\n ${onMobile}{\n padding: ${wBoxPadding * 0.5}rem !important;\n }\n ` : ''\n )}\n\n &,\n .wBox {\n position: relative;\n // height: 100% ;\n width: 100%;\n }\n\n .wBox-isError {\n min-height: 390px;\n }\n\n .wBox-upper {\n // padding: 0 .75em;\n display: flex;\n justify-content: space-between;\n align-items: center;\n align-content: flex-end;\n }\n\n .wBox-col-1 {\n display: flex;\n flex: 1;\n align-items: center;\n padding: 0 .75rem;\n }\n\n .titleContainer {\n margin: 0 .75rem 0 0;\n }\n\n\n .section {\n position: relative;\n padding-top: 0;\n padding-bottom: 0;\n\n &:first-of-type{\n padding-top: 0;\n }\n\n &:last-of-type{\n padding-bottom: 0;\n }\n\n .section-ln + .section-ln { margin-top: 10px; }\n\n }\n\n .wBox + .wBox {\n padding-top: 1.25em;\n margin-top: 1.25em;\n }\n\n .wBox ~ .wBox,\n .section ~ .section { border-top: 1px solid #eaebf2; }\n\n .invite-app-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n backgroud: #ffffff;\n border: 1px solid #C8CEED;\n border-radius: 4px;\n width: 32px;\n height: 32px;\n &.forSalesforce {\n border: none;\n background-color: #00A1E0;\n width: 24px;\n height: 24px;\n padding: 4.5px;\n }\n }\n\n .pill-container-with-icon {\n display: flex;\n align-items: center;\n margin-left: 2px;\n }\n\n .sectionTitle {\n color: #0A1551;\n flex: 0 0 auto;\n font-style: normal;\n font-weight: 500;\n font-size: 16px;\n line-height: 24px;\n letter-spacing: 0.12px;\n margin: 0;\n\n &-head {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n }\n .b { color: #0A1551; font-weight: 500; text-transform: uppercase; margin: 0 11px 0 0; line-height: 24px; html[dir=\"rtl\"] & { margin: 0 0 0 11px;}}\n .sub { font-size: .875em; font-weight: 400; margin: .375em 0 0 0; }\n\n .invite-by-app-wrapper {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n }\n }\n\n .section-ln {\n display: flex; justify-content: space-between;\n > div:first-child {\n flex: 1;\n }\n }\n\n .jsLine {\n margin-top: 26px;\n height:37px;\n border-top: 1px solid rgb(238, 238, 238);\n }\n\n .link-section{\n\n .section-ln{\n\n &.section-link{\n align-items: flex-start;\n\n > * {\n margin-left: 0.375rem;\n margin-bottom: 10px;\n position: relative;\n &:first-child{ margin-left: 0 }\n\n html[dir=\"rtl\"] & {\n margin-left: 0;\n margin-right: 0.375rem;\n }\n }\n\n @media ${onMobile}, ${onTablet}{\n flex-direction: column;\n align-items: stretch;\n\n > * {\n margin-left: 0;\n }\n }\n\n &.hasNewTab,\n &.isBuilderQRShare {\n flex-wrap: wrap;\n justify-content: flex-end;\n\n .linkBox{\n flex: 1 0 100%;\n }\n }\n\n &.relative {\n position: relative\n }\n\n > .enterpriseOptionBox {\n display: none;\n position: absolute;\n top: 50px;\n left: 0;\n margin: 0;\n }\n\n /* Show enterprise option on editing mode */\n .isEditing + .enterpriseOptionBox {\n display: block;\n }\n }\n\n &.section-action{\n margin-top: 0 !important;\n }\n\n .enterpriseOptionBox{ flex: 1 }\n }\n\n .sectionAction {\n align-self: center;\n margin-left: auto;\n\n html[dir=\"rtl\"] & {\n margin-left: 0;\n margin-right: auto;\n }\n\n .forSettings {\n color: #0075E3;\n\n svg {\n fill: currentColor;\n }\n \n > span {\n font-size: 14px;\n line-height: 16px;\n margin: 0 10px 0 4px;\n }\n }\n }\n }\n .invite-section{\n display: flex;\n flex-direction: column;\n color: #0A1551;\n\n .plbx-ln { flex: 1; }\n\n .animationContainer {\n overflow: hidden;\n transition: all 0.25s ease-out;\n }\n\n .section-ln-dropdown,\n .assigneeMsg,\n .section-action { opacity: 0; pointer-events: none; }\n\n .section-ln-dropdown { display: flex; }\n\n &:not(.isExpanded) {\n .assigneeMsg{ flex: 0; }\n .section-ln-dropdown { display: none; }\n\n }\n\n .assigneeMsg{ flex: 1; }\n\n .invite-pill-email-container {\n max-height: 72px;\n overflow-y: auto;\n overflow-x: hidden;\n\n .section-ln-content-input:placeholder-shown{\n text-overflow: ellipsis;\n }\n }\n\n\n &.isExpanded{\n &.hasText{\n overflow: unset;\n }\n\n .plbx-ln { margin-bottom: 10px; }\n\n .section-ln-dropdown,\n .assigneeMsg,\n .section-action{ opacity: 1; pointer-events: all; }\n }\n\n &:last-child { padding-top: 0; }\n\n .invite-by-app {\n width: 24px;\n height: 24px;\n display: flex;\n justify-content: center;\n align-items: center;\n margin-right: 12px;\n border-radius: 20px;\n &:hover {\n z-index: 9;\n }\n }\n }\n\n .section-action {\n display: flex;\n flex-direction: row-reverse;\n align-items: center;\n justify-content: space-between;\n &.forResources {\n margin-top: 10px;\n }\n &.forSend{\n margin-top: 12px;\n @media ${onMobile} {\n flex-direction: column;\n }\n\n button{\n margin-left: 8px;\n\n .inviteButtonLoadingContainer { \n @keyframes spin {\n 100% {\n transform: rotate(360deg);\n }\n }\n\n .loading {\n box-sizing: border-box;\n width: 18px;\n height: 18px;\n border-radius: 100%;\n border: 2px solid rgb(243, 243, 254);\n border-top-color: transparent;\n animation: spin .5s infinite linear;\n }\n }\n\n @media ${onMobile} {\n margin-left: 0;\n margin-bottom: 8px;\n }\n\n &:last-child{\n margin-left: 0;\n }\n }\n }\n }\n\n .forSuccess {\n color: #fff;\n text-align: right;\n margin-left: auto;\n position: absolute;\n white-space: nowrap;\n width: auto;\n top: 100%;\n border-radius:4px;\n right: 0;\n padding: 7px;\n font-size: 13px;\n background: #1C2843;\n margin-top: 5px;\n order: 3;\n\n &-wrapper {\n width: 100%;\n position: absolute !important;\n bottom: 0;\n right: 0;\n }\n }\n\n .actionMessage {\n display: flex;\n justify-content: space-between;\n align-items: center;\n line-height: 1.25;\n flex: 1;\n\n\n &:empty { padding: 0; }\n\n .forError {\n color: ${colors.red};\n text-align: right;\n }\n .forExpirationInfo,\n .forExpired {\n color: #8d8fa8;\n font-size: .875rem;\n // margin-top: -.5rem;\n margin-bottom: 7px;\n span { text-decoration: underline; cursor: pointer; }\n }\n\n .forExpired { color: #f90321; }\n\n .forGenerate {\n font-size: 0.875em;\n padding: .40rem .375rem;\n border-left: 1px solid rgba(129, 130, 158, 0.14);\n white-space: nowrap;\n flex: 0 0 auto;\n border: 0px;\n align-items: center;\n background-color: #fff;\n\n span {\n color: #6A6B92;\n }\n\n svg {\n width: 12px;\n margin: 0px 9px -1px 0px;\n }\n }\n }\n\n @media screen and (max-width: 850px) {\n .linkV4 & .linkBox + .section-action {\n flex-direction: column;\n align-items: stretch;\n\n > div { margin-bottom: 6px; }\n }\n }\n\n /* LinkBox & second section specific styles */\n .linkBox {\n border-radius: 4px;\n background-color: #F3F3FE;\n color: #6F76A7;\n height: 2.5rem;\n\n .forNewLink {\n display: flex;\n justify-content: center;\n align-items: center;\n border-left: 1px solid #C8CEED;\n border-radius: 0;\n cursor: pointer;\n width: 44px;\n\n html[dir=\"rtl\"] & {\n border-left: none;\n border-right: 1px solid #DADAE5;\n }\n\n svg {\n width: 20px;\n height: 20px;\n display: block;\n fill: currentColor;\n }\n }\n\n .forCreate {\n border-left: 1px solid #D8DAE9;\n white-space: nowrap;\n padding: 0.75rem;\n\n html[dir=\"rtl\"] & {\n border-left: none;\n border-right: 1px solid #D8DAE9;\n }\n }\n\n .forEdit {\n padding: 0 10px;\n height: 100%;\n flex: 0 0 auto;\n\n svg {\n width: 18px;\n height: 18px;\n display: block;\n fill: #626777;\n }\n }\n\n .forReset {\n background-color: #dfdfe8;\n height: 100%;\n width: 3em;\n border-radius: 4px;\n\n svg { width: 20px; height: 20px; display: block; margin: 0 auto; }\n }\n\n & > svg {\n align-self: center;\n margin: 0 0 0 10px;\n width: 20px;\n height: 20px;\n flex: 0 0 auto;\n\n html[dir=\"rtl\"] & {\n margin: 0 10px 0 0;\n }\n }\n }\n\n .linkItself {\n padding: 12px;\n font-size: 14px;\n line-height: 16px;\n border-radius: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: 1rem;\n\n html[dir=\"rtl\"] & {\n text-align: right;\n }\n }\n\n .customLink-wr { align-items: center; }\n .customLink-pre { max-width: 350px; padding: .75rem 0 .75rem .5rem; line-height: 1.125rem; color: rgba(44, 51, 69, .7); overflow:hidden; text-overflow:ellipsis; }\n .customLink-input input {\n font-size: 1em;\n width: 100%;\n border: 0;\n margin: 0;\n display: block;\n padding: 0;\n background: transparent;\n color: #2c3345;\n\n &:focus { outline: 0; }\n }\n\n .sepButtonShell { background-color: #fff; padding-left: .75em; position: relative; }\n .sepButtonShell:before { content: \"\"; display: block; position: absolute; height: 100%; left: 0; width: .25em; background-color: #dfdfe8; border-radius: 0 4px 4px 0; }\n .sepButtonShell.fa { align-self: stretch; }\n\n .customLink-wr .forApply { position: relative; height: 100%; }\n\n /* Avatar list & first section specific styles */\n .inviteTop { color: #2c3345; align-items: center; }\n .avatarList { margin-left: auto; cursor: pointer; display: flex; align-items: center; }\n .avatarText {\n padding: .375em .75em; display: inline-block;\n color: #6C73A8; font-size: .875em;\n }\n .avatarHolder {\n display: inline-block;\n vertical-align: top;\n margin-left: -8px;\n line-height: 28px;\n font-size: .875em;\n border: 2px solid #fff;\n background-color: #e5e6e8;\n\n &.forPlus {\n width: 32px; height: 32px;\n border-radius: 50%;\n text-align: center;\n }\n }\n\n .domainDd {\n position: relative;\n padding: .25rem 0;\n\n label { padding: .375rem 0; font-size: .875em; display: block; }\n button { width: 100%; text-align: left; }\n }\n\n /* Invite part & third section specific styles */\n .csvPartToggler.bare {\n width: 32px;\n height: 32px;\n background-color: #DADEF3;\n border-color: #DADEF3;\n\n svg {\n color: #343C6A;\n width: 16px;\n height: 16px;\n }\n\n &:hover {\n background-color: #C8CEED;\n border-color: #C8CEED;\n } \n }\n\n .uploadBox {\n position: relative;\n overflow: hidden;\n width: 85%;\n margin: -.625rem 0;\n padding: .625rem 0;\n\n input[type=file] {\n position: absolute;\n width: 100%; height: 100%;\n top: 0; left: 0;\n z-index: 2;\n opacity: 0;\n cursor: pointer;\n padding-left: 100%;\n }\n }\n\n .plbx-ln.plbx-ln {\n margin-bottom: 4px;\n flex-direction: column;\n margin-top: 10px;\n }\n .plbx-wr {\n cursor: text;\n\n display: flex;\n background-color: rgb(255, 255, 255);\n border-radius: 4px;\n border-width: 1px;\n border-style: solid;\n border-color: rgb(216, 218, 233);\n align-items: center;\n\n position: relative;\n\n > svg {\n width: 20px;\n margin: 11px;\n }\n\n > div {\n flex: 1;\n border: none;\n border-radius: 0;\n background: none;\n }\n\n .section-ln-dropdown {\n padding: 0 8px;\n border-radius: 0;\n\n .dd-s {\n svg path {\n stroke: #2C3345;\n }\n }\n }\n\n input:not([type='checkbox']) {\n display: inline-block;\n font-size: 14px;\n line-height: 20px;\n padding: 8px;\n width: 100%;\n background: transparent;\n border: 0;\n text-overflow: ellipsis;\n }\n input:not([type='checkbox']):focus { outline: 0; }\n\n .pill + input { max-width: 150px; }\n\n .pill {\n line-height: 1.15;\n border-radius: 1rem;\n display: inline-block;\n margin: 2px 0 2px 6px;\n display: inline-flex;\n align-items: center;\n padding: 5px 12px;\n background-color: #F3F3FE;\n cursor: default;\n\n &[data-valid=false] { background-color: #fc8291; color: #fff; }\n &[data-valid=false] svg { fill: #fff; }\n &[data-valid=false] input { color: #fff; }\n\n &[data-valid=false] .pill-icon {\n svg {\n path {\n fill: #FA4259;\n }\n }\n }\n\n input {\n padding: 0;\n }\n\n &-icon {\n svg {\n display: block;\n width: .75rem;\n height: .75rem;\n margin: 2px 6px 0px -2px;\n\n html[dir=\"rtl\"] & {\n margin: 2px -2px 0px 6px;\n }\n }\n }\n\n &-remove {\n width: 0;\n opacity: 0;\n margin-left: .75em;\n margin-right: -.625em;\n overflow: hidden;\n cursor: pointer;\n order: 9;\n\n svg {\n min-width: 12px;\n display: block;\n width: .75em;\n height: .75em;\n fill: #81829E;\n }\n }\n\n &:hover {\n\n .pill-text {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n position: relative;\n display: inline-block;\n width: calc(100% - (.75em + .75em));\n\n html[dir=\"rtl\"] & {\n margin-left: -.75em;\n }\n }\n\n .pill-remove {\n width: 12px;\n opacity: .5;\n margin-left: .75em;\n margin-right: -.625em;\n position: relative;\n\n html[dir=\"rtl\"] & {\n margin-right: 0.75em;\n margin-left: -0.625em;\n }\n\n &:hover {\n opacity: 1;\n }\n }\n\n }\n\n &:not([data-valid=false]){\n input {\n padding: 0;\n }\n }\n\n &:not([data-valid=false]):hover {\n background-color: #d5e5fa;\n transition: .3s;\n }\n }\n }\n\n .invalidEmailMsg { font-size: .875em; color: #f90321; margin-top: .5em; font-weight: 500; }\n\n .invite-prefill-btn {\n margin-left: 10px;\n border: none;\n border-radius: 4px;\n background-color: rgba(200, 206, 237, 0.56);\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 10px;\n font-size: 14px;\n white-space: nowrap;\n cursor: pointer;\n svg {\n height: 20px;\n }\n\n &.isEdit {\n background-color: #0099FF;\n color: #fff;\n }\n }\n\n .section-prefill {\n min-width: 0;\n border-color: #C8CEED;\n\n .pill {\n max-width: 95%;\n &-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &:hover .pill-remove {\n min-width: 12px;\n }\n }\n\n span:not(.dd-t) {\n font-size: 14px;\n line-height: 16px;\n }\n }\n\n .section-invite-by-app-container {\n display flex;\n align-items: center;\n gap: 12px;\n align-self: stretch;\n\n .dropdownButtonContainer{\n width: 8rem;\n z-index: 1;\n\n &-selected {\n border-radius: 4px 4px 0 0;\n }\n }\n\n li.i div[data-selected=true] {\n background-color: #EDF8FF;\n }\n\n li.i:hover div {\n background-color: #F3F3FE;\n }\n\n .popoverForSelectedApp{\n z-index:2;\n width: 8rem;\n margin-top: -1px !important;\n\n > ul {\n border-color: #C8CEED;\n box-shadow: none;\n border-radius: 0 0 4px 4px;\n }\n }\n\n .invite-by-app-input {\n display: flex;\n height: 40px;\n padding: 4px 0 4px 10px;\n align-items: center;\n gap: 8px;\n flex: 1 0 0;\n border: 1px solid #C8CEED;\n border-radius: 4px;\n\n &-selected {\n border-radius: 4px 4px 0 0;\n }\n\n &:not(.invite-by-app-input-selected){\n .invite-pill-email-container {\n overflow: hidden;\n \n .pill {\n max-width: 151px;\n .pill-remove {\n display: none;\n }\n\n & + input {\n max-width: 100px;\n }\n &:hover {\n width: auto;\n .pill-text {\n width: auto;\n margin-right: 0;\n }\n .pill-remove {\n display: none;\n }\n } \n }\n }\n }\n }\n\n .emailInput-wrapper {\n height: 40px;\n display: flex;\n flex-direction: col;\n align-items: center;\n min-width: 0;\n }\n\n .emailInput-container {\n padding: 0;\n height: auto;\n }\n\n .invite-pill-email-container {\n max-height: 32px;\n width: 100%;\n\n .pill {\n animation-name: fade-in-top;\n animation-duration: 500ms;\n animation-fill-mode: forwards;\n }\n }\n\n .emailInput-input {\n max-height: 32px;\n }\n\n .custom-user-list-popover {\n height: 266px;\n }\n\n .section-ln-dropdown {\n display: flex;\n height: 32px;\n padding: 0 8px;\n justify-content: center;\n align-items: center;\n border-radius: 4px;\n }\n }\n\n @media screen and (max-width: 650px) {\n .section-prefill-container {\n flex-direction: column;\n color: #0A1551;\n }\n .section-prefill { width: 100%; }\n .invite-prefill-btn {\n width: 100%;\n margin: 10px 0 0 0;\n justify-content: center;\n }\n .section-invite-by-app-container {\n position: relative;\n\n .dropdownButtonContainer {\n width: 100%;\n }\n .popoverForSelectedApp {\n width: 100%;\n left: 24px;\n top: -104px;\n }\n }\n }\n\n .csvLimitError {\n font-size: .875em;\n color: #f90321;\n line-height: 1.5rem;\n border-radius: 2px;\n border: 1px solid #f90321;\n background-color: #fce5e7;\n text-align: center;\n padding: 7px 6% 9px;\n margin-top: 1.5em;\n\n a {\n color: #f90321;\n }\n }\n\n .assigneeMsg {\n display: block;\n padding: .625em .875em;\n width: 100%;\n font-size: 14px;\n border-radius: 4px;\n border: 1px solid #C8CEED;\n height: 106px;\n resize: none;\n font-family:\"Circular\";\n &:focus { outline: 0; border-color: #007aff; }\n }\n\n /* appWizards */\n input, textarea { &::placeholder { color: #6C73A8 !important; font-weight: 400; } }\n [data-popper-placement] .line { display: flex !important; }\n [data-popper-placement] a.line { color: #2c3345 !important; }\n\n\n .flxp { display: flex; }\n .flw { flex: 1 1 auto; }\n .fls { align-items: flex-start; }\n\n\n .user-list-container {\n height: 44px;\n border: none;\n padding-top: 4px;\n padding-left: 0;\n margin-bottom: 0;\n }\n\n .user-list-container-no-pill {\n height: 44px;\n border: none;\n padding-top: 2px;\n padding-left: 0px;\n }\n\n .user-list-popover {\n width: inherit;\n max-height: 600px;\n overflow-y: scroll;\n border-top: 3px solid;\n border-color: #3F71F3;\n box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.25);\n z-index: 9;\n\n left: 0 !important;\n right: 0 !important;\n transform: none !important;\n top: 100% !important;\n\n .suggestion-list {\n width: 100%;\n }\n }\n\n .custom-user-list-popover {\n width: calc(100% + 2px);\n margin: 0 0 0 -1px !important;\n height: 244px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n background: #ffffff;\n border: 1px solid #C8CEED;\n border-radius: 0px 0px 4px 4px;\n\n left: 0 !important;\n right: 0 !important;\n transform: none !important;\n top: 100% !important;\n\n .suggestion-list {\n width: 100%;\n }\n\n > div {\n width: 100% !important;\n height: auto !important;\n }\n }\n\n .suggestion-email {\n color: black;\n }\n\n .successCircle {\n width: 18px; height: 18px; display: inline-block; vertical-align: top; margin: 3px 6px 0 -4px;\n background: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='9' cy='9' r='9' fill='%23FFF'/%3E%3Cpath stroke='%2301BD6F' stroke-linecap='round' stroke-width='2' d='M5 9.059l3.559 2.945L12.912 6'/%3E%3C/g%3E%3C/svg%3E%0A\") no-repeat top left;\n}\n\n@keyframes spin {\n to {transform: rotate(360deg); }\n}\n\n.loadingCircle {\n width: 20px; height: 20px; display: inline-block; vertical-align: top; margin: 2px 6px 0px -5px; animation: spin 1s infinite linear; position: relative;\n background: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='20' height='20' viewBox='0 0 20 20'%3E%3Cdefs%3E%3Cpath id='a' d='M8.571 8.571h11v11h-11z'/%3E%3C/defs%3E%3Cg fill='none' fill-rule='evenodd' transform='translate(1 1)'%3E%3Cmask id='b' fill='%23fff'%3E%3Cuse xlink:href='%23a'/%3E%3C/mask%3E%3Ccircle cx='9' cy='9' r='9' stroke='%23FFF' stroke-width='2' mask='url(%23b)'/%3E%3Ccircle cx='9' cy='9' r='9' stroke='%23FFF' stroke-width='2' opacity='.488'/%3E%3C/g%3E%3C/svg%3E%0A\") no-repeat top left;\n\n &:before {\n display: inline-block; content: \"\"; position: absolute; top: 0; left: 0; height: 100%; width: 100%; animation: spin .7s infinite ease-in-out reverse; opacity: .8;\n\n background: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='20' height='20' viewBox='0 0 20 20'%3E%3Cdefs%3E%3Cpath id='a' d='M8.571 8.571h11v11h-11z'/%3E%3C/defs%3E%3Cg fill='none' fill-rule='evenodd' transform='translate(1 1)'%3E%3Cmask id='b' fill='%23fff'%3E%3Cuse xlink:href='%23a'/%3E%3C/mask%3E%3Ccircle cx='9' cy='9' r='9' stroke='%23FFF' stroke-width='2' mask='url(%23b)'/%3E%3Ccircle cx='9' cy='9' r='9' stroke='%23FFF' stroke-width='2' opacity='.488'/%3E%3C/g%3E%3C/svg%3E%0A\") no-repeat top left;\n }\n}\n @media screen and (max-width: 980px) {\n .customLink-pre {\n max-width: 240px;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n font-size: 14px;\n\n input {\n font-size: 14px;\n }\n }\n }\n\n @media screen and (max-width: 480px) {\n .linkBox.isEditing { position: relative; margin-bottom: 3.5rem !important; }\n\n // .section { padding: 1em .75em; }\n .sectionTitle .dash { display: none; }\n .sectionTitle .sub { margin-top: .25rem; display: block; }\n .section-action { flex-direction: column-reverse; align-items: stretch; }\n .section-action.forSend {\n flex-direction: column;\n\n .bare { align-self: flex-start; margin-bottom: 01em; padding: .5em 0; }\n }\n .actionMessage {\n // padding: 1em 0 0;\n flex-direction: column;\n\n .forSuccess { text-align: left; margin-left: 0; margin-top: .5rem; }\n\n .forGenerate [data-type=\"btn-label\"] { display: none; }\n .forGenerate svg {\n display: block;\n height: 20px; width: 20px;\n margin: 0 2px;\n }\n\n }\n .inviteTop { flex-direction: column; align-items: flex-start; }\n .inviteTop .sectionTitle { order: 2; margin: 1.5em 0 .5em; display: flex; align-items: center; }\n\n .avatarList { order: 1; margin-left: 0; }\n .avatarText { padding-left: 0; }\n\n .wBox-upper { padding-right: 0; }\n\n .wBox-isError {\n min-height: 475px;\n }\n\n .plbx-wr {\n & > div { max-height: max(36vh, 240px); overflow: auto; }\n // input { padding-bottom: 36px; }\n .pill + input { max-width: unset; }\n }\n input, textarea { &::placeholder { font-size: 12.5px; } }\n\n .customLink-pre { max-width: 42vw; font-size: 12px; }\n\n .sepButtonShell.fa { position: absolute; bottom: -3em; right: 0; }\n .sepButtonShell.fa:before { display: none; }\n }\n\n .invite-section.forNewAssign {\n .forSend {\n margin-top: 32px;\n }\n\n &.isExpanded {\n .border-t {\n display: inline-block;\n border-width: 0;\n margin: 1rem 0;\n }\n }\n }\n`;\n","import React from 'react';\nimport {\n arrayOf,\n string,\n element,\n oneOfType\n} from 'prop-types';\n\nconst Section = ({ title, children }) => (\n
        \n
        \n {title}\n
        \n {children}\n
        \n);\n\nSection.propTypes = {\n title: string,\n children: oneOfType([element, arrayOf(element)])\n};\n\nSection.defaultProps = {\n title: '',\n children: null\n};\n\nexport default Section;\n","import React from 'react';\nimport { t, translationRenderer } from '@jotforminc/translation';\n\nexport const DYNAMIC_TEXT_REGEX = /{{(.*?)}}/;\n\nexport const SERVER_DATETIME_FORMAT = 'YYYY-MM-DD HH:mm:ss'; // 2020-02-05 16:44:22\nexport const SHORT_DATE_FORMAT = 'll'; // Feb 5, 2020\nexport const LONG_DATE_FORMAT = 'lll'; // February 5rd, 2020 16:44:22\n\nexport const generateSubmissionPermissionOptions = (userType, { useJotformSign = false } = {}) => {\n const defaultPermissions = [\n {\n showWhenSelected: t('Submit Only'),\n text: t('Submit Only'),\n desc: translationRenderer(`${userType} can [1[view]] and [2[submit]] the form only.`)({\n fallback: str => {str}\n }),\n value: 'submitOnly'\n }, {\n showWhenSelected: t('Submit & View'),\n text: t('Submit & View Later'),\n desc: translationRenderer(`${userType} can [1[submit]] the form and [2[view]] their submissions later.`)({\n fallback: str => {str}\n }),\n value: 'submitAndView'\n },\n {\n showWhenSelected: t('Submit & Edit'),\n text: t('Submit & Edit Later'),\n desc: translationRenderer(`${userType} can [1[submit]] the form and [2[view and edit]] their submissions later.`)({\n fallback: str => {str}\n }),\n value: 'submitAndEdit'\n }\n ].map(permission => {\n const disableEdit = permission.value === 'submitAndEdit' && useJotformSign;\n if (disableEdit) {\n return { ...permission, hideFromOptions: true };\n }\n return permission;\n });\n\n return defaultPermissions;\n};\n\nexport const USER_PERMISSION_OPTIONS = generateSubmissionPermissionOptions('Users');\nexport const ASSIGNEE_PERMISSION_OPTIONS = generateSubmissionPermissionOptions('Assignee');\n\nexport const DEFAULT_LINK_SETTINGS = [\n {\n key: 'SHOW_VIEW_SUBMISSION_LINK_THANKYOU',\n dynamicKey: 'THANK_YOU',\n defaultValue: 'No',\n propName: 'showSubmissionLinkOnThankyou'\n },\n {\n key: 'SHOW_VIEW_SUBMISSION_LINK_EMAIL',\n dynamicKey: 'AUTORESPONDER_EMAIL',\n defaultValue: 'No',\n propName: 'showSubmissionLinkOnAutoresponder'\n },\n {\n key: 'ALLOW_FORM_FILLER_TO_CONTACT',\n dynamicKey: 'CONTACT_SENTBOX',\n defaultValue: 'Yes',\n propName: 'allowFormFillerToContact'\n }\n];\n\nexport const ACCESS_TYPE_COLORS = {\n PUBLIC_ACCESS: {\n fillColor: '#529300',\n backgroundColor: '#EDFED1',\n borderColor: '#64B200'\n },\n PRIVATE_ACCESS: {\n fillColor: '#4277FF',\n backgroundColor: '#EDF2FF',\n borderColor: 'rgba(66, 119, 255, 0.53)'\n },\n COMPANY_ACCESS: {\n fillColor: '#F17F15',\n backgroundColor: '#FFEDD1',\n borderColor: '#F38F32'\n }\n};\n\n// List of available permissions when inviting a user via teams, forms, sheets etc\nexport const PERMISSION_LIST = [\n // Form related permissions\n 'viewOnly',\n 'submitOnly',\n 'submitAndView',\n 'submitAndEdit',\n // Sheet related permissions\n 'readOnly',\n 'commenter',\n 'collaborator',\n // Team related permissions\n 'team_admin',\n 'data_collaborator',\n 'data_read_only',\n 'form_collaborator'\n];\n","import { RequestLayer, Interceptors } from '@jotforminc/request-layer';\n\nconst layer = new RequestLayer('/API', {\n interceptorConfig: {\n teamID: global.teamID,\n customResponseInterceptors: [Interceptors.requestManagerResponseNormalizer]\n }\n});\n\nexport default layer;\n","import moment from 'moment-timezone';\nimport { isEmail, moment as CommonMoment } from '@jotforminc/utils';\nimport { SERVER_DATETIME_FORMAT, SHORT_DATE_FORMAT, LONG_DATE_FORMAT } from './constants';\nimport layer from './layer';\n\nCommonMoment.setLocale(window.Translations.currentLocale);\n\nexport const withEnterPress = fn => event => {\n const { target: { key, keyCode } } = event;\n return (key === 'Enter' || keyCode === 13) && fn(event);\n};\n\nexport const defaultRecordEvent = () => {\n console.warn('No record event fn supplied! Actions are not being recorded!');\n};\n\nexport const getMomentDate = date => moment(date, SERVER_DATETIME_FORMAT);\nexport const getShortDate = date => CommonMoment.formatDate(date, SERVER_DATETIME_FORMAT, SHORT_DATE_FORMAT);\nexport const getLongDate = date => CommonMoment.formatDate(date, SERVER_DATETIME_FORMAT, LONG_DATE_FORMAT);\nexport const isDatePassed = (then, timezone) => {\n let expireTime = then;\n // If then is moment object get expire time as string\n if (typeof expireTime !== 'string') {\n expireTime = moment(then).format('YYYY-MM-DD HH:mm');\n }\n const momentNow = moment().clone().tz(timezone);\n const momentThen = moment.tz(expireTime, timezone);\n return momentNow.isAfter(momentThen, 'seconds');\n};\n\nexport const isValidAssignEmail = (email, allowPlus = false) => {\n const isAllowed = allowPlus || !/\\+\\d+@(?!jotform\\.com)/.test(email);\n return isEmail(email) && isAllowed;\n};\n\nexport const fetchEnterpriseUsers = () => {\n return layer.get('enterprise/extended-users');\n};\n","const ALL_TEXTS = {\n NEW_LINK_GENERATION_ERROR: 'New link cannot be generated. Please try again later.',\n NEW_LINK_GENERATION_SUCCESS: 'New link generated.',\n COPY_LINK_SUCCESS: 'Copied to Clipboard!',\n CSV_UPLOAD_ERROR: 'CSV file failed to upload. Please check the format of the CSV file and try again',\n CSV_FILE_ERROR: 'Invalid File Type',\n SHARE_LINK_HEADER: 'Assign With Link',\n SHARE_LINK_HEADER_DESC: 'Anyone with this link can become an assignee.',\n ASSIGNED_TO: 'Assigned to',\n ASSIGNED_TO_NUMBER: 'Shared with {numberOfUsers} {formNoun}',\n ASSIGNED_TO_NO_ONE: 'Assigned to no one',\n SETTINGS: 'Settings',\n CREATE_LINK: 'Create Link',\n GENERATE_NEW: 'Generate New Link',\n COPY_LINK: 'Copy Link',\n INVITE_PEOPLE: 'Invite By Email',\n UPLOAD_CSV_FILE: 'Upload CSV File',\n DOWNLOAD_SAMPLE_CSV: 'Download Sample CSV',\n ADD_MORE: 'Add more...',\n ADD_MULTIPLE_EMAIL_ADDRESSES: 'Enter email addresses to send invitation with permissions.',\n ADD_MULTIPLE_EMAIL_OR_NAME: 'Enter name or email',\n ADD_YOUR_MESSAGE_HERE: 'Add an invitation message (optional)',\n DISCARD_MESSAGE: 'Discard Message',\n ADD_MESSAGE: 'Add Message',\n EMAIL_SENT: 'Email Sent',\n SENDING: 'Sending...',\n SEND_INVITATION: 'Send Invitation',\n ASSIGNEE_LIMIT: 'You’ve reached your invitation limit. You can only invite {{ASSIGNEE_LIMIT}} people. To add more, {{PLEASE_UPGRADE_YOUR_ACCOUNT}}.',\n ASSIGNEE_LIMIT_WITHOUT_ADD_MORE: 'You’ve reached your invitation limit. You can only invite {{ASSIGNEE_LIMIT}} people.',\n PLEASE_UPGRADE_YOUR_ACCOUNT: 'please upgrade your account',\n LINK_WILL_BE_EXPIRED: 'This link will expire on [1[{EXPIRATION_DATE}]]',\n LINK_EXPIRED: 'Your link expired.',\n GENERATE_NEW_LINK: 'Generate new link',\n EXPIRATION_DATE: 'expiration date',\n LINK_EXPIRED_GENERATE_NEW: 'Your link expired. [1[Generate new link]] or change the [2[expiration date]].',\n EMAIL_ADDRESSES_FOUND: '{{NUMBER_OF_EMAILS}} email address(es) found.',\n EMAIL_ADDRESSES_ERRORED_SINGLE: '[1[{NUMBER_OF_ERRORED_EMAILS}]] invalid email address.',\n EMAIL_ADDRESSES_ERRORED_ENTERPRISE_SINGLE: '[1[{NUMBER_OF_ERRORED_EMAILS}]] email address is not found in your Enterprise User List.',\n EMAIL_ADDRESSES_ERRORED: '[1[{NUMBER_OF_ERRORED_EMAILS}]] invalid email addresses.',\n EMAIL_ADDRESSES_ERRORED_ENTERPRISE: '[1[{NUMBER_OF_ERRORED_EMAILS}]] email addresses are not found in your Enterprise User List.',\n ACCESS_SETTINGS: 'Access Settings',\n COMPANY_ACCESS_PERMISSION: 'Company Access Permission',\n PERMISSIONS: 'Permissions',\n LINK_SETTINGS: 'Options',\n LINK_EXPIRATION_DATE: 'Link Expiration Date',\n SET_CUSTOM_EXPIRATION_DATE: 'Set custom expiration date for Share Link',\n ALLOW_REQUEST_ACCESS: 'Allow users to request access to this resource',\n THANK_YOU: 'Thank you',\n AUTORESPONDER_EMAIL: 'Autoresponder Email',\n SHOW_VIEW_SUBMISSION_LINK_THANKYOU: 'Show view submission link on {{THANK_YOU}} page.',\n SHOW_VIEW_SUBMISSION_LINK_EMAIL: 'Show view submission link in {{AUTORESPONDER_EMAIL}}.',\n ALLOW_FORM_FILLER_TO_CONTACT: 'Allow form fillers to contact through inbox.',\n PUBLIC_ACCESS: 'Public Access',\n PRIVATE_ACCESS: 'Private Access',\n AVAILABLE_TO_ANYONE: 'Available to anyone.',\n ONLY_AVAILABLE_TO_ASSIGNEES: 'Only available to invited people.',\n COMPANY_ACCESS: 'Company Access',\n ONLY_AVAILABLE_TO_ORGANIZATION: 'Only available to people in your organization.',\n JOTFORM_ENTERPRISE_ORGANIZATION_ASSIGN_FEATURE: 'If you would like to use this feature please check out Jotform Enterprise.',\n REQUIRE_EMAIL_DOMAIN: 'Require organization email domain',\n REQUIRE_SSO: 'Require SSO',\n OPEN_IN_NEW_TAB: 'Open in new tab',\n EDIT_LINK: 'EDIT',\n RESET_LINK: 'RESET',\n LINK_EDIT_FAIL: 'Link edit failed.',\n LINK_EDIT_SUCCESS: 'Successfully changed.',\n LINK_RESET_SUCCESS: 'Link reset success.',\n ASSIGN_TO_EVERYONE_IN_ORGANIZATION: 'Assign to everyone in the organization',\n ASSIGN_TO_EVERYONE_IN_ORGANIZATION_DESC: 'Make this form available to everyone in your organization, even newcomers.',\n SEND_NOTIFICATION_EMAIL: 'Send assignment email to everyone',\n SEND_EMAIL: 'Send email',\n SEND_EMAIL_TO_ENTIRE_ORGANIZATION: 'Are you sure you want to assign this form to everyone in your organization?',\n SEND_EMAIL_TO_ENTIRE_LIST: 'Are you sure you want to assign this form to everyone in the list?',\n SEND_EMAIL_TO_ENTIRE_ORGANIZATION_DESC: 'We found {{NUMBER_OF_EMAILS}} email addresses registered for your organization including you.'\n + ' If you send this email, it will automatically be added to their Assigned Forms folder',\n SEND_EMAIL_TO_ENTIRE_LIST_DESC: 'We found {{NUMBER_OF_EMAILS}} email addresses in your invitee list.',\n EMAIL_WILL_AUTOMATICALLY_ASSIGNED: 'If you send this email, it will automatically be added to their Assigned Forms folder.',\n YES_ASSIGN_TO_ALL: 'Yes, Assign to All',\n REVOKE_FROM_ORGANIZATION: 'Revoke Access for All Existing Users in Your Organization',\n REVOKE_FROM_ORGANIZATION_DESC: 'We found {{NUMBER_OF_EMAILS}} email addresses registered for your organization'\n + ' If you revoke access for them all, they will no longer be able to access this form through the Assigned Forms folder.'\n + ' Except you. You can always access your forms as the owner of the form.',\n REVOKE_FROM_ORGANIZATION_CONFIRM: 'Are you sure you want to revoke access for all existing users in the organization?',\n YES_REVOKE_FROM_ORGANIZATION: 'Revoke all existing users',\n NO_KEEP_ORGANIZATION_ASSIGN: 'Keep all existing users',\n CANCEL: 'Cancel',\n REMOVE_USER_CONFIRM: 'Are you sure you want to revoke selected assignee?',\n REMOVE_USER_DESCRIPTION: 'If you revoke the assignee, they will no longer have access to this form. You will have still access to their previous submissions.',\n YES_DELETE: 'Yes, delete',\n NO_KEEP: 'No, keep',\n REVOKE_USER: 'Revoke {name}',\n REVOKE_ALL: 'Revoke All Assignees',\n REVOKE_SELECTED_USERS: 'Revoke Selected {length} Assignees',\n NO_ONE_ASSIGNED: 'No one assigned to this form',\n LIST_WILL_APPEAR_HERE: 'Assignee list will appear here.',\n COMPANY_DOMAIN_ERROR: 'Please check email domain',\n TO: 'To:',\n APPLY: 'Apply',\n SAVING: 'Saving',\n SET_PREFILL: 'Set Prefill',\n EDIT_PREFILL: 'Edit Prefill',\n USERS: 'Users',\n INVITATION_STATUS: 'Status',\n INVITED: 'Invited',\n INVITE_SELECTED_BUTTON: 'Invite Selected',\n INVITE_BUTTON: 'Invite',\n SELECT_ALL: 'Select All',\n EDIT_SHARE_LINK_BUTTON: 'Edit Share Link Button',\n REQUIRE_SPECIFIC_IP: 'Require specific IP addresses '\n};\nclass ModuleTexts {\n constructor(allTexts) {\n this._texts = allTexts;\n }\n\n get Texts() {\n return this._texts;\n }\n\n setTexts(allTexts) {\n this._texts = allTexts;\n }\n}\n\nexport const SharingTextsModule = new ModuleTexts(ALL_TEXTS);\nexport default ALL_TEXTS;\n","import React, { useMemo } from 'react';\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport { getShortDate, getLongDate, getMomentDate } from './utils';\nimport { DYNAMIC_TEXT_REGEX } from './constants';\nimport { SharingTextsModule } from './texts';\n\nexport const translateTextGenerator = t => text => t(text);\nexport const dynamicTextRenderGenerator = (text, t) => {\n const textParts = text.split(DYNAMIC_TEXT_REGEX);\n const memoizedTranslationFN = dynamicTextReplacements => {\n const allText = textParts.map(textPart => renderToStaticMarkup(dynamicTextReplacements[textPart]) || textPart);\n return
        ;\n };\n return memoizedTranslationFN;\n};\nexport const useTranslatedTexts = t => useMemo(() => {\n const translateText = translateTextGenerator(t);\n return Object.keys(SharingTextsModule.Texts).reduce((prev, curr) => {\n const { [curr]: untranslatedText } = SharingTextsModule.Texts;\n\n const translatedText = translateText(untranslatedText);\n const isDynamicParameterExist = Boolean(untranslatedText.match(DYNAMIC_TEXT_REGEX));\n const textToReplace = isDynamicParameterExist ? dynamicTextRenderGenerator(untranslatedText, t) : translatedText;\n return ({ ...prev, [curr]: textToReplace });\n }, {});\n}, [t, SharingTextsModule.Texts]);\n\nexport const useMemoizedFormattedDate = date => useMemo(() => (date ? [getShortDate(date), getLongDate(date)] : ['', '']), [date]);\n\nexport const useMemoizedRemainingTime = diffInSec => useMemo(() => {\n if (!diffInSec) return [];\n\n if (diffInSec > (30 * 86400)) { // Longer than a month\n return getMomentDate(new Date()).add(diffInSec, 'seconds').format('dddd, MMMM D, YYYY');\n }\n\n const units = {\n seconds: 60, minutes: 60, hours: 24, days: 31\n };\n let secondsLeft = diffInSec;\n return Object.keys(units)\n .reduce((readableTimeUnits, label) => {\n const modulus = units[label];\n const durationValue = secondsLeft % modulus;\n secondsLeft = (secondsLeft - durationValue) / modulus;\n if (durationValue !== 0 && label !== 'seconds') {\n return [{ [label]: durationValue }, ...readableTimeUnits];\n }\n return readableTimeUnits;\n }, []);\n});\n","import React from 'react';\nimport {\n string, func, oneOfType, node, arrayOf, shape, oneOf\n} from 'prop-types';\nimport { OptionGroup } from '@jotforminc/option-group';\n\nimport Section from '../../components/Section';\n\nimport { useTranslatedTexts } from '../../helpers/hooks';\nimport { PERMISSION_LIST, USER_PERMISSION_OPTIONS } from '../../helpers/constants';\n\nconst PermissionSection = ({\n t,\n defaultValue,\n onChange,\n recordEvent,\n permissionOptions: _permissionOptions\n}) => {\n const { PERMISSIONS } = useTranslatedTexts(t);\n\n const permissionOptions = typeof _permissionOptions === 'function'\n ? _permissionOptions('permission-section')\n : _permissionOptions;\n\n const onSelectionChange = value => {\n recordEvent('assigneeSubmissionPermissionChanged', value);\n return onChange({ assigneeSubmissionPermission: value });\n };\n\n return (\n
        \n !permissionOption.hideFromOptions)}\n onSelectionChange={onSelectionChange}\n containerRendererProps={{\n role: 'listbox',\n 'aria-label': t('options')\n }}\n OptionContainerRendererProps={{\n 'data-testid': 'link-permissions-option'\n }}\n className=\"flex flex-col items-start\"\n />\n
        \n );\n};\n\nPermissionSection.propTypes = {\n defaultValue: oneOf(PERMISSION_LIST),\n t: func,\n onChange: func,\n recordEvent: func,\n permissionOptions: oneOfType([\n func,\n arrayOf(\n shape({\n showWhenSelected: string,\n text: string,\n desc: oneOfType([string, node]),\n value: string\n })\n )\n ])\n};\n\nPermissionSection.defaultProps = {\n defaultValue: undefined,\n t: text => text,\n onChange: f => f,\n recordEvent: f => f,\n permissionOptions: USER_PERMISSION_OPTIONS\n};\n\nexport default PermissionSection;\n","import React, { forwardRef, useMemo } from 'react';\nimport { bool, string } from 'prop-types';\nimport DatePicker from 'react-datepicker';\nimport Styled from 'styled-components';\n\nimport './styles/Datepicker.scss';\n\nconst StyledDiv = Styled.div`\n * { box-sizing: border-box; }\n\n &[data-errored=\"true\"] .react-datepicker-wrapper {\n border: 1px solid #f90321;\n }\n`;\n\nconst StyledDatePicker = forwardRef(({ isErrored, ariaLabel, ...props }, ref) => {\n const isBranding21 = true;\n const customInput = useMemo(() => (ariaLabel !== '' ? : null), [ariaLabel]);\n return (\n \n \n \n );\n});\n\nStyledDatePicker.propTypes = {\n isErrored: bool,\n ariaLabel: string\n};\n\nStyledDatePicker.defaultProps = {\n isErrored: false,\n ariaLabel: ''\n};\n\nexport default StyledDatePicker;\n","import React, { forwardRef } from 'react';\nimport Styled from 'styled-components';\nimport { Dropdown as UIKitDropdown } from '@jotforminc/uikit';\nimport { shape, string, node } from 'prop-types';\nimport { IconChevronDown } from '@jotforminc/svg-icons';\n\n/* eslint-disable max-len */\n\nconst ScButton = Styled.button`\n background: transparent;\n display: flex;\n align-items: center;\n border-radius: 2px;\n border: 1px solid #d8dae9;\n box-shadow: none;\n font-size: 1em;\n line-height: 1.25;\n padding: 0;\n cursor: pointer;\n\n .dd-t { flex: 1 1 auto; padding: .5em .5em .5em .75em; color: #2c3345; }\n .dd-s { padding: .4em; }\n .dd-s svg {\n display: block;\n width: 14px;\n height: 14px;\n color: #81829e;\n stroke: #81829e;\n }\n\n &:focus { outline: none; border-color: #bbb; }\n`;\n\nconst ScOptionList = Styled.ul`\n list-style: none;\n margin: 0;\n padding: .25em 0;\n background-color: #fff;\n border: 1px solid #d8dae9;\n font-size: .875em;\n border-radius: 0 0 2px 2px;\n box-shadow: 0 0 9px 0 rgba(0, 0, 0, 0.16);\n max-height: 215px;\n overflow-y: auto;\n\n li.i div {\n padding: .5rem .75rem;\n user-select: none;\n cursor: pointer;\n }\n li.i:hover div,\n li.i.isHovering div {\n background-color: rgba(0,0,0,.1);\n }\n\n li.i div[data-selected=true] { background-color: #e5e6e7; }\n\n /* option group listing */\n .og-l { list-style: none; padding: 0; margin: 0; text-indent: 1em; }\n .og-t { font-weight: 700; padding: .5rem .75rem; }\n .og + .og .og-t { padding: .75rem .75rem .5rem; border-top: 1px solid #d8dae9; margin-top: .5em; }\n`;\n\nconst DdButton = forwardRef(({ option: { text, value }, ...props }, ref) => (\n \n {text}\n \n \n));\n\nDdButton.propTypes = {\n option: shape({\n text: string,\n value: string\n }).isRequired\n};\n\nconst DdList = ({ children }) => {children};\n\nDdList.propTypes = {\n children: node.isRequired\n};\n\nconst Dropdown = props => {\n return (\n
        {text}
        }\n OptionContainerRenderer={pr =>
      • }\n GroupRenderer={({ text, children, ...p }) => (\n
      • \n
        {text}
        \n
          {children}
        \n
      • \n )}\n {...props}\n />\n );\n};\n\nexport default Dropdown;\n","import React, { useMemo, useState } from 'react';\nimport { string, func } from 'prop-types';\nimport moment from 'moment';\nimport { Hooks } from '@jotforminc/uikit';\nimport { OptionGroup } from '@jotforminc/option-group';\nimport DatePicker from '@jotforminc/date-picker';\nimport {\n guessTimezone,\n formatRawTime,\n formatRawDate,\n getNextSharpHour,\n getUrlParameter\n} from '@jotforminc/utils';\nimport { TIME_ZONES } from '@jotforminc/constants';\nimport { Checkbox } from '@jotforminc/magnet';\n\nimport Dropdown from '../../components/Dropdown';\n\nimport { useTranslatedTexts } from '../../helpers/hooks';\nimport { isDatePassed, defaultRecordEvent } from '../../helpers/utils';\n\nconst isNewMagnetElementsInSettings = getUrlParameter('newMagnetElementsInSettings') === '1';\n\nconst isRealTimezone = (tz = '') => {\n const region = tz ? tz.split('/')[0] : '';\n const isInTimezones = TIME_ZONES.find(item => item.text === region);\n\n if (!isInTimezones) return null;\n\n return tz;\n};\n\nconst LinkExpireSection = ({\n t,\n onChange,\n recordEvent,\n userTimezone,\n assignLinkExpireDate,\n assignLinkExpireTimezone: assignLinkExpireTZ\n}) => {\n const {\n LINK_EXPIRED, SET_CUSTOM_EXPIRATION_DATE\n } = useTranslatedTexts(t);\n\n const [initialIsLinkVisible, initialLinkExpirationDate] = useMemo(\n () => (assignLinkExpireDate ? ['linkExpirationVisible', moment(assignLinkExpireDate, 'YYYY-MM-DD HH:mm')] : ['', moment(getNextSharpHour())]), [assignLinkExpireDate]\n );\n const [isLinkExpirationVisible, setLinkExpirationVisibility] = useState(initialIsLinkVisible);\n const [linkExpirationDate, setLinkExpirationDate] = useState(initialLinkExpirationDate);\n const [assignLinkExpireTimezone, setAssignLinkExpireTimezone] = useState(isRealTimezone(assignLinkExpireTZ) || isRealTimezone(userTimezone) || guessTimezone());\n const isAssignLinkExpired = useMemo(() => isDatePassed(linkExpirationDate, assignLinkExpireTimezone), [linkExpirationDate, assignLinkExpireTimezone]);\n\n const onLinkExpirationSelectionChange = valueList => {\n let isChecked;\n if (isNewMagnetElementsInSettings) {\n isChecked = valueList.target.checked ? 'linkExpirationVisible' : '';\n } else {\n isChecked = valueList.indexOf('linkExpirationVisible') > -1 ? 'linkExpirationVisible' : '';\n }\n recordEvent('assigneeLinkExpirationCheckboxChange', isChecked);\n setLinkExpirationVisibility(isChecked);\n };\n\n const onLinkExpireDateChange = (date, isRaw = false) => {\n const _date = moment(linkExpirationDate._d);\n if (isRaw) {\n const time = formatRawDate(date);\n if (!time) return;\n _date.date(time.day);\n _date.months(time.month);\n _date.years(time.year);\n } else {\n const newDate = moment(date._d);\n _date.date(newDate.dates());\n _date.months(newDate.months());\n _date.years(newDate.years());\n }\n\n recordEvent('assigneeLinkExpirationDateChange', _date.format('YYYY-MM-DD'));\n setLinkExpirationDate(_date);\n };\n\n const onLinkExpireTimeChange = (date, isRaw = false) => {\n const _date = moment(linkExpirationDate._d);\n if (isRaw) {\n const time = formatRawTime(date);\n if (!time) return;\n _date.hours(time.hours);\n _date.minutes(time.minutes);\n } else {\n const newDate = moment(date._d);\n _date.hours(newDate.hours());\n _date.minutes(newDate.minutes());\n }\n\n recordEvent('assigneeLinkExpirationTimeChange', _date.format('HH:mm'));\n setLinkExpirationDate(_date);\n };\n\n const onLinkExpireTimeZoneChange = ({ value: timezone }) => {\n recordEvent('assigneeLinkExpirationTimeZoneChange', timezone);\n setAssignLinkExpireTimezone(timezone);\n };\n\n Hooks.useEffectIgnoreFirst(() => {\n const formattedDate = linkExpirationDate ? linkExpirationDate.format('YYYY-MM-DD HH:mm') : '';\n if (!isLinkExpirationVisible) {\n onChange({ assignLinkExpireDate: '', assignLinkExpireTimezone: '' });\n } else if (!isAssignLinkExpired) {\n onChange({ assignLinkExpireDate: formattedDate, assignLinkExpireTimezone });\n }\n }, [isLinkExpirationVisible, linkExpirationDate, assignLinkExpireTimezone]);\n\n return (\n <>\n {isNewMagnetElementsInSettings ? (\n \n ) : (\n \n )}\n {isLinkExpirationVisible ? (\n
        \n onLinkExpireDateChange(date)}\n onChangeRaw={({ target: { value } }) => onLinkExpireDateChange(value, true)}\n minDate={moment(new Date())}\n />\n onLinkExpireTimeChange(date)}\n onChangeRaw={({ target: { value } }) => onLinkExpireTimeChange(value, true)}\n className=\"withArrow\"\n showTimeSelect\n showTimeSelectOnly\n timeIntervals={30}\n dateFormat=\"h:mm a\"\n />\n \n
        \n ) : null}\n {(isAssignLinkExpired && isLinkExpirationVisible) ? (\n
        \n {LINK_EXPIRED}\n
        \n ) : null}\n \n );\n};\n\nLinkExpireSection.propTypes = {\n assignLinkExpireDate: string,\n assignLinkExpireTimezone: string,\n userTimezone: string,\n recordEvent: func,\n t: func,\n onChange: func\n};\n\nLinkExpireSection.defaultProps = {\n assignLinkExpireDate: '',\n assignLinkExpireTimezone: '',\n userTimezone: '',\n recordEvent: defaultRecordEvent,\n t: text => text,\n onChange: f => f\n};\n\nexport default LinkExpireSection;\n","import React, { useCallback, useMemo } from 'react';\nimport {\n arrayOf,\n func,\n oneOf,\n shape,\n string\n} from 'prop-types';\n\nimport { Feature } from '@jotforminc/feature-toggle';\nimport { OptionGroup } from '@jotforminc/option-group';\n\nimport Section from '../../components/Section';\nimport { useTranslatedTexts } from '../../helpers/hooks';\nimport LinkExpireSection from './LinkExpire';\nimport { PERMISSION_LIST } from '../../helpers/constants';\nimport { SharingTextsModule } from '../../helpers/texts';\n\nconst LinkSettingsSection = ({\n t,\n onChange,\n recordEvent,\n linkSettingsAvailable,\n linkSettingsValues,\n assigneeSubmissionPermission,\n assignLinkExpireDate,\n assignLinkExpireTimezone,\n userTimezone,\n allowRequestAccess\n}) => {\n const translationFactory = useTranslatedTexts(t);\n\n const disabled = useMemo(() => assigneeSubmissionPermission === 'submitOnly', [assigneeSubmissionPermission]);\n\n const allowRequestAccessDefaultValue = useMemo(() => (allowRequestAccess === 'Yes' ? 'allowRequestAccess' : ''), [allowRequestAccess]);\n\n const onAllowRequestAccessChange = useCallback(value => {\n return onChange({ allowRequestAccess: value.includes('allowRequestAccess') ? 'Yes' : 'No' });\n }, [onChange]);\n\n const defaultValue = useMemo(() => {\n const settingValues = linkSettingsAvailable.map(setting => ({\n ...setting,\n value: linkSettingsValues[setting.propName] || setting.defaultValue\n }));\n\n return settingValues\n .filter(setting => setting.value === 'Yes')\n .map(setting => setting.propName);\n }, [linkSettingsAvailable, linkSettingsValues]);\n\n const options = useMemo(() => linkSettingsAvailable.map(setting => {\n return {\n text: typeof translationFactory[setting.key] === 'function' ? translationFactory[setting.key]({\n [setting.dynamicKey]: {SharingTextsModule.Texts[setting.dynamicKey]}\n }) : translationFactory[setting.key],\n value: setting.propName,\n disabled: setting.disabled || false,\n isSelected: setting.isSelected || false\n };\n }), [linkSettingsAvailable, translationFactory]);\n\n const onSelectionChange = valueList => !disabled && onChange(\n linkSettingsAvailable.reduce((final, setting) => {\n const _final = { ...final };\n const prevValue = linkSettingsAvailable.find(s => s.propName === setting.propName).value;\n const newValue = valueList.indexOf(setting.propName) > -1 ? 'Yes' : 'No';\n if (prevValue !== newValue) {\n recordEvent(`${setting.propName}Changed`, newValue);\n }\n _final[setting.propName] = newValue;\n return _final;\n }, {})\n );\n\n return (\n
        \n \n )}\n />\n \n )}\n />\n \n )}\n />\n
        \n );\n};\n\nLinkSettingsSection.propTypes = {\n assigneeSubmissionPermission: oneOf(PERMISSION_LIST),\n t: func,\n onChange: func,\n recordEvent: func,\n linkSettingsAvailable: arrayOf(shape({\n key: string,\n dynamicKey: string,\n defaultValue: oneOf(['Yes', 'No']),\n propName: string\n })),\n linkSettingsValues: shape({\n /* propName: oneOf(['Yes', 'No']) */\n }),\n assignLinkExpireDate: string,\n assignLinkExpireTimezone: string,\n userTimezone: string,\n allowRequestAccess: oneOf(['Yes', 'No'])\n};\n\nLinkSettingsSection.defaultProps = {\n assigneeSubmissionPermission: undefined,\n t: text => text,\n onChange: f => f,\n recordEvent: f => f,\n linkSettingsAvailable: [],\n linkSettingsValues: {},\n assignLinkExpireDate: '',\n assignLinkExpireTimezone: '',\n userTimezone: '',\n allowRequestAccess: 'Yes'\n};\n\nexport default LinkSettingsSection;\n","import React, { useEffect } from 'react';\nimport cx from 'classnames';\nimport { bool, func } from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { handleCustomNavigation } from '@jotforminc/utils';\nimport Tracking from '@jotforminc/tracking';\nimport {\n ASSET_IDENTIFIER, ALL_TEXTS, CTA_URLS,\n GA_SUFFIXES, createGaAttributes, setEPActions\n} from '@jotforminc/ep-utils';\nimport './ssoAccessLegacyBanner.scss';\nimport IconSSOAd from '../../assets/ssoAdLegacy.svg';\n\n// A/B Test: epSharePanelRequireSsoII\nconst SsoAccessLegacyBanner = ({\n logAbTestAction, isTestVariant, onJotformEnterpriseClick\n}) => {\n const { PRODUCT: { SSO_ACCESS_LEGACY_BANNER: target } } = ASSET_IDENTIFIER;\n const { SSO_ACCESS_LEGACY_BANNER: { JOTFORM_ENTERPRISE } } = CTA_URLS;\n\n const gaAttributes = createGaAttributes(target);\n const gaAttributesJe = createGaAttributes(target, GA_SUFFIXES.JOTFORM_ENTERPRISE);\n\n useEffect(() => {\n const actionData = { action: 'seen', target };\n logAbTestAction(actionData);\n Tracking.enableFS({ epSharePanelRequireSso_bool: true });\n }, [logAbTestAction]);\n\n useEffect(() => {\n setEPActions({ asset: target, target, action: 'seen' });\n }, []);\n\n const handleJotformEnterpriseClick = () => {\n const actionData = { action: 'click', target: `jotformEnterpriseButton-${target}` };\n\n logAbTestAction(actionData);\n setEPActions({ asset: target, target: 'jotformEnterpriseButton', action: 'click' });\n\n onJotformEnterpriseClick();\n handleCustomNavigation(JOTFORM_ENTERPRISE, '_blank');\n };\n\n const buttonClassNames = cx('a', {\n abtest: isTestVariant\n });\n\n return (\n
        \n
        \n
        {t(ALL_TEXTS.MORE_POWER_MORE_SUPPORT)}
        \n
        {t(ALL_TEXTS.JOTFORM_ENTERPRISE)}
        \n
        {t(ALL_TEXTS.JOTFORM_ENTERPRISE_SSO_FEATURE)}
        \n \n {t(ALL_TEXTS.EXPLORE_JOTFORM_ENTERPRISE)}\n \n
        \n
        \n \n
        \n
        \n );\n};\n\nSsoAccessLegacyBanner.propTypes = {\n isTestVariant: bool,\n logAbTestAction: func,\n onJotformEnterpriseClick: func\n};\n\nSsoAccessLegacyBanner.defaultProps = {\n isTestVariant: false,\n logAbTestAction: f => f,\n onJotformEnterpriseClick: f => f\n};\n\nexport default SsoAccessLegacyBanner;\n","import React from 'react';\nimport { func, shape, bool } from 'prop-types';\nimport { Option } from '@jotforminc/option-group';\nimport { SDR_SOURCES, saveCustomerAsHubspotFormByUsername } from '@jotforminc/ep-utils';\nimport { SsoAccessLegacyBanner } from '@jotforminc/ep-share-panel';\n\nconst SSOAccess = props => {\n const {\n option: {\n isEnterprise, isSSOSupported, onEnterpriseLinkClick,\n isEnterpriseAdVisible, setEnterpriseAdVisibility\n }\n } = props;\n\n const onSSOClick = e => {\n if (!isEnterprise && !isSSOSupported) {\n e.stopPropagation();\n setEnterpriseAdVisibility(true);\n saveCustomerAsHubspotFormByUsername({ lastProductAssetInteraction: SDR_SOURCES.SHARE_PANEL_SETTINGS_SSO_BANNER });\n }\n };\n\n return (\n <>\n \n {isEnterpriseAdVisible && (\n onEnterpriseLinkClick('button-require_sso_banner')}\n />\n )}\n \n );\n};\n\nSSOAccess.propTypes = {\n option: shape({\n t: func,\n isEnterprise: bool,\n isSSOSupported: bool,\n onEnterpriseLinkClick: func,\n isEnterpriseAdVisible: bool,\n setEnterpriseAdVisibility: func,\n user: shape({})\n })\n};\n\nSSOAccess.defaultProps = {\n option: {\n t: text => text,\n isEnterprise: false,\n isSSOSupported: false,\n onEnterpriseLinkClick: f => f,\n isEnterpriseAdVisible: false,\n setEnterpriseAdVisibility: f => f,\n user: {}\n }\n};\n\nexport default SSOAccess;\n","import React, { useCallback, useRef, useState } from 'react';\nimport { func, string } from 'prop-types';\nimport { TextInput } from '@jotforminc/uikit';\nimport { t } from '@jotforminc/translation';\nimport { useDebounce } from '@jotforminc/hooks';\nimport { validateHostname } from '@jotforminc/utils';\n\nimport { useTranslatedTexts } from '../helpers/hooks';\n\nconst CompanyTextBox = ({ onBlur, defaultValue, ...inputProps }) => {\n const textInputRef = useRef();\n const [domainError, setDomainError] = useState('');\n const {\n COMPANY_DOMAIN_ERROR\n } = useTranslatedTexts(t);\n const onChange = val => setDomainError(!validateHostname(val));\n const _onBlur = useCallback(({ target: { value } }) => {\n if (value !== '' && validateHostname(value)) {\n onBlur(`organizationAccess|${value}`);\n }\n }, [validateHostname, onBlur]);\n\n return (\n
        \n onChange(textInputRef.current.value))}\n {...inputProps}\n />\n {domainError ?
        {COMPANY_DOMAIN_ERROR}
        : null}\n
        \n );\n};\n\nCompanyTextBox.propTypes = {\n defaultValue: string,\n onBlur: func\n};\n\nCompanyTextBox.defaultProps = {\n defaultValue: '',\n onBlur: f => f\n};\n\nexport default CompanyTextBox;\n","import React from 'react';\nimport {\n bool, func, shape, string\n} from 'prop-types';\nimport { Option } from '@jotforminc/option-group';\n\nimport CompanyTextBox from './CompanyTextBox';\n\nconst OrganizationAccess = props => {\n const { option: { organizationAccess, onAccessSettingsChange } } = props;\n\n return (\n \n );\n};\n\nOrganizationAccess.propTypes = {\n option: shape({\n isSelected: bool,\n organizationAccess: string,\n onAccessSettingsChange: func\n })\n};\n\nOrganizationAccess.defaultProps = {\n option: {\n isSelected: false,\n organizationAccess: '',\n onAccessSettingsChange: f => f\n }\n};\n\nexport default OrganizationAccess;\n","import React, { useMemo, useState } from 'react';\nimport {\n func, bool, string\n} from 'prop-types';\nimport { OptionGroup } from '@jotforminc/option-group';\n\nimport SSOAccess from './SSOAccess';\nimport OrganizationAccess from './OrganizationAccess';\nimport { useTranslatedTexts } from '../helpers/hooks';\n\nconst COMPANY_ACCESS_OPTIONS = {\n organizationAccess: 'organizationAccess',\n ssoProtected: 'ssoProtected'\n};\n\nconst CompanyAccess = ({\n t,\n isEnterprise,\n ssoProtected,\n isSSOSupported,\n organizationAccess,\n onEnterpriseLinkClick,\n onAccessSettingsChange\n}) => {\n const {\n REQUIRE_EMAIL_DOMAIN, REQUIRE_SSO, COMPANY_ACCESS_PERMISSION\n } = useTranslatedTexts(t);\n const [companyAccessDefaultValue, setCompanyAccessDefaultValue] = useState(ssoProtected === 'Yes'\n ? COMPANY_ACCESS_OPTIONS.ssoProtected : COMPANY_ACCESS_OPTIONS.organizationAccess);\n const [isEnterpriseAdVisible, setEnterpriseAdVisibility] = useState(false);\n\n const handleChange = val => {\n onAccessSettingsChange(val);\n setCompanyAccessDefaultValue(val);\n };\n\n const companyAccessOptions = useMemo(() => [\n {\n text: REQUIRE_EMAIL_DOMAIN,\n value: COMPANY_ACCESS_OPTIONS.organizationAccess,\n Renderer: OrganizationAccess,\n onAccessSettingsChange,\n isSelected: (companyAccessDefaultValue === COMPANY_ACCESS_OPTIONS.organizationAccess),\n organizationAccess\n },\n (!isEnterprise || isSSOSupported) && {\n t,\n isEnterprise,\n isSSOSupported,\n text: REQUIRE_SSO,\n Renderer: SSOAccess,\n value: COMPANY_ACCESS_OPTIONS.ssoProtected,\n isEnterpriseAdVisible,\n setEnterpriseAdVisibility,\n disabled: !isSSOSupported,\n formAccess: (companyAccessDefaultValue === COMPANY_ACCESS_OPTIONS.organizationAccess) ? COMPANY_ACCESS_OPTIONS.organizationAccess : '',\n onEnterpriseLinkClick,\n isSelected: (companyAccessDefaultValue === COMPANY_ACCESS_OPTIONS.ssoProtected)\n }\n ].filter(val => val), [isEnterprise, isSSOSupported, organizationAccess, companyAccessDefaultValue, isEnterpriseAdVisible]);\n\n return (\n \n );\n};\n\nCompanyAccess.propTypes = {\n organizationAccess: string.isRequired,\n ssoProtected: string.isRequired,\n isEnterprise: bool.isRequired,\n isSSOSupported: bool.isRequired,\n t: func.isRequired,\n onAccessSettingsChange: func.isRequired,\n onEnterpriseLinkClick: func.isRequired\n};\n\nCompanyAccess.defaultProps = {\n};\n\nexport default CompanyAccess;\n","import React, { useEffect, useState } from 'react';\nimport {\n func, string, bool, oneOf, shape\n} from 'prop-types';\n\nimport { Feature } from '@jotforminc/feature-toggle';\nimport { OptionGroup, Option } from '@jotforminc/option-group';\nimport { IconLockFilled, IconUnlockFilled, IconBuildings } from '@jotforminc/svg-icons';\nimport { useSwitch } from '@jotforminc/hooks';\nimport Section from '../../components/Section';\nimport CompanyAccess from '../../components/CompanyAccess';\nimport { ACCESS_TYPE_COLORS } from '../../helpers/constants';\n\nimport { useTranslatedTexts } from '../../helpers/hooks';\n\nconst AccessSettings = ({\n t,\n onChange,\n recordEvent,\n ssoProtected,\n isEnterprise,\n isSSOSupported,\n assigneeProtected,\n organizationAccess,\n onEnterpriseLinkClick,\n onAccessSettingsChangeAttempt\n}) => {\n const {\n ACCESS_SETTINGS, PRIVATE_ACCESS, PUBLIC_ACCESS, AVAILABLE_TO_ANYONE, ONLY_AVAILABLE_TO_ASSIGNEES,\n COMPANY_ACCESS, ONLY_AVAILABLE_TO_ORGANIZATION, COMPANY_ACCESS_PERMISSION\n } = useTranslatedTexts(t);\n\n const defaultFormAccess = useSwitch(true, [\n [assigneeProtected === 'Yes', 'assigneeProtected'],\n [Boolean(organizationAccess) || ssoProtected === 'Yes', 'organizationAccess'],\n [true, 'public']\n ]);\n\n const [selectedValue, setSelectedValue] = useState(defaultFormAccess);\n\n useEffect(() => {\n onAccessSettingsChangeAttempt(selectedValue);\n }, [selectedValue]);\n\n const onAccessSettingsChange = value => {\n recordEvent('onAccessSettingsChange', value);\n if (['organizationAccess', 'assigneeProtected', 'public'].includes(value)) {\n setSelectedValue(value);\n onAccessSettingsChangeAttempt(value);\n }\n if (value === 'organizationAccess') {\n return;\n }\n\n onChange({\n organizationAccess: value && value.indexOf('organizationAccess|') === 0 ? value.split('|').slice(1).join('') : '',\n ssoProtected: value === 'ssoProtected' ? 'Yes' : 'No',\n assigneeProtected: value === 'assigneeProtected' ? 'Yes' : 'No'\n });\n };\n\n const publicOption = props => } />;\n\n return (\n <>\n
        \n \n },\n ...ACCESS_TYPE_COLORS.PRIVATE_ACCESS\n },\n {\n ...{\n text: PUBLIC_ACCESS,\n description: AVAILABLE_TO_ANYONE,\n value: 'public',\n Renderer: publicOption,\n icon: \n },\n ...ACCESS_TYPE_COLORS.PUBLIC_ACCESS\n },\n {\n ...{\n text: COMPANY_ACCESS,\n description: ONLY_AVAILABLE_TO_ORGANIZATION,\n value: 'organizationAccess',\n icon: \n },\n ...ACCESS_TYPE_COLORS.COMPANY_ACCESS\n }\n ]}\n containerRendererProps={{\n role: 'listbox',\n 'aria-label': ACCESS_SETTINGS\n }}\n defaultValue={defaultFormAccess}\n onSelectionChange={onAccessSettingsChange}\n />\n
        \n { selectedValue === 'organizationAccess'\n && (\n
        \n \n
        \n )}\n \n );\n};\n\nAccessSettings.propTypes = {\n isEnterprise: bool,\n isSSOSupported: bool,\n organizationAccess: string,\n assigneeProtected: oneOf(['Yes', 'No']),\n ssoProtected: oneOf(['Yes', 'No']),\n t: func,\n onChange: func,\n recordEvent: func,\n onEnterpriseLinkClick: func,\n onAccessSettingsChangeAttempt: func,\n user: shape({})\n};\n\nAccessSettings.defaultProps = {\n isEnterprise: false,\n isSSOSupported: false,\n ssoProtected: 'No',\n organizationAccess: '',\n assigneeProtected: 'No',\n t: text => text,\n onChange: f => f,\n recordEvent: f => f,\n onEnterpriseLinkClick: f => f,\n onAccessSettingsChangeAttempt: f => f,\n user: {}\n};\n\nexport default AccessSettings;\n","/* eslint-disable max-len */\nimport Styled from 'styled-components';\n\nexport const customFont = '-apple-system, BlinkMacSystemFont, \"Segoe UI\", roboto, oxygen-sans, ubuntu, cantarell, \"Helvetica Neue\", sans-serif';\n// '\"CircularStd\", \"Work Sans SemiBold\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", roboto, oxygen-sans, ubuntu, cantarell, \"Helvetica Neue\", sans-serif';\n\nexport const commonStyles = `\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizeLegibility;\n font-family: ${customFont};\n font-size: 16px;\n`;\n\nexport const ScSettings = Styled.div`\n ${commonStyles}\n font-family: \"Circular\",-apple-system, BlinkMacSystemFont, \"Segoe UI\", roboto, oxygen-sans, ubuntu, cantarell, \"Helvetica Neue\", sans-serif;\n color: #2c3345;\n overflow-y: auto;\n\n li { list-style: none; }\n\n .content { \n padding: 0 2.5em 1.5em; \n max-height: 75vh;\n }\n\n .section { padding: 1.5em 0; }\n\n .section + .section {\n border-top: 1px solid #eaebf2;\n .react-datepicker {\n &__time-container {\n & .react-datepicker__header {\n display: none;\n }\n }\n .react-datepicker {\n &__time { \n background: #ffffff;\n & .react-datepicker__time-box {\n width: 100%;\n }\n &-list {\n height: calc(195px + (1.7rem / 2));\n overflow-y: scroll;\n &-item {\n display: flex;\n align-items: center;\n justify-content: center;\n &:hover {\n background: #eef3ff !important;\n color: #2c3345;\n }\n }\n }\n }\n } \n }\n }\n \n .section-title {\n font-style: normal;\n font-weight: bold;\n font-size: 15px;\n line-height: 19px;\n display: flex;\n align-items: center;\n color: #141E46;\n letter-spacing: 0.12px;\n text-transform: uppercase;\n }\n\n .section-content {\n padding: .75em 0 0;\n display: flex;\n justify-content: space-between;\n }\n\n .forExpDate > * { flex: 0 0 27% ; }\n .forExpDate > button { flex: 1 1 auto; text-align: left; }\n .forExpDate > div + div { margin: 0 .875em; }\n\n .forExpDate {\n input[type=text] {\n height: 36px;\n font-size: 14px;\n border-radius: 2px;\n border: solid 1px #d8dae9;\n background-color: #ffffff;\n font-family: ${customFont};\n width: 100%;\n padding: .5rem;\n line-height: 1.125rem;\n color: #2c3345;\n\n &:focus { outline: 0; border-color: #007aff; }\n }\n }\n\n .expiredMessage { color: #f90321; font-size: 14px; margin-top: 1em; }\n\n @keyframes abartmadanbellietkendini {\n to { opacity: 1; transform: scale(1); }\n }\n\n .compDomain {\n padding-top: .5em;\n // animation: abartmadanbellietkendini .3s cubic-bezier(0.13, 0.89, 0.82, 1) .2s forwards;\n // opacity: 0;\n transform: scale(.95);\n transform-origin: middle;\n\n input {\n font-size: .875em;\n line-height: 1.125rem;\n padding: .5rem;\n border-radius: 2px;\n border: 1px solid #d8dae9;\n width: 100%;\n max-width: 300px;\n }\n\n .compDomain-error { color: #f90321; font-size: 14px;}\n\n }\n\n li + li[aria-disabled=\"false\"] > div[data-value=\"ssoProtected\"] .o-label:after {\n display: none;\n }\n\n [data-value=\"ssoProtected\"] .o-label:after {\n content: \"\";\n display: inline-block;\n vertical-align: top;\n width: 16px;\n height: 24px;\n margin-left: 4px;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='16' viewBox='0 0 12 16'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath fill='%239699A2' d='M10.449 5.224h-.746V3.732C9.703 1.672 8.03 0 5.97 0 3.91 0 2.239 1.672 2.239 3.732v1.492h-.746C.672 5.224 0 5.896 0 6.717v7.464c0 .82.672 1.492 1.493 1.492h8.956c.821 0 1.493-.671 1.493-1.492V6.717c0-.82-.672-1.493-1.493-1.493zm-2.164 0H3.657V3.732c0-1.276 1.038-2.314 2.314-2.314s2.314 1.038 2.314 2.314v1.492z' opacity='.5'/%3E%3Cpath fill='%23FFF' d='M6.095 8.381c.842 0 1.524.682 1.524 1.524 0 .564-.306 1.056-.762 1.32v1.727H5.333v-1.728c-.455-.263-.762-.755-.762-1.32 0-.84.683-1.523 1.524-1.523z'/%3E%3C/g%3E%3C/svg%3E%0A\");\n background-size: 12px 16px;\n background-repeat: no-repeat;\n background-position: right center;\n }\n\n @media screen and (max-width: 620px) {\n .content { padding: 0 1.5rem 1.5rem; font-size: .875em; }\n .forExpDate { flex-direction: column; }\n .forExpDate > * { flex: 1 1 auto ; }\n .forExpDate > div + div { margin: .875em 0; width: 100% }\n .forExpDate {\n > button, .react-datepicker-wrapper, .react-datepicker__input-container {\n width: 200px;\n max-width: 100%;\n }\n }\n }\n`;\n","/* eslint-disable max-len */\nimport styled from 'styled-components';\n\nexport const ResourceButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: center;\n color: #121C48;\n font-size: 14px;\n font-family: 'Circular', sans-serif;\n font-weight: 500;\n height: 28px;\n padding: 0 10px;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n\n background-color: transparent;\n &:hover {\n background-color: #F5F6F8;\n }\n`;\n\nexport const ScAssignee = styled.div`\n color: #2c3345;\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n padding: ${p => (p.hasSearch ? '0' : '0 0 1.5em')};\n\n .ass-control {\n width: 100%;\n min-height: 56px;\n position: relative;\n top: 0; left: 0;\n z-index: 1;\n padding: 16px 32px;\n align-items: center;\n display: ${p => (p.hasSearch ? 'flex' : 'none')};\n }\n\n .ass-group {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1 1 auto;\n min-width: 0;\n }\n\n .cb-search {\n border: 1px solid #C8CEED;\n border-radius: 4px;\n padding: 7px 12px 7px 36px;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.5071 11.4503C9.54213 12.212 8.32351 12.6666 6.9987 12.6666C3.86908 12.6666 1.33203 10.1296 1.33203 6.99998C1.33203 3.87037 3.86908 1.33331 6.9987 1.33331C10.1283 1.33331 12.6654 3.87037 12.6654 6.99998C12.6654 8.32479 12.2107 9.54341 11.449 10.5084C11.4561 10.5149 11.4632 10.5217 11.4701 10.5286L14.4701 13.5286C14.7305 13.7889 14.7305 14.211 14.4701 14.4714C14.2098 14.7317 13.7876 14.7317 13.5273 14.4714L10.5273 11.4714C10.5204 11.4645 10.5136 11.4574 10.5071 11.4503ZM11.332 6.99998C11.332 9.39321 9.39193 11.3333 6.9987 11.3333C4.60546 11.3333 2.66536 9.39321 2.66536 6.99998C2.66536 4.60675 4.60546 2.66665 6.9987 2.66665C9.39193 2.66665 11.332 4.60675 11.332 6.99998Z' fill='%236F76A7'/%3E%3C/svg%3E\");\n background-size: 16px;\n background-position: 8px center;\n background-repeat: no-repeat;\n font-size: .875em;\n appearance: textfield;\n height: 32px;\n max-width: 232px;\n width: 100%;\n &::placeholder {\n color: #979DC6;\n font-weight: 400;\n }\n }\n\n .acg-name { margin-right: .5em; font-weight: 400; line-height: 20px; color: #6F76A7; font-size: 14px; }\n .acg-selLabel {\n font-size: 12px;\n line-height: 16px;\n font-weight: 500;\n padding: 7px 12px;\n border-radius: 32px;\n border: 1px solid #C8CEED;\n color: #343C6A;\n margin-right: 8px;\n white-space: nowrap;\n\n span { margin-right: 4px; }\n }\n\n .acg-unselect {\n width: 14px;\n height: 14px;\n margin: -1px;\n vertical-align: sub;\n padding: 0;\n border: 0;\n outline: 0;\n\n svg { \n width: 14px;\n height: 14px;\n fill: currentColor;\n color: #343C6A;\n }\n &:hover {\n background: transparent;\n }\n }\n\n .ass-search {\n border-radius: 2px;\n border: 1px solid #E3E5F5;\n font-size: .875em;\n line-height: 1rem;\n padding: .5em .75rem;\n text-indent: 1.25em;\n flex: 0 0 175px;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18'%3E%3Cpath fill='%238D8FA8' fill-rule='evenodd' stroke='%23D0D2E2' d='M1.975 7.5C1.975 4.467 4.38 2 7.338 2 10.293 2 12.7 4.467 12.7 7.5c0 3.032-2.406 5.5-5.362 5.5-2.958 0-5.363-2.468-5.363-5.5m14.482 8.646l-4.312-4.422c.95-1.138 1.53-2.612 1.53-4.224 0-3.584-2.843-6.5-6.338-6.5C3.844 1 1 3.916 1 7.5S3.843 14 7.338 14c1.571 0 3.008-.594 4.118-1.569l4.311 4.423c.09.09.211.146.346.146.269 0 .487-.224.487-.5 0-.138-.055-.263-.143-.354'/%3E%3C/svg%3E%0A\");\n background-size: 18px;\n background-repeat: no-repeat;\n background-position: 8px center;\n transition: background-color .15s ease;\n -webkit-appearance: textfield;\n\n &:focus {\n outline: none;\n border-color: #4573e3;\n box-shadow: 0 0 0px 3px rgba(69, 114, 227, 0.25);\n }\n }\n\n .asses { display: flex; flex-direction: column; flex: 1 1 auto; min-height: 204px; padding-bottom: 16px; }\n\n .ass-line {\n display: flex;\n align-items: center;\n padding: 21px 32px;\n position: relative;\n\n &:before {\n content: \"\";\n display: inline-block;\n position: absolute;\n left: 1.5em;\n right: 1.5em;\n height: 1px;\n top: 0;\n background: #E3E5F5;\n }\n }\n\n .ass-line:first-child:before {\n display: ${p => (p.hasSearch ? 'inline-block' : 'none')};\n }\n\n .ass-line.isFresh:after {\n content: \"\";\n display: inline-block;\n position: absolute;\n top: 0;\n left: -150vw;\n width: 150vw;\n height: 100%;\n z-index: 1;\n background: linear-gradient(to right, rgba(0,0,0,0) 0%,rgba(24,50,26,0) 14%,rgba(84,180,92,0.65) 50%,rgba(24,50,26,0) 86%,rgba(0,0,0,0) 100%);\n opacity: .3;\n animation: restored 2 2s forwards cubic-bezier(.3,.71,.67,.58);\n pointer-events: none;\n }\n .ass-line.isSelected .avatarHolder { box-shadow: 0 0 0 2px #fff; }\n\n .ass-ch {\n display: inline-flex;\n }\n\n @keyframes restored {\n 100% { left: 100vw; }\n }\n\n .ass-info {\n font-size: .875em;\n line-height: 1rem;\n flex: 0 0 250px;\n min-width: 0;\n .ass-provider-logo {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 18px;\n height: 18px;\n border-radius: 10px;\n }\n }\n .ass-name {\n display: flex;\n gap: 4px;\n color: #0A1551;\n &-val {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n }\n .ass-email {\n color: #6C73A8;\n display: flex;\n gap: 4px;\n &-val {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n }\n\n .ass-body {\n flex: 1 1 auto;\n min-width: 0;\n display: flex;\n align-items: center;\n padding: 0 .75em;\n }\n\n .ass-details {\n flex: 1 1 auto;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .requestAccessInfo {\n display: flex;\n padding: 4px;\n background: rgba(255, 182, 41, 0.1);\n border-radius: 4px;\n color: #F49200;\n font-size: 12px;\n cursor: default;\n }\n\n .requestAccessInfo svg {\n width: 16px;\n margin-right: 4px;\n fill: #FFB629;\n }\n\n .requestAccessHover{\n padding: 8px;\n background: rgba(20, 30, 70, 0.9);\n border-radius: 4px;\n width: 210px;\n color: white;\n margin-top: 5px;\n font-size: 12px;\n }\n\n .ass-activity {\n color: #6C73A8;\n font-size: .75em;\n line-height: 1.5;\n margin: 0 1em;\n flex-basis: 120px;\n }\n\n .ass-allowed { font-size: .875em; }\n \n .submit-and-view-btn {font-size: 13px; min-width: 80px;white-space: nowrap; }\n\n .forReminder { width: 23px; margin: 0 5px 0 auto; }\n .forReminder svg { width: 23px; height: 20px; }\n .forReminder:hover {\n svg g > g, svg g > g + g circle { fill: #2c3345; }\n }\n\n .ass-actions { flex: 0 0 24px; height: 24px; }\n .ass-actions div,\n .ass-actions button {\n width: 100%;\n height: 100%;\n\n svg { display: block; margin: 0 auto; width: 24px; fill: #6C73A8; }\n }\n\n .resendLink.bare { text-decoration: underline; font-size: 1em; color: #0075E3; }\n\n @keyframes appearFromLeftToRight {\n to { transform: translateX(0); opacity: 1; }\n }\n .emailSentStatus {\n margin: -2px 0px;\n font-size: .875em;\n padding: 9px 0;\n align-self: stretch;\n flex: 1 1 auto;\n display: inline-flex;\n align-items: center;\n border-radius: 4px;\n align-self: center;\n color: #2c3345;\n\n svg { margin: 0 4px; width: 33px; height: 22px; }\n span, svg {\n opacity: 0;\n transform: translateX(-6px);\n animation: appearFromLeftToRight .4s ease 1 .1s forwards;\n }\n span { animation-delay: .2s; }\n\n &.isSuccess { background-color: #dff0e0; }\n &.isError { color: #fff; background-color: #fc8291; }\n &.isInfo { background-color: #ffedc8; }\n }\n\n\n .assList-wr .emptyList {\n position: relative;\n transform: none;\n padding: 64px 0;\n }\n\n .emptyList {\n padding: 0 1em;\n color: #5c5b71;\n text-align: center;\n position: absolute;\n width: 100%;\n top: 40%;\n transform: translateY(-40%);\n\n p { margin: 0; }\n svg { width: 120px; height: 120px; }\n }\n .emptyList-title {\n font-weight: 700;\n margin: 1.125em 0 .375em;\n text-transform: uppercase;\n }\n\n @media screen and (max-width: 480px) {\n padding: ${p => (p.hasSearch ? '0' : '0 0 1em')};\n min-height: 0;\n\n .ass-search { flex-basis: auto; order: -1; margin-bottom: .5em; }\n .ass-control { position: relative; }\n .ass-group { min-height: 2em; }\n .ass-line { align-items: center; }\n .ass-body { flex-direction: column; align-items: flex-start; padding-right: 1.5em; }\n .ass-info { flex-basis: auto; margin-bottom: 0; width: 100%; }\n .emailSentStatus { width: calc(100% + 40px); align-self: flex-start; position: absolute; top: 0; left: 0; right: 0; bottom: 0; }\n .acg-selLabel { white-space: wrap; }\n .forReminder {\n margin: 0;\n position: absolute;\n top: 1.25em;\n right: 3.5em;\n }\n }\n\n @media screen and (max-width: 650px) {\n .ass-activity { display: none; }\n .ass-details { justify-content: flex-end; }\n .ass-info { flex-basis: auto; flex: 1 1 auto; margin-right: 12px; }\n .ass-control { flex-direction: column; align-items: stretch; gap: 16px; }\n .cb-search { max-width: none; }\n }\n`;\n\nexport const ScPopoverMenu = styled.div`\n border-radius: 4px;\n border: 1px solid #C8CEED;\n background-color: #fff;\n font-size: .875em;\n color: #0A1551;\n padding: .25rem 0;\n white-space: nowrap;\n\n .line { padding: .5rem 1em; display: flex; align-items: center; cursor: pointer; margin: 0 !important; position: relative;}\n .line:hover { background-color: #F3F3FE; }\n a.line { color: #0A1551; text-decoration: none; }\n .line-text { flex: 1 1 auto; }\n .line-icon {\n width: 20px;\n height: 20px;\n margin-right: .5rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n html[dir=\"rtl\"] & {\n margin-right: 0;\n margin-left: .5rem;\n }\n\n svg { display: block; }\n\n &.forViewSubm svg { width: 16px; height: 16px; }\n &.forSendRemn svg { width: 16px; height: 16px; }\n &.forSchRemn svg { width: 18px; height: 16px; margin-left: 1px; }\n &.forRevoke svg { fill: #DC2626; width: 16px; height: 16px; }\n\n &.forUpload svg { width: 16px; height: 16px; }\n &.forDownload svg { width: 16px; height: 16px; margin: 0 auto; }\n }\n\n .line-icon.forDismiss {\n width: 20px;\n height: 20px;\n fill: #252d5b;\n\n svg { width: 20px; height: 20px; }\n }\n\n .line-icon.forRevoke ~ .line-text { color: #DC2626; }\n .line-icon.forDismiss ~ .line-text { color: #252d5b; }\n`;\n\nexport const ScPopoverArrow = styled.div`\n &, &:before, &:after {\n width: 10px;\n height: 10px;\n position: absolute;\n }\n\n &:before {\n content: \"\";\n display: inline-block;\n transform: rotate(45deg);\n top: -5px; left: 0;\n border-radius: 1px;\n background: #C8CEED;\n z-index: 1;\n }\n &:after {\n content: \"\";\n display: inline-block;\n transform: rotate(45deg);\n top: -3px; left: 0;\n background: #fff;\n z-index: 2;\n }\n\n [data-popper-placement=\"bottom-start\"] &:before,\n [data-popper-placement=\"bottom-start\"] &:after { left: 3px; }\n\n [data-popper-placement=\"top-start\"] & {\n bottom: 4px;\n &:before { top: -3px }\n &:after { top: -5px }\n }\n`;\n","/* eslint-disable max-len */\nimport React, { useMemo, useRef, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport {\n arrayOf,\n func,\n shape,\n string,\n bool\n} from 'prop-types';\nimport { Hooks, Popover } from '@jotforminc/uikit';\nimport { useFuse } from '@jotforminc/hooks';\nimport { Option as OptionFC } from '@jotforminc/option-group';\nimport { t } from '@jotforminc/translation';\n\nimport { ScPopoverMenu, ScPopoverArrow } from '../sc/scAssigneeList';\n\n// import { useTranslatedTexts } from '../../helpers/hooks';\n\nconst padding = css`\n padding: 16px 16px 16px 20px;\n`;\n\nconst Row = styled.div`\n position: relative;\n display: flex;\n flex: 1;\n align-items: ${({ center }) => (center ? 'center' : 'flex-start')};\n`;\n\nconst Option = styled(OptionFC)`\n > div[class] {\n margin-right: 20px;\n }\n\n > div:not([class]) {\n flex: 1;\n\n .o-label {\n height: 32px;\n padding: 7px 0;\n border-radius: 4px;\n\n display: flex;\n align-items: center;\n\n color: #141E46;\n }\n }\n`;\n\nconst OptionList = styled(Row)`\n display: flex;\n flex-direction: column;\n flex: 1;\n\n ${padding};\n\n max-height: 180px;\n overflow-x: hidden;\n overflow-y: auto;\n\n ${Option} {\n margin-bottom: 4px;\n align-self: stretch;\n }\n`;\n\nconst Header = styled(Row)`\n justify-content: space-between;\n border-bottom: 1px solid #E3E4EC;\n ${padding};\n\n align-items: center;\n`;\n\nconst Label = styled.div`\n line-height: 18px;\n color: #80829C;\n`;\n\nconst Search = styled.input.attrs(() => ({\n placeholder: 'Search',\n type: 'search',\n autocomplete: 'off'\n}))`\n display: flex;\n align-items: center;\n\n height: 32px;\n border: 1px solid #C7C9DC;\n border-radius: 4px;\n padding-left: 32px;\n padding-right: 16px;\n\n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='17' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M14.683 15.171a.775.775 0 11-1.13 1.063l-2.262-2.404a.775.775 0 011.13-1.063l2.262 2.404zM6.588 14c3.639 0 6.589-3.134 6.589-7s-2.95-7-6.589-7C2.95 0 0 3.134 0 7s2.95 7 6.588 7zm0-2c2.6 0 4.706-2.239 4.706-5S9.187 2 6.588 2 1.882 4.239 1.882 7s2.107 5 4.706 5z' fill='${({ color }) => encodeURIComponent(color)}'/%3E%3C/svg%3E\");\n background-position: 10px center;\n background-repeat: no-repeat;\n\n font-family: 'Circular', sans-serif;\n font-weight: 500;\n\n &,\n &::placeholder {\n color: ${({ color }) => encodeURIComponent(color)};\n }\n`;\n\nSearch.defaultProps = {\n color: '#141E46'\n};\n\nexport const Picker = styled.div`\n display: flex;\n align-items: center;\n cursor: ${({ onClick }) => (onClick ? 'pointer' : 'auto')};\n\n &:before,\n &:after {\n content: '';\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n }\n\n\n ${({ onClick }) => (onClick ? css`\n &:after {\n background-image: url(\"data:image/svg+xml,%3Csvg width='10' height='6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M1.418 4.63L5 1.547l3.58 3.086c.099.083.251.083.347-.006a.219.219 0 000-.326L5.17 1.062a.267.267 0 00-.34 0L1.078 4.295c-.104.096-.104.242-.007.332a.264.264 0 00.346.005z' fill='${({ color }) => encodeURIComponent(color)}' stroke='${({ color }) => encodeURIComponent(color)}' stroke-width='1.5'/%3E%3C/svg%3E\");\n width: 10px;\n height: 6px;\n margin-left: 5px;\n transform: scaleY(${({ expanded }) => (expanded ? 1 : -1)});\n transition: transform 300ms cubic-bezier(.79,.14,.15,.86)\n }\n ` : '')}\n`;\n\nPicker.defaultProps = {\n color: '#141E46'\n};\n\nconst Menu = styled(ScPopoverMenu)`\n padding: 0;\n`;\n\nconst Container = styled.div`\n position: relative;\n font-size: ${({ size }) => size}px;\n\n ${Picker} {\n margin-left: 10px;\n }\n`;\n\nContainer.defaultProps = {\n size: 14\n};\n\nconst ResourcePicker = ({\n // t,\n isMultiSelect,\n label,\n onChange,\n value,\n resources,\n style\n}) => {\n const [search, setSearch] = useState('');\n const menuRef = useRef();\n const buttonRef = useRef();\n\n // const translationFactory = useTranslatedTexts(t);\n const [isExpanded, setIsExpanded] = Hooks.useClickOutsideState(false, [buttonRef, menuRef]);\n\n const toggleExpansion = () => setIsExpanded(!isExpanded);\n\n const options = useMemo(() => (\n resources.map(r => ({\n text: t(r.title),\n value: r.id\n }))\n ), [resources]);\n\n const filteredOptions = useFuse(options, search, ['text']);\n\n const allValues = options.map(o => o.value);\n\n const allSelected = value.length === 0 || value.length === allValues.length;\n\n const handleSelectAll = () => {\n if (allSelected) {\n return onChange(allValues);\n }\n\n onChange([]);\n };\n\n const handleSelect = id => () => {\n const values = allSelected ? allValues : value;\n\n const selected = values.indexOf(id) > -1;\n\n if (selected) {\n return onChange(values.filter(v => v !== id));\n }\n\n return onChange([...values, id]);\n };\n\n const text = useMemo(() => {\n if (allSelected) return t('All Documents');\n if (value.length === 1) return options.find(f => f.value === value[0])?.text;\n return `${value.length} Documents`;\n }, [allSelected, value.length]);\n\n const renderPickerContent = () => {\n if (!isExpanded) return null;\n\n return (\n \n \n \n
        \n \n {options.length > 10 ? setSearch(e.target.value)} value={search} /> : null}\n
        \n \n {filteredOptions.map(opt => (\n -1}\n onClick={handleSelect(opt.value)}\n />\n ))}\n \n
        \n \n );\n };\n\n return (\n \n \n {label ? (\n \n ) : null}\n \n \n {text}\n \n \n {renderPickerContent()}\n \n \n );\n};\n\nResourcePicker.propTypes = {\n // t: func,\n label: string,\n onChange: func,\n // recordEvent: func,\n value: arrayOf(string),\n style: shape({}),\n resources: arrayOf(shape({})),\n isMultiSelect: bool\n};\n\nResourcePicker.defaultProps = {\n // t: text => text,\n label: 'Sharing',\n onChange: f => f,\n // recordEvent: f => f,\n resources: [],\n style: [],\n value: [],\n isMultiSelect: true\n};\n\nexport default ResourcePicker;\n","import React from 'react';\nimport {\n arrayOf,\n func,\n shape,\n string\n} from 'prop-types';\nimport { t } from '@jotforminc/translation';\n\nimport Section from '../../components/Section';\nimport ResourcePicker from '../../components/ResourcePicker';\n// import { useTranslatedTexts } from '../../helpers/hooks';\n\nconst ResourceSection = ({\n // t,\n label,\n onChange,\n value,\n resources\n}) => {\n // const translationFactory = useTranslatedTexts(t);\n\n return (\n
        \n \n
        \n );\n};\n\nResourceSection.propTypes = {\n // t: func,\n label: string,\n onChange: func,\n // recordEvent: func,\n value: arrayOf(string),\n resources: arrayOf(shape({}))\n};\n\nResourceSection.defaultProps = {\n // t: text => text,\n onChange: f => f,\n label: null,\n // recordEvent: f => f,\n resources: [],\n value: []\n};\n\nexport default ResourceSection;\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport React, { forwardRef } from 'react';\nimport {\n oneOf, func, string, bool, oneOfType, node, arrayOf, shape\n} from 'prop-types';\n\nimport { Feature } from '@jotforminc/feature-toggle';\nimport { StyledModal as Modal } from '@jotforminc/styled-modal';\nimport PermissionSection from '../sections/Permission';\nimport LinkSettingsSection from '../sections/LinkSettings';\nimport AccessSettingsSection from '../sections/AccessSettings';\n\nimport { ScSettings } from '../../sc/scSettings';\n\nimport { defaultRecordEvent } from '../../helpers/utils';\nimport { useTranslatedTexts } from '../../helpers/hooks';\nimport { PERMISSION_LIST, USER_PERMISSION_OPTIONS } from '../../helpers/constants';\nimport ResourceSection from '../sections/ResourceSection';\n\nconst SettingsModal = forwardRef(({\n t,\n onChange,\n assigneeProtected,\n organizationAccess,\n ssoProtected,\n assigneeSubmissionPermission,\n linkSettingsAvailable,\n linkSettingsValues,\n recordEvent,\n assignLinkExpireDate,\n assignLinkExpireTimezone,\n isEnterprise,\n showGoBackAsClose,\n isSSOSupported,\n userTimezone,\n permissionOptions,\n onEnterpriseLinkClick,\n showLinkSettings,\n onAccessSettingsChangeAttempt,\n resources,\n selectedResources,\n settingsModalProps,\n allowRequestAccess\n}, ref) => {\n const { SETTINGS } = useTranslatedTexts(t);\n\n return (\n {SETTINGS}}\n usePortal\n showGoBackAsClose={showGoBackAsClose}\n reffedDivProps={{\n 'aria-label': SETTINGS\n }}\n {...settingsModalProps}\n >\n \n
        \n \n )}\n />\n \n )}\n />\n onChange({ selectedResources: val })}\n />\n )}\n />\n {\n showLinkSettings && (\n \n )\n }\n
        \n
        \n \n );\n});\n\nexport default SettingsModal;\n\nSettingsModal.propTypes = {\n onChange: func,\n t: func,\n assigneeProtected: oneOf(['Yes', 'No']),\n ssoProtected: oneOf(['Yes', 'No']),\n organizationAccess: string,\n linkSettingsAvailable: arrayOf(shape({\n key: string,\n dynamicKey: string,\n defaultValue: oneOf(['Yes', 'No']),\n propName: string\n })),\n linkSettingsValues: shape({\n /* propName: oneOf(['Yes', 'No']) */\n }),\n assigneeSubmissionPermission: oneOf(PERMISSION_LIST),\n assignLinkExpireDate: string,\n assignLinkExpireTimezone: string,\n recordEvent: func,\n isEnterprise: bool,\n showGoBackAsClose: bool,\n isSSOSupported: bool,\n userTimezone: string,\n permissionOptions: oneOfType([\n func,\n arrayOf(\n shape({\n showWhenSelected: string,\n text: string,\n desc: oneOfType([string, node]),\n value: string\n })\n )\n ]),\n onEnterpriseLinkClick: func,\n showLinkSettings: bool,\n onAccessSettingsChangeAttempt: func,\n resources: arrayOf(shape({})),\n selectedResources: arrayOf(string),\n settingsModalProps: shape({}),\n user: shape({}),\n allowRequestAccess: oneOf(['Yes', 'No'])\n};\n\nSettingsModal.defaultProps = {\n onChange: f => f,\n t: f => f,\n assigneeProtected: 'No',\n organizationAccess: '',\n linkSettingsAvailable: [],\n linkSettingsValues: {},\n ssoProtected: 'No',\n assigneeSubmissionPermission: undefined,\n assignLinkExpireDate: '',\n assignLinkExpireTimezone: '',\n recordEvent: defaultRecordEvent,\n isEnterprise: false,\n showGoBackAsClose: false,\n isSSOSupported: false,\n userTimezone: '',\n permissionOptions: USER_PERMISSION_OPTIONS,\n onEnterpriseLinkClick: f => f,\n showLinkSettings: false,\n onAccessSettingsChangeAttempt: f => f,\n resources: [],\n selectedResources: [],\n settingsModalProps: {},\n user: {},\n allowRequestAccess: 'Yes'\n};\n","import React from 'react';\nimport { string } from 'prop-types';\n\nconst HeaderSection = ({\n title\n}) => {\n return (\n
        \n
        \n {title && (\n
        \n {title}\n
        \n )}\n
        \n
        \n );\n};\n\nHeaderSection.propTypes = {\n title: string\n};\n\nHeaderSection.defaultProps = {\n title: null\n};\n\nexport default HeaderSection;\n","import React, {\n useState, useEffect, forwardRef, useImperativeHandle, useMemo\n} from 'react';\nimport {\n func,\n bool,\n shape,\n elementType,\n arrayOf,\n string,\n number,\n oneOfType\n} from 'prop-types';\n\nimport TextInput from '../TextInput';\n\nimport {\n generateShortID, isPressedKeyTab, isPressedKeyPillboxAddKey, isPressedKeyBackspace\n} from '../../utils';\nimport { useEffectIgnoreFirst } from '../../utils/hooks';\n\nconst Pillbox = forwardRef(({\n inputProps,\n isUniqueList,\n pillValidation,\n PillRenderer,\n PillContainerRenderer,\n RemainingCountRenderer,\n onPillAdd,\n onPillRemove,\n onPillUpdate,\n onPillListChange,\n pills,\n maxCount,\n showRemainingCount,\n showPillIcon,\n readOnly,\n fixedValue,\n setTextInputValue,\n getValidatedList\n}, ref) => {\n // States\n const [items, setItems] = useState(pills);\n const remainingCount = maxCount - items.length;\n\n // State based methods\n const findItemByText = item => Boolean(items.find(({ text }) => text.toLowerCase() === item.toLowerCase()));\n const findItemById = item => Boolean(items.find(({ id }) => id === item.id));\n const generateItem = item => ({\n id: item.id || generateShortID(), text: item.email || item, isValid: pillValidation(item), showPillIcon\n });\n const isValidToAdd = item => {\n if (!isUniqueList) {\n return Boolean(item.email || item);\n }\n\n if (item.id) {\n return Boolean(item.email) && (isUniqueList && !findItemById(item));\n }\n return Boolean(item) && (isUniqueList && !findItemByText(item));\n };\n\n const addTeamItem = ({ teamName, value, teamAvatarURL }) => {\n if (!isValidToAdd(value)) {\n return;\n }\n\n const newItem = {\n id: generateShortID(), text: value, displayedText: teamName, pillIconURL: teamAvatarURL, isValid: pillValidation(value), showPillIcon: true\n };\n const newItems = [...items, newItem];\n setItems(newItems);\n onPillAdd(newItem);\n };\n\n const addItem = item => {\n if (!isValidToAdd(item)) {\n setTextInputValue('');\n return;\n }\n\n const newItem = generateItem(item);\n const newItems = getValidatedList ? getValidatedList([...items, newItem]) : [...items, newItem];\n setItems(newItems);\n onPillAdd(newItem);\n };\n\n const removeItem = item => {\n if (fixedValue.indexOf(item.value) > -1) return;\n\n const newItems = items.filter(({ id }) => (id !== item.id));\n setItems(newItems);\n onPillRemove(item);\n };\n\n const updateItem = newItem => {\n const validatedNewItem = { ...newItem, isValid: pillValidation(newItem.text) };\n const newItems = items.map(item => (item.id === newItem.id ? { ...item, ...validatedNewItem } : item));\n setItems(newItems);\n onPillUpdate(validatedNewItem);\n };\n\n // Effects\n useEffect(() => {\n if (items !== pills) {\n setItems(pills);\n }\n }, [pills]);\n\n useEffectIgnoreFirst(() => {\n onPillListChange(items);\n }, [items]);\n\n useImperativeHandle(ref, () => ({\n addItem,\n addTeamItem,\n removeItem,\n updateItem,\n setItems,\n items\n }));\n\n // Event handlers\n const onBlur = (...parameters) => {\n const { onBlur: onBlurInput, suggestionSelected } = inputProps;\n const [e, inputValue, setInputValue] = parameters;\n\n const preventOnBlur = e.relatedTarget && e.relatedTarget.classList.contains('prevent-onblur-input');\n if (preventOnBlur) {\n return;\n }\n\n const isFocusSuggestion = e.relatedTarget && e.relatedTarget.classList.contains('suggestion');\n\n if (inputValue && !isFocusSuggestion && !suggestionSelected) { // if suggestion Selected is true prevent adding item from input value\n addItem(inputValue);\n setInputValue('');\n setTextInputValue('');\n }\n\n if (onBlurInput) {\n onBlurInput(...parameters);\n }\n };\n\n const onKeyDown = (...parameters) => {\n const { onKeyDown: onKeyDownInput } = inputProps;\n const [e, inputValue, setInputValue] = parameters;\n switch (true) {\n case isPressedKeyPillboxAddKey(e): {\n if (!isPressedKeyTab(e)) {\n e.preventDefault();\n }\n\n if (inputValue) {\n addItem(inputValue);\n setInputValue('');\n }\n break;\n }\n case isPressedKeyBackspace(e) && !inputValue: {\n const [item] = items.slice(-1);\n if (item) {\n removeItem(item);\n }\n break;\n }\n default:\n break;\n }\n\n if (onKeyDownInput) {\n onKeyDownInput(...parameters);\n }\n };\n\n // KeyDown fallback for android chrome\n const onInput = (...parameters) => {\n const { onInput: onTextInput } = inputProps;\n const [e, inputValue, setInputValue] = parameters;\n const lastCharacter = e.nativeEvent.data && e.nativeEvent.data.slice(-1);\n if (lastCharacter && [' ', ','].indexOf(lastCharacter) > -1) {\n e.preventDefault();\n addItem(inputValue);\n setInputValue('');\n e.target.value = '';\n }\n\n if (onTextInput) {\n onTextInput(...parameters);\n }\n };\n\n const onPaste = (...parameters) => {\n const [e] = parameters;\n e.preventDefault();\n const pastedValue = e.clipboardData.getData('Text');\n const pillsToAdd = pastedValue.split(/\\s|,/).filter(isValidToAdd).map(generateItem);\n setItems([...items, ...pillsToAdd]);\n };\n\n const renderedPills = useMemo(() => items.map(item => (\n removeItem(item)}\n readOnly={readOnly || fixedValue.indexOf(item.value) > -1}\n />\n )), [items]);\n\n return (\n \n {renderedPills}\n {\n !readOnly && remainingCount > 0 ? (\n \n )\n : null\n }\n {showRemainingCount && maxCount !== Infinity && (\n \n {remainingCount}\n \n )}\n \n );\n});\n\nPillbox.propTypes = {\n pills: arrayOf(shape({\n id: string,\n text: string,\n isValid: bool\n })),\n isUniqueList: bool,\n inputProps: shape(TextInput.propTypes),\n PillRenderer: elementType,\n PillContainerRenderer: elementType,\n RemainingCountRenderer: elementType,\n onPillAdd: func,\n onPillRemove: func,\n onPillUpdate: func,\n onPillListChange: func,\n pillValidation: func,\n onKeyDown: func,\n maxCount: number,\n showRemainingCount: bool,\n showPillIcon: bool,\n readOnly: bool,\n fixedValue: arrayOf(string),\n setTextInputValue: func,\n getValidatedList: oneOfType([bool, func]),\n suggestionSelected: bool\n};\n\n/* eslint react/prop-types: \"off\" */\nPillbox.defaultProps = {\n pills: [],\n isUniqueList: true,\n inputProps: {},\n PillRenderer: ({ id, text, isValid }) =>
        {text}
        ,\n PillContainerRenderer: ({ children }) =>
        {children}
        ,\n RemainingCountRenderer: ({ children }) =>
        {children}
        ,\n onPillAdd: f => f,\n onPillRemove: f => f,\n onPillUpdate: f => f,\n onKeyDown: f => f,\n onPillListChange: f => f,\n pillValidation: () => true,\n maxCount: Infinity,\n showRemainingCount: false,\n showPillIcon: false,\n readOnly: false,\n fixedValue: [],\n setTextInputValue: f => f,\n getValidatedList: false,\n suggestionSelected: false\n};\n\nexport default Pillbox;\n","import React, {\n useRef, useState, useEffect, forwardRef, useImperativeHandle\n} from 'react';\nimport {\n arrayOf, string, bool, func, shape, elementType\n} from 'prop-types';\nimport classNames from 'classnames';\nimport { Utils } from '@jotforminc/uikit';\nimport { useLongPress } from '@jotforminc/hooks';\n\nimport IconCross from './assets/svg/icon_cross.svg';\nimport IconPill from './assets/svg/icon_pill.svg';\n\nconst EditablePill = forwardRef(({\n id, text, displayedText, pillIconURL, isValid, removePill, pillIcon: PillIcon, showPillIcon,\n allowEmpty, allowedKeys, updatePill, hideRemoveIcon,\n initialEditable, inputProps, preventEditable, onEditableChange, isBright,\n ...props\n}, ref) => {\n const pillTextRef = useRef();\n const [inputValue, setInputValue] = useState(text);\n const [isEditable, setEditable] = useState(initialEditable);\n const setEditableState = tmpIsEditable => setEditable(!preventEditable && tmpIsEditable);\n\n const handleEditableStateChange = tmpIsEditable => {\n setEditableState(tmpIsEditable);\n onEditableChange(tmpIsEditable);\n };\n const longPressMouseEvents = useLongPress(() => handleEditableStateChange(true));\n\n useImperativeHandle(ref, () => ({\n setEditableState\n }));\n\n const onPillKeyDown = event => {\n const { key, keyCode } = event;\n event.nativeEvent.stopPropagation();\n event.nativeEvent.stopImmediatePropagation();\n if (!isEditable) {\n return;\n }\n\n const abortTyping = key === 'Escape' || keyCode === 27;\n const finalizeTyping = Utils.isPressedKeyPillboxAddKey(event) && !Utils.isPressedKeyOneOf(allowedKeys)(event);\n switch (true) {\n case finalizeTyping:\n if (!allowEmpty && inputValue === '') {\n removePill({ id });\n break;\n }\n updatePill({ id, text: inputValue });\n handleEditableStateChange(false);\n break;\n case abortTyping:\n handleEditableStateChange(false);\n setInputValue(text);\n break;\n default:\n break;\n }\n };\n\n const onPillDoubleClick = () => handleEditableStateChange(true);\n const onPillTextChange = ({ target: { value } }) => setInputValue(value);\n const onRemovePillKeyPress = event => Utils.isPressedKeyEnter(event) && removePill();\n const onPillBlur = () => {\n if (!allowEmpty && inputValue === '') {\n removePill({ id });\n return;\n }\n\n updatePill({ id, text: inputValue });\n handleEditableStateChange(false);\n };\n\n useEffect(() => {\n if (isEditable) {\n pillTextRef.current.focus();\n pillTextRef.current.setSelectionRange(0, inputValue.length);\n }\n }, [isEditable]);\n\n const handleRemovePill = event => {\n event.stopPropagation();\n removePill(event);\n event.preventDefault();\n };\n\n const handleMouseDown = event => {\n event.preventDefault();\n };\n\n const pillSpanClasses = classNames({ isBright }, 'pill-icon');\n const pillClasses = classNames({ isBright, hasBackgroundColor: props?.style?.backgroundColor }, 'pill'); // eslint-disable-line\n\n return (\n \n {!hideRemoveIcon && (\n \n \n \n )}\n {showPillIcon && (\n \n { pillIconURL\n ? (\n \n )\n : }\n \n )}\n \n \n {!isEditable ? (displayedText || text) : null}\n \n \n );\n});\n\nEditablePill.propTypes = {\n id: string.isRequired,\n text: string.isRequired,\n displayedText: string,\n pillIconURL: string,\n allowEmpty: bool,\n allowedKeys: arrayOf(string),\n isValid: bool.isRequired,\n removePill: func,\n updatePill: func.isRequired,\n hideRemoveIcon: bool,\n pillIcon: elementType,\n showPillIcon: bool,\n initialEditable: bool,\n preventEditable: bool,\n inputProps: shape({}),\n onEditableChange: func,\n isBright: bool\n};\n\nEditablePill.defaultProps = {\n displayedText: '',\n pillIconURL: '',\n showPillIcon: false,\n hideRemoveIcon: false,\n pillIcon: IconPill,\n initialEditable: false,\n preventEditable: false,\n allowEmpty: false,\n allowedKeys: [],\n inputProps: {},\n onEditableChange: f => f,\n removePill: f => f,\n isBright: null\n};\n\nexport default EditablePill;\n","import React from 'react';\nimport { bool, func } from 'prop-types';\n\nimport EditablePill from '@jotforminc/editable-pill';\n\nconst Pill = ({\n isQuestion, preventEditablePill, readOnly, onQuestionClick, ...props\n}) => {\n const onClick = isQuestion ? onQuestionClick : undefined;\n\n return (\n \n );\n};\n\nPill.propTypes = {\n isQuestion: bool,\n preventEditablePill: bool,\n readOnly: bool,\n onQuestionClick: func,\n ...EditablePill.propTypes\n};\n\nPill.defaultProps = {\n isQuestion: false,\n preventEditablePill: false,\n readOnly: false,\n onQuestionClick: f => f,\n ...EditablePill.defaultProps\n};\n\nexport default Pill;\n","import { v4 as uuid } from 'uuid';\nimport { getQuestionByPlaceholder } from '@jotforminc/utils';\n\nexport const preparePillObjectWithCustomValue = (text, value) => ({\n id: uuid(),\n value,\n text,\n isValid: true,\n isQuestion: true\n});\n\nexport const prepareSelectedQuestions = (emailList, questions) => emailList\n .filter(({ value: email }) => /{.*?}/.test(email) && getQuestionByPlaceholder(email, questions))\n .map(({ value }) => value);\n\nexport const filterEmailQuestions = (questions = [], allowDuplicateQids = false) => {\n const arraySource = Array.isArray(questions) ? questions : Object.values(questions);\n const normalized = arraySource.reduce((acc, question) => {\n const {\n qid, type, validation, name\n } = question;\n const key = allowDuplicateQids ? name : qid;\n if (type === 'control_email' || (type === 'control_textbox' && validation === 'Email') || type === 'control_assignee') {\n return { [key]: question, ...acc };\n }\n if ((type === 'control_inline' || type === 'control_mixed') && Array.isArray(question.fields)) {\n const newFields = question.fields.filter(f => f.validation === 'Email' || f.type === 'email');\n if (newFields.length > 0) {\n return {\n [key]: {\n ...question,\n fields: [...newFields]\n },\n ...acc\n };\n }\n }\n return acc;\n }, {});\n return Object.values(normalized);\n};\n\nexport const findFormFromQuestionValue = (formArray, value) => {\n const rawValue = value.substring(1, value.length - 1);\n return formArray.find(({ questions }) => questions?.find(q => q.name === rawValue));\n};\n","import Styled from 'styled-components';\n\nexport const ScEmailInput = Styled.label`\n display: inline-block;\n width: 100%;\n font-size: 1em;\n border: 1px solid #ccc;\n border-radius: 2px;\n padding: .5em;\n cursor: text;\n\n .pill {\n color: #2c3345;\n height: 28px;\n border-radius: 15px;\n background-color: #ebedf3;\n display: inline-flex;\n align-items: center;\n padding: 0 .5em;\n margin: 0 .375em .25em 0;\n cursor: default;\n\n &.hasBackgroundColor:not(.isBright) {\n color: #fff;\n }\n\n &-remove {\n width: 12px;\n margin-left: .375em;\n cursor: pointer;\n order: 3;\n\n svg {\n display: block;\n fill: currentColor;\n }\n }\n }\n\n .emailInput-input {\n font-size: .875em;\n padding: .5em;\n border: 0;\n\n &:focus { outline: 0; }\n }\n`;\n\nexport const ScRemainingCount = Styled.div`\n position: absolute;\n bottom: 1.5px;\n right: 1px;\n color: #23283a;\n background-color: #fff;\n border-radius: 3px;\n padding: 0 8px;\n`;\n","import React, {\n useState, useRef, useEffect, useMemo, forwardRef, useImperativeHandle\n} from 'react';\nimport {\n arrayOf, string, shape, func, elementType, bool, oneOfType, object\n} from 'prop-types';\nimport isEqual from 'lodash/isEqual';\nimport uniqBy from 'lodash/uniqBy';\nimport { Pillbox, Popover, Hooks } from '@jotforminc/uikit';\nimport { t as translate } from '@jotforminc/translation';\nimport { useFuse } from '@jotforminc/hooks';\nimport {\n getPlaceholderListForDynamicQuestions,\n isBright,\n pillValidator,\n sanitizeEmailList,\n isTeamEmail\n} from '@jotforminc/utils';\nimport FormFields from '@jotforminc/form-fields-menu';\nimport UserList from '@jotforminc/user-list';\n\nimport DefaultPillRenderer from './components/Pill';\n\nimport {\n prepareSelectedQuestions,\n filterEmailQuestions,\n preparePillObjectWithCustomValue,\n findFormFromQuestionValue\n} from './utils';\n\nimport { ScEmailInput, ScRemainingCount } from './styles';\n\n// eslint-disable-next-line react/prop-types\nconst RemainingCountRenderer = ({ children }) => {\n const setRemainingCount = children <= 0 ? 0 : children;\n return (\n \n {translate('{number} left').replace('{number}', setRemainingCount)}\n \n );\n};\n\nconst EmailInput = forwardRef(({\n value, defaultValue, onChange, userList, dontFilterListByEmails, onType,\n questions: baseQuestions, addFormFields, dontFilterListByTextInput,\n PillRenderer, SuggestionRenderer, formTitle,\n inputProps, popoverProps, containerClassName,\n pillValidation, fuseOptions, pillIcon, showPillIcon,\n showSuggestionsOnFocus, suggestionProps, onClick, fieldsLabelText, stickToBottom,\n useMultipleForms, formArray, showProtectedTag, preventEditablePill, ...pillboxProps\n}, ref) => {\n const colorifyPills = emailObj => {\n if (useMultipleForms) {\n const currentValue = findFormFromQuestionValue(formArray, emailObj.value || '');\n const backgroundColor = currentValue?.color;\n const style = {\n backgroundColor\n };\n const bright = isBright(backgroundColor);\n return {\n ...emailObj,\n style,\n isBright: bright,\n formTitle: currentValue?.formTitle || 'Form'\n };\n }\n return emailObj;\n };\n const pillboxRef = useRef();\n const textInputRef = useRef();\n const formFieldsRef = useRef();\n const suggestionListRef = useRef();\n const emailContainerRef = useRef();\n const questions = useMemo(() => filterEmailQuestions(useMultipleForms ? formArray.flatMap(f => f.questions) : baseQuestions, useMultipleForms), [baseQuestions, formArray, useMultipleForms]);\n const formFieldsFormArray = useMemo(() => formArray.map(f => ({ ...f, questions: filterEmailQuestions(f.questions) })), [formArray]);\n const sanitizeEmailListWithQuestions = useMemo(() => emailList => sanitizeEmailList(emailList, questions), [questions]);\n\n const [isFocused, setFocused] = useState(false);\n const [textInputValue, setTextInputValue] = useState('');\n const [emails, setEmails] = useState(sanitizeEmailListWithQuestions(value || defaultValue, questions).map(colorifyPills));\n const [isSuggestionVisible, setSuggestionVisibility] = Hooks.useClickOutsideState(false, [textInputRef, suggestionListRef]);\n\n // user list item selection state\n const [suggestionSelected, setSuggestionSelected] = useState(false);\n\n // const [isSuggestionVisible, setSuggestionVisibility] = Hooks.useClickOutsideState(false, [textInputRef, suggestionListRef]);\n\n useImperativeHandle(ref, () => ({\n focusTextInput: () => {\n textInputRef.current?.focus();\n }\n }));\n\n const selectedQuestions = prepareSelectedQuestions(emails, questions);\n const userListFilteredByEmails = dontFilterListByEmails ? userList : userList.filter(({ email }) => emails.findIndex(({ text }) => text === email) === -1);\n const suggestedUsers = dontFilterListByTextInput\n ? userListFilteredByEmails\n : useFuse(userListFilteredByEmails, textInputValue, ['name', 'email'], fuseOptions).filter(user => user?.email !== 'enterprise-support@jotform.com');\n\n const handlePillListChange = newEmailList => {\n const emailsLength = emails.length;\n let emailList = newEmailList;\n let sanitizedEmailList = sanitizeEmailListWithQuestions(newEmailList, questions);\n if (!(pillboxProps && pillboxProps.isUniqueList === false)) {\n sanitizedEmailList = uniqBy(sanitizedEmailList, v => (v.value ? v.value : v.text)); // gets rid of duplicates\n if (sanitizedEmailList.length !== newEmailList.length) {\n emailList = uniqBy(newEmailList, v => (v.value ? v.value : v.text)); // removes the duplicate email element if there is any\n }\n }\n setTextInputValue('');\n onType('');\n setEmails(emailList);\n onChange(sanitizedEmailList);\n\n // stick to bottom for only adding a new pill\n if (stickToBottom && newEmailList.length > emailsLength && emailContainerRef.current) {\n if (emailContainerRef.current.scrollHeight > emailContainerRef.current.clientHeight) {\n emailContainerRef.current.scrollTo(0, emailContainerRef.current.scrollHeight);\n }\n }\n };\n\n const handleSuggestionClick = ({ id = '', name = '', email }) => {\n setTextInputValue('');\n onType('');\n setSuggestionSelected(true);\n if (isTeamEmail(email)) {\n pillboxRef.current.addTeamItem({ teamName: name, value: email });\n } else if (id) {\n pillboxRef.current.addItem({ id: id, email: email });\n } else {\n pillboxRef.current.addItem(email);\n }\n };\n\n const handleTextInputChange = ({ target: { value: inputValue } }) => {\n onType(inputValue);\n setTextInputValue(inputValue);\n };\n\n const handleSelectionChange = selectedPlaceholders => {\n if (pillboxProps.maxCount && emails.length === pillboxProps.maxCount) {\n return;\n }\n const allPlaceholders = getPlaceholderListForDynamicQuestions(questions);\n\n const questionPlaceholders = selectedPlaceholders.map(placeholder => {\n const found = allPlaceholders.find(p => p.placeholder === placeholder);\n if (!found) { return; }\n return preparePillObjectWithCustomValue(found.text, found.placeholder);\n }).filter(q => q);\n const emailListWithQuestionRemoved = emails.filter(({ value: email }) => !/{.*?}/.test(email));\n const newEmailList = uniqBy([...emailListWithQuestionRemoved, ...questionPlaceholders], p => (p.value ? p.value : p.text)).map(colorifyPills);\n setEmails(newEmailList);\n };\n\n const handleQuestionClick = () => formFieldsRef.current && formFieldsRef.current.setMenuVisibility(true);\n const pillRendererProps = {\n onQuestionClick: handleQuestionClick,\n showPillIcon,\n preventEditablePill,\n ...(pillIcon ? { pillIcon } : {})\n };\n const PillRendererWithQuestionClick = useMemo(() => props => , [PillRenderer, formFieldsRef.current, pillRendererProps]);\n\n useEffect(() => {\n setSuggestionVisibility(Boolean(textInputValue && suggestedUsers.length > 0));\n }, [textInputValue, suggestedUsers]);\n\n Hooks.useEffectIgnoreFirst(() => {\n if (value && !isEqual(value, emails)) {\n pillboxRef.current.setItems(sanitizeEmailListWithQuestions(value, questions));\n }\n }, [value]);\n\n const randomId = useMemo(() => `emailInput_${Math.random().toString(36).substring(2)}`, []);\n\n const handleSuggestionListBlurEvent = event => {\n if (event.relatedTarget !== textInputRef.current && !(suggestionListRef.current && suggestionListRef.current.contains(event.relatedTarget))) {\n pillboxRef.current.addItem(textInputValue);\n setTextInputValue('');\n }\n };\n\n const shouldShowSuggestions = showSuggestionsOnFocus ? (isSuggestionVisible || isFocused) && suggestedUsers.length > 0 : isSuggestionVisible;\n\n return (\n
        \n {addFormFields && questions && (\n \n )}\n \n {\n setFocused(true);\n if (inputProps.onFocus) inputProps.onFocus();\n },\n onBlur: () => {\n setFocused(false);\n if (inputProps.onBlur) inputProps.onBlur();\n },\n suggestionSelected: suggestionSelected\n }}\n setTextInputValue={setTextInputValue}\n {...pillboxProps}\n />\n {shouldShowSuggestions && (\n \n \n \n )}\n \n
        \n );\n});\n\nEmailInput.propTypes = {\n value: arrayOf(string),\n defaultValue: arrayOf(string),\n userList: arrayOf(shape({\n name: string,\n email: string,\n avatarUrl: string\n })),\n questions: oneOfType([arrayOf(shape({})), shape({})]),\n addFormFields: bool,\n inputProps: shape({\n onFocus: func,\n onBlur: func\n }),\n popoverProps: shape({}),\n PillRenderer: elementType,\n SuggestionRenderer: elementType,\n onChange: func,\n onType: func,\n formTitle: string,\n containerClassName: string,\n pillValidation: oneOfType([func, bool]),\n showPillIcon: bool,\n pillIcon: elementType,\n fuseOptions: object,\n showSuggestionsOnFocus: bool,\n suggestionProps: shape({}),\n onClick: func,\n fieldsLabelText: string,\n useMultipleForms: bool,\n formArray: arrayOf(shape({})),\n showProtectedTag: bool,\n dontFilterListByEmails: bool,\n dontFilterListByTextInput: bool,\n preventEditablePill: bool,\n stickToBottom: bool\n};\n\nEmailInput.defaultProps = {\n value: undefined,\n defaultValue: [],\n userList: [],\n questions: undefined,\n addFormFields: false,\n inputProps: {\n onFocus: f => f,\n onBlur: f => f\n },\n popoverProps: {},\n PillRenderer: DefaultPillRenderer,\n SuggestionRenderer: UserList,\n onChange: f => f,\n onType: f => f,\n formTitle: undefined,\n containerClassName: '',\n pillValidation: false,\n showPillIcon: false,\n pillIcon: undefined,\n fuseOptions: {},\n showSuggestionsOnFocus: false,\n suggestionProps: {},\n onClick: f => f,\n fieldsLabelText: 'Form Fields',\n useMultipleForms: false,\n formArray: [],\n showProtectedTag: false,\n dontFilterListByEmails: false,\n dontFilterListByTextInput: false,\n preventEditablePill: false,\n stickToBottom: false\n};\n\nexport default EmailInput;\n","import React from 'react';\nimport { string } from 'prop-types';\nimport Styled, { css } from 'styled-components';\n\nconst ScAvatar = Styled.div`\n width: 32px;\n height: 32px;\n border-radius: 50%;\n ${p => ((p.img === null)\n ? css`\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n \n text-transform: capitalize;\n ` : css`\n background-repeat: no-repeat;\n background-size: cover;\n background-position: 50% 50%;\n background-image: url(${p.img});\n\n flex: 0 0 32px;\n background-color: #b9bbd2;\n font-size: 1em;\n line-height: 32px;\n color: #fff;\n `)\n}\n`;\n\nexport const AvatarHolder = ({\n name, avatarUrl, email\n}) => {\n return (\n \n {avatarUrl ? null : (name || email).slice(0, 1)}\n \n );\n};\n\nAvatarHolder.propTypes = {\n name: string,\n avatarUrl: string,\n email: string\n};\n\nAvatarHolder.defaultProps = {\n name: null,\n email: '',\n avatarUrl: ''\n};\n","/* eslint-disable max-len */\nimport {\n bool,\n number, oneOfType, shape, string\n} from 'prop-types';\nimport React from 'react';\nimport styled from 'styled-components';\nimport classNames from 'classnames';\nimport { Tooltip } from '@jotforminc/tooltip';\n\nconst OptionWrapper = styled.div`\n display: flex;\n position: relative;\n\n .dropdown-option-content {\n display: flex;\n padding: 16px;\n }\n \n .radio {\n position: absolute;\n visibility: hidden;\n opacity: 0;\n width: 28px;\n height: 28px;\n\n &.isSelected + label {\n &:before {\n background-color: #4277FF;\n background-image: url(\"data:image/svg+xml,%3Csvg fill='none' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 10'%3E%3Cpath d='M.9 4.44 4.73 8.9l7.64-7.64' stroke='%23fff' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");\n background-size: 12px 8px;\n background-repeat: no-repeat;\n background-position: center;\n }\n }\n\n }\n\n label {\n position: relative;\n padding-left: 42px;\n cursor: pointer;\n\n &:before {\n content: '';\n border-radius: 100%;\n width: 28px;\n height: 28px;\n background-color: #F2F3FB;\n position: absolute;\n left: 0;\n top: 50%;\n margin-top: -14px;\n }\n\n p {\n margin: 0;\n padding: 0;\n color: #2D3344;\n font-size: 15px;\n font-weight: 700;\n line-height: 20px;\n margin-bottom: 4px;\n }\n\n span {\n font-size: 15px;\n line-height: 20px;\n font-weight: 400;\n\n span, b {\n font-weight: 700;\n }\n }\n }\n`;\n\nconst OptionRenderer = ({\n option: {\n text, value, subText, disabled, tooltipMessage, isFirstOption\n },\n isSelected\n}) => (\n \n
        \n \n \n {disabled && tooltipMessage && (\n \n {tooltipMessage}\n \n )}\n
        \n \n);\n\nOptionRenderer.propTypes = {\n option: shape({\n text: string,\n value: oneOfType([string, number]),\n subText: string,\n tooltipMessage: string,\n isFirstOption: bool\n }).isRequired,\n isSelected: bool.isRequired\n};\n\nexport default OptionRenderer;\n","import { arrayOf, node } from 'prop-types';\nimport React, { forwardRef } from 'react';\nimport styled from 'styled-components';\nimport { t } from '@jotforminc/translation';\n\nconst Wrapper = styled.ul`\n margin: 0;\n padding: 0;\n max-width: 460px;\n width: 100%;\n background-color: #FFF;\n border-radius: 4px;\n box-shadow: 0 1px 10px rgba(40, 51, 95, 0.3);\n display: flex;\n flex-direction: column;\n overflow: auto;\n\n @media screen and (max-height: 1000px) {\n max-height: 30vh; \n }\n\n li {\n width: 100%;\n border-bottom: 1px solid #eaebf1;\n display: flex;\n flex-direction: column;\n\n &[aria-disabled=\"true\"] .dropdown-option-content {\n pointer-events: none;\n label {\n opacity: .25;\n }\n }\n }\n`;\n\nconst ContainerRenderer = forwardRef(({ children, extraElements }, ref) => {\n return (\n \n {children}\n {extraElements.map(element => (\n
      • \n {element}\n
      • \n ))}\n \n );\n});\n\nContainerRenderer.propTypes = {\n children: node.isRequired,\n extraElements: arrayOf(node)\n};\n\nContainerRenderer.defaultProps = {\n extraElements: []\n};\n\nexport default ContainerRenderer;\n","/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n// TODO: Change library name to something more simple and convenient\n\nimport React, { forwardRef } from 'react';\nimport { Dropdown } from '@jotforminc/uikit';\nimport {\n arrayOf, node, number, oneOfType, shape, string\n} from 'prop-types';\nimport OptionRenderer from './components/OptionRenderer';\nimport ContainerRenderer from './components/ContainerRenderer';\n\nconst DropdownWithExtraElements = forwardRef(({ options, extraElements, ...rest }, ref) => {\n return (\n )}\n OptionRenderer={OptionRenderer}\n OptionContainerRenderer={props =>
      • }\n optionsAutoPosition={true}\n {...rest}\n />\n );\n});\n\nDropdownWithExtraElements.propTypes = {\n options: arrayOf(shape({\n text: string,\n value: oneOfType([string, number]),\n subText: string\n })).isRequired,\n extraElements: arrayOf(node),\n popoverProps: shape({})\n};\n\nDropdownWithExtraElements.defaultProps = {\n extraElements: [],\n popoverProps: {\n popoverOptions: {\n placement: 'bottom-end'\n }\n }\n};\n\nexport default DropdownWithExtraElements;\n","import React, { forwardRef } from 'react';\nimport Styled from 'styled-components';\nimport { Dropdown as UIKitDropdown } from '@jotforminc/uikit';\nimport { IconChevronDown } from '@jotforminc/svg-icons';\nimport DropdownWithExtraElements from '@jotforminc/dropdown-with-extra-elements';\n\nimport {\n shape, string, node, bool, func, arrayOf, oneOfType\n} from 'prop-types';\n\nconst ScPopoverArrow = Styled.div`\n &, &:before, &:after {\n width: 10px;\n height: 10px;\n position: absolute;\n }\n\n [data-popper-placement=\"top-end\"] & {\n bottom: -10px;\n\n &:before { top: -4px; }\n &:after { top: -6px; }\n }\n\n [data-popper-placement=\"bottom-end\"] & {\n &:before { top: -6px; }\n &:after { top: -4px; }\n }\n\n &:before, &:after {\n content: \"\";\n display: inline-block;\n transform: rotate(45deg);\n left: 0px;\n }\n\n &:before {\n background: rgba(216, 218, 233, 0.5);\n z-index: 1;\n border-radius: 1px;\n }\n\n &:after {\n background: #fff;\n z-index: 2;\n }\n`;\n\nconst ScButton = Styled.button`\n background: transparent;\n display: flex;\n align-items: center;\n border-radius: 2px;\n border: 0;\n box-shadow: none;\n font-size: 14px;\n line-height: 1.25;\n padding: 0;\n cursor: pointer;\n\n .dd-t { flex: 1 1 auto; padding: .5em 0; color: #0075E3; text-align: right; font-size: 12px; line-height: 16px; font-weight: 500; white-space: nowrap; }\n .dd-s { padding: .4em; color: #0075E3; }\n .dd-s svg { display: block; width: 12px; height: 12px; }\n .dd-s svg path { stroke: #0075E3 !important}\n .dd-i { display: block; color: #ff0000; font-size: .95em; }\n\n &:focus { outline: none; border-color: #bbb; }\n`;\n\n/* eslint-disable max-len */\n/* eslint-disable react/destructuring-assignment */\n\nconst ScOptionList = Styled.ul.attrs({\n role: 'listbox'\n})`\n list-style: none;\n margin: 0;\n padding: .25em 0;\n background-color: #fff;\n border: 1px solid #d8dae9;\n font-size: .875em;\n border-radius: 4px;\n box-shadow: 0 0 9px 0 rgba(0, 0, 0, 0.16);\n\n .i {\n padding: 1rem 1rem .875rem 1.5rem;\n user-select: none;\n cursor: pointer;\n line-height: 1.25;\n }\n li {\n display: flex;\n align-items: center;\n position: relative;\n z-index: 1;\n &:before {\n flex-shrink: 0;\n content: \"\";\n background-repeat: no-repeat;\n background-position: center;\n background-size: 16px;\n position: relative;\n display: inline-flex;\n width: 24px;\n height: 24px;\n border-radius: 100%;\n margin-left: 24px;\n background-color: #E6E9EF;\n }\n &[aria-selected=true] {\n &:before {\n background-color: #0099FF;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTAiIHZpZXdCb3g9IjAgMCAxNCAxMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEuMjcyOTUgNC4zNjM3TDUuMDg1OTUgOC44MTgyNUwxMi43Mjc1IDEuMTgxODgiIHN0cm9rZT0id2hpdGUiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9zdmc+Cg==);\n }\n }\n }\n\n li + li { border-top: 1px solid #eaebf2; }\n\n li:hover,\n li.isHovering { background-color: #F3F4F7; }\n\n .il { font-size: 14px; color: #2c3345; font-weight: 700; }\n .id { font-size: 13px; color: #8d8fa8; margin-top: 4px; }\n .id span { color: #2c3345; font-weight: 500; }\n`;\n\nconst DdButton = forwardRef(({\n option: { text, showWhenSelected, value }, actionRequired, onActionRequiredClick, className, ...props\n}, ref) => (\n \n \n {showWhenSelected || text}\n {actionRequired && f} onClick={onActionRequiredClick}>Action Required}\n \n \n \n));\n\nDdButton.propTypes = {\n option: shape({\n showWhenSelected: string,\n text: string,\n value: string\n }).isRequired,\n actionRequired: bool.isRequired,\n onActionRequiredClick: func,\n className: string\n};\n\nDdButton.defaultProps = {\n className: '',\n onActionRequiredClick: f => f\n};\n\nconst DdList = ({ children, noMarginTop }) => (\n
        \n \n {children}\n
        \n);\n\nDdList.propTypes = {\n children: node.isRequired,\n noMarginTop: bool\n};\n\nDdList.defaultProps = {\n noMarginTop: false\n};\n\nconst DropdownWithDetails = props => {\n return props.useNewStyledPermissionDropdown ? (\n props.recordEvent('permissionChangeButtonClicked', '')}\n ButtonRenderer={DdButton}\n options={props.options.map(opt => ({ ...opt, subText: opt.desc }))}\n popoverProps={{\n usePortal: true,\n style: { zIndex: 10005 },\n popoverOptions: {\n placement: 'bottom-end',\n modifiers: [\n { name: 'offset', options: { offset: [0, 10] } }\n ]\n }\n }}\n />\n ) : (\n (\n {\n props.onClick(...args);\n return btn.onClick(...args);\n }}\n actionRequired={props.actionRequired}\n onActionRequiredClick={props.onActionRequiredClick}\n ref={ref}\n className={props.className}\n />\n ))}\n ContainerRenderer={forwardRef((_list, ref) => )}\n OptionRenderer={({\n option: { text, desc, value }, isSelected\n }) => (\n
        \n
        {text}
        \n
        {desc}
        \n
        \n )}\n // OptionContainerRenderer={props =>
      • }\n {...props}\n />\n );\n};\n\nDropdownWithDetails.propTypes = {\n actionRequired: bool,\n onClick: func,\n className: string,\n noMarginTop: bool,\n onActionRequiredClick: func,\n useNewStyledPermissionDropdown: bool,\n options: arrayOf(shape({\n showWhenSelected: string,\n text: string,\n desc: oneOfType([string, node]),\n value: string\n })),\n recordEvent: func\n};\n\nDropdownWithDetails.defaultProps = {\n actionRequired: false,\n onClick: f => f,\n className: '',\n noMarginTop: false,\n onActionRequiredClick: f => f,\n useNewStyledPermissionDropdown: false,\n options: [],\n recordEvent: f => f\n};\n\nexport default DropdownWithDetails;\n","import Styled from 'styled-components';\n\nexport const ScRF = Styled.div`\n display: flex;\n justify-content: space-between;\n`;\n\nexport const ScRB = Styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n overflow-y: auto;\n\n .content {\n width: 90%;\n max-width: 500px;\n padding-bottom: 40px;\n text-align: center;\n font-size: 1em;\n color: #0A1551;\n font-weight: 700;\n margin: auto;\n\n &.isRedWarn {\n svg {\n fill: #FF4947;\n width: 80px;\n height: 80px;\n }\n }\n\n > svg {\n display: unset;\n margin-bottom: 8px;\n }\n }\n\n .content.wider { max-width: 540px; }\n\n .assignToOrgSvg {\n width: 54vw;\n height: 36vh;\n max-width: 192px;\n max-height: 136px;\n }\n\n .title {\n font-size: 18px;\n line-height: 20px;\n color: #141E46;\n font-weight: 500;\n }\n\n .subtitle {\n font-size: 15px;\n line-height: 16px;\n color: #252F58;\n font-weight: 500;\n }\n\n p {\n font-size: 14px;\n line-height: 24px;\n color: #60658C;\n }\n\n p, .custom-content { font-weight: 300; margin: 12px 0; }\n\n .sec { color: #2c3345; margin: 1em 0 0; line-height: 1.5; }\n\n [data-value=\"sendNotificationEmail\"] { display: inline-flex; }\n\n .assigneeMsg {\n max-width: 426px;\n width: 100%;\n display: block;\n height: 90px;\n border-radius: 4px;\n border: solid 1px #d8dae9;\n margin: 1em auto 0;\n font-size: .875rem;\n padding: .375rem .5rem;\n transition: border-color .15s ease;\n\n ::placeholder { color: #8d8fa8; }\n :focus { outline: 0; border-color: #4c7af7; }\n }\n\n .dontshow {\n display: inline-flex;\n background-color: #ecf4ff;\n align-items: center;\n padding: 10px;\n margin-top: 38px;\n margin-bottom: 20px;\n \n &-input {\n opacity: 0;\n pointer-events: none;\n position: absolute;\n \n &:checked + .dontshow-checkbox:before {\n background-color: #54b45c;\n border-color: #54b45c;\n }\n \n &:checked + .dontshow-checkbox:after {\n opacity: 1;\n }\n \n &:focus {\n outline: 0;\n }\n }\n \n &-checkbox {\n width: 14px;\n height: 14px;\n background-color: #fff;\n border-radius: 2px;\n position: relative;\n \n &:before {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n border: 1px solid #CCD0DA;\n background-color: #fff;\n border-radius: 2px;\n top: 0;\n left: 0;\n transition: .3s;\n transform: translate(-1px, -1px);\n }\n \n &:after {\n content: \"\";\n display: block;\n width: 4px;\n height: 8px;\n border: solid #fff;\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n position: absolute;\n top: 1px;\n left: 4px;\n opacity: 1;\n transition: .3s;\n z-index: 2;\n }\n }\n \n &-text {\n font-weight: 400;\n font-size: 16px;\n margin-left: 8px;\n line-height: 1;\n color: #52587e;\n }\n }\n\n @media screen and (max-width: 480px) {\n font-size: 0.875em;\n\n p { margin: 1em 0 .75em; }\n } \n`;\n","import React, { forwardRef, useState } from 'react';\nimport {\n func, arrayOf, shape, number, string, array\n} from 'prop-types';\nimport { Hooks } from '@jotforminc/uikit';\n\nimport { Button } from '@jotforminc/common-button';\nimport { StyledModal as Modal } from '@jotforminc/styled-modal';\nimport { OptionGroup } from '@jotforminc/option-group';\n\nimport { ScRF, ScRB } from '../../sc/scRevokeAccess';\nimport IconAssignToEveryone from '../../assets/svg/assign_to_organization.svg';\n\nimport { defaultRecordEvent } from '../../helpers/utils';\nimport { useTranslatedTexts } from '../../helpers/hooks';\n\nconst AssignToOrganizationModal = forwardRef((\n {\n formID,\n users,\n onAssign,\n onFormPropChange,\n onCancel,\n recordEvent,\n t,\n explanationText,\n emails,\n defaultMessage,\n modalBodyHeaderText\n }, ref\n) => {\n const {\n SEND_EMAIL_TO_ENTIRE_ORGANIZATION, SEND_EMAIL_TO_ENTIRE_ORGANIZATION_DESC,\n SEND_NOTIFICATION_EMAIL,\n ADD_YOUR_MESSAGE_HERE,\n YES_ASSIGN_TO_ALL, CANCEL\n } = useTranslatedTexts(t);\n\n const initialValues = {\n shouldSendNotificationEmail: false,\n message: '',\n isOperationDone: false,\n isOperationInProgress: false,\n isOperationAllowed: true\n };\n\n const [shouldSendNotificationEmail, setShouldSendNotification] = useState(initialValues.shouldSendNotificationEmail);\n const [message, setMessage] = useState(initialValues.message);\n const [isOperationDone, setIsOperationDone] = useState(initialValues.isOperationDone);\n const [isOperationInProgress, setIsOperationInProgress] = useState(initialValues.isOperationInProgress);\n const [isOperationAllowed, setIsOperationAllowed] = useState(initialValues.isOperationAllowed);\n\n const reset = () => {\n setIsOperationInProgress(initialValues.isOperationInProgress);\n setIsOperationAllowed(initialValues.isOperationAllowed);\n setIsOperationDone(initialValues.isOperationDone);\n setMessage(initialValues.message);\n setShouldSendNotification(initialValues.shouldSendNotificationEmail);\n };\n\n const onShouldSendNotificationEmailSelectionChange = values => {\n const isChecked = values.includes('sendNotificationEmail');\n setShouldSendNotification(isChecked);\n };\n\n const onMessageChange = e => {\n const { value = '' } = e.target;\n setMessage(value);\n };\n\n const handleClose = () => {\n reset();\n if (!isOperationDone) {\n return onCancel();\n }\n };\n\n const handleAssign = async () => {\n if (!isOperationAllowed) return;\n setIsOperationInProgress(true);\n setIsOperationAllowed(false);\n\n const userEmails = emails || users.map(u => u.email);\n const messageToSend = message || defaultMessage;\n const result = await onAssign({ emails: userEmails, message: messageToSend }, true, shouldSendNotificationEmail);\n if (!result) {\n setIsOperationInProgress(false);\n setIsOperationAllowed(true);\n // TODO Handle errors in UI too\n return;\n }\n setIsOperationInProgress(false);\n setIsOperationDone(true);\n onFormPropChange({ assignedToOrganization: 'Yes' });\n recordEvent('formAssignedToOrganization', formID);\n };\n\n Hooks.useEffectIgnoreFirst(() => { // TODO extract a common useDelayedEffect fn.\n if (isOperationDone) {\n setTimeout(() => {\n ref.current.hide();\n }, 300); // wait just a little to show operation done\n }\n }, [isOperationDone]);\n\n return (\n \n \n \n \n )}\n >\n \n
        \n \n
        {modalBodyHeaderText || SEND_EMAIL_TO_ENTIRE_ORGANIZATION}
        \n

        {explanationText || SEND_EMAIL_TO_ENTIRE_ORGANIZATION_DESC({ NUMBER_OF_EMAILS: users.length })}

        \n \n {shouldSendNotificationEmail\n ? (\n \n ) : null}\n
        \n
        \n \n );\n});\n\nexport default AssignToOrganizationModal;\n\nAssignToOrganizationModal.propTypes = {\n formID: number,\n onCancel: func,\n onAssign: func,\n onFormPropChange: func,\n recordEvent: func,\n t: func,\n users: arrayOf(shape()),\n explanationText: string,\n emails: array,\n defaultMessage: string,\n modalBodyHeaderText: string\n};\n\nAssignToOrganizationModal.defaultProps = {\n formID: 0,\n onCancel: f => f,\n onAssign: f => f,\n onFormPropChange: f => f,\n recordEvent: defaultRecordEvent,\n t: f => f,\n users: [],\n explanationText: '',\n emails: undefined,\n defaultMessage: '',\n modalBodyHeaderText: ''\n};\n","import React, {\n useRef, useState, useMemo, useEffect, forwardRef, useImperativeHandle,\n useCallback\n} from 'react';\nimport {\n func, arrayOf, shape, string, number, oneOfType, node, bool, oneOf\n} from 'prop-types';\nimport uniqBy from 'lodash/uniqBy';\nimport difference from 'lodash/difference';\nimport PapaCSVParser from 'papaparse';\nimport { Hooks, Popover, Pillbox } from '@jotforminc/uikit';\nimport {\n IconArrowUpFromBracket, IconArrowDownToLine, IconDocumentCsvFilled, IconEnvelopeClosedFilled, IconCheckCircleFilled\n} from '@jotforminc/svg-icons';\n\nimport classNames from 'classnames';\nimport { Feature } from '@jotforminc/feature-toggle';\nimport { Button } from '@jotforminc/magnet';\nimport EditablePill from '@jotforminc/editable-pill';\nimport EmailInput from '@jotforminc/email-input';\nimport { isSafari } from '@jotforminc/utils';\nimport WarningBox from '@jotforminc/warning-box';\nimport { useSwitch, useStateWithAutoReset, useMeasure } from '@jotforminc/hooks';\nimport { translationRenderer } from '@jotforminc/translation';\nimport { AvatarHolder } from '../../components/AvatarHolder';\nimport ResourcePicker from '../../components/ResourcePicker';\n\nimport IconPrefillEdit from '../../assets/svg/iconPrefillEdit.svg';\nimport IconPrefillEditWhite from '../../assets/svg/iconPrefillEditWhite.svg';\nimport { ScPopoverMenu, ScPopoverArrow } from '../../sc/scAssigneeList';\n\nimport { isValidAssignEmail } from '../../helpers/utils';\nimport { useTranslatedTexts } from '../../helpers/hooks';\nimport DropdownWithDetails from '../../components/DropdownWithDetails';\nimport { PERMISSION_LIST, USER_PERMISSION_OPTIONS } from '../../helpers/constants';\nimport AssignToOrganizationModal from '../modals/AssignToOrganizationModal';\nimport layer from '../../helpers/layer';\n\n// eslint-disable-next-line react/prop-types\nconst PillContainerRenderer = ({ children }) =>
        {children}
        ;\n\n// eslint-disable-next-line max-statements, complexity\nconst InviteSection = forwardRef(({\n t,\n assignees,\n assigneeLimit,\n assigneeSubmissionPermission,\n useInviteSettingsPermission,\n onAvatarsClick,\n recordEvent,\n onInvitationSend,\n permissionOptions: _permissionOptions,\n assignPermissionOnInvite,\n formID,\n isEnterprise,\n selectEmailsFromList,\n emailSendModalOpenCount,\n defaultPermissionOption,\n renderedFrom,\n resources,\n isExpanded,\n setIsExpanded,\n useOnlyInvite,\n onCloseModal,\n defaultInvitations,\n hideInviteMessageSection,\n onEmailsChange,\n renderAssignPrefillModal,\n showAssignPrefill,\n isAvatarListEnabled,\n useNewStyledPermissionDropdown,\n customErrorMessage,\n forcePublicDataSharing,\n allowPlusInEmail,\n skipAssignToOrganizationModal,\n overridePublicDataSharing,\n assigneeLimitWithoutUpgrade,\n handleEmailErrorText,\n onPillListChange,\n excludeDataOnlyUsers\n}, ref) => {\n const csvButtonRef = useRef();\n const csvPopoverRef = useRef();\n const assignToOrganizationalModalRef = useRef();\n const permissionOptions = typeof _permissionOptions === 'function'\n ? _permissionOptions('invite-section')\n : _permissionOptions.filter(option => !option.hideFromOptions);\n\n // In most cases we want updates to permissions in Invite Settings to be reflected here, an exception to this is when\n // inviting members to a team, we want to use the defaultMemberRole\n let defaultRole = (useInviteSettingsPermission && assigneeSubmissionPermission) || defaultPermissionOption;\n\n if (!permissionOptions.find(option => option.value === defaultRole)) defaultRole = permissionOptions[0].value;\n\n const [emails, setEmails] = useState([]);\n const [message, setMessage] = useState('');\n const [role, setRole] = useState(defaultRole);\n const [isCSVUploading, setCSVUploading] = useState(false);\n const [hasText, setHasChange] = useState('');\n const [enterpriseUsers, setEnterpriseUsers] = useState([]);\n const [isInvitationSending, setInvitationSending] = useState(false);\n const [csvErrorMessage, setCSVErrorMessage] = useStateWithAutoReset('');\n const [csvImportedEmailCount, setCSSVImportedEmailCount] = useStateWithAutoReset(0);\n const [isInvitationSentIndicatorVisible, setInvitationSentIndicatorVisible] = useStateWithAutoReset(false);\n const [csvPmVisibility, setCsvPmVisibility] = Hooks.useClickOutsideState(false, [csvButtonRef, csvPopoverRef]);\n const [selectedResources, setSelectedResources] = useState([]);\n const [bottomRef, height] = useMeasure();\n const [isPrefillModalOpen, setPrefillModalOpen] = useState(false);\n const [prefillID, setPrefillID] = useState('');\n const {\n INVITE_PEOPLE, UPLOAD_CSV_FILE, DOWNLOAD_SAMPLE_CSV, ASSIGNED_TO, ADD_MULTIPLE_EMAIL_ADDRESSES,\n ADD_MORE, EMAIL_ADDRESSES_FOUND, EMAIL_ADDRESSES_ERRORED, EMAIL_ADDRESSES_ERRORED_ENTERPRISE, EMAIL_ADDRESSES_ERRORED_ENTERPRISE_SINGLE,\n EMAIL_ADDRESSES_ERRORED_SINGLE, ADD_YOUR_MESSAGE_HERE,\n CANCEL, EMAIL_SENT, SENDING, SEND_INVITATION, ASSIGNEE_LIMIT, PLEASE_UPGRADE_YOUR_ACCOUNT, ASSIGNEE_LIMIT_WITHOUT_ADD_MORE,\n CSV_UPLOAD_ERROR, CSV_FILE_ERROR, SEND_EMAIL_TO_ENTIRE_LIST, SEND_EMAIL_TO_ENTIRE_LIST_DESC, TO, SET_PREFILL, EDIT_PREFILL\n } = useTranslatedTexts(t);\n useImperativeHandle(ref, () => ({ emails, role }));\n\n const downloadAnchorTarget = isSafari() ? '_self' : '_blank';\n\n useEffect(() => {\n setRole(defaultRole);\n }, [permissionOptions.length, assigneeSubmissionPermission]);\n\n useEffect(() => {\n if (isEnterprise) {\n layer.get('users', null, {\n params: {\n ...(isEnterprise && selectEmailsFromList && {\n bypass: 1,\n sharePanel: 1,\n includePodo: 1,\n excludeDataOnlyUsers: excludeDataOnlyUsers ? '1' : '0'\n })\n }\n }).then(users => {\n setEnterpriseUsers(users);\n });\n }\n }, []);\n\n const handleValidateEmail = email => isValidAssignEmail(email, allowPlusInEmail);\n\n const isAssigneeExist = assignees.length > 0;\n const invitationInputPlaceholder = emails.length > 0 ? ADD_MORE : ADD_MULTIPLE_EMAIL_ADDRESSES;\n const numberOfErroredEmails = useMemo(() => emails.filter(({ isValid }) => !isValid).length, [emails]);\n const numberOfErroredAssignEmails = useMemo(() => emails.filter(({ text }) => !handleValidateEmail(text)).length, [emails]);\n const invitationButtonText = useSwitch(true, [\n [isInvitationSentIndicatorVisible, EMAIL_SENT],\n [isInvitationSending, SENDING],\n [true, SEND_INVITATION]\n ]);\n const isAssigneeLimitExceed = useMemo(() => (assignees.length + emails.length) > assigneeLimit, [assigneeLimit, emails, assignees]);\n\n const errorText = numberOfErroredEmails > 1 ? EMAIL_ADDRESSES_ERRORED_ENTERPRISE : EMAIL_ADDRESSES_ERRORED_ENTERPRISE_SINGLE;\n const EMAIL_ERROR_TEXT_ENTERPRISE = typeof handleEmailErrorText === 'function'\n ? handleEmailErrorText({ errorText, isMultiple: numberOfErroredEmails > 1 })\n : errorText;\n const EMAIL_ERROR_TEXT = numberOfErroredEmails > 1 ? EMAIL_ADDRESSES_ERRORED : EMAIL_ADDRESSES_ERRORED_SINGLE;\n const emailErrorText = (isEnterprise && numberOfErroredAssignEmails === 0) ? EMAIL_ERROR_TEXT_ENTERPRISE : EMAIL_ERROR_TEXT;\n\n const validateEnterprisePill = email => {\n const isPublicSharing = !overridePublicDataSharing && (forcePublicDataSharing || global.PUBLIC_DATA_SHARING_ENABLED);\n return handleValidateEmail(email) && (isPublicSharing || !!enterpriseUsers.find(enterpriseUser => enterpriseUser.email === email));\n };\n\n const isValidEmail = (isEnterprise && selectEmailsFromList) ? validateEnterprisePill : handleValidateEmail;\n\n const updateEmails = value => {\n const pillList = typeof onPillListChange === 'function' ? onPillListChange({ emails: value, enterpriseUsers, isValidEmail }) : value;\n setEmails(pillList);\n onEmailsChange(pillList);\n };\n\n useEffect(() => { // for passing defaultInvitations when initial state\n if (defaultInvitations.length > 0) {\n updateEmails(\n uniqBy(defaultInvitations\n .filter(email => isValidEmail(email))\n .map(email => ({\n id: email, text: email, isValid: true, showPillIcon: true\n })), 'text')\n );\n }\n }, []);\n\n const onCancelClick = () => {\n if (!useOnlyInvite) {\n setIsExpanded(false);\n updateEmails([]);\n setMessage('');\n setPrefillID('');\n } else {\n onCloseModal();\n }\n };\n const onMessageChange = ({ target: { value } }) => setMessage(value);\n const onFileUpload = ({ target: { files: [file] } }) => {\n setCsvPmVisibility(false);\n\n if (!file) {\n return;\n }\n\n setCSVUploading(true);\n PapaCSVParser.parse(file, {\n complete: ({ data }) => {\n const { name, type } = file;\n const fileExtension = name.split('.').pop();\n const isCSV = fileExtension === 'csv' || type.indexOf('csv') > -1;\n const emailsFromFile = data.reduce((prev, next) => [...prev, ...next], []);\n const cleanEmailsFromFile = emailsFromFile.filter(email => email.length > 0);\n const trimmedEmailsFromFile = cleanEmailsFromFile.map(email => email.trim());\n const assignedEmails = assignees.map(assignee => assignee.email);\n const newEmails = uniqBy([...emails, ...difference(trimmedEmailsFromFile, assignedEmails).map(email => ({\n id: email, text: email, isValid: isValidEmail(email), showPillIcon: true\n }))], 'text');\n if (!newEmails.length) {\n setCSVErrorMessage(CSV_UPLOAD_ERROR);\n } else if (!isCSV) {\n setCSVErrorMessage(CSV_FILE_ERROR);\n } else {\n setCSSVImportedEmailCount(newEmails.length);\n updateEmails(newEmails);\n }\n recordEvent('csvUpload', newEmails.length);\n setCSVUploading(false);\n setIsExpanded(true);\n }\n });\n };\n\n const isOverOrEqualXEmail = x => (\n emails.length >= x\n );\n\n const handleOverXEmailAssign = async (emailObj, status, shouldSendNotificationEmail) => {\n const result = await onInvitationSend(emailObj, false, shouldSendNotificationEmail, shouldSendNotificationEmail);\n if (result) updateEmails([]);\n setIsExpanded(false);\n setMessage('');\n return result;\n };\n\n const handleModalCancelAssign = () => {\n assignToOrganizationalModalRef.current.hide();\n };\n\n const onSendClick = async () => {\n if (isInvitationSending) {\n return;\n }\n\n setInvitationSending(true);\n const invitationMessage = isExpanded ? message : '';\n const rawEmailList = emails.map(e => e.text);\n\n const result = await onInvitationSend({\n emails: rawEmailList, message: invitationMessage, role, selectedResources, prefillID\n });\n setInvitationSending(false);\n\n if (!result) {\n return;\n }\n setInvitationSentIndicatorVisible(true);\n if (!useOnlyInvite) {\n setIsExpanded(false);\n updateEmails([]);\n setMessage('');\n setPrefillID('');\n } else {\n onCloseModal();\n }\n };\n\n const onOpenModalClick = () => {\n if (isEnterprise && !skipAssignToOrganizationModal && isOverOrEqualXEmail(emailSendModalOpenCount)) {\n assignToOrganizationalModalRef.current.show();\n return;\n }\n\n onSendClick();\n };\n\n const onPrefillModalClose = () => {\n setPrefillModalOpen(false);\n };\n\n const onEmailsFocus = () => {\n setIsExpanded(true);\n };\n\n const onEmailsTextChange = value => {\n setHasChange(!!value);\n };\n\n const randomId = useMemo(() => `invitePeople_${Math.random().toString(36).substring(2)}`, []);\n\n useEffect(() => {\n const wBox = document.querySelector('.wBox');\n if (!wBox) return;\n\n if (isAssigneeLimitExceed) {\n document.querySelector('.wBox').classList.add('wBox-isError');\n } else document.querySelector('.wBox').classList.remove('wBox-isError');\n }, [isAssigneeLimitExceed]);\n\n const renderPillboxInput = useCallback(() => (\n {\n updateEmails(email);\n recordEvent(`${renderedFrom}EmailEntered-${role}`, 'Invite');\n }}\n onType={onEmailsTextChange}\n PillContainerRenderer={PillContainerRenderer}\n PillRenderer={EditablePill}\n inputProps={{\n id: randomId,\n className: 'section-ln-content-input',\n placeholder: invitationInputPlaceholder,\n 'data-testid': 'invitationInput',\n onFocus: onEmailsFocus\n }}\n showPillIcon\n />\n ), [emails]);\n\n const handleOnOptionsChange = ({ value }) => {\n recordEvent('permissionChangedViaDropdown', value);\n setRole(value);\n };\n\n return (\n <>\n {isEnterprise\n && (\n email.text)}\n formID={formID}\n t={t}\n defaultMessage={message}\n modalBodyHeaderText={SEND_EMAIL_TO_ENTIRE_LIST}\n />\n )}\n \n
        \n
        \n \n {INVITE_PEOPLE}\n \n setCsvPmVisibility(!csvPmVisibility)}\n aria-label={UPLOAD_CSV_FILE}\n />\n
        \n {isAssigneeExist && isAvatarListEnabled && (\n
        \n
        {ASSIGNED_TO}
        \n {assignees.slice(0, 3).map(assignee => )}\n {assignees.length > 3 &&
        {`+${assignees.length - 3}`}
        }\n
        \n )}\n
        \n {csvPmVisibility && (\n \n \n \n
        \n
        \n \n
        \n
        \n {UPLOAD_CSV_FILE}\n \n
        \n
        \n setCsvPmVisibility(false)}\n tabIndex={0}\n >\n
        \n \n
        \n
        \n {DOWNLOAD_SAMPLE_CSV}\n
        \n \n
        \n \n )}\n
        \n
        \n \n \n {TO}\n {(isEnterprise && !global.SHARE_AUTOCOMPLETE_FEATURE_DISABLED) ? (\n 0 ? '-no-pill' : ''}`}\n onChange={updateEmails}\n onType={onEmailsTextChange}\n pillValidation={isValidEmail}\n value={emails}\n PillContainerRenderer={PillContainerRenderer}\n fuseOptions={{\n threshold: 0.1\n }}\n popoverProps={{\n className: 'user-list-popover'\n }}\n inputProps={{\n id: randomId,\n className: 'section-ln-content-input',\n placeholder: invitationInputPlaceholder,\n onFocus: onEmailsFocus\n }}\n suggestionProps={{\n preventClickDefault: true,\n useKeyboardEvents: true\n }}\n showPillIcon\n />\n )}\n inactiveComponent={renderPillboxInput()}\n />\n ) : (renderPillboxInput())}\n \n )}\n />\n \n {isExpanded && showAssignPrefill && (\n <>\n setPrefillModalOpen(true)}\n className={`invite-prefill-btn ${prefillID ? 'isEdit' : ''}`}\n >\n {prefillID ? : }\n {prefillID ? EDIT_PREFILL : SET_PREFILL}\n \n {isPrefillModalOpen && renderAssignPrefillModal({\n onClose: onPrefillModalClose,\n setPrefillID,\n editID: prefillID\n })}\n \n )}\n
        \n {csvImportedEmailCount !== 0 && (\n
        \n {EMAIL_ADDRESSES_FOUND({ NUMBER_OF_EMAILS: csvImportedEmailCount })}\n
        \n )}\n {numberOfErroredEmails > 0 && (\n \n {translationRenderer(emailErrorText)({\n renderer1: () => numberOfErroredEmails\n })}\n \n )}\n {csvErrorMessage && (\n \n {csvErrorMessage}\n \n )}\n
        \n {!hideInviteMessageSection && (\n
        \n
        \n \n \n \n
        \n )}\n />\n
        \n 0 || isAssigneeLimitExceed || isInvitationSending}\n loader={isInvitationSending}\n loaderText={invitationButtonText}\n startIcon={isInvitationSentIndicatorVisible && IconCheckCircleFilled}\n >\n
        \n {invitationButtonText}\n {isInvitationSending &&
        }\n
        \n \n )}\n inactiveComponent={(\n 0 || isAssigneeLimitExceed}\n loader={isInvitationSending}\n loaderText={invitationButtonText}\n startIcon={isInvitationSentIndicatorVisible && IconCheckCircleFilled}\n >\n {invitationButtonText}\n \n )}\n />\n \n
        \n
        \n
        \n )}\n {isAssigneeLimitExceed && (\n
        \n
        \n {customErrorMessage || (\n <>\n {!assigneeLimitWithoutUpgrade ? (\n ASSIGNEE_LIMIT({\n PLEASE_UPGRADE_YOUR_ACCOUNT:\n \n {PLEASE_UPGRADE_YOUR_ACCOUNT}\n ,\n ASSIGNEE_LIMIT: assigneeLimit\n })\n )\n : ASSIGNEE_LIMIT_WITHOUT_ADD_MORE({\n ASSIGNEE_LIMIT: assigneeLimit\n })}\n \n )}\n
        \n
        \n )}\n \n {/*
        */}\n \n );\n});\n\nInviteSection.propTypes = {\n formID: number,\n assignees: arrayOf(shape({ email: string.isRequired })),\n assigneeLimit: oneOfType([string, number]),\n assigneeSubmissionPermission: oneOf(PERMISSION_LIST),\n useInviteSettingsPermission: bool,\n t: func,\n onAvatarsClick: func,\n recordEvent: func,\n onInvitationSend: func,\n permissionOptions: oneOfType([\n func,\n arrayOf(\n shape({\n showWhenSelected: string,\n text: string,\n desc: oneOfType([string, node]),\n value: string\n })\n )\n ]),\n assignPermissionOnInvite: bool,\n isEnterprise: bool,\n selectEmailsFromList: bool,\n emailSendModalOpenCount: number,\n defaultPermissionOption: oneOf(PERMISSION_LIST),\n renderedFrom: string,\n resources: arrayOf(shape({})),\n setIsExpanded: func,\n isExpanded: bool,\n useOnlyInvite: bool,\n onCloseModal: func,\n defaultInvitations: arrayOf(string),\n hideInviteMessageSection: bool,\n onEmailsChange: func,\n renderAssignPrefillModal: func,\n showAssignPrefill: bool,\n isAvatarListEnabled: bool,\n useNewStyledPermissionDropdown: bool,\n customErrorMessage: string,\n forcePublicDataSharing: bool,\n allowPlusInEmail: bool,\n skipAssignToOrganizationModal: bool,\n overridePublicDataSharing: bool,\n assigneeLimitWithoutUpgrade: bool,\n renderAppPrefillSection: func,\n handleEmailErrorText: func,\n onPillListChange: func,\n excludeDataOnlyUsers: bool\n};\n\nInviteSection.defaultProps = {\n formID: 0,\n assignees: [],\n assigneeLimit: 100,\n assigneeSubmissionPermission: undefined,\n useInviteSettingsPermission: true,\n t: text => text,\n onAvatarsClick: f => f,\n recordEvent: f => f,\n onInvitationSend: f => f,\n permissionOptions: USER_PERMISSION_OPTIONS,\n assignPermissionOnInvite: false,\n isEnterprise: false,\n selectEmailsFromList: false,\n emailSendModalOpenCount: 50,\n defaultPermissionOption: undefined,\n renderedFrom: '',\n resources: [],\n setIsExpanded: f => f,\n isExpanded: false,\n useOnlyInvite: false,\n onCloseModal: f => f,\n defaultInvitations: [],\n hideInviteMessageSection: false,\n onEmailsChange: f => f,\n renderAssignPrefillModal: f => f,\n showAssignPrefill: false,\n isAvatarListEnabled: true,\n useNewStyledPermissionDropdown: false,\n customErrorMessage: '',\n forcePublicDataSharing: false,\n allowPlusInEmail: false,\n skipAssignToOrganizationModal: false,\n overridePublicDataSharing: false,\n assigneeLimitWithoutUpgrade: false,\n renderAppPrefillSection: f => f,\n handleEmailErrorText: null,\n onPillListChange: null,\n excludeDataOnlyUsers: false\n};\n\nexport default InviteSection;\n","import Styled from 'styled-components';\n\nconst COLORS = [\n { backgroundColor: '#EDF8FF', color: '#0066C3' },\n { backgroundColor: '#EDFED1', color: '#529300' },\n { backgroundColor: '#FFF5D2', color: '#F49200' },\n { backgroundColor: '#FFE4CC', color: '#E55300' },\n { backgroundColor: '#F3E2FF', color: '#6915A4' },\n { backgroundColor: '#DADEF3', color: '#343C6A' }\n];\n\nexport const ScUserList = Styled.div`\n display: flex;\n position: relative;\n flex-direction: column;\n padding: 8px 0;\n flex-flow: row wrap;\n width: 100%;\n\n .ReactVirtualized__Grid {\n overflow: hidden auto !important;\n }\n\n .user-wrapper {\n display: flex;\n flex-direction: row;\n gap: 12px;\n flex-grow: 1;\n width: 100%;\n padding: 10px 12px;\n align-items: center;\n height: 52px !important;\n\n &:hover {\n cursor: pointer;\n background-color: #F3F3FE;\n }\n\n .user-information {\n display: flex;\n flex-direction: column;\n font-weight: 400;\n font-size: 14px;\n line-height: 16px;\n\n .user-name {\n color: #0A1551;\n }\n\n .user-email {\n color: #6C73A8;\n }\n }\n } \n`;\n\nexport const ScAvatar = Styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n width: 32px;\n height: 32px;\n background: ${props => (COLORS[Number(props.index) % 6].backgroundColor)};\n color: ${props => (COLORS[Number(props.index) % 6].color)};\n border-radius: 16px;\n\n font-weight: 400;\n font-size: 14px;\n line-height: 24px;\n`;\n","import React from 'react';\n\nimport { Checkbox } from '@jotforminc/magnet';\n\nimport { ScAvatar } from '../sc/scUserList';\n\nconst ITEM_LIMIT = 100;\n\nconst ItemRenderer = ({\n list, onClick, preventClickDefault, unselectEmail, selectedAppUsers, setSelectedAppUsers, setWarningMessage\n}) => {\n // eslint-disable-next-line react/prop-types\n return ({ index, key, style }) => {\n const user = list[index];\n\n if (!user) {\n return null;\n }\n\n const isChecked = selectedAppUsers.find(userObject => userObject.id === user.id);\n\n let avatar = user.email[0].toUpperCase();\n if (user.name) {\n const nameArray = user.name.split(' ');\n if (nameArray.length > 1) {\n const firstName = user.name.split(' ').slice(0, -1).join(' ');\n const lastName = user.name.split(' ').slice(-1).join(' ');\n avatar = firstName.charAt(0).toUpperCase() + lastName.charAt(0).toUpperCase();\n } else {\n avatar = user.name.charAt(0).toUpperCase();\n }\n }\n\n const handleClick = e => {\n // to prevent looping behavior with input onBlur\n if (preventClickDefault) {\n e.preventDefault();\n }\n\n if (setWarningMessage && selectedAppUsers && selectedAppUsers.length === ITEM_LIMIT) {\n if (!isChecked) {\n setWarningMessage(`You can select up to ${ITEM_LIMIT} people.`);\n return;\n }\n if (isChecked) {\n setWarningMessage('');\n }\n }\n\n if (!isChecked) {\n setSelectedAppUsers([...selectedAppUsers, user]);\n return onClick(user);\n }\n\n unselectEmail(user);\n };\n\n return (\n \n \n \n {avatar}\n \n
        \n
        {user.name}
        \n
        {user.email}
        \n
        \n
        \n );\n };\n};\n\nexport default ItemRenderer;\n","import React from 'react';\nimport {\n arrayOf,\n element,\n oneOfType,\n bool,\n string,\n func\n} from 'prop-types';\n\nimport { IconExclamationTriangle, IconXmark } from '@jotforminc/svg-icons';\n\nconst WarningMessage = ({\n children,\n show,\n message,\n onCloseClick\n}) => {\n return show ? (\n
        \n \n
        {message || children}
        \n \n
        \n ) : null;\n};\n\nWarningMessage.propTypes = {\n children: oneOfType([element, arrayOf(element)]),\n message: string,\n show: bool,\n onCloseClick: func\n};\n\nWarningMessage.defaultProps = {\n children: null,\n message: null,\n show: false,\n onCloseClick: () => {}\n};\n\nexport default WarningMessage;\n","import React, { useState } from 'react';\nimport {\n func, shape, string, element, bool\n} from 'prop-types';\nimport { AutoSizer, InfiniteLoader, List } from 'react-virtualized';\nimport isString from 'lodash/isString';\n\nimport EmailInput from '@jotforminc/email-input';\nimport { useDebounce } from '@jotforminc/hooks';\nimport { Hooks } from '@jotforminc/uikit';\nimport { t } from '@jotforminc/translation';\n\nimport ItemRenderer from '../../components/UserListItemRenderer';\nimport { ScUserList } from '../../sc/scUserList';\nimport WarningMessage from '../../components/WarningMessage';\n\nlet loading = false;\n\nconst UserList = ({\n list, selectedEmails, onClick, preventClickDefault, unselectEmail, hasMore, fetchListOfUsers, selectedAppUsers, setSelectedAppUsers, offset\n}) => {\n const [warningMessage, setWarningMessage] = useState('');\n\n const validatedList = list.filter(user => user.email);\n\n const isRowLoaded = index => !loading && index < validatedList.length && !!validatedList[index];\n const handleLoadMoreRows = async ({ stopIndex }) => {\n if (hasMore && !loading && stopIndex + 200 > validatedList.length) {\n loading = true;\n return fetchListOfUsers(null, offset).then(() => {\n loading = false;\n });\n }\n return null;\n };\n\n const handleClick = e => {\n e.preventDefault();\n };\n\n return (\n \n {({ width }) => (\n \n 1999 && hasMore) ? handleLoadMoreRows : () => { }}\n rowCount={validatedList.length}\n >\n {({ onRowsRendered, registerChild }) => (\n <>\n setWarningMessage('')} />\n 0 ? 'color-blue-500' : 'color-navy-300'} line-height-md font-circular text-sm`}\n >\n {t('{count} selected').replace('{count}', selectedAppUsers.length)}\n \n 52}\n onRowsRendered={onRowsRendered}\n ref={registerChild}\n />\n \n )}\n \n \n )}\n \n );\n};\n\nUserList.propTypes = {\n fetchListOfUsers: func.isRequired,\n list: shape([]).isRequired,\n offset: string,\n selectedEmails: shape([]).isRequired,\n onClick: func.isRequired,\n preventClickDefault: bool.isRequired,\n unselectEmail: func.isRequired,\n hasMore: bool.isRequired,\n selectedAppUsers: shape([]).isRequired,\n setSelectedAppUsers: func.isRequired\n};\n\nUserList.defaultProps = {\n offset: ''\n};\n\nconst InviteByAppUserList = (({\n fetchListOfUsers,\n appUsers,\n randomId,\n emails,\n isValidEmail,\n updateEmails,\n onEmailsTextChange,\n invitationInputPlaceholder,\n PillContainerRenderer,\n selectedAppUsers,\n setSelectedAppUsers,\n onInputFocus,\n onInputBlur,\n handleScrollPosition,\n getValidatedEmailList\n}) => {\n const [isUsedXMark, setIsUsedXMark] = useState(false);\n\n Hooks.useEffectIgnoreFirst(() => {\n if (!isUsedXMark) {\n handleScrollPosition();\n } else {\n setIsUsedXMark(false);\n }\n }, [emails]);\n\n const handleEmailValidation = item => {\n if (item && item.email) {\n return isValidEmail(item.email) && !!appUsers.userList.find(user => user.email === item.email);\n }\n\n if (item && isString(item) && isValidEmail(item) && !!appUsers.userList.find(user => user.email === item)) {\n return true;\n }\n\n return false;\n };\n\n const unselectEmail = user => {\n setSelectedAppUsers(selectedAppUsers.filter(userObject => userObject.id !== user.id));\n updateEmails(emails.filter(email => email.id !== user.id));\n };\n\n const handleInputValueChange = useDebounce(inputValue => {\n onEmailsTextChange(inputValue);\n fetchListOfUsers(inputValue);\n });\n\n const onPillRemove = item => {\n setIsUsedXMark(true);\n setSelectedAppUsers(selectedAppUsers.filter(userObject => userObject.id !== item.id));\n };\n\n return (\n 0 ? '-no-pill' : ''}`}\n onChange={updateEmails}\n onType={handleInputValueChange}\n pillValidation={handleEmailValidation}\n value={emails}\n PillContainerRenderer={PillContainerRenderer}\n fuseOptions={{\n threshold: 0.1\n }}\n popoverProps={{\n className: 'custom-user-list-popover',\n portalContainerSelector: 'list-portal'\n }}\n inputProps={{\n id: randomId,\n className: 'section-ln-content-input',\n placeholder: invitationInputPlaceholder,\n onFocus: onInputFocus,\n onBlur: onInputBlur\n }}\n SuggestionRenderer={UserList}\n suggestionProps={{\n preventClickDefault: true,\n useKeyboardEvents: true,\n unselectEmail: unselectEmail,\n fetchListOfUsers: fetchListOfUsers,\n offset: appUsers.offset || '',\n hasMore: appUsers.hasMore || false,\n selectedAppUsers: selectedAppUsers,\n setSelectedAppUsers: setSelectedAppUsers\n }}\n showSuggestionsOnFocus={true}\n showPillIcon={false}\n onPillRemove={onPillRemove}\n preventEditablePill={true}\n isUniqueList={false}\n getValidatedList={getValidatedEmailList}\n />\n );\n});\n\nInviteByAppUserList.defaultProps = {\n onInputBlur: () => {},\n handleScrollPosition: f => f,\n getValidatedEmailList: f => f\n};\n\nInviteByAppUserList.propTypes = {\n appUsers: shape({}).isRequired,\n fetchListOfUsers: func.isRequired,\n randomId: string.isRequired,\n emails: shape([]).isRequired,\n isValidEmail: func.isRequired,\n updateEmails: func.isRequired,\n onEmailsTextChange: func.isRequired,\n invitationInputPlaceholder: string.isRequired,\n PillContainerRenderer: element.isRequired,\n selectedAppUsers: shape([]).isRequired,\n setSelectedAppUsers: func.isRequired,\n onInputFocus: func.isRequired,\n onInputBlur: func,\n handleScrollPosition: func,\n getValidatedEmailList: func\n};\n\nexport default InviteByAppUserList;\n","import React, { useCallback } from 'react';\nimport styled from 'styled-components';\nimport {\n func, shape, bool, string\n} from 'prop-types';\n\nimport Toggle from '@jotforminc/toggle';\n\nconst ScContent = styled.div`\n .line.sectionWithBorder {\n margin-top: 0px !important;\n padding-top: 0px !important;\n border-top: 0px !important;\n }\n\n #prefills .mainCard.moreSpace > .line {\n box-shadow: none !important;\n margin: 0 !important;\n padding: 20px 0 0 !important;\n }\n\n #prefills {\n .card-title {\n display: none;\n }\n }\n`;\n\nconst InviteByAppPrefillSection = ({\n appName,\n prefillComponentProvider,\n isAppPrefillChecked,\n handleCheckboxClick,\n renderPrefillSection,\n selectedAppObject,\n onPrefillStateChange\n}) => {\n const handleClick = () => {\n handleCheckboxClick(!isAppPrefillChecked);\n };\n\n const PrefillSection = useCallback(() => renderPrefillSection(prefillComponentProvider, {\n object: selectedAppObject,\n isNewMapperStyle: true,\n removeFieldLogo: true,\n onPrefillStateChange\n }), [selectedAppObject]);\n\n return (\n <>\n
        \n
        \n \n
        \n {isAppPrefillChecked ? (\n \n \n \n ) : null}\n \n );\n};\n\nInviteByAppPrefillSection.defaultProps = {\n onPrefillStateChange: () => {}\n};\n\nInviteByAppPrefillSection.propTypes = {\n appName: string.isRequired,\n prefillComponentProvider: string.isRequired,\n selectedAppObject: shape({}).isRequired,\n isAppPrefillChecked: bool.isRequired,\n handleCheckboxClick: func.isRequired,\n renderPrefillSection: func.isRequired,\n onPrefillStateChange: func\n};\n\nexport default InviteByAppPrefillSection;\n","import React, { forwardRef } from 'react';\nimport { bool, shape, string } from 'prop-types';\nimport { IconAngleDown } from '@jotforminc/svg-icons';\nimport classNames from 'classnames';\n\nconst DropdownButton = forwardRef(({ option: { text, value }, ...props }, ref) => (\n
        \n \n {text}\n \n \n
        \n));\n\nDropdownButton.defaultProps = {\n isOptionsVisible: false\n};\n\nDropdownButton.propTypes = {\n option: shape({\n text: string,\n value: string\n }).isRequired,\n isOptionsVisible: bool\n};\n\nexport default DropdownButton;\n","import layer from './layer';\n\nexport default class FetchAppUsersWithCache {\n cache = {};\n\n requestList = {};\n\n constructor(url) {\n this.url = url;\n }\n\n cacheResponse(key, value) {\n this.cache[key] = value;\n }\n\n getFromCache(key) {\n return this.cache[key];\n }\n\n request(params) {\n Object.values(this.requestList).forEach(f => {\n // eslint-disable-next-line no-param-reassign\n f.response = f.reject;\n });\n\n const requestId = Math.random();\n const key = params.offset || params.query ? `${params.object}-${params.offset || params.query}` : `${params.object}-initialState`;\n const responseFromCache = this.getFromCache(key);\n\n return (new Promise((resolve, reject) => {\n this.requestList[requestId] = { resolve, reject, response: resolve };\n if (responseFromCache) {\n this.requestList[requestId].response(responseFromCache);\n return;\n }\n\n let modifiedUrl = this.url;\n if (typeof modifiedUrl === 'string' && modifiedUrl.startsWith('/')) {\n modifiedUrl = this.url.slice(1);\n }\n\n layer.get(modifiedUrl, null, { params }).then(res => {\n this.cacheResponse(key, res);\n this.requestList[requestId].response(res);\n });\n })).finally(() => {\n delete this.requestList[requestId];\n });\n }\n}\n","import React, {\n useState, useRef, useCallback, useMemo, useEffect, forwardRef, useImperativeHandle\n} from 'react';\nimport {\n func, arrayOf, shape, string, number, oneOfType, node, bool, oneOf\n} from 'prop-types';\nimport { Pillbox } from '@jotforminc/uikit';\nimport {\n IconCheckCircleFilled\n} from '@jotforminc/svg-icons';\n\nimport classNames from 'classnames';\nimport { Button, Textarea } from '@jotforminc/magnet';\nimport EditablePill from '@jotforminc/editable-pill';\nimport { useSwitch, useStateWithAutoReset } from '@jotforminc/hooks';\nimport { translationRenderer } from '@jotforminc/translation';\nimport InviteByAppUserList from './InviteByAppUserList';\nimport InviteByAppPrefillSection from './InviteByAppPrefill';\nimport { AvatarHolder } from '../../components/AvatarHolder';\nimport Dropdown from '../../components/Dropdown';\nimport DropdownButton from '../../components/DropdownButton';\n\nimport { isValidAssignEmail } from '../../helpers/utils';\nimport FetchAppUsersWithCache from '../../helpers/FetchAppUsersWithCache';\nimport { useTranslatedTexts } from '../../helpers/hooks';\nimport DropdownWithDetails from '../../components/DropdownWithDetails';\nimport { PERMISSION_LIST, USER_PERMISSION_OPTIONS } from '../../helpers/constants';\n\nlet isPrefillSet = null;\nconst onPrefillStateChange = mapper => {\n isPrefillSet = mapper.length > 0;\n};\n\n// eslint-disable-next-line react/prop-types\nconst PillContainerRenderer = ({ children }) =>
        {children}
        ;\n\n/* eslint-disable max-statements */\nconst InviteByAppSection = forwardRef(({\n t,\n appName,\n appIcon: AppIcon,\n defaultObjectOption,\n objectOptionsList,\n fetchUrl,\n defaultParams,\n normalizeMethod,\n appInvitationUrl,\n prefillComponentProvider,\n assignees,\n assigneeLimit,\n assigneeSubmissionPermission,\n useInviteSettingsPermission,\n onAvatarsClick,\n recordEvent,\n onInvitationSend,\n permissionOptions: _permissionOptions,\n defaultPermissionOption,\n renderedFrom,\n isExpanded,\n setIsExpanded,\n hideInviteMessageSection,\n onEmailsChange,\n isAvatarListEnabled,\n useNewStyledPermissionDropdown,\n allowPlusInEmail,\n renderAppPrefillSection\n}, ref) => {\n const pillContainerRef = useRef(null);\n const emailListRef = useRef([]);\n const permissionOptions = typeof _permissionOptions === 'function'\n ? _permissionOptions('invite-section')\n : _permissionOptions.filter(option => !option.hideFromOptions);\n\n // In most cases we want updates to permissions in Invite Settings to be reflected here, an exception to this is when\n // inviting members to a team, we want to use the defaultMemberRole\n let defaultRole = (useInviteSettingsPermission && assigneeSubmissionPermission) || defaultPermissionOption;\n\n if (!permissionOptions.find(option => option.value === defaultRole)) defaultRole = permissionOptions[0].value;\n\n const [selectedAppObject, setSelectedAppObject] = useState(defaultObjectOption);\n const [appUsers, setAppUsers] = useState({});\n const [selectedAppUsers, setSelectedAppUsers] = useState([]);\n const [emails, setEmails] = useState([]);\n const [role, setRole] = useState(defaultRole);\n const [isAppPrefillChecked, setIsAppPrefillChecked] = useState(true);\n const [message, setMessage] = useState('');\n const [hasText, setHasChange] = useState('');\n const [isInvitationSending, setInvitationSending] = useState(false);\n const [isInputFocused, setIsInputFocused] = useState(false);\n const [isInvitationSentIndicatorVisible, setInvitationSentIndicatorVisible] = useStateWithAutoReset(false);\n\n const fetchAppUsersWithCache = useMemo(() => new FetchAppUsersWithCache(fetchUrl), [fetchUrl]);\n\n const getFetchUserList = (query, offset) => {\n const params = {\n ...defaultParams,\n object: selectedAppObject,\n ...(!query && offset ? { offset } : { ...(query ? { query } : {}) })\n };\n\n return fetchAppUsersWithCache.request(params).then(response => {\n setAppUsers({\n userList: [...((appUsers.userList && params.offset) ? appUsers.userList : []), ...(normalizeMethod(response.rows))],\n offset: response.offset,\n hasMore: response.hasMore\n });\n }).catch(() => {});\n };\n\n useEffect(() => {\n getFetchUserList();\n }, [selectedAppObject]);\n\n useImperativeHandle(ref, () => ({ emails, role }));\n\n useEffect(() => {\n setRole(defaultRole);\n }, [permissionOptions.length, assigneeSubmissionPermission]);\n\n const handleValidateEmail = email => isValidAssignEmail(email, allowPlusInEmail);\n\n const isAssigneeExist = assignees.length > 0;\n const {\n ASSIGNED_TO, ADD_MULTIPLE_EMAIL_OR_NAME, ADD_MORE, EMAIL_ADDRESSES_ERRORED,\n EMAIL_ADDRESSES_ERRORED_SINGLE, ADD_YOUR_MESSAGE_HERE, CANCEL, EMAIL_SENT, SENDING, SEND_INVITATION\n } = useTranslatedTexts(t);\n const invitationInputPlaceholder = emails.length > 0 ? ADD_MORE : ADD_MULTIPLE_EMAIL_OR_NAME;\n const numberOfErroredEmails = useMemo(() => emails.filter(({ isValid }) => !isValid).length, [emails]);\n const invitationButtonText = useSwitch(true, [\n [isInvitationSentIndicatorVisible, EMAIL_SENT],\n [isInvitationSending, SENDING],\n [true, SEND_INVITATION]\n ]);\n const isAssigneeLimitExceed = useMemo(() => (assignees.length + emails.length) > assigneeLimit, [assigneeLimit, emails, assignees]);\n const EMAIL_ERROR_TEXT = numberOfErroredEmails > 1 ? EMAIL_ADDRESSES_ERRORED : EMAIL_ADDRESSES_ERRORED_SINGLE;\n\n const getValidatedEmailList = emailList => {\n const item = emailList[emailList.length - 1];\n if (item && item.id !== 'default' && item.isValid && !selectedAppUsers.find(selectedUser => selectedUser.id === item.id)) {\n const user = (appUsers.userList?.filter(appUser => (appUser.email === item.text && !selectedAppUsers.find(selectedUser => selectedUser.id === appUser.id))))[0];\n if (user && user.id !== item.id) {\n setSelectedAppUsers([...selectedAppUsers, user]);\n return [...(emailList.filter(emailItem => emailItem.id !== item.id)), { ...item, id: user.id }];\n }\n\n if (!user) {\n return emails;\n }\n }\n\n return emailList;\n };\n\n const updateEmails = value => {\n setEmails(value);\n onEmailsChange(value);\n };\n\n const resetState = () => {\n setMessage('');\n setSelectedAppUsers([]);\n emailListRef.current = [];\n updateEmails([]);\n };\n\n const onCancelClick = () => {\n setIsExpanded(false);\n recordEvent(`${appName}Assign-cancelled.`, 'cancelButton');\n resetState();\n };\n\n const onMessageChange = ({ target: { value } }) => setMessage(value);\n\n const onSendClick = async () => {\n if (isInvitationSending) {\n return;\n }\n setInvitationSending(true);\n const invitationMessage = isExpanded ? message : '';\n\n const emailList = isInputFocused ? emails : emailListRef.current;\n\n const rawEmailList = emailList.map(e => e.text);\n\n const assigneeList = emailList.map(value => {\n const { name, email, id } = selectedAppUsers.find(userObject => userObject.id === value.id);\n return ({\n id: id,\n metadata: {\n name: name,\n email: email\n },\n settings: {\n fieldBehaviour: 'edit'\n }\n });\n });\n\n const result = await onInvitationSend({\n emails: rawEmailList,\n message: invitationMessage,\n role,\n appInvitationParams: {\n isAppAssignInvitation: true,\n assignees: assigneeList,\n isAppAssignPrefillChecked: (isPrefillSet && isAppPrefillChecked) ? '1' : '0',\n appObject: selectedAppObject || '',\n appInvitationUrl: appInvitationUrl\n }\n });\n\n setInvitationSending(false);\n\n if (!result) {\n return;\n }\n setInvitationSentIndicatorVisible(true);\n setIsExpanded(false);\n recordEvent(\n `${appName}Assign-${assigneeList.length}${selectedAppObject}s-${isPrefillSet && isAppPrefillChecked ? 'withPrefill' : 'withoutPrefill'}`,\n 'sendInvitation'\n );\n resetState();\n };\n\n const expandSection = () => {\n setIsInputFocused(true);\n setIsExpanded(true);\n };\n\n const onEmailsTextChange = value => {\n setHasChange(!!value);\n };\n\n const randomId = `invitePeople_${Math.random().toString(36).substring(2)}`;\n\n useEffect(() => {\n const wBox = document.querySelector('.wBox');\n if (!wBox) return;\n\n if (isAssigneeLimitExceed) {\n document.querySelector('.wBox').classList.add('wBox-isError');\n } else {\n document.querySelector('.wBox').classList.remove('wBox-isError');\n }\n }, [isAssigneeLimitExceed]);\n\n const renderPillboxInput = () => (\n {\n updateEmails(email);\n recordEvent(`${renderedFrom}EmailEntered-${role}`, 'Invite');\n }}\n onType={onEmailsTextChange}\n PillContainerRenderer={PillContainerRenderer}\n PillRenderer={EditablePill}\n inputProps={{\n id: randomId,\n className: 'section-ln-content-input',\n placeholder: invitationInputPlaceholder,\n 'data-testid': 'invitationInput',\n onFocus: expandSection\n }}\n showPillIcon\n />\n );\n\n const PillContainerRendererWithIcon = useCallback(({ children }) => (\n
        \n
        \n
        \n {children}\n
        \n
        \n ), []);\n\n const handleOnOptionsChange = ({ value }) => {\n recordEvent('permissionChangedViaDropdown', value);\n setRole(value);\n };\n\n const handlePrefillCheck = value => {\n setIsAppPrefillChecked(value);\n recordEvent(`${appName}Assign-${value ? 'prefillActivated' : 'prefillDeactivated'}`, 'prefillCheckbox');\n };\n\n const handleDropdownSelect = ({ value }) => {\n const isChanged = selectedAppObject !== value;\n if (isChanged) {\n setSelectedAppObject(value);\n resetState();\n }\n };\n\n const dropdownOptions = objectOptionsList.map(option => ({ value: option, text: `${option}s` }));\n\n const handleScrollPosition = () => {\n const pillList = document.querySelectorAll('.pill');\n const pill = pillList[pillList.length - 1];\n if (pill && pillContainerRef.current && pill.positionedOffset) {\n const { top } = pill.positionedOffset();\n pillContainerRef.current.scroll(0, top);\n }\n };\n\n const handleInputFocus = () => {\n if (!isExpanded) {\n expandSection();\n }\n updateEmails(emailListRef.current);\n setIsInputFocused(true);\n };\n\n const handleInputBlur = () => {\n emailListRef.current = emails;\n if (emails.length > 1) {\n const emailLength = emails.length - 1;\n updateEmails([emails[emailLength], {\n id: 'default', text: `+${emailLength}`, isValid: true, showPillIcon: false\n }]);\n }\n setIsInputFocused(false);\n };\n\n return (\n \n
        \n
        \n \n {`ASSIGN TO ${appName.toUpperCase()} CONTACTS`}\n \n
        \n {isAssigneeExist && isAvatarListEnabled && (\n
        \n
        {ASSIGNED_TO}
        \n {assignees.slice(0, 3).map(assignee => )}\n {assignees.length > 3 &&
        {`+${assignees.length - 3}`}
        }\n
        \n )}\n
        \n
        \n
        \n {dropdownOptions.length > 0 && (\n \n )}\n \n \n \n \n
        \n {numberOfErroredEmails > 0 && (\n
        \n {translationRenderer(EMAIL_ERROR_TEXT)({\n renderer1: () => numberOfErroredEmails\n })}\n
        \n )}\n
        \n {(!hideInviteMessageSection && isExpanded) && (\n
        \n
        \n \n \n
        \n 0 || isAssigneeLimitExceed}\n loader={isInvitationSending}\n loaderText={invitationButtonText}\n startIcon={isInvitationSentIndicatorVisible && IconCheckCircleFilled}\n >\n {invitationButtonText}\n \n \n
        \n
        \n
        \n )}\n
        \n );\n});\n\nInviteByAppSection.propTypes = {\n appName: string,\n appIcon: node,\n defaultObjectOption: string,\n objectOptionsList: arrayOf(string),\n fetchUrl: string,\n defaultParams: shape({}),\n normalizeMethod: func,\n appInvitationUrl: func,\n prefillComponentProvider: string,\n assignees: arrayOf(shape({ email: string.isRequired })),\n assigneeLimit: oneOfType([string, number]),\n assigneeSubmissionPermission: oneOf(PERMISSION_LIST),\n useInviteSettingsPermission: bool,\n t: func,\n onAvatarsClick: func,\n recordEvent: func,\n onInvitationSend: func,\n permissionOptions: oneOfType([\n func,\n arrayOf(\n shape({\n showWhenSelected: string,\n text: string,\n desc: oneOfType([string, node]),\n value: string\n })\n )\n ]),\n defaultPermissionOption: oneOf(PERMISSION_LIST),\n renderedFrom: string,\n setIsExpanded: func,\n isExpanded: bool,\n hideInviteMessageSection: bool,\n onEmailsChange: func,\n renderAssignPrefillModal: func,\n isAvatarListEnabled: bool,\n useNewStyledPermissionDropdown: bool,\n allowPlusInEmail: bool,\n renderAppPrefillSection: func\n};\n\nInviteByAppSection.defaultProps = {\n appName: '',\n defaultObjectOption: null,\n objectOptionsList: [],\n fetchUrl: '',\n defaultParams: {},\n appIcon: null,\n normalizeMethod: f => f,\n appInvitationUrl: f => f,\n prefillComponentProvider: '',\n assignees: [],\n assigneeLimit: 100,\n assigneeSubmissionPermission: undefined,\n useInviteSettingsPermission: true,\n t: text => text,\n onAvatarsClick: f => f,\n recordEvent: f => f,\n onInvitationSend: f => f,\n permissionOptions: USER_PERMISSION_OPTIONS,\n defaultPermissionOption: undefined,\n renderedFrom: '',\n setIsExpanded: f => f,\n isExpanded: false,\n hideInviteMessageSection: false,\n onEmailsChange: f => f,\n renderAssignPrefillModal: f => f,\n isAvatarListEnabled: true,\n useNewStyledPermissionDropdown: false,\n allowPlusInEmail: false,\n renderAppPrefillSection: f => f\n};\n\nexport default InviteByAppSection;\n","import React, { forwardRef } from 'react';\nimport {\n string, func, arrayOf, shape, bool\n} from 'prop-types';\n\nimport { Button } from '@jotforminc/magnet';\nimport { StyledModal as Modal } from '@jotforminc/styled-modal';\n\nimport { IconExclamationTriangleFilled } from '@jotforminc/svg-icons';\nimport { ScRF, ScRB } from '../../sc/scRevokeAccess';\n\nimport { defaultRecordEvent } from '../../helpers/utils';\nimport { useTranslatedTexts } from '../../helpers/hooks';\n\nconst multiRevokeUserList = assignees => {\n const asses = [];\n let message = '';\n if (assignees.length > 5) {\n assignees.slice(0, 2).map(ass => asses.push(ass.name || ass.email));\n message = `${asses.join(', ')} and ${assignees.length - 2} more`;\n } else {\n assignees.map(ass => asses.push(ass.name || ass.email));\n message = asses.join(', ');\n }\n return message;\n};\n\nconst RevokeAccessModal = forwardRef((\n {\n t,\n assignees,\n onRevokeUser,\n onRevokeAllUsers,\n onRevokeMultipleUser,\n recordEvent,\n from,\n titleFormatter,\n isAllSelected\n }, ref\n) => {\n // Event handlers\n const onBackClick = () => ref.current.hide();\n const onRemoveClick = async () => {\n if (assignees.length === 1) {\n // one email selected\n const result = await onRevokeUser({ email: assignees[0].email });\n if (!result) {\n return;\n }\n } else if (isAllSelected && typeof onRevokeAllUsers === 'function') {\n // all email selected\n const result = await onRevokeAllUsers(assignees.map(a => a.email));\n if (!result) {\n return;\n }\n } else {\n // multiple emails selected but not all\n const result = await onRevokeMultipleUser(assignees.map(a => a.email));\n if (!result) {\n return;\n }\n }\n recordEvent('assigneeRevokeClicked', from);\n assignees.forEach(p => recordEvent('assigneeRevoked', p.email));\n if (ref.current && ref.current.hide) {\n ref.current.hide();\n }\n };\n\n const {\n REMOVE_USER_CONFIRM, REMOVE_USER_DESCRIPTION, YES_DELETE, NO_KEEP,\n REVOKE_SELECTED_USERS, REVOKE_ALL, REVOKE_USER, REMOVE_USER_DESCRIPTION_MULTIPLE\n } = useTranslatedTexts(t);\n\n return (\n \n \n \n \n )}\n reffedDivProps={{ className: 'forShareModal-assignee-revoke' }}\n >\n \n
        \n \n
        {titleFormatter(assignees, isAllSelected, { REVOKE_SELECTED_USERS, REVOKE_ALL, REVOKE_USER })}
        \n {assignees.length > 1 &&
        {multiRevokeUserList(assignees)}
        }\n

        {(assignees.length > 1 && REMOVE_USER_DESCRIPTION_MULTIPLE) ? REMOVE_USER_DESCRIPTION_MULTIPLE : REMOVE_USER_DESCRIPTION}

        \n\n
        {assignees.length > 1 ? REMOVE_USER_CONFIRM.replace('?', 's?') : REMOVE_USER_CONFIRM}
        \n
        \n
        \n \n );\n});\n\nconst defaultTitleFormatter = (assignees, isAllSelected = false, { REVOKE_SELECTED_USERS, REVOKE_ALL, REVOKE_USER }) => {\n if (assignees.length === 1) {\n const { email, name } = assignees[0];\n return REVOKE_USER.replace('{name}', (name || email));\n }\n if (isAllSelected) {\n return REVOKE_ALL;\n }\n return REVOKE_SELECTED_USERS.replace('{length}', assignees.length);\n};\n\nexport default RevokeAccessModal;\n\nRevokeAccessModal.propTypes = {\n isAllSelected: bool,\n assignees: arrayOf(shape({\n email: string,\n name: string\n })),\n onRevokeUser: func,\n onRevokeAllUsers: func,\n onRevokeMultipleUser: func,\n titleFormatter: func,\n recordEvent: func,\n t: func,\n from: string\n};\n\nRevokeAccessModal.defaultProps = {\n isAllSelected: false,\n assignees: [],\n titleFormatter: defaultTitleFormatter,\n onRevokeAllUsers: undefined,\n onRevokeUser: f => f,\n onRevokeMultipleUser: f => f,\n recordEvent: defaultRecordEvent,\n t: text => text,\n from: ''\n};\n","import React, { forwardRef } from 'react';\nimport Styled from 'styled-components';\nimport { Dropdown as UIKitDropdown } from '@jotforminc/uikit';\nimport { IconAngleDown } from '@jotforminc/svg-icons';\nimport { node, shape, string } from 'prop-types';\n\nconst ScButton = Styled.button`\n background: transparent;\n display: flex;\n align-items: center;\n border-radius: 2px;\n border: 1px solid #d8dae9;\n box-shadow: none;\n font-size: 16px;\n line-height: 1.25;\n padding: 0;\n cursor: pointer;\n width: 100%;\n\n .dd-t { flex: 1 1 auto; padding: .5rem .5rem .5rem .75rem; color: #2c3345; font-size: .875em; line-height: 1.25rem;\n text-align: left; }\n .dd-s { padding: .5em; }\n .dd-s svg { display: block; width: 24px; height: 24px; }\n\n &:focus { outline: none; border-color: #bbb; }\n`;\n\nconst ScOptionList = Styled.ul`\n list-style: none;\n margin: 0;\n padding: .25em 0;\n background-color: #fff;\n border: 1px solid #d8dae9;\n font-size: .875em;\n border-radius: 0 0 2px 2px;\n box-shadow: 0 0 9px 0 rgba(0, 0, 0, 0.16);\n max-height: 215px;\n overflow-y: auto;\n\n li.i div {\n padding: .5rem .75rem;\n user-select: none;\n cursor: pointer;\n }\n li.i:hover div,\n li.i.isHovering div {\n background-color: rgba(0,0,0,.1);\n }\n\n li.i div[data-selected=true] { background-color: #e5e6e7; }\n\n /* option group listing */\n .og-l { list-style: none; padding: 0; margin: 0; text-indent: 1em; }\n .og-t { font-weight: 700; padding: .5rem .75rem; }\n .og + .og .og-t { padding: .75rem .75rem .5rem; border-top: 1px solid #d8dae9; margin-top: .5em; }\n`;\n\nconst DdButton = forwardRef(({ option, ...props }, ref) => {\n if (!option) {\n return
        ;\n }\n const { text, value } = option;\n return (\n \n {text}\n \n \n );\n});\n\nDdButton.propTypes = {\n option: shape().isRequired\n};\n\nconst DdList = ({ children, id }) => (\n \n {children}\n \n);\n\nDdList.propTypes = {\n children: node.isRequired,\n id: string.isRequired\n};\n\nconst Dropdown = props => {\n return (\n
        {text}
        }\n OptionContainerRenderer={pr =>
      • }\n GroupRenderer={({ text, children, ...p }) => (\n
      • \n
        {text}
        \n
          {children}
        \n
      • \n )}\n {...props}\n />\n );\n};\n\nexport default Dropdown;\n","import Styled from 'styled-components';\n\nconst customFont = '-apple-system, BlinkMacSystemFont, \"Segoe UI\", roboto, oxygen-sans, ubuntu, cantarell, \"Helvetica Neue\", sans-serif';\n// '\"CircularStd\", \"Work Sans SemiBold\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", roboto, oxygen-sans, ubuntu, cantarell, \"Helvetica Neue\", sans-serif';\n\nconst commonStyles = `\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizeLegibility;\n font-family: ${customFont};\n font-size: 1em;\n`;\n\nexport const ScSchWrapper = Styled.div`\n ${commonStyles}\n\n &, * { box-sizing: border-box; }\n\n .isub { padding: 1.5em 0; }\n .isub:first-child { padding-top: 0; }\n .isub:last-child { padding-bottom: 0; }\n .isub + .isub { border-top: 1px solid #eaebf2; }\n\n .iline { display: flex; justify-content: space-between; }\n .iline + .iline { margin-top: 1.5em; }\n\n .icell { flex: 0 0 calc(50% - .4375em); min-width: 0; }\n .icell.isF { flex: 0 0 100%; }\n .icell + .icell { margin: 0 0 0 .875em; }\n\n .ilabel { display: block; color: #2c3345; font-weight: 700; margin: 0 0 .375em 0; }\n .iddw { position: relative; }\n\n .sei + & { margin-top: .75em; padding-top: 1.5em; border-top: 1px solid #eaebf2; }\n\n @media screen and (max-width: 480px) {\n .iline { flex-direction: column; }\n .icell, .icell.isF { flex: 1 1 auto; }\n .icell + .icell { margin: 1.5em 0 0; }\n }\n`;\n","/* eslint-disable react/prop-types */\nimport React from 'react';\nimport Styled from 'styled-components';\nimport { SelectionGroup as UIKitOptionGroup } from '@jotforminc/uikit';\n\nconst ScToggleItem = Styled.div`\n font-size: 16px;\n padding: 0.5em 0;\n line-height: 1.25;\n text-align: center;\n color: #2c3345;\n transition: all .15s ease;\n letter-spacing: -.2px;\n cursor: pointer;\n border: 1px solid #d8dae9;\n\n &[data-selected=true] {\n background: #54b45c;\n color: #fff;\n font-weight: 700;\n cursor: default;\n border-color: #54b45c;\n }\n\n &:focus {\n box-shadow: 0 0 0px 3px rgba(84, 180, 92, 0.3);\n outline: 0;\n }\n`;\n\nconst ScToggle = Styled.ul`\n list-style: none;\n display: flex;\n margin: 0;\n padding: 0;\n\n li { flex: 1 1 auto; }\n li + li { ${ScToggleItem} { border-left: 0; } }\n li:first-child ${ScToggleItem} { border-radius: 2px 0 0 2px; }\n li:last-child ${ScToggleItem} { border-radius: 0 2px 2px 0; }\n`;\n\nconst ToggleItem = ({\n option: {\n text, value, key\n }, isSelected, disabled\n}) => (\n \n {text}\n \n);\n\nconst Toggle = props => {\n const { disabled, name } = props;\n\n return (\n {children}}\n OptionRenderer={optionProps => (\n \n )}\n {...props}\n />\n );\n};\n\nexport default Toggle;\n","import React, { Component, createRef } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment-timezone';\nimport { OptionGroup } from '@jotforminc/option-group';\nimport DatePicker from '@jotforminc/date-picker';\nimport { getTimeZone } from '@jotforminc/utils';\nimport { ScheduleDropdownOptions } from '@jotforminc/constants';\nimport { t } from '@jotforminc/translation';\n\nimport Dd from './components/Dropdown';\nimport { ScSchWrapper } from './scIndex';\nimport Toggle from './components/Toggle';\n\nexport default class SchedulePanel extends Component {\n constructor(props) {\n super(props);\n\n this.state = this.prepareState();\n\n this.endDatePickerRef = createRef();\n this.renderIntervalRadio = this.renderIntervalRadio.bind(this);\n }\n\n handleDatePickerChange(date, key) {\n if (date) {\n const stringDate = moment(date).format('LL');\n this.setState({ [key]: stringDate });\n }\n }\n\n get scheduleDuration() {\n const { interval } = this.state;\n const scheduleDuration = new Date();\n const f = { daily: 1, weekly: 2, monthly: 12 };\n const disabledYears = new Date().getMonth() + f[interval];\n scheduleDuration.setMonth(disabledYears);\n return scheduleDuration;\n }\n\n get scheduleData() {\n const {\n interval, timeZone, sendTime, startDate, endDate, sendDate, selectedDay\n } = this.state;\n return {\n interval,\n timeZone,\n sendTime,\n startDate,\n endDate: endDate || 'noEndDate',\n sendDate: sendDate[interval],\n selectedDay\n };\n }\n\n prepareState = () => {\n const { timeZone, currentEmailProps } = this.props;\n const { endDate } = currentEmailProps;\n\n const preferedTz = currentEmailProps.timeZone || timeZone;\n const activeEnd = endDate && endDate !== 'noEndDate' ? endDate : '';\n const validTZ = getTimeZone(preferedTz);\n return {\n interval: currentEmailProps.interval || 'daily',\n timeZone: validTZ,\n sendTime: currentEmailProps.sendTime || '09:00',\n sendDate: {\n daily: (currentEmailProps.interval === 'daily' && currentEmailProps.sendDate) || 'weekIn',\n weekly: (currentEmailProps.interval === 'weekly' && currentEmailProps.sendDate) || 'everyMonday',\n monthly: (currentEmailProps.interval === 'monthly' && currentEmailProps.sendDate) || 'firstWorkDay'\n },\n startDate: currentEmailProps.startDate || new Date().toDateString(),\n endDate,\n activeEnd,\n selectedDay: currentEmailProps.selectedDay || '15'\n };\n };\n\n reInitializeState = () => {\n const newState = this.prepareState();\n this.setState(newState);\n };\n\n // translation of 'Send Time' translation\n translatedTimeValue() {\n const translatedValue = [];\n ScheduleDropdownOptions.time.sendTime.forEach(el => {\n translatedValue.push({\n ...el,\n text: el.text.split(' ').map(a => t(a)).join(' ')\n });\n });\n return translatedValue;\n }\n\n // translation of 'Send date' dropdown list\n translatedDateValue() {\n const { interval } = this.state;\n const translatedValue = ScheduleDropdownOptions.sendDate()[interval].map(el => {\n return { ...el, text: t(el.text) };\n });\n return translatedValue;\n }\n\n // translation of Repeat interval tabs\n translatedRepeatsTabValue() {\n const translatedValue = ScheduleDropdownOptions.interval().map(el => {\n return { ...el, text: t(el.text) };\n });\n return translatedValue;\n }\n\n renderIntervalRadio() {\n const { changeInterval } = this.props;\n const { interval } = this.state;\n return (\n
        \n
        \n
        {t('Repeats')}
        \n {\n this.setState({ interval: option, activeEnd: false, endDate: 'noEndDate' });\n changeInterval(option);\n }}\n />\n
        \n
        \n );\n }\n\n renderSendTime() {\n const { sendTime, timeZone } = this.state;\n const {\n timeZoneProps: {\n extendOnGroupSearch = false,\n filterable = false,\n NoResultsRenderer = null,\n textInputPlaceholder = ''\n }\n } = this.props;\n\n return (\n
        \n
        \n
        {t('Send Time')}
        \n
        \n this.setState({ sendTime: option.value })}\n />\n
        \n
        \n
        \n
        {t('Time Zone')}
        \n
        \n this.setState({ timeZone: option.value })}\n extendOnGroupSearch={extendOnGroupSearch}\n filterable={filterable}\n textInputPlaceholder={textInputPlaceholder}\n NoResultsRenderer={NoResultsRenderer}\n />\n
        \n
        \n
        \n );\n }\n\n renderSendDate() {\n const { sendDate, interval, selectedDay } = this.state;\n return (\n
        \n
        \n
        {t('Send Date')}
        \n
        \n this.setState(\n { sendDate: { ...sendDate, ...{ [interval]: option.value } } }\n )}\n />\n
        \n
        \n {sendDate[interval] === 'selectedDay' && (\n
        \n
        {t('Select a Day')}
        \n
        \n this.setState({ selectedDay: option.value })}\n />\n
        \n
        \n )}\n
        \n );\n }\n\n renderStartDate() {\n const { startDate, endDate, activeEnd } = this.state;\n const startDateMoment = moment(startDate, ['LL', 'ddd MMM DD YYYY'], 'en'); // ['February 28, 2020' , 'Tue Feb 25 2020']\n const definedEndDate = endDate || moment(this.scheduleDuration).format('LL');\n const endDateMoment = activeEnd ? moment(definedEndDate, ['LL', 'ddd MMM DD YYYY']) : null;\n\n const picker = (\n date.isAfter(startDateMoment)}\n onChange={date => {\n this.handleDatePickerChange(date, 'endDate');\n this.setState({ activeEnd: true });\n }}\n preventOpenOnFocus={true}\n startOpen={!!(endDate === undefined && activeEnd)}\n />\n );\n\n return (\n
        \n
        \n
        {t('Start Date')}
        \n {\n this.handleDatePickerChange(date, 'startDate');\n }}\n />\n
        \n
        \n
        {t('End Date')}
        \n {\n if (newVal === 'activeEnd') {\n if (endDate === '' || endDate === 'noEndDate') {\n if (this.endDatePickerRef.current && global.document.activeElement === this.endDatePickerRef.current.input) {\n return;\n }\n\n this.setState({ endDate: moment(this.scheduleDuration).format('LL') });\n }\n this.setState({ activeEnd: true });\n } else { // noEndDate\n this.setState({ activeEnd: false, endDate: '' });\n }\n }}\n />\n
        \n
        \n );\n }\n\n renderMessage() {\n const { message } = this.props;\n const { type, text } = message;\n if (!type || !text) {\n return;\n }\n let style = {};\n\n if (type === 'error') {\n style = {\n color: '#f90321',\n fontSize: '14px'\n };\n }\n\n return
        {text}
        ;\n }\n\n render() {\n const { hideStartDate } = this.props;\n return (\n \n
        \n { this.renderIntervalRadio() }\n { this.renderSendDate() }\n
        \n
        \n { this.renderSendTime() }\n
        \n {\n !hideStartDate && (\n
        \n { this.renderStartDate() }\n
        \n )\n }\n { this.renderMessage() }\n
        \n );\n }\n}\n\nSchedulePanel.propTypes = {\n timeZone: PropTypes.string,\n currentEmailProps: PropTypes.object,\n changeInterval: PropTypes.func,\n message: PropTypes.object,\n hideStartDate: PropTypes.bool,\n timeZoneProps: PropTypes.object\n};\n\nSchedulePanel.defaultProps = {\n timeZone: '',\n currentEmailProps: {},\n changeInterval: f => f,\n message: {\n type: '',\n text: ''\n },\n hideStartDate: false,\n timeZoneProps: {}\n};\n","import React, { forwardRef } from 'react';\nimport { string, func } from 'prop-types';\n\nimport { Button } from '@jotforminc/magnet';\nimport { StyledModal as Modal } from '@jotforminc/styled-modal';\n\nimport { IconExclamationTriangleFilled } from '@jotforminc/svg-icons';\nimport { ScRF, ScRB } from '../../sc/scRevokeAccess';\n\nimport { defaultRecordEvent } from '../../helpers/utils';\n\nconst RemoveScheduledReminderModal = forwardRef((\n {\n name,\n email,\n onRemove,\n recordEvent\n }, ref\n) => {\n // Event handlers\n const onBackClick = () => ref.current.hide();\n const onRemoveClick = async () => {\n const result = await onRemove({ email });\n if (!result) {\n return;\n }\n recordEvent('scheduledReminderEmailRemoved', email);\n\n if (ref.current && ref.current.hide) {\n ref.current.hide();\n }\n };\n\n return (\n \n \n \n \n )}\n >\n \n
        \n \n
        {`Delete scheduled reminder emails to ${name || email}`}
        \n

        Are you sure you want to delete the email forever?

        \n
        \n
        \n \n );\n});\n\nexport default RemoveScheduledReminderModal;\n\nRemoveScheduledReminderModal.propTypes = {\n name: string,\n email: string,\n onRemove: func,\n recordEvent: func\n};\n\nRemoveScheduledReminderModal.defaultProps = {\n name: '',\n email: '',\n onRemove: f => f,\n recordEvent: defaultRecordEvent\n};\n","import Styled from 'styled-components';\n\nexport const ScWrapper = Styled.div`\n padding: 1.5em 2.5em 2.5em;\n color: #2c3345;\n overflow: auto;\n\n .sei {\n font-size: 14px;\n line-height: 1.4;\n display: flex;\n align-items: center;\n }\n\n .sei-info {\n flex: 1 1 auto;\n min-width: 0;\n padding: 0 16px;\n }\n\n .sei-buttons {\n display: inline-flex;\n }\n\n @media screen and (max-width: 480px) {\n font-size: .875em;\n padding: 1rem 1.5rem 1.5rem;\n\n .sei { align-items: flex-start; }\n .sei-info { max-width: 90%; }\n }\n`;\n","import React, {\n forwardRef, useEffect, useRef, useState\n} from 'react';\nimport {\n func, number, shape, string\n} from 'prop-types';\n\nimport { Button } from '@jotforminc/magnet';\nimport { StyledModal as Modal } from '@jotforminc/styled-modal';\nimport SchedulePanel from '@jotforminc/schedule-panel';\n\nimport { IconPencilToSquare, IconTrashFilled, IconCalendarFilled } from '@jotforminc/svg-icons';\nimport { t } from '@jotforminc/translation';\nimport RemoveScheduledReminderModal from './RemoveScheduledReminder';\nimport { ScRF } from '../../sc/scRevokeAccess';\nimport { ScWrapper } from '../../sc/scScheduleReminder';\n\nimport { defaultRecordEvent } from '../../helpers/utils';\n\nconst ScheduleReminderModal = forwardRef((\n {\n name,\n email,\n recordEvent,\n currentEmailProps,\n onReminderEmailChange,\n remainingToNext,\n remainingToNextSec,\n onScheduledEmailRemainingTimeChange,\n userTimezone\n }, ref\n) => {\n const schedulePanelRef = useRef();\n const removeScheduledReminderModalRef = useRef();\n\n const initialIsListMode = !!Object.keys(currentEmailProps).length;\n const [isListMode, setListMode] = useState(initialIsListMode);\n const [isEditMode, setEditMode] = useState(false);\n const [schedulePanelMessage, setSchedulePanelMessage] = useState();\n\n const closeModal = () => ref.current.hide();\n\n const onSaveClick = async () => {\n if (!schedulePanelRef.current) {\n console.error('Data couldn\\'t be gathered, won\\'t update the prop!');\n return;\n }\n\n const scheduledReminderEmail = schedulePanelRef.current.scheduleData;\n\n try {\n const result = await onReminderEmailChange(scheduledReminderEmail);\n let content = [];\n if (Array.isArray(result) && result[0]) {\n content = result;\n } else if (result.responseCode === 200 && Array.isArray(result.content) && result.content[0]) {\n content = result.content;\n }\n if (content[0]) {\n // Lets update remaining seconds for next email\n const propResult = content[0];\n if (propResult && propResult.scheduledReminderEmail && propResult.scheduledReminderEmail[0] && propResult.scheduledReminderEmail[0].nextScheduledEmailRemainingSec) {\n const newRemaining = propResult.scheduledReminderEmail[0].nextScheduledEmailRemainingSec;\n onScheduledEmailRemainingTimeChange(newRemaining);\n }\n }\n\n closeModal();\n } catch (failedResult) {\n if (failedResult.responseCode === 400) {\n setSchedulePanelMessage({\n type: 'error',\n text: 'Your recipient won\\'t get a reminder email with this configuration. Please check, repeat interval, start and end dates.'\n });\n } else {\n console.error(failedResult);\n }\n }\n };\n\n const onRemoveReminder = async () => {\n await onReminderEmailChange({}); // returns result\n onScheduledEmailRemainingTimeChange(''); // update assignee as they dont have any upcoming email anymore.\n setListMode(false);\n closeModal();\n };\n\n const periodMap = {\n monthly: 'month',\n weekly: 'week',\n daily: 'day'\n };\n\n useEffect(() => {\n const hasEmailProps = !!Object.keys(currentEmailProps).length;\n const lastSendDateIsPassed = remainingToNextSec && remainingToNextSec < 0;\n\n if (lastSendDateIsPassed) { // Reminder emails must came to an end.\n setListMode(false);\n } else if (hasEmailProps && remainingToNextSec) {\n setListMode(true);\n }\n }, [remainingToNextSec, currentEmailProps]);\n\n return (\n setSchedulePanelMessage()}\n header={(\n
        \n Schedule Reminder Emails to\n {` ${name || email}`}\n
        \n )}\n footer={!isListMode || isEditMode\n ? (\n \n \n \n \n ) : null}\n >\n \n {\n isListMode\n ? (\n
        \n \n
        \n
        \n Send once a\n {' '}\n {periodMap[currentEmailProps.interval]}\n
        \n
        \n Next email:\n {' '}\n {remainingToNext}\n
        \n
        \n
        \n {!isEditMode\n ? (\n setEditMode(true)}\n >\n {t('Edit')}\n \n )\n : null}\n <>\n {\n removeScheduledReminderModalRef.current.show();\n }}\n >\n {t('Delete')}\n \n \n \n
        \n
        \n )\n : null\n }\n\n {(!isListMode || isEditMode)\n ? (\n \n )\n : null}\n
        \n \n );\n});\n\nexport default ScheduleReminderModal;\n\nScheduleReminderModal.propTypes = {\n name: string,\n email: string,\n recordEvent: func,\n currentEmailProps: shape(),\n onReminderEmailChange: func,\n remainingToNext: string,\n remainingToNextSec: number,\n onScheduledEmailRemainingTimeChange: func,\n userTimezone: string\n};\n\nScheduleReminderModal.defaultProps = {\n name: '',\n email: '',\n recordEvent: defaultRecordEvent,\n currentEmailProps: {},\n onReminderEmailChange: f => f,\n remainingToNext: '',\n remainingToNextSec: 0,\n onScheduledEmailRemainingTimeChange: f => f,\n userTimezone: ''\n};\n","import React, { forwardRef } from 'react';\nimport { func, string } from 'prop-types';\n\nimport { Button } from '@jotforminc/common-button';\nimport { StyledModal as Modal } from '@jotforminc/styled-modal';\n\nimport { ScRF, ScRB } from '../../sc/scRevokeAccess';\nimport IconActionRequired from '../../assets/svg/actionRequired.svg';\n\nconst ActionRequiredModal = forwardRef(({\n onApproveClick,\n onDeclineClick,\n requestedUserEmail,\n t\n}, ref) => {\n return (\n \n \n {t('Dismiss')}\n \n \n {t('Approve')}\n \n \n )}\n reffedDivProps={{ className: 'forShareModal-assignee-action' }}\n >\n \n
        \n \n
        {t('Action Required')}
        \n

        {requestedUserEmail}

        \n\n
        {t('User requested access to the following Jotform Inbox.')}
        \n
        \n
        \n \n );\n});\n\nexport default ActionRequiredModal;\n\nActionRequiredModal.propTypes = {\n t: func,\n onApproveClick: func,\n onDeclineClick: func,\n requestedUserEmail: string.isRequired\n};\nActionRequiredModal.defaultProps = {\n t: f => f,\n onApproveClick: f => f,\n onDeclineClick: f => f\n};\n","import React from 'react';\nimport {\n bool, number, string, func\n} from 'prop-types';\nimport { Feature } from '@jotforminc/feature-toggle';\nimport { Button, Checkbox } from '@jotforminc/magnet';\nimport SearchInput from '@jotforminc/search-input';\nimport { IconTrashFilled, IconXmark } from '@jotforminc/svg-icons';\nimport { t } from '@jotforminc/translation';\n\nconst AssigneeModalControlBar = ({\n selectedCount, clearSelection, searchTerm, onSearch, onRevokeSelected, isAllSelected, handleSelectAllChange, name\n}) => {\n return (\n <>\n
        \n
        \n \n
        0 && !isAllSelected) ? ' isPartial' : ''}${isAllSelected ? ' isAll' : ''}`}>\n 0 && !isAllSelected}\n onChange={handleSelectAllChange}\n disabled={!!searchTerm}\n className=\"mr-2\"\n />\n
        \n {name ?
        {name}
        : null}\n {selectedCount > 0 && (\n <>\n
        \n \n {t('{count} selected').replace('{count}', selectedCount)}\n \n \n
        \n \n {t('Revoke')}\n \n \n )}\n \n )}\n />\n
        \n\n \n )}\n />\n
        \n \n );\n};\nAssigneeModalControlBar.propTypes = {\n name: string,\n isAllSelected: bool,\n onRevokeSelected: func,\n searchTerm: string,\n selectedCount: number,\n onSearch: func,\n handleSelectAllChange: func,\n clearSelection: func\n};\n\nAssigneeModalControlBar.defaultProps = {\n name: null,\n isAllSelected: false,\n onRevokeSelected: f => f,\n searchTerm: '',\n selectedCount: 0,\n onSearch: f => f,\n handleSelectAllChange: f => f,\n clearSelection: f => f\n};\n\nexport default AssigneeModalControlBar;\n","import { arrayOf, func, shape } from 'prop-types';\nimport React, {\n forwardRef, useMemo, useRef, useState\n} from 'react';\nimport { t } from '@jotforminc/translation';\nimport { StyledModal as Modal } from '@jotforminc/styled-modal';\nimport { useFuse } from '@jotforminc/hooks';\n\nimport { Checkbox } from '@jotforminc/magnet';\nimport DropdownWithDetails from '../../components/DropdownWithDetails';\nimport AssigneeModalControlBar from '../../components/AssigneeModalControlBar';\nimport { ScAssignee } from '../../sc/scAssigneeList';\nimport { Picker } from '../../components/ResourcePicker';\nimport RevokeAccessModal from './RevokeAccess';\nimport { AvatarHolder } from '../../components/AvatarHolder';\n\nconst AssigneeResources = forwardRef((props, ref) => {\n const {\n resources, assignee, onAssigneePermissionChange, onRevokeUser, onRevokeMultipleUser, permissionOptions\n } = props;\n\n const revokeModalRef = useRef();\n const [isLoading, setLoading] = useState(false);\n\n const { avatarUrl, name, email } = assignee;\n const title = name || email;\n\n const [search, setSearch] = useState();\n\n const selectedResources = useMemo(() => {\n return assignee.selectedResources.map(selRes => {\n const resource = resources.find(r => r.id === selRes.resource_id);\n return resource ? { ...selRes, text: resource.title, resource } : null;\n }).filter(res => res);\n }, [assignee.selectedResources, resources]);\n\n const options = useFuse(selectedResources, search, ['text']);\n\n const [selectedOptions, setSelectedOptions] = useState([]);\n\n const clearSelection = () => setSelectedOptions([]);\n\n const handleSelection = (id, isSelected) => {\n if (isSelected) {\n return setSelectedOptions([...selectedOptions, id]);\n }\n\n setSelectedOptions(selectedOptions.filter(f => f !== id));\n };\n\n const isAllSelected = selectedOptions.length === selectedResources.length;\n\n const handleSelectAll = e => {\n const { checked } = e.target;\n setSelectedOptions(checked ? selectedResources.map(o => o.id) : []);\n };\n\n const handleOptionSelect = async (value, selectedResource) => {\n setLoading(true);\n try {\n await onAssigneePermissionChange(value, selectedResource);\n } catch (err) {\n console.log(err);\n } finally {\n setLoading(false);\n }\n };\n\n const ddLoader = () => {\n return (\n
        \n {t('Please wait...')}\n
        \n );\n };\n\n return (\n \n \n {' '}\n {title}\n \n )}\n >\n \n
        \n ({\n email: id,\n id,\n name: (selectedResources.find(f => f.id === id) || {}).name\n }))}\n ref={revokeModalRef}\n onRevokeUser={id => {\n onRevokeUser(id);\n clearSelection();\n revokeModalRef.current.hide();\n }}\n onRevokeMultipleUser={ids => {\n onRevokeMultipleUser(ids, true);\n clearSelection();\n revokeModalRef.current.hide();\n }}\n // onRevokeAllUsers={onRevokeAllUsers}\n // recordEvent={recordEvent}\n // t={t}\n from=\"multiple\"\n />\n\n revokeModalRef.current.show()}\n searchTerm={search}\n selectedCount={selectedOptions.length}\n />\n
        \n {options.map(selectedResource => {\n const isSelected = selectedOptions.indexOf(selectedResource.id) > -1;\n\n const { resource } = selectedResource;\n\n return (\n
        \n \n
        \n
        \n
        \n {resource.title}\n
        \n
        \n
        \n
        \n {/* Pending\n
        \n f}\n >\n Resend Invitation\n */}\n
        \n
        \n {\n isLoading\n ? ddLoader()\n : (\n handleOptionSelect(value, selectedResource)}\n popoverProps={{\n usePortal: true,\n portalContainerSelector: '[data-sc=\"overlay\"]:last-child > div',\n style: { zIndex: '2', maxWidth: '480px' },\n popoverOptions: { placement: 'bottom-end' }\n }}\n />\n )\n }\n
        \n
        \n
        \n
        \n );\n })}\n
        \n
        \n
        \n \n );\n});\n\nAssigneeResources.propTypes = {\n assignee: shape(),\n resources: arrayOf(shape()),\n onAssigneePermissionChange: func,\n onRevokeUser: func,\n onRevokeMultipleUser: func,\n permissionOptions: arrayOf(shape())\n};\n\nAssigneeResources.defaultProps = {\n assignee: undefined,\n resources: [],\n onRevokeUser: f => f,\n onAssigneePermissionChange: f => f,\n onRevokeMultipleUser: f => f,\n permissionOptions: []\n};\n\nexport default AssigneeResources;\n","import React, {\n useRef, useMemo, useState, useCallback\n} from 'react';\nimport {\n bool, string, func, shape, number, oneOf, arrayOf, node, oneOfType, object\n} from 'prop-types';\nimport { Hooks, Popover } from '@jotforminc/uikit';\n\nimport { Feature } from '@jotforminc/feature-toggle';\nimport { Button } from '@jotforminc/common-button';\nimport { Checkbox } from '@jotforminc/magnet';\nimport { getLocalTimeLabel, safeJSONParse } from '@jotforminc/utils';\n\nimport {\n IconTrashFilled, IconEnvelopeClosedFilled, IconXmark, IconExclamationCircleFilled,\n IconEnvelopeClosedCheckFilled, IconEnvelopeClosedXmarkFilled, IconInfoCircleFilled,\n IconEllipsisVertical, IconProductTablesFilled, IconSalesforceFilled\n} from '@jotforminc/svg-icons';\n\nimport { useMemoizedFormattedDate, useMemoizedRemainingTime, useTranslatedTexts } from '../helpers/hooks';\nimport RevokeAccessModal from './modals/RevokeAccess';\nimport { AvatarHolder } from '../components/AvatarHolder';\nimport DropdownWithDetails from '../components/DropdownWithDetails';\nimport { ScPopoverMenu, ScPopoverArrow, ResourceButton } from '../sc/scAssigneeList';\nimport IconManage from '../assets/svg/iconManage.svg';\nimport IconScheduleReminder from '../assets/svg/icon_scheduleReminder.svg';\nimport IconScheduledReminderIndicator from '../assets/svg/icon_scheduledReminderIndicator.svg';\n\nimport ScheduleReminderModal from './modals/ScheduleReminder';\nimport ActionRequiredModal from './modals/ActionRequired';\n\nimport { USER_PERMISSION_OPTIONS } from '../helpers/constants';\nimport { defaultRecordEvent, withEnterPress } from '../helpers/utils';\nimport AssigneeResources from './modals/AssigneeResources';\n\nconst ProviderSettings = {\n salesforceV2SAPP: {\n iconSettings: {\n icon: ,\n backgroundColor: '#00A1E0'\n },\n withPrefill: true\n }\n};\n\nconst Assignee = ({\n modalRef,\n t,\n name,\n email,\n avatarUrl,\n provider,\n isFresh,\n activatedAt,\n accessRequestID,\n last_submission_created_at: lastSubmissionCreatedAt,\n onRevokeUser,\n onRevokeMultipleUser,\n onViewSubmissions,\n handleSendReminder,\n recordEvent,\n submissionPermission,\n onAssigneePermissionChange,\n onRemoveAccessRequest,\n onApproveAccessRequest,\n onResendInvitation,\n onReminderEmailChange,\n scheduledReminderEmail: stringifiedScheduledReminderEmail,\n nextScheduledEmailRemainingSec,\n onScheduledEmailRemainingTimeChange,\n onAssigneeSelectionChange,\n isSelected,\n isActionsDisabled,\n userTimezone,\n unsubscribedFromFormUserReminder,\n permissionOptions: _permissionOptions,\n resources,\n selectedResources = [],\n isActionRequired,\n rwStyles,\n customChildElement,\n isAccessRequested,\n onDismissAccessRequest\n}) => {\n // Refs\n const buttonRef = useRef();\n const requestAccessInfoRef = useRef();\n const revokeModalRef = useRef();\n const resourcesModalRef = useRef();\n const scheduleReminderModalRef = useRef();\n const popoverRef = useRef();\n const actionRequiredModalRef = useRef();\n const {\n USER_REQUEST_EDIT_TOOLTIP\n } = useTranslatedTexts(t);\n // States\n const [emailSentResult, setEmailSentResult] = useState({});\n const [emailSentResultVisible, setEmailSentResultVisibility] = useState(false);\n const [pmVisibility, setPmVisibility] = Hooks.useClickOutsideState(false, [buttonRef, popoverRef]);\n const [requestAccessHover, setRequestAccessHover] = useState(false);\n\n // Memos\n const [usePortal, portalContainerSelector] = useMemo(() => [Boolean(modalRef.current.portalID), '.forShareModal-assignee'], [modalRef.current.portalID]);\n const memoized = useMemoizedRemainingTime(nextScheduledEmailRemainingSec);\n const remainingToNext = typeof memoized === 'string' ? memoized : memoized.reduce((parts, entry) => {\n const [label, amount] = Object.entries(entry)[0];\n const translatedLabel = getLocalTimeLabel(amount, label, t);\n return [...parts, `${amount} ${translatedLabel}`];\n }, [])\n .join(', ');\n\n const permissionOptions = useMemo(() => {\n if (typeof _permissionOptions === 'function') {\n return _permissionOptions('assignee');\n }\n return _permissionOptions;\n }, [_permissionOptions]);\n\n const [formattedActivatedAt, detailedActivatedAt] = useMemoizedFormattedDate(activatedAt);\n const [formattedLastSubmCreatedAt, detailedSubmCreatedAt] = useMemoizedFormattedDate(lastSubmissionCreatedAt);\n\n // Effects\n Hooks.useEffectIgnoreFirst(() => {\n setEmailSentResultVisibility(true);\n const timer = setTimeout(() => setEmailSentResultVisibility(false), 25e2);\n\n return () => clearTimeout(timer);\n }, [emailSentResult]);\n\n const withPrefill = provider && ProviderSettings[provider] ? ProviderSettings[provider].withPrefill : false;\n\n const handleResendInvitationClick = useCallback(async from => {\n if (pmVisibility) {\n setPmVisibility(false);\n }\n recordEvent('resendInvitation', from);\n\n const response = await onResendInvitation(email, withPrefill);\n // recordEvent('invitationMailResent', email); // TODO uncomment\n setEmailSentResult(response);\n }, [email, onResendInvitation, pmVisibility, recordEvent, setPmVisibility]);\n\n const [firstLine, secondLine] = useMemo(() => {\n let lines = [];\n if (activatedAt) {\n lines = [\n <>\n \n {t('Joined on {date}').replace('{date}', formattedActivatedAt)}\n \n
        \n ,\n lastSubmissionCreatedAt && (\n \n {t('Last submission on {date}').replace('{date}', formattedLastSubmCreatedAt)}\n \n )\n ];\n if (isAccessRequested) {\n lines = [\n <>\n setRequestAccessHover(true)}\n onMouseLeave={() => setRequestAccessHover(false)}\n ref={requestAccessInfoRef}\n >\n \n {t('Request to Change')}\n \n {requestAccessHover && (\n \n
        {USER_REQUEST_EDIT_TOOLTIP || t('This user is requesting edit access to this table.')}
        \n \n )}\n ,\n \n {t('Joined on {date}').replace('{date}', formattedActivatedAt)}\n \n ];\n }\n } else {\n lines = [\n <>\n {t('Pending')}\n
        \n ,\n handleResendInvitationClick('label')}\n >\n {t('Resend Invitation')}\n \n )}\n />\n ];\n }\n\n return lines;\n }, [\n activatedAt,\n detailedActivatedAt,\n detailedSubmCreatedAt,\n formattedActivatedAt,\n formattedLastSubmCreatedAt,\n handleResendInvitationClick,\n isActionsDisabled,\n lastSubmissionCreatedAt,\n isAccessRequested,\n requestAccessHover,\n t\n ]);\n\n const emailSentResultClass = emailSentResult.success ? 'isSuccess' // eslint-disable-line no-nested-ternary\n : (emailSentResult.throttled ? 'isInfo' : 'isError');\n\n const emailSentResultIcon = emailSentResult.success ? // eslint-disable-line no-nested-ternary\n : (emailSentResult.throttled ? : );\n\n const scheduledReminderEmail = safeJSONParse(stringifiedScheduledReminderEmail);\n const hasScheduledReminderEmail = !!Object.keys(scheduledReminderEmail).length && nextScheduledEmailRemainingSec && nextScheduledEmailRemainingSec > 0;\n\n // Event handlers\n const onRevokeClick = () => setPmVisibility(false) || revokeModalRef.current.show();\n const onViewSubmissionsClick = () => setPmVisibility(false) || onViewSubmissions({ email });\n const onActionRequiredClick = () => setPmVisibility(false) || actionRequiredModalRef.current.show();\n\n const handleSendReminderClick = async () => {\n setPmVisibility(false);\n const response = await handleSendReminder({ email, withPrefill });\n recordEvent('reminderMailSent', email);\n setEmailSentResult(response);\n };\n\n const handleScheduleReminderClick = () => {\n setPmVisibility(false);\n if (unsubscribedFromFormUserReminder) {\n setEmailSentResult({ success: false, message: t('Email address has been unsubscribed!'), unsubscribed: true });\n return;\n }\n scheduleReminderModalRef.current.show();\n };\n const onAssigneePermissionOptionSelect = ({ value }) => {\n return onAssigneePermissionChange(value);\n };\n\n const onActionRequestApproveClick = () => {\n setPmVisibility(false);\n actionRequiredModalRef.current.hide();\n onApproveAccessRequest(accessRequestID);\n recordEvent('actionRequestApproved');\n };\n\n const onDismissAccessRequestButton = useCallback(e => {\n onDismissAccessRequest(e.currentTarget.getAttribute('data-accessRequestID'));\n }, [onDismissAccessRequest]);\n\n const onActionRequestDeclineClick = () => {\n setPmVisibility(false);\n actionRequiredModalRef.current.hide();\n onRemoveAccessRequest(accessRequestID);\n };\n\n const onManageResources = () => {\n resourcesModalRef.current.show();\n };\n\n const renderBody = () => {\n return (\n
        \n
        \n {name && (\n
        \n
        {name}
        \n {(provider && ProviderSettings[provider]) && (\n
        \n {ProviderSettings[provider].iconSettings.icon}\n
        \n )}\n
        \n )}\n
        \n
        \n {email}\n
        \n {(!name && provider && ProviderSettings[provider]) && (\n
        \n {ProviderSettings[provider].iconSettings.icon}\n
        \n )}\n
        \n
        \n {\n emailSentResultVisible ? (\n
        \n {emailSentResultIcon}\n {emailSentResult.message}\n
        \n ) : (\n
        \n
        \n {firstLine}\n {secondLine}\n
        \n \n \n \n )\n : ''\n }\n />\n
        \n \n \n \n {selectedResources.length}\n {' '}\n Documents\n \n )}\n inactiveComponent={(\n \n )}\n />\n \n )}\n />\n
        \n
        \n )\n }\n
        \n );\n };\n\n return (\n
        \n {customChildElement && customChildElement}\n \n \n )}\n />\n \n )}\n />\n \n onAssigneeSelectionChange(email)}\n className=\"mr-3\"\n />\n \n )}\n />\n \n <>\n {\n renderBody()\n }\n {!emailSentResultVisible && (\n \n setPmVisibility(!pmVisibility)}\n >\n \n \n
        \n )}\n />\n )}\n \n\n {pmVisibility && (\n \n \n \n \n
        \n
        \n
        {t('Manage Documents')}
        \n
        \n \n )}\n />\n {activatedAt ? (\n <>\n \n
        \n
        {t('View Submissions')}
        \n \n )}\n />\n \n
        \n
        {t('Send Reminder Email')}
        \n \n )}\n />\n \n
        \n
        {t('Schedule Reminder Emails')}
        \n \n )}\n />\n \n ) : (\n handleResendInvitationClick('menu')}\n onKeyPress={withEnterPress(() => handleResendInvitationClick('menu'))}\n >\n
        \n
        {t('Resend Invitation')}
        \n \n )}\n \n
        \n
        \n {t('Revoke User')}\n
        \n \n {isAccessRequested && (\n
        \n
        \n \n {t('Dismiss Request')}\n
        \n \n )}\n
        \n \n )}\n \n );\n};\n\nexport default Assignee;\n\nAssignee.propTypes = {\n name: string,\n email: string,\n avatarUrl: string,\n provider: string,\n activatedAt: string,\n submissionPermission: oneOf([\n 'submitOnly',\n 'submitAndView',\n 'submitAndEdit',\n 'viewOnly',\n 'readOnly',\n 'collaborator',\n 'editor'\n ]),\n last_submission_created_at: string,\n isFresh: bool,\n t: func,\n onRevokeUser: func,\n onViewSubmissions: func,\n handleSendReminder: func,\n onResendInvitation: func,\n recordEvent: func,\n onAssigneePermissionChange: func,\n onRemoveAccessRequest: func,\n onApproveAccessRequest: func,\n modalRef: shape({\n current: shape({\n portalID: string\n })\n }),\n onReminderEmailChange: func,\n scheduledReminderEmail: string,\n nextScheduledEmailRemainingSec: number,\n onScheduledEmailRemainingTimeChange: func,\n userTimezone: string,\n onAssigneeSelectionChange: func,\n isSelected: bool,\n customChildElement: node,\n isActionsDisabled: bool,\n unsubscribedFromFormUserReminder: bool,\n permissionOptions: oneOfType([\n func,\n arrayOf(\n shape({\n showWhenSelected: string,\n text: string,\n desc: oneOfType([string, node]),\n value: string\n })\n )\n ]),\n isActionRequired: bool,\n accessRequestID: string,\n resources: oneOfType([bool, arrayOf(shape())]),\n selectedResources: arrayOf(shape()),\n onRevokeMultipleUser: func,\n rwStyles: object,\n isAccessRequested: bool,\n onDismissAccessRequest: func\n};\n\nAssignee.defaultProps = {\n name: '',\n email: '',\n avatarUrl: '',\n provider: '',\n activatedAt: '',\n last_submission_created_at: '',\n submissionPermission: 'submitAndEdit',\n isFresh: false,\n t: f => f,\n modalRef: { current: {} },\n customChildElement: null,\n onRevokeUser: f => f,\n onViewSubmissions: f => f,\n onAssigneePermissionChange: f => f,\n onRemoveAccessRequest: f => f,\n onApproveAccessRequest: f => f,\n handleSendReminder: null,\n onResendInvitation: f => f,\n recordEvent: defaultRecordEvent,\n onReminderEmailChange: f => f,\n scheduledReminderEmail: '',\n nextScheduledEmailRemainingSec: null,\n onScheduledEmailRemainingTimeChange: f => f,\n onAssigneeSelectionChange: f => f,\n isSelected: false,\n isActionsDisabled: false,\n userTimezone: '',\n unsubscribedFromFormUserReminder: false,\n permissionOptions: USER_PERMISSION_OPTIONS,\n isActionRequired: false,\n accessRequestID: '',\n resources: [],\n selectedResources: [],\n onRevokeMultipleUser: f => f,\n rwStyles: {},\n isAccessRequested: false,\n onDismissAccessRequest: f => f\n};\n","import React from 'react';\n\nimport {\n bool, string, func, shape, number, oneOf, arrayOf, node, oneOfType, object\n} from 'prop-types';\n\nimport Assignee from './Assignee';\n\nimport { USER_PERMISSION_OPTIONS } from '../helpers/constants';\nimport { defaultRecordEvent } from '../helpers/utils';\n\nconst AssigneeRow = ({\n data: {\n ref,\n t,\n assignees,\n selectedAssignees,\n userTimezone,\n permissionOptions,\n onRemoveAccessRequest,\n onApproveAccessRequest,\n onResendInvitation,\n onRevokeUser,\n onRevokeMultipleUser,\n onViewSubmissions,\n handleSendReminder,\n recordEvent,\n onAssigneePermissionChange,\n onReminderEmailChange,\n onScheduledEmailRemainingTimeChange,\n assigneeSubmissionPermission,\n handleSelectionChange,\n resources,\n setSelectedResources,\n onDismissAccessRequest\n },\n style,\n index\n}) => {\n return (\n email === assignees[index].email) > -1}\n isActionsDisabled={false} // Testing new UI due to some incoming tickets.\n onAssigneeSelectionChange={handleSelectionChange}\n t={t}\n modalRef={ref}\n key={assignees[index].email}\n onRevokeUser={onRevokeUser}\n onRevokeMultipleUser={onRevokeMultipleUser}\n onViewSubmissions={onViewSubmissions}\n handleSendReminder={handleSendReminder}\n onResendInvitation={onResendInvitation}\n recordEvent={recordEvent}\n accessRequestID={assignees[index].accessRequestID || ''}\n submissionPermission={assignees[index].submissionPermission || assigneeSubmissionPermission}\n onAssigneePermissionChange={(submissionPermission, selectedResource) => onAssigneePermissionChange(assignees[index], submissionPermission, selectedResource)}\n onRemoveAccessRequest={onRemoveAccessRequest}\n onApproveAccessRequest={onApproveAccessRequest}\n onReminderEmailChange={scheduledReminderEmail => onReminderEmailChange(assignees[index], scheduledReminderEmail)}\n onScheduledEmailRemainingTimeChange={newRemaining => onScheduledEmailRemainingTimeChange(assignees[index], newRemaining)}\n userTimezone={userTimezone}\n permissionOptions={permissionOptions}\n resources={resources}\n setSelectedResources={selectedResources => setSelectedResources(assignees[index], selectedResources)}\n isAccessRequested={assignees[index].isAccessRequested}\n onDismissAccessRequest={onDismissAccessRequest}\n />\n );\n};\n\nexport default AssigneeRow;\n\nAssigneeRow.propTypes = {\n data: shape({\n t: func,\n modalRef: shape({\n current: shape({\n portalID: string\n })\n }),\n assignees: arrayOf(\n shape({\n name: string,\n email: string,\n avatarUrl: string,\n activatedAt: string,\n submissionPermission: oneOf([\n 'submitOnly',\n 'submitAndView',\n 'submitAndEdit',\n 'viewOnly',\n 'readOnly',\n 'collaborator',\n 'editor'\n ]),\n last_submission_created_at: string,\n scheduledReminderEmail: string,\n accessRequestID: string\n })\n ),\n selectedAssignees: arrayOf(\n shape({\n name: string,\n email: string,\n avatarUrl: string,\n activatedAt: string,\n submissionPermission: oneOf([\n 'submitOnly',\n 'submitAndView',\n 'submitAndEdit',\n 'viewOnly',\n 'readOnly',\n 'collaborator',\n 'editor',\n 'supporter'\n ]),\n last_submission_created_at: string,\n scheduledReminderEmail: string,\n accessRequestID: string\n })\n ),\n isActionsDisabled: bool,\n userTimezone: string,\n permissionOptions: oneOfType([\n func,\n arrayOf(\n shape({\n showWhenSelected: string,\n text: string,\n desc: oneOfType([string, node]),\n value: string\n })\n )\n ]),\n onRemoveAccessRequest: func,\n onApproveAccessRequest: func,\n onResendInvitation: func,\n onRevokeUser: func,\n onRevokeMultipleUser: func,\n onViewSubmissions: func,\n handleSendReminder: func,\n recordEvent: func,\n onAssigneePermissionChange: func,\n onReminderEmailChange: func,\n onScheduledEmailRemainingTimeChange: func,\n assigneeSubmissionPermission: string,\n handleSelectionChange: func,\n resources: oneOfType([bool, arrayOf(shape())]),\n selectedResources: arrayOf(shape()),\n onDismissAccessRequest: func\n }),\n style: object,\n index: number\n};\n\nAssigneeRow.defaultProps = {\n data: {\n t: f => f,\n modalRef: { current: {} },\n assignees: [{\n name: '',\n email: '',\n avatarUrl: '',\n activatedAt: '',\n last_submission_created_at: '',\n submissionPermission: 'submitAndEdit',\n scheduledReminderEmail: '',\n accessRequestID: ''\n }],\n selectedAssignees: [{\n name: '',\n email: '',\n avatarUrl: '',\n activatedAt: '',\n last_submission_created_at: '',\n submissionPermission: 'submitAndEdit',\n scheduledReminderEmail: ''\n }],\n userTimezone: '',\n permissionOptions: USER_PERMISSION_OPTIONS,\n onRemoveAccessRequest: f => f,\n onApproveAccessRequest: f => f,\n onResendInvitation: f => f,\n onRevokeUser: f => f,\n onRevokeMultipleUser: f => f,\n onViewSubmissions: f => f,\n handleSendReminder: null,\n recordEvent: defaultRecordEvent,\n onAssigneePermissionChange: f => f,\n onReminderEmailChange: f => f,\n onScheduledEmailRemainingTimeChange: f => f,\n assigneeSubmissionPermission: undefined,\n handleSelectionChange: f => f,\n resources: [],\n selectedResources: [],\n onDismissAccessRequest: f => f\n },\n index: null,\n style: {}\n};\n","import Styled from 'styled-components';\n\nexport const ScSWNB = Styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n overflow-y: auto;\n\n .content {\n width: 90%;\n max-width: 500px;\n padding-bottom: 40px;\n text-align: center;\n font-size: 1em;\n color: #0A1551;\n font-weight: 700;\n margin: auto;\n }\n\n .content.wider { max-width: 540px; }\n\n svg { margin-bottom: 30px; margin-top: 56px; }\n .assignToOrgSvg {\n width: 54vw;\n height: 36vh;\n max-width: 192px;\n max-height: 136px;\n }\n\n .title {\n font-size: 16px;\n color: #0A1551;\n font-family: \"Circular\",Work Sans Medium,-apple-system,Helvetica Neue,sans-serif;\n font-weight: 500;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n p {\n margin-top: 9px;\n font-size: 14px;\n line-height: 24px;\n font-weight: 400;\n height: 18px;\n color: #6F76A7;\n font-family: \"Circular\",Work Sans Medium,-apple-system,Helvetica Neue,sans-serif;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n @media screen and (max-width: 480px) {\n font-size: 0.875em;\n\n p { margin: 1em 0 .75em; }\n } \n`;\n","import React, {\n forwardRef, useState, useRef, useEffect\n} from 'react';\nimport {\n arrayOf, bool, string, shape, func, oneOf, oneOfType, node\n} from 'prop-types';\nimport { FixedSizeList as List } from 'react-window';\n\nimport { StyledModal as Modal } from '@jotforminc/styled-modal';\nimport { useFuse } from '@jotforminc/hooks';\nimport AssigneeRow from '../AssigneeRow';\n\nimport { ScAssignee } from '../../sc/scAssigneeList';\nimport { defaultRecordEvent } from '../../helpers/utils';\nimport { useTranslatedTexts } from '../../helpers/hooks';\nimport AssigneeModalControlBar from '../../components/AssigneeModalControlBar';\nimport RevokeAccessModal from './RevokeAccess';\nimport { PERMISSION_LIST, USER_PERMISSION_OPTIONS } from '../../helpers/constants';\nimport IconSharedWithNoOne from '../../assets/svg/icon_shared_with_no_one.svg';\nimport { ScSWNB } from '../../sc/scSharedWithNoOne';\n\nconst EmptyAssigneeList = ({ title, message }) => (\n \n
        \n \n
        {title.toUpperCase()}
        \n

        {message}

        \n
        \n
        \n);\n\nEmptyAssigneeList.propTypes = {\n title: string,\n message: string\n};\n\nEmptyAssigneeList.defaultProps = {\n title: '',\n message: ''\n};\n\nconst AssigneeListModal = forwardRef(({\n t,\n assignees: allAssignees,\n onRevokeUser,\n onRevokeMultipleUser,\n onRevokeAllUsers,\n onViewSubmissions,\n handleSendReminder,\n onResendInvitation,\n recordEvent,\n assigneeSubmissionPermission,\n onAssigneePermissionChange,\n onRemoveAccessRequest,\n onApproveAccessRequest,\n onReminderEmailChange,\n onScheduledEmailRemainingTimeChange,\n resources,\n setSelectedResources,\n userTimezone,\n permissionOptions,\n showGoBackAsClose,\n onDismissAccessRequest\n}, ref) => {\n const {\n ASSIGNED_TO_NO_ONE, ASSIGNED_TO_NUMBER, NO_ONE_ASSIGNED, LIST_WILL_APPEAR_HERE\n } = useTranslatedTexts(t);\n const revokeModalRef = useRef();\n const [searchTerm, setSearchTerm] = useState('');\n const [height, setHeight] = useState();\n const assignees = useFuse(allAssignees, searchTerm);\n\n const [selectedAssignees, setSelectedAssignees] = useState([]);\n const handleSelectionChange = email => {\n const idx = selectedAssignees.findIndex(str => str === email);\n if (idx > -1) {\n setSelectedAssignees(selectedAssignees.filter(str => str !== email));\n } else {\n setSelectedAssignees([...selectedAssignees, email]);\n }\n };\n const isAllSelected = allAssignees.length === selectedAssignees.length;\n\n const handleSelectAllChange = () => {\n if (!isAllSelected) {\n setSelectedAssignees([...allAssignees.map(a => a.email)]);\n } else {\n setSelectedAssignees([]);\n }\n };\n\n const clearSelection = () => {\n setSelectedAssignees([]);\n };\n\n useEffect(() => {\n const dynamicHeight = allAssignees.length * 80;\n const viewPortHeight = ((80 / 100) * document.documentElement.clientHeight);\n if (allAssignees.length > 0) {\n if (dynamicHeight > viewPortHeight) {\n setHeight(viewPortHeight);\n } else setHeight(dynamicHeight);\n }\n }, [allAssignees, document.documentElement.clientHeight]);\n\n useEffect(() => {\n setSelectedAssignees([]);\n }, [allAssignees.length]);\n\n return (\n \n {allAssignees.length === 0\n ? ASSIGNED_TO_NO_ONE\n : `${ASSIGNED_TO_NUMBER.replace('{numberOfUsers}', allAssignees.length).replace('{formNoun}', allAssignees.length === 1 ? t('user') : t('users'))}`}\n \n )}\n reffedDivProps={{ className: 'forShareModal-assignee' }}\n >\n \n {allAssignees.length === 0 ? (\n \n )\n : (\n
        \n ({\n email: e,\n name: (allAssignees.find(f => f.email === e) || {}).name\n }))}\n ref={revokeModalRef}\n onRevokeUser={id => {\n onRevokeUser(id);\n clearSelection();\n revokeModalRef.current.hide();\n }}\n onRevokeMultipleUser={ids => {\n onRevokeMultipleUser(ids);\n clearSelection();\n revokeModalRef.current.hide();\n }}\n onRevokeAllUsers={typeof onRevokeAllUsers === 'undefined' ? null : emails => {\n onRevokeAllUsers(emails);\n clearSelection();\n revokeModalRef.current.hide();\n }}\n recordEvent={recordEvent}\n t={t}\n from=\"multiple\"\n />\n revokeModalRef.current.show()}\n searchTerm={searchTerm}\n selectedCount={selectedAssignees.length}\n />\n {!assignees.length && searchTerm !== ''\n ? (\n
        \n \n
        \n )\n : (\n onAssigneePermissionChange({ ...assignee, submissionPermission, selectedResource }),\n onRemoveAccessRequest,\n onApproveAccessRequest,\n onReminderEmailChange: (assignee, scheduledReminderEmail) => onReminderEmailChange({ ...assignee, scheduledReminderEmail }),\n onScheduledEmailRemainingTimeChange: (assignee, newRemaining) => onScheduledEmailRemainingTimeChange(assignee, newRemaining),\n userTimezone,\n permissionOptions,\n resources,\n setSelectedResources: (assignee, selectedResources) => setSelectedResources({ ...assignee, selectedResources }),\n onDismissAccessRequest\n }}\n height={height}\n itemCount={assignees.length}\n width=\"100%\"\n itemSize={80}\n style={{\n flex: '1 1 auto',\n maxHeight: '100%'\n }}\n >\n {AssigneeRow}\n \n )}\n
        \n )}\n
        \n \n );\n});\n\nexport default AssigneeListModal;\n\nAssigneeListModal.propTypes = {\n assignees: arrayOf(shape({\n isFresh: bool,\n email: string\n })),\n t: func,\n onRevokeUser: func,\n onViewSubmissions: func,\n handleSendReminder: func,\n onResendInvitation: func,\n recordEvent: func,\n onAssigneePermissionChange: func,\n onRemoveAccessRequest: func,\n onApproveAccessRequest: func,\n assigneeSubmissionPermission: oneOf(PERMISSION_LIST),\n onReminderEmailChange: func,\n onScheduledEmailRemainingTimeChange: func,\n onRevokeMultipleUser: func,\n onRevokeAllUsers: func,\n userTimezone: string,\n permissionOptions: oneOfType([\n func,\n arrayOf(\n shape({\n showWhenSelected: string,\n text: string,\n desc: oneOfType([string, node]),\n value: string\n })\n )\n ]),\n showGoBackAsClose: bool,\n resources: arrayOf(shape()),\n setSelectedResources: func,\n onDismissAccessRequest: func\n};\n\nAssigneeListModal.defaultProps = {\n assignees: [],\n assigneeSubmissionPermission: undefined,\n t: f => f,\n onRevokeAllUsers: undefined,\n onRevokeUser: f => f,\n onViewSubmissions: f => f,\n handleSendReminder: f => f,\n onResendInvitation: f => f,\n onAssigneePermissionChange: f => f,\n onRemoveAccessRequest: f => f,\n onApproveAccessRequest: f => f,\n recordEvent: defaultRecordEvent,\n onReminderEmailChange: f => f,\n onRevokeMultipleUser: f => f,\n onScheduledEmailRemainingTimeChange: f => f,\n userTimezone: '',\n permissionOptions: USER_PERMISSION_OPTIONS,\n showGoBackAsClose: false,\n resources: [],\n setSelectedResources: f => f,\n onDismissAccessRequest: f => f\n};\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { getRootElement } from './utils';\nimport { ENTERPRSE_PROMOTIONS_ROOT_EL_ID } from '../constants';\n\nconst renderModal = ({ Modal = null, onClose = f => f, ...props }) => {\n if (!Modal) return null;\n const rootEl = getRootElement(ENTERPRSE_PROMOTIONS_ROOT_EL_ID);\n\n const handleClose = () => {\n ReactDOM.unmountComponentAtNode(rootEl);\n onClose();\n };\n\n ReactDOM.render(\n ,\n rootEl\n );\n};\n\nexport default renderModal;\n","import React from 'react';\nimport { t } from '@jotforminc/translation';\nimport { elementType, func, string } from 'prop-types';\nimport { IconRocketFilled } from '@jotforminc/svg-icons';\nimport {\n ALL_TEXTS, userPropType, gaAttributesPropType, renderModal\n} from '@jotforminc/ep-utils';\nimport './customDomainTooltipAlt.scss';\n\nconst CustomDomainTooltipAlt = ({\n user,\n gaAttributes,\n Modal,\n onClick\n}) => {\n const handleClick = async () => {\n onClick();\n\n renderModal({\n user,\n Modal\n });\n };\n\n return (\n
        \n \n
        \n \n
        \n

        \n {t(ALL_TEXTS.WANT_TO_USE_YOUR_OWN_DOMAIN)}\n {t(ALL_TEXTS.UPGRADE_TO_JOTFORM_ENTERPRISE)}\n

        \n \n
        \n );\n};\n\nCustomDomainTooltipAlt.propTypes = {\n user: userPropType,\n gaAttributes: gaAttributesPropType.isRequired,\n logAbTestAction: func,\n Modal: elementType.isRequired,\n onClick: func,\n target: string.isRequired\n};\n\nCustomDomainTooltipAlt.defaultProps = {\n user: {},\n logAbTestAction: f => f,\n onClick: f => f\n};\n\nexport default CustomDomainTooltipAlt;\n","import React from 'react';\nimport { func, node } from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { IconXmark } from '@jotforminc/svg-icons';\nimport { ALL_TEXTS } from '@jotforminc/ep-utils';\n\nexport const DialogRenderer = ({ children }) => (
        {children}
        );\n\nDialogRenderer.propTypes = { children: node };\nDialogRenderer.defaultProps = { children: null };\n\nexport const ContentRenderer = ({ children, ...props }) => (\n
        \n
        \n {children}\n
        \n
        \n);\n\nContentRenderer.propTypes = { children: node };\nContentRenderer.defaultProps = { children: null };\n\nexport const HeaderRenderer = ({ onCloseClick, ...props }) => (\n \n \n \n);\n\nHeaderRenderer.propTypes = { onCloseClick: func };\nHeaderRenderer.defaultProps = { onCloseClick: f => f };\n","import React, { useRef } from 'react';\nimport { Modal } from '@jotforminc/uikit';\nimport {\n bool, func, object, string\n} from 'prop-types';\nimport cx from 'classnames';\nimport { IconTagPercentFilled } from '@jotforminc/svg-icons';\nimport { t } from '@jotforminc/translation';\nimport PrefilledLeadFormAside from '../PrefilledLeadFormAside';\nimport {\n ALL_TEXTS, LEAD_FORM_MAP, gaAttributesPropType, gaFormTrackingItemsPropType, userPropType\n} from '../../constants';\nimport { ContentRenderer, DialogRenderer, HeaderRenderer } from './Renderers';\nimport EnterpriseIcon from '../../assets/icon.svg';\nimport '@jotforminc/jotform.css';\n\nconst CollaborationModal = ({\n user,\n description,\n formID,\n devFormID,\n badgeText,\n preDescription,\n isNoLabelMode,\n formUiModifier,\n modalProps,\n gaAttributes,\n gaAttributesClose,\n textColorClass,\n descriptionClasses,\n preDescriptionClasses,\n preDescColorClass,\n descriptionWithoutStrong,\n backgroundColor,\n backgroundImageUrl,\n supTitleTextColor,\n supTitleBackground,\n gaFormTrackingItems,\n onCloseClick,\n onClose,\n onFormSubmit,\n hasEducationDiscountBadge,\n isAdForm\n}) => {\n const uikitModalRef = useRef(null);\n\n const handleCloseButton = () => {\n uikitModalRef.current?.hide();\n onCloseClick();\n };\n\n const iframeWrapperClassNames = cx('flex flex-1 iframe-wrapper relative bg-white', {\n 'short-form': isNoLabelMode\n });\n\n const imageClassNames = cx('w-full h-0 md:h-auto radius-bl-lg', {\n 'md:-mb-5 md:-mt-8': isNoLabelMode\n });\n\n return (\n }\n HeaderRenderer={() => }\n onModalClose={onClose}\n >\n
        \n \n
        \n \n \n {t(badgeText)}\n
        \n {!!preDescription && (\n

        \n {t(preDescription)}\n

        \n )}\n

        \n {descriptionWithoutStrong ? t(description) : (\n {t(description)}\n )}\n

        \n
        \n {backgroundImageUrl && (\n \n )}\n\n {hasEducationDiscountBadge && (\n
        \n \n {t(ALL_TEXTS.EDUCATION_DISCOUNT_PERCENT)}\n
        \n )}\n \n {/* image */}\n
        \n \n
        \n\n \n\n \n
        \n );\n};\n\nCollaborationModal.propTypes = {\n user: userPropType.isRequired,\n opener: string,\n modalProps: object,\n formID: string,\n devFormID: string,\n isNoLabelMode: bool,\n formUiModifier: string,\n description: string.isRequired,\n badgeText: string,\n preDescription: string,\n gaAttributes: gaAttributesPropType.isRequired,\n gaAttributesClose: gaAttributesPropType.isRequired,\n gaFormTrackingItems: gaFormTrackingItemsPropType.isRequired,\n textColorClass: string,\n preDescColorClass: string,\n backgroundColor: string,\n backgroundImageUrl: string,\n supTitleTextColor: string,\n supTitleBackground: string,\n onClose: func,\n onCloseClick: func,\n logAbTestAction: func,\n onFormSubmit: func,\n hasEducationDiscountBadge: bool,\n descriptionClasses: string,\n preDescriptionClasses: string,\n descriptionWithoutStrong: bool,\n isAdForm: bool\n};\n\nCollaborationModal.defaultProps = {\n opener: '',\n modalProps: {},\n formID: LEAD_FORM_MAP.COMMON.LIVE,\n devFormID: LEAD_FORM_MAP.COMMON.DEV,\n isNoLabelMode: false,\n formUiModifier: '',\n textColorClass: 'color-white',\n preDescColorClass: 'color-white',\n backgroundColor: 'radial-gradient(150% 100% at 100% 100%, #273CA5 0%, #050C34 100%)',\n backgroundImageUrl: '',\n supTitleTextColor: '#A2ABF6',\n supTitleBackground: 'rgba(61, 83, 194, 0.2)',\n descriptionClasses: 'font-normal text-lg md:text-2xl line-height-xl md:line-height-3xl mt-0 mb-4 md:mb-12 font-circular md:min-h-24',\n preDescriptionClasses: 'font-normal text-lg md:text-xl line-height-xl md:line-height-3xl mt-0 mb-4 md:mb-5 font-circular',\n badgeText: ALL_TEXTS.JOTFORM_ENTERPRISE_TITLE,\n preDescription: '',\n onClose: f => f,\n onCloseClick: f => f,\n logAbTestAction: f => f,\n onFormSubmit: f => f,\n hasEducationDiscountBadge: false,\n descriptionWithoutStrong: false,\n isAdForm: false\n};\n\nexport default CollaborationModal;\n","import React from 'react';\nimport { CollaborationModal, ALL_TEXTS } from '@jotforminc/ep-utils';\n\nconst WhiteLabelingModal = props => {\n return (\n \n );\n};\n\nexport default WhiteLabelingModal;\n","import React, { useEffect } from 'react';\nimport { func } from 'prop-types';\nimport {\n ASSET_IDENTIFIER, ALL_TEXTS,\n GA_FORM_TRACKING_ITEMS, userPropType, GA_AD_FORM_TRACKING_ITEMS,\n GA_SUFFIXES, createGaAttributes, gaDataLayerPushClose, hasAdwordsModeOn, mapCallbacksToGaTrackingItems, setEPActions\n} from '@jotforminc/ep-utils';\nimport WhiteLabelingModal from './WhiteLabelingModal';\n\nconst FormWhiteLabelingModal = ({\n user,\n onClose,\n logAbTestAction\n}) => {\n const { PRODUCT: { WHITE_LABELING_MODAL } } = ASSET_IDENTIFIER;\n const target = WHITE_LABELING_MODAL;\n\n const isAdForm = hasAdwordsModeOn();\n let { [target]: gaFormTrackingItems } = isAdForm ? GA_AD_FORM_TRACKING_ITEMS : GA_FORM_TRACKING_ITEMS;\n\n const gaAttributes = createGaAttributes(target);\n const gaAttributesClose = createGaAttributes(target, GA_SUFFIXES.CLOSE);\n\n useEffect(() => {\n const actionData = { action: 'seen', target };\n\n logAbTestAction(actionData);\n setEPActions({ asset: target, ...actionData });\n }, []);\n\n const handleCloseClick = () => {\n logAbTestAction({ action: 'click', target: `closeButton-${target}` });\n setEPActions({ asset: target, target: 'closeButton', action: 'click' });\n };\n\n const handleClose = () => {\n gaDataLayerPushClose(gaAttributes);\n\n const actionData = { action: 'close', target };\n\n logAbTestAction(actionData);\n setEPActions({ asset: target, ...actionData });\n\n onClose();\n };\n\n const handleContactSalesClick = () => {\n logAbTestAction({ action: 'click', target: `contactSalesButton-${target}` });\n setEPActions({ asset: target, target: 'contactSalesButton', action: 'click' });\n };\n\n const handleFormSubmit = () => {\n const actionData = { action: 'formSubmit', target };\n\n logAbTestAction(actionData);\n setEPActions({ asset: target, ...actionData });\n };\n\n gaFormTrackingItems = mapCallbacksToGaTrackingItems(gaFormTrackingItems, [handleContactSalesClick]);\n\n return (\n \n );\n};\n\nFormWhiteLabelingModal.propTypes = {\n user: userPropType.isRequired,\n onClose: func,\n logAbTestAction: func\n};\n\nFormWhiteLabelingModal.defaultProps = {\n onClose: f => f,\n logAbTestAction: f => f\n};\n\nexport default FormWhiteLabelingModal;\n","import React, { useEffect } from 'react';\nimport { bool, func } from 'prop-types';\nimport {\n ASSET_IDENTIFIER, userPropType,\n createGaAttributes, setEPActions\n} from '@jotforminc/ep-utils';\nimport CustomDomainTooltipAlt from './CustomDomainTooltipAlt';\nimport FormWhiteLabelingModal from './FormWhiteLabelingModal';\n\nconst FormCustomDomainTooltip = ({ user, isEditModeOpenedOnce, logAbTestAction }) => {\n const { PRODUCT: { FORM_CUSTOM_DOMAIN_TOOLTIP: target } } = ASSET_IDENTIFIER;\n\n const gaAttributes = createGaAttributes(target);\n\n useEffect(() => {\n if (!isEditModeOpenedOnce) return;\n\n const actionData = { action: 'seen', target };\n\n logAbTestAction(actionData);\n setEPActions({ asset: target, ...actionData });\n }, [logAbTestAction, isEditModeOpenedOnce]);\n\n const handleClick = () => {\n const actionData = { action: 'click', target };\n\n logAbTestAction(actionData);\n setEPActions({ asset: target, ...actionData });\n };\n\n return (\n \n );\n};\n\nFormCustomDomainTooltip.propTypes = {\n user: userPropType,\n isEditModeOpenedOnce: bool,\n logAbTestAction: func\n};\n\nFormCustomDomainTooltip.defaultProps = {\n user: {},\n isEditModeOpenedOnce: false,\n logAbTestAction: f => f\n};\n\nexport default FormCustomDomainTooltip;\n","import { bool } from 'prop-types';\nimport React, { useRef } from 'react';\nimport { userPropType } from '@jotforminc/ep-utils';\nimport { FormCustomDomainTooltip } from '../components';\n\n// keep here for further a/b tests as distribution point\nconst CustomDomainTooltipAbTester = ({ user, isEditModeOpenedOnce }) => {\n const logAbTestActionRef = useRef(f => f);\n\n return (\n \n );\n};\n\nCustomDomainTooltipAbTester.propTypes = {\n user: userPropType,\n isEditModeOpenedOnce: bool\n};\n\nCustomDomainTooltipAbTester.defaultProps = {\n user: {},\n isEditModeOpenedOnce: false\n};\n\nexport default CustomDomainTooltipAbTester;\n","export const isNativeMobileApp = () => {\n try {\n const userAgent = global.navigator?.userAgent || '';\n\n return ['JotForm Mobile', 'JFCEMobile'].some(app => userAgent.includes(app));\n } catch (error) {\n return false;\n }\n};\n\nexport const trackDataForMobile = (action = '', target = '') => {\n window.sendMessageToJFMobile?.({ type: 'trackData', value: [action, target] });\n};\n","import React, { useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport ClipboardJS from 'clipboard';\nimport { useStateWithAutoReset, useIsMobile } from '@jotforminc/hooks';\nimport { Button } from '@jotforminc/magnet';\nimport { IconExclamationCircleFilled } from '@jotforminc/svg-icons';\nimport { t } from '@jotforminc/translation';\nimport './style.scss';\n\nconst StyledCopyButton = ({\n buttonIcon,\n buttonText = t('Copy Link'),\n colorStyle,\n onCopy,\n textToCopy,\n errorText = t('Couldn\\'t Copy to Clipboard'),\n errorButtonIcon,\n errorColorStyle,\n showButtonIcon,\n copiedButtonText = t('Copied to Clipboard!'),\n copiedButtonIcon,\n timeDuration,\n classNames,\n size,\n disabled\n}) => {\n const isMobile = useIsMobile(767);\n\n const [updatedButtonText, setUpdatedButtonText] = useStateWithAutoReset(buttonText, timeDuration);\n const isButtonDisabled = updatedButtonText && updatedButtonText === errorText;\n const isIconEligible = showButtonIcon && buttonIcon && copiedButtonIcon;\n const buttonIconMap = {\n [copiedButtonText]: copiedButtonIcon,\n [errorText]: errorButtonIcon\n };\n const ref = useRef();\n useEffect(() => {\n if (ref.current) {\n const clipboard = new ClipboardJS(ref.current, { text: () => textToCopy });\n clipboard.on('success', e => {\n onCopy(e, textToCopy);\n setUpdatedButtonText(copiedButtonText);\n });\n clipboard.on('error', () => {\n if (isButtonDisabled) return;\n setUpdatedButtonText(errorText);\n });\n return () => clipboard.destroy();\n }\n }, [ref, textToCopy]);\n\n return (\n \n {(updatedButtonText)}\n \n );\n};\n\nStyledCopyButton.propTypes = {\n buttonIcon: PropTypes.node,\n buttonText: PropTypes.string,\n errorText: PropTypes.string,\n errorButtonIcon: PropTypes.node,\n copiedButtonText: PropTypes.string,\n copiedButtonIcon: PropTypes.node,\n onCopy: PropTypes.func,\n textToCopy: PropTypes.string,\n showButtonIcon: PropTypes.bool,\n timeDuration: PropTypes.number,\n classNames: PropTypes.string,\n size: PropTypes.string,\n colorStyle: PropTypes.string,\n errorColorStyle: PropTypes.string,\n disabled: PropTypes.bool\n};\n\nStyledCopyButton.defaultProps = {\n buttonIcon: null,\n buttonText: '',\n errorButtonIcon: IconExclamationCircleFilled,\n errorText: '',\n copiedButtonIcon: null,\n copiedButtonText: '',\n onCopy: f => f,\n textToCopy: 'https://www.jotform.com',\n showButtonIcon: true,\n timeDuration: 1500,\n classNames: '',\n size: 'medium',\n colorStyle: 'success',\n errorColorStyle: 'error',\n disabled: false\n};\n\nexport default StyledCopyButton;\n","import Styled from 'styled-components';\n\nexport const ScF = Styled.div`\n display: flex;\n justify-content: space-between;\n\n @media screen and (max-width: 480px) {\n font-size: 0.875em;\n flex-direction: column-reverse;\n padding: 2px 24px 0;\n\n button + button { margin-bottom: .5em; }\n }\n`;\n\nexport const ScB = Styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n overflow-y: auto;\n\n .content {\n width: 70%;\n max-width: 500px;\n padding-bottom: 1em;\n text-align: center;\n font-size: 1em;\n color: #2c3345;\n font-weight: 700;\n margin: auto;\n }\n\n .title { font-size: 1.375em; margin: 0; }\n p {\n color: #60658C;\n font-weight: 400;\n margin: 1.1875em 0 1.125em;\n line-height: 26px;\n display: inline-block;\n }\n .confirm-msg {\n padding-left: .3em;\n color: #2c3345;\n font-weight: 700;\n }\n\n @media screen and (max-width: 480px) {\n font-size: 0.875em;\n p { margin: 1em 0 .75em; }\n .content { width: 80%; }\n }\n`;\n\nexport const ScIconWrapper = Styled.div`\n width: 96px;\n height: 96px;\n background-color:rgba(255, 182, 41, 0.25);\n color: #FFB629;\n border-radius:100%;\n padding: 1px 8px 15px;\n margin: 0 auto 8px;\n`;\n","import React, { forwardRef } from 'react';\nimport { func, string } from 'prop-types';\n\nimport { Button } from '@jotforminc/magnet';\nimport { StyledModal as Modal } from '@jotforminc/styled-modal';\n\nimport { IconExclamationTriangleFilled } from '@jotforminc/svg-icons';\nimport { ScF, ScB, ScIconWrapper } from '../../sc/scGenerateNewLink';\n\nconst GenerateNewLink = forwardRef(({\n title, description, confirmMessage,\n onGenerateApproveClick,\n onGenerateDeclineClick,\n t\n}, ref) => {\n return (\n \n \n {t('Cancel')}\n \n \n \n )}\n >\n \n
        \n \n \n \n
        {t(title)}
        \n

        \n {t(description)}\n {t(confirmMessage)}\n

        \n
        \n
        \n \n );\n});\n\nexport default GenerateNewLink;\n\nGenerateNewLink.propTypes = {\n t: func,\n title: string,\n description: string,\n confirmMessage: string,\n onGenerateApproveClick: func,\n onGenerateDeclineClick: func\n};\nGenerateNewLink.defaultProps = {\n t: f => f,\n title: 'Disable Old Link & Generate New Link',\n description: 'Generating a new link will disable the old link.',\n confirmMessage: 'Are you sure you want to disable the old link?',\n onGenerateApproveClick: f => f,\n onGenerateDeclineClick: f => f\n};\n","import classNames from 'classnames';\nimport React, { useMemo } from 'react';\nimport { func, string, bool } from 'prop-types';\nimport { IconXmark } from '@jotforminc/svg-icons';\nimport { Button } from '@jotforminc/magnet';\n\nconst ModalHeader = ({\n t, onClose, activeSection, isEnterprise\n}) => {\n const title = useMemo(() => {\n if (activeSection !== 'form') {\n return '';\n }\n\n if (isEnterprise) {\n return 'Add Your Custom URL Slug';\n }\n\n return 'Add Your Organization Name';\n }, [isEnterprise]);\n\n const desc = useMemo(() => {\n if (activeSection !== 'form') {\n return '';\n }\n\n if (isEnterprise) {\n return 'Use your custom slug in your app URLs';\n }\n\n return 'Use your organization name in your app URLs';\n }, []);\n\n return (\n
        \n
        \n

        \n {t(title)}\n

        \n

        \n {t(desc)}\n

        \n
        \n
        \n \n
        \n
        \n );\n};\n\nModalHeader.propTypes = {\n t: func.isRequired,\n onClose: func.isRequired,\n isEnterprise: bool.isRequired,\n activeSection: string.isRequired\n};\n\nexport default ModalHeader;\n","import React from 'react';\nimport { func, bool, string } from 'prop-types';\nimport { Button } from '@jotforminc/magnet';\n\nconst ModalFooter = ({\n t,\n isSaveDisabled,\n isSaving,\n saveText,\n onSave,\n cancelText,\n savingText,\n onCancel\n}) => (\n
        \n \n {t(cancelText)}\n \n \n {t(isSaving ? savingText : saveText)}\n \n
        \n);\n\nModalFooter.propTypes = {\n t: func.isRequired,\n onSave: func.isRequired,\n onCancel: func.isRequired,\n isSaveDisabled: bool.isRequired,\n isSaving: bool,\n saveText: string,\n cancelText: string,\n savingText: string\n};\n\nModalFooter.defaultProps = {\n isSaving: false,\n saveText: 'Save',\n cancelText: 'Cancel',\n savingText: 'Saving...'\n};\n\nexport default ModalFooter;\n","import React from 'react';\nimport { node } from 'prop-types';\n\nconst ModalDialog = ({ children }) => (\n
        \n {children}\n
        \n);\n\nModalDialog.propTypes = {\n children: node.isRequired\n};\n\nexport default ModalDialog;\n","import React from 'react';\nimport { node } from 'prop-types';\n\nconst ModalContent = ({ children }) => (\n
        \n
        \n {children}\n
        \n
        \n);\n\nModalContent.propTypes = {\n children: node.isRequired\n};\n\nexport default ModalContent;\n","import { Modal } from '@jotforminc/uikit';\nimport { func, string, bool } from 'prop-types';\nimport React, { useState, useRef, useEffect } from 'react';\nimport classNames from 'classnames';\nimport { RequestLayer, Interceptors } from '@jotforminc/request-layer';\n\nimport ModalHeader from './ModalHeader';\nimport ModalFooter from './ModalFooter';\nimport ModalDialog from './ModalDialog';\nimport ModalContent from './ModalContent';\n\nconst layer = new RequestLayer('/API', {\n interceptorConfig: {\n teamID: global.teamID,\n customResponseInterceptors: [Interceptors.requestManagerResponseNormalizer]\n }\n});\n\nconst generateSlug = async organizationName => {\n try {\n if (!organizationName) {\n return [];\n }\n\n const result = await layer.post('slug/generate', { slug: organizationName });\n return result;\n } catch (e) {\n console.log('error', e);\n return [];\n }\n};\n\nconst ERROR_MESSAGES = {\n DEFAULT: 'Link is already taken.',\n reserved: 'Link is already taken.',\n notvalid: 'URL Slug may only contain letters or combination of letters, numbers, dash and underscores (\"_-”).',\n alphanumeric: 'URL Slug may only contain letters or combination of letters, numbers, dash and underscores (\"_-”).',\n notunique: 'Link is already taken.'\n};\n\nconst FormModal = ({\n t, username, onSave, onClose, company, isEnterprise\n}) => {\n const modalRef = useRef(false);\n const timeoutRef = useRef(false);\n const [isSaving, setSaving] = useState(false);\n const [suggestions, setSuggestions] = useState([]);\n const [errorMessage, setErrorMessage] = useState('');\n const [customSlugURL, setCustomSlugURL] = useState('');\n const [organizationName, setOrganizationName] = useState(company);\n const [isSlugInputFocused, setSlugInputFocused] = useState(false);\n const [isSuggestionsLoading, setSuggestionsLoading] = useState(false);\n const [isCustomSlugURLDirty, setIsCustomSlugURLDirty] = useState(false);\n\n const isCustomSlugURLDisabled = !organizationName && !isEnterprise;\n const isSaveDisabled = isCustomSlugURLDisabled || !customSlugURL || isSaving || isSuggestionsLoading;\n\n const handleCustomSlugURLBlur = () => setSlugInputFocused(false);\n const handleCustomSlugURLFocus = () => setSlugInputFocused(true);\n const handleOrganizationNameChange = ({ target: { value } }) => setOrganizationName(value);\n const handleCustomSlugURLChange = ({ target: { value } }) => {\n setCustomSlugURL(value);\n setIsCustomSlugURLDirty(true);\n };\n const generateHandleSuggestionClick = suggestion => () => {\n setCustomSlugURL(suggestion);\n setIsCustomSlugURLDirty(true);\n };\n const handleSave = async () => {\n setSaving(true);\n try {\n setCustomSlugURL(customSlugURL?.trim?.());\n const [slugResult, settingsResult] = await Promise.all([\n layer.post('slug/users', { username, slug: customSlugURL?.trim?.() }),\n isEnterprise ? new Promise(resolve => resolve(true)) : layer.post(`user/${username}/settings?company=${organizationName}`)\n ]);\n\n setSaving(false);\n if (!slugResult || !settingsResult) {\n return;\n }\n\n onSave({ customSlugURL, organizationName });\n } catch (e) {\n const errorType = e.data?.message;\n const errorMessageFromAPI = ERROR_MESSAGES[errorType] || ERROR_MESSAGES.DEFAULT;\n setSaving(false);\n setErrorMessage(errorMessageFromAPI);\n console.log('error', e);\n }\n };\n\n useEffect(() => {\n setErrorMessage('');\n }, [customSlugURL]);\n\n useEffect(() => {\n if (company === organizationName && company && suggestions.length) {\n generateSlug(organizationName).then(result => {\n if (result.length > 0) {\n if (!isCustomSlugURLDirty) {\n const [firstSuggestion, ...remainingSuggestions] = result;\n setCustomSlugURL(firstSuggestion);\n setSuggestions(remainingSuggestions);\n } else {\n setSuggestions(result);\n }\n }\n setSuggestionsLoading(false);\n });\n }\n }, [company, organizationName]);\n\n useEffect(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n if (organizationName) {\n timeoutRef.current = setTimeout(async () => {\n setSuggestionsLoading(true);\n try {\n const result = await generateSlug(organizationName);\n if (result.length > 0) {\n if (!isCustomSlugURLDirty) {\n const [firstSuggestion, ...remainingSuggestions] = result;\n setCustomSlugURL(firstSuggestion);\n setSuggestions(remainingSuggestions);\n } else {\n setSuggestions(result);\n }\n }\n\n setSuggestionsLoading(false);\n } catch (e) {\n console.log('error', e);\n setSuggestionsLoading(false);\n }\n }, 1000);\n }\n }, [organizationName]);\n\n const slugPrefix = window.JOTFORM_ENV === 'PRODUCTION' ? 'app.jotform.com/' : `${window.location.host}/app/`;\n\n return (\n \n \n
        \n {!isEnterprise && (\n
        \n \n
        \n )}\n
        \n
        {t('Custom URL Slug')}
        \n
        \n
        \n {slugPrefix}\n \n
        \n
        \n {suggestions.length > 0 ? (\n
        \n Suggestions: \n \n {suggestions.reduce((prev, suggestion, index) => [\n ...prev,\n index !== 0 ? ', ' : '',\n (\n \n {suggestion}\n \n )\n ], [])}\n \n
        \n ) : null}\n {errorMessage\n && (\n
        \n {t(errorMessage)}\n
        \n )}\n
        \n {t('This slug will be used for all custom links on Jotform Apps.')}\n
        \n
        \n
        \n \n \n );\n};\n\nFormModal.propTypes = {\n t: func.isRequired,\n onSave: func.isRequired,\n onClose: func.isRequired,\n username: string.isRequired,\n company: string,\n isEnterprise: bool\n};\n\nFormModal.defaultProps = {\n company: '',\n isEnterprise: false\n};\n\nexport default FormModal;\n","import React, { useRef } from 'react';\nimport { func } from 'prop-types';\nimport { Modal } from '@jotforminc/uikit';\nimport { translationRenderer } from '@jotforminc/translation';\n\nimport { IconCheckCircleFilled } from '@jotforminc/svg-icons';\nimport ModalHeader from './ModalHeader';\nimport ModalDialog from './ModalDialog';\nimport ModalContent from './ModalContent';\n\nconst ThankYouModal = ({ t, onClose }) => {\n const modalRef = useRef(false);\n const handleCloseClick = () => modalRef.current.hide();\n\n const title = 'Your custom URL slug saved successfully!';\n\n const desc = 'Custom URL slug can be changed from the [1[Account Settings]].';\n\n return (\n \n \n
        \n
        \n
        \n \n
        \n
        \n
        \n {t(title)}\n
        \n
        \n {translationRenderer(desc)({\n renderer1: text => {text}\n })}\n
        \n
        \n \n );\n};\n\nThankYouModal.propTypes = {\n t: func.isRequired,\n onClose: func.isRequired\n};\n\nexport default ThankYouModal;\n","import { func } from 'prop-types';\nimport React, { useRef } from 'react';\n\nimport { IconExclamationCircle } from '@jotforminc/svg-icons';\nimport {\n Button,\n Dialog,\n DialogBody,\n DialogIcon,\n DialogTitle,\n DialogDescription,\n DialogActions,\n DialogCloseButton\n} from '@jotforminc/magnet';\nimport { t } from '@jotforminc/translation';\n\nconst UpdateModal = ({\n onClose, onComplete\n}) => {\n const modalRef = useRef(false);\n const handleContinue = () => {\n onComplete();\n modalRef.current?.hide?.();\n };\n\n const handleClose = () => {\n onClose();\n modalRef.current?.hide?.();\n };\n\n return (\n \n \n \n \n {t('Are you sure you would like to change this custom URL slug?')}\n \n \n {t('URL slug will be changed for all the app links.')}\n
        \n {t('This action is irreversible.')}\n
        \n
        \n \n \n {t('Cancel')}\n \n \n {t('Yes, Continue')}\n \n \n \n \n );\n};\n\nUpdateModal.propTypes = {\n onClose: func.isRequired,\n onComplete: func\n};\n\nUpdateModal.defaultProps = {\n onComplete: f => f\n};\n\nexport default UpdateModal;\n","import React, { useState } from 'react';\nimport {\n func, oneOf, shape, string, bool\n} from 'prop-types';\n\nimport FormModal from './components/FormModal';\nimport ThankYouModal from './components/ThankYouModal';\nimport UpdateModal from './components/UpdateModal';\n\nimport './styles/jfUserSlugModal.scss';\nimport '../../styles/DialogShared.scss';\n\nconst UserSlugModal = ({\n t,\n username,\n onClose,\n onComplete,\n section: defaultSection,\n sectionProps,\n isEnterprise\n}) => {\n const [result, setResult] = useState(false);\n const [section, setSection] = useState(defaultSection);\n\n const handleFormModalSave = saveResult => {\n setSection('thankyou');\n setResult(saveResult);\n };\n\n const handleThankYouClose = () => {\n onComplete(result);\n };\n\n switch (section) {\n case 'form':\n return (\n \n );\n case 'thankyou':\n return (\n \n );\n case 'update':\n return (\n \n );\n default:\n return null;\n }\n};\n\nUserSlugModal.propTypes = {\n username: string.isRequired,\n t: func,\n section: oneOf(['form', 'thankyou', 'update']),\n onClose: func,\n onComplete: func,\n sectionProps: shape({}),\n isEnterprise: bool\n};\n\nUserSlugModal.defaultProps = {\n t: str => str,\n section: 'form',\n onClose: f => f,\n onComplete: f => f,\n sectionProps: {},\n isEnterprise: false\n};\n\nexport default UserSlugModal;\n","import React, {\n useState, useMemo, useRef, useEffect\n} from 'react';\n\nimport {\n string, func, bool, arrayOf, node\n} from 'prop-types';\nimport { Hooks } from '@jotforminc/uikit';\nimport classNames from 'classnames';\nimport { useFeatures } from '@paralleldrive/react-feature-toggles';\nimport { saveCustomerAsHubspotFormByUsername, SDR_SOURCES } from '@jotforminc/ep-utils';\nimport { IconArrowRotateRight, IconLinkDiagonal, IconPencilFilled } from '@jotforminc/svg-icons';\n\nimport { Feature } from '@jotforminc/feature-toggle';\nimport { Button, ScUIKitTooltip } from '@jotforminc/common-button';\nimport { getURLDomain } from '@jotforminc/request-layer';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\nimport { UserSlugModal } from '@jotforminc/modals';\n\nimport { Loader } from '@jotforminc/magnet';\nimport Dropdown from './Dropdown';\nimport { useTranslatedTexts } from '../helpers/hooks';\n\nconst ShareLinkRenderer = ({\n link,\n onGenerateLink,\n t,\n editable = false,\n editableLinkDefaultValue,\n isUsingCustomLink,\n alternativeDomains,\n onAlternativeDomainChange,\n onResetCustomLink,\n onLinkChange,\n onEditSuccess,\n onLinkResetSuccess,\n onEditFail,\n onGenerateNewLink,\n editableLinkFormat,\n isEditDisabled,\n forceUserSlugModal,\n username,\n company,\n onUserSlugSet,\n EditDisabledMessageRenderer,\n hasTeamSlug,\n onEditModeOpen,\n isLoading\n}) => {\n const features = useFeatures();\n const isUserSlugFeatureEnabled = features.indexOf('userSlug') > -1;\n const {\n CREATE_LINK, EDIT_LINK, RESET_LINK, APPLY, SAVING, EDIT_SHARE_LINK_BUTTON\n } = useTranslatedTexts(t);\n const slugInput = useRef();\n const wrapper = useRef();\n const editButtonWrapperRef = useRef();\n const [isEditModeOpen, setEditModeOpen] = Hooks.useClickOutsideState(false, [wrapper]);\n const [isSaving, setSaving] = useState(false);\n const [editableValue, setEditableValue] = useState(editableLinkDefaultValue);\n const [isUserSlugModalVisible, setUserSlugVisibility] = useState(false);\n const handleEditableValueChange = e => {\n const slugChecker = new RegExp('^([a-z]|[A-Z]|[0-9]|-|_)*$');\n const newSlug = e.target.value;\n const match = slugChecker.exec(newSlug);\n\n if (match !== null && e.target.value.length < 36) {\n setEditableValue(e.target.value);\n }\n };\n const handleEditClick = () => {\n if (isUserSlugFeatureEnabled && forceUserSlugModal && username) {\n setUserSlugVisibility(true);\n return;\n }\n\n setEditModeOpen(true);\n\n if (!isEnterprise()) {\n saveCustomerAsHubspotFormByUsername({ lastProductAssetInteraction: SDR_SOURCES.SHARE_PANEL_SHARE_LINK });\n }\n };\n\n const handleEditFinish = () => {\n setSaving(true);\n onLinkChange(editableValue).then((...resp) => {\n onEditSuccess(...resp);\n }).catch(errorMessage => {\n onEditFail(errorMessage);\n }).finally(() => {\n setSaving(false);\n setEditModeOpen(false);\n });\n };\n\n const handleKeyDown = e => {\n if (e && e.keyCode === 13) {\n handleEditFinish();\n }\n };\n\n const handleResetClick = () => {\n setSaving(true);\n onResetCustomLink().then((...resp) => {\n onLinkResetSuccess(...resp);\n }).finally(() => {\n setSaving(false);\n setEditModeOpen(false);\n });\n };\n\n useEffect(() => {\n if (isEditModeOpen && slugInput.current) {\n slugInput.current.focus();\n onEditModeOpen();\n }\n }, [isEditModeOpen]);\n\n const handleSelectAllText = ({ target }) => {\n if (document.body.createTextRange) {\n const range = document.body.createTextRange();\n range.moveToElementText(target);\n range.select();\n } else if (window.getSelection) {\n const selection = window.getSelection();\n const range = document.createRange();\n range.selectNodeContents(target);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n };\n\n const handleUserSlugModalClose = () => {\n setUserSlugVisibility(false);\n };\n\n const handleUserSlugModalComplete = async result => {\n onUserSlugSet(result);\n setUserSlugVisibility(false);\n if (editable) {\n await setEditModeOpen(true);\n await slugInput.current?.focus?.();\n await slugInput.current?.select?.();\n }\n };\n\n const [linkStaticStart, linkStaticEnd] = useMemo(() => {\n const [beforeEdit = '', afterEdit = ''] = editableLinkFormat.split('{editable}');\n return [\n beforeEdit.split('/').filter(val => val).slice(-1).pop(),\n afterEdit\n ];\n }, [editableLinkFormat]);\n\n const alternativeDomainsOptions = alternativeDomains.map(i => ({\n text: i, value: i\n }));\n\n const editButtonClassnames = classNames({ isEditDisabled }, 'bare', 'forEdit');\n\n return (\n <>\n \n
        \n \n {\n const isChanged = getURLDomain(link) !== value;\n if (isChanged) {\n onAlternativeDomainChange(value);\n }\n }}\n popoverProps={{\n popoverOptions: { placement: 'bottom-start' },\n style: { zIndex: 2, width: '100%' }\n }}\n />\n
        \n \n )}\n />\n\n
        \n {!isLoading ? : }\n {!isEditModeOpen\n && (\n <>\n \n {link}\n
        \n -1 ? (\n \n \n \n ) : null\n )}\n />\n \n )}\n {isEditModeOpen && (\n
        \n \n \n \n \n {linkStaticEnd}\n
        \n \n {isSaving ? `${SAVING}..` : APPLY}\n \n
        \n
        \n )}\n {!isEditModeOpen && (\n \n {CREATE_LINK}\n \n )}\n />\n )}\n {!isEditModeOpen && editable && (\n
        \n \n \n \n {isEditDisabled\n && (\n \n \n \n )}\n
        \n )}\n {!isEditModeOpen && isUsingCustomLink && (\n
        \n \n
        \n )}\n {isUserSlugModalVisible && (\n \n )}\n \n \n );\n};\n\nexport default ShareLinkRenderer;\n\nShareLinkRenderer.propTypes = {\n editable: bool,\n link: string.isRequired,\n onGenerateLink: func,\n t: func,\n editableLinkFormat: string,\n editableLinkDefaultValue: string,\n onLinkChange: func,\n onResetCustomLink: func,\n onEditSuccess: func,\n onEditFail: func,\n alternativeDomains: arrayOf(string),\n isUsingCustomLink: bool,\n onLinkResetSuccess: func,\n onGenerateNewLink: func,\n onAlternativeDomainChange: func,\n isEditDisabled: bool,\n forceUserSlugModal: bool,\n username: string,\n onUserSlugSet: func,\n EditDisabledMessageRenderer: node,\n company: string,\n hasTeamSlug: bool,\n onEditModeOpen: func,\n isLoading: bool\n};\n\nShareLinkRenderer.defaultProps = {\n editable: false,\n onGenerateLink: f => f,\n t: f => f,\n editableLinkDefaultValue: '',\n onEditSuccess: f => f,\n onEditFail: f => f,\n onLinkChange: () => new Promise(resolve => setTimeout(resolve, 600)),\n onResetCustomLink: () => new Promise(resolve => setTimeout(resolve, 600)),\n alternativeDomains: [],\n editableLinkFormat: 'https://www.jotform.com/{}/',\n isUsingCustomLink: false,\n onLinkResetSuccess: f => f,\n onGenerateNewLink: null,\n onAlternativeDomainChange: f => f,\n isEditDisabled: false,\n forceUserSlugModal: false,\n username: '',\n onUserSlugSet: f => f,\n EditDisabledMessageRenderer: React.Fragment,\n company: '',\n hasTeamSlug: false,\n onEditModeOpen: f => f,\n isLoading: false\n};\n","import React from 'react';\nimport { func } from 'prop-types';\nimport Styled from 'styled-components';\nimport { Button } from '@jotforminc/common-button';\nimport { IconGearFilled } from '@jotforminc/svg-icons';\nimport { useTranslatedTexts } from '../helpers/hooks';\n\nconst ButtonWrapper = Styled.div`\n margin-right: 4px;\n \n @media screen and (max-width: 640px) {\n button > span {display: none;}\n }\n`;\n\nconst SettingsButton = ({ onSettingsClick, t }) => {\n const { SETTINGS } = useTranslatedTexts(t);\n\n return (\n \n \n \n {SETTINGS}\n \n \n );\n};\n\nSettingsButton.propTypes = {\n onSettingsClick: func,\n t: func\n};\n\nSettingsButton.defaultProps = {\n onSettingsClick: () => {},\n t: text => text\n};\n\nexport default SettingsButton;\n","import Styled from 'styled-components';\n\nconst ScAccessType = Styled.div`\n display: flex;\n align-items: center;\n flex: 0 0 auto;\n height: 32px;\n border: 1px solid rgba(69, 115, 227, 0.5);\n background-color: #eaeffe;\n color: #4573e3;\n border-radius: 2.5rem;\n padding: 0 12px;\n cursor: pointer;\n font-style: normal;\n font-weight: 500;\n font-size: 14px;\n line-height: 16px;\n margin-right: 0.625rem;\n justify-content: center;\n white-space: nowrap;\n\n @media screen and (max-width: 480px) {\n float: left;\n }\n\n svg {\n height: 14px;\n margin-right: 4px;\n\n html[dir=\"rtl\"] & {\n margin-right: 0;\n margin-left: 0.25rem;\n }\n }\n path { fill: #4573e3; }\n path + path { fill: #eaeffe; }\n\n ${p => p.fillColor && `\n border: 1px solid ${p.borderColor};\n background-color: ${p.backgroundColor};\n color: ${p.fillColor};\n path { fill: ${p.fillColor}; }\n `}\n`;\n\nexport default ScAccessType;\n","import React from 'react';\nimport { Utils } from '@jotforminc/uikit';\nimport { bool, func } from 'prop-types';\nimport { IconLockFilled, IconUnlockFilled, IconBuildings } from '@jotforminc/svg-icons';\nimport { useTranslatedTexts } from '../helpers/hooks';\nimport { ACCESS_TYPE_COLORS } from '../helpers/constants';\n\nimport ScAccessType from '../sc/scAccessType';\n\nconst AccessType = ({\n isPrivate, isCompanyProtected, t, forShare, onSettingsClick\n}) => {\n const { PRIVATE_ACCESS, COMPANY_ACCESS, PUBLIC_ACCESS } = useTranslatedTexts(t);\n const onPrivateAccessKeyPress = event => Utils.isPressedKeyEnter(event) && onSettingsClick();\n\n const typeBasedProps = () => {\n if (isPrivate) {\n return {\n icon: ,\n type: 'PRIVATE_ACCESS',\n text: PRIVATE_ACCESS\n };\n } if (isCompanyProtected) {\n return {\n icon: ,\n type: 'COMPANY_ACCESS',\n text: COMPANY_ACCESS\n };\n }\n\n return {\n icon: ,\n type: 'PUBLIC_ACCESS',\n text: PUBLIC_ACCESS\n };\n };\n\n const { icon, type, text } = typeBasedProps();\n\n return (\n \n {icon}\n {text}\n \n );\n};\n\nAccessType.propTypes = {\n isPrivate: bool,\n isCompanyProtected: bool,\n forShare: bool,\n t: func,\n onSettingsClick: func\n};\n\nAccessType.defaultProps = {\n isPrivate: false,\n isCompanyProtected: false,\n forShare: false,\n t: text => text,\n onSettingsClick: () => {}\n};\n\nexport default AccessType;\n","import React, {\n useRef, useMemo, forwardRef, useState\n} from 'react';\nimport {\n func, string, bool, arrayOf, objectOf, shape, node\n} from 'prop-types';\nimport { Utils } from '@jotforminc/uikit';\nimport { useFeatures } from '@paralleldrive/react-feature-toggles';\nimport classNames from 'classnames';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\nimport { CustomDomainTooltipAbTester } from '@jotforminc/ep-share-panel';\n\nimport { Feature, FeatureToggles } from '@jotforminc/feature-toggle';\nimport { Button } from '@jotforminc/magnet';\nimport {\n guessTimezone, createObjectWithKeys, a11yAnnounce, trackDataForMobile\n} from '@jotforminc/utils';\nimport StyledCopyButton from '@jotforminc/styled-copy-button';\nimport { useStateWithAutoReset } from '@jotforminc/hooks';\nimport { translationRenderer } from '@jotforminc/translation';\n\nimport GenerateNewLinkModal from '../modals/GenerateNewLink';\n\nimport { isDatePassed, withEnterPress } from '../../helpers/utils';\nimport { useTranslatedTexts, useMemoizedFormattedDate } from '../../helpers/hooks';\nimport ShareLinkRenderer from '../../components/ShareLinkRenderer';\nimport SettingsButton from '../../components/SettingsButton';\nimport AccessType from '../../components/AccessType';\n\nimport ResourcePicker from '../../components/ResourcePicker';\n\nconst LinkSection = forwardRef(({\n t,\n link,\n onGenerateNewLink,\n generateNewLinkModalDescription,\n recordEvent,\n linkExpireDate,\n linkExpireTimezone,\n onExpireClick,\n onExpireDateClick,\n onSettingsClick,\n userTimezone,\n isEditable,\n editableLinkFormat,\n editableLinkDefaultValue,\n isUsingCustomLink,\n onResetCustomLink,\n onLinkChange,\n alternativeDomains,\n onAlternativeDomainChange,\n onCopyClick,\n onOpenInNewTabClick,\n features,\n isPrivate,\n isCompanyProtected,\n hasNewTab,\n isBuilderQRShare,\n resources,\n selectedResources,\n onPropertyChange,\n isEditDisabled,\n forceUserSlugModal,\n username,\n onUserSlugSet,\n EditDisabledMessageRenderer,\n company,\n hasTeamSlug,\n onEnterpriseLinkClick,\n user,\n isLoading\n}, ref) => {\n const {\n COPY_LINK, LINK_WILL_BE_EXPIRED, LINK_EXPIRED_GENERATE_NEW,\n NEW_LINK_GENERATION_ERROR,\n COPY_LINK_SUCCESS,\n OPEN_IN_NEW_TAB, LINK_EDIT_FAIL, LINK_EDIT_SUCCESS, LINK_RESET_SUCCESS,\n SHARE_LINK_HEADER, SHARE_LINK_HEADER_DESC\n // GENERATE_NEW\n } = useTranslatedTexts(t);\n\n const generateModalRef = useRef();\n const [errorMessage, setErrorMessage] = useStateWithAutoReset('');\n const [successMessage, setSuccessMessage] = useState(COPY_LINK_SUCCESS);\n const [formattedLinkExpireDate, longFormattedLinkExpDate] = useMemoizedFormattedDate(linkExpireDate);\n const preferredTz = linkExpireTimezone || userTimezone || guessTimezone();\n const isLinkExpired = useMemo(() => isDatePassed(linkExpireDate, preferredTz), [linkExpireDate, preferredTz]);\n const [isEditModeOpenedOnce, setIsEditModeOpenedOnce] = useState(false);\n\n const onCopy = () => {\n setSuccessMessage(COPY_LINK_SUCCESS);\n onCopyClick();\n trackDataForMobile('copyLinkClicked');\n };\n const onGenerateClick = () => generateModalRef.current.show();\n const onGenerateErrorKeyDown = event => Utils.isPressedKeyEnter(event) && onGenerateClick();\n const onExpureErrorKeyDown = event => Utils.isPressedKeyEnter(event) && onExpireClick();\n const onGenerateApproveClick = async () => {\n generateModalRef.current.hide();\n try {\n const newLink = await onGenerateNewLink();\n if (!newLink) {\n setErrorMessage(NEW_LINK_GENERATION_ERROR);\n return;\n }\n recordEvent('newAssignWithLinkGenerated', newLink);\n } catch (e) {\n setErrorMessage(NEW_LINK_GENERATION_ERROR);\n }\n };\n\n const onLinkEditFail = linkEditErrorMesssage => setErrorMessage((linkEditErrorMesssage || LINK_EDIT_FAIL));\n const onLinkEditSuccess = () => {\n setSuccessMessage(LINK_EDIT_SUCCESS);\n a11yAnnounce(LINK_EDIT_SUCCESS);\n };\n const onLinkResetSuccess = () => setSuccessMessage(LINK_RESET_SUCCESS);\n\n const onEditModeOpen = () => {\n if (!isEditModeOpenedOnce) {\n setIsEditModeOpenedOnce(true);\n }\n };\n\n return (\n
        \n \n generateModalRef.current.hide()}\n />\n
        \n
        \n
        \n
        \n {SHARE_LINK_HEADER}\n \n \n
        \n \n
        \n \n )}\n />\n
        \n {SHARE_LINK_HEADER_DESC ?

        {SHARE_LINK_HEADER_DESC}

        : null}\n
        \n
        \n
        \n \n {!isEnterprise() && (\n
        \n onEnterpriseLinkClick('text-edit_form_url')}\n />\n
        \n )}\n \n )}\n />\n \n {OPEN_IN_NEW_TAB}\n \n )}\n />\n
        \n
        \n
        \n {/* */}\n {/* */}\n {/* {GENERATE_NEW} */}\n {/* */}\n {/* )} */}\n {/* /> */}\n <>\n \n {!isLinkExpired && formattedLinkExpireDate && (\n
        \n {translationRenderer(LINK_WILL_BE_EXPIRED)({\n renderer1: () => (\n \n {formattedLinkExpireDate}\n \n )\n })}\n
        \n )}\n {isLinkExpired && (\n
        \n {translationRenderer(LINK_EXPIRED_GENERATE_NEW)({\n renderer1: text => (\n \n {text}\n \n ),\n renderer2: text => (\n \n {text}\n \n )\n })}\n
        \n )}\n \n )}\n />\n {errorMessage &&
        {errorMessage}
        }\n \n
        \n
        \n onPropertyChange({ selectedResources: val })}\n />\n )}\n />\n
        \n \n
        \n
        \n );\n});\n\nLinkSection.propTypes = {\n link: string,\n linkExpireDate: string,\n linkExpireTimezone: string,\n t: func,\n recordEvent: func,\n onExpireClick: func,\n onGenerateNewLink: func,\n onExpireDateClick: func,\n userTimezone: string,\n isEditable: bool,\n onLinkChange: func,\n editableLinkFormat: string,\n isUsingCustomLink: bool,\n onResetCustomLink: func,\n editableLinkDefaultValue: string,\n alternativeDomains: arrayOf(string),\n onAlternativeDomainChange: func,\n onCopyClick: func,\n onOpenInNewTabClick: func,\n features: objectOf(bool),\n onSettingsClick: func,\n isPrivate: bool,\n isCompanyProtected: bool,\n generateNewLinkModalDescription: string,\n hasNewTab: bool,\n isBuilderQRShare: bool,\n resources: arrayOf(shape({})),\n selectedResources: arrayOf(string),\n onPropertyChange: func,\n isEditDisabled: bool,\n forceUserSlugModal: bool,\n username: string,\n onUserSlugSet: func,\n EditDisabledMessageRenderer: node,\n company: string,\n hasTeamSlug: bool,\n onEnterpriseLinkClick: func,\n user: shape({}),\n isLoading: bool\n};\n\nLinkSection.defaultProps = {\n link: '',\n linkExpireDate: '',\n linkExpireTimezone: '',\n t: text => text,\n recordEvent: f => f,\n onExpireClick: f => f,\n onGenerateNewLink: f => f,\n onExpireDateClick: f => f,\n onLinkChange: f => f,\n userTimezone: '',\n isEditable: false,\n editableLinkFormat: 'https://www.jotform.com/{}/',\n alternativeDomains: [],\n onResetCustomLink: f => f,\n isUsingCustomLink: false,\n editableLinkDefaultValue: '',\n onAlternativeDomainChange: f => f,\n onCopyClick: f => f, // Required for muse team\n onOpenInNewTabClick: f => f, // Required for muse team\n features: {},\n onSettingsClick: () => { },\n isPrivate: false,\n isCompanyProtected: false,\n generateNewLinkModalDescription: undefined,\n hasNewTab: false,\n isBuilderQRShare: false,\n resources: [],\n selectedResources: [],\n onPropertyChange: f => f,\n isEditDisabled: false,\n forceUserSlugModal: false,\n username: '',\n onUserSlugSet: f => f,\n EditDisabledMessageRenderer: React.Fragment,\n company: '',\n hasTeamSlug: false,\n onEnterpriseLinkClick: f => f,\n user: {},\n isLoading: false\n};\n\nexport default LinkSection;\n","import React, { useEffect } from 'react';\nimport { func, object } from 'prop-types';\nimport {\n CollaborationModal, ASSET_IDENTIFIER, ALL_TEXTS, GA_FORM_TRACKING_ITEMS, userPropType, GA_AD_FORM_TRACKING_ITEMS,\n GA_SUFFIXES, createGaAttributes, gaDataLayerPushClose, hasAdwordsModeOn, mapCallbacksToGaTrackingItems, setEPActions\n} from '@jotforminc/ep-utils';\n\nconst AssignToOrganizationModal = ({\n user,\n modalProps,\n onClose,\n logAbTestAction\n}) => {\n const { PRODUCT: { ASSIGN_TO_ORGANIZATON_MODAL } } = ASSET_IDENTIFIER;\n const target = ASSIGN_TO_ORGANIZATON_MODAL;\n\n const isAdForm = hasAdwordsModeOn();\n let { [target]: gaFormTrackingItems } = isAdForm ? GA_AD_FORM_TRACKING_ITEMS : GA_FORM_TRACKING_ITEMS;\n\n const gaAttributes = createGaAttributes(target);\n const gaAttributesClose = createGaAttributes(target, GA_SUFFIXES.CLOSE);\n\n useEffect(() => {\n const actionData = { target, action: 'seen' };\n\n logAbTestAction(actionData);\n setEPActions({ asset: target, ...actionData });\n }, [logAbTestAction]);\n\n const handleCloseClick = () => {\n gaDataLayerPushClose(gaAttributes);\n\n logAbTestAction({ target: `closeButton-${target}`, action: 'click' });\n setEPActions({ asset: target, target: 'closeButton', action: 'click' });\n };\n\n const handleClose = () => {\n logAbTestAction({ target: `onClose-${target}`, action: 'close' });\n setEPActions({ asset: target, target, action: 'onClose' });\n\n onClose();\n };\n\n const handleContactSales = () => {\n logAbTestAction({ action: 'click', target: `contactSalesButton-${target}` });\n setEPActions({ asset: target, target: 'contactSalesButton', action: 'click' });\n };\n\n const handleLearnMore = () => {\n logAbTestAction({ action: 'click', target: `learnMoreButton-${target}` });\n setEPActions({ asset: target, target: 'learnMoreButton', action: 'click' });\n };\n\n const handleFormSubmit = () => {\n logAbTestAction({ target: `formSubmit-${target}`, action: 'formSubmit' });\n setEPActions({ asset: target, target, action: 'formSubmit' });\n };\n\n gaFormTrackingItems = mapCallbacksToGaTrackingItems(gaFormTrackingItems, [handleContactSales, handleLearnMore]);\n\n return (\n \n );\n};\n\nAssignToOrganizationModal.propTypes = {\n user: userPropType.isRequired,\n modalProps: object,\n onClose: func,\n logAbTestAction: func\n};\n\nAssignToOrganizationModal.defaultProps = {\n modalProps: {},\n onClose: f => f,\n logAbTestAction: f => f\n};\n\nexport default AssignToOrganizationModal;\n","import { useEffect, useRef, useState } from 'react';\nimport { bool, elementType, func } from 'prop-types';\nimport { ABTestManager } from '@jotforminc/abtest-manager';\nimport { handleCustomNavigation, setCookie } from '@jotforminc/utils';\nimport {\n ASSET_IDENTIFIER, CTA_URLS, userPropType, renderModal, setEPActions\n} from '@jotforminc/ep-utils';\nimport { AssignToOrganizationModal } from '../components';\nimport './loader.scss';\n\n// A/B Test: epAssignToEveryoneII\nconst AssignToEveryoneAbTester = ({\n user,\n isAdShowing,\n setAdShowing,\n ...props\n}) => {\n const { AB_TEST: { ASSIGN_TO_ORGANIZATION_BUTTON } } = ASSET_IDENTIFIER;\n const target = ASSIGN_TO_ORGANIZATION_BUTTON;\n\n const [isLoading, setIsLoading] = useState(true);\n const [isTestVariant, setIsTestVariant] = useState(false);\n const registerABTestActionRef = useRef(f => f);\n\n useEffect(() => {\n if (!isAdShowing) return;\n setIsLoading(true);\n\n const distributeTest = async () => {\n const abTestManager = new ABTestManager({\n user,\n isTestEnabled: true,\n testName: 'epAssignToEveryoneII',\n controlVariantCode: '27561',\n testVariantCode: '27571',\n urlParam: 'epateii',\n cacheVariantCodeAtLocalStorage: true\n // debugMode: {\n // forceUserEligible: true,\n // logTestState: true\n // forceTestVariant: true\n // }\n });\n\n registerABTestActionRef.current = abTestManager.registerABTestAction;\n\n try {\n const isTest = await abTestManager.isTestVariant();\n\n setCookie('abNote', `${isTest ? 'epAssignToEveryoneII-test' : 'epAssignToEveryoneII-control'}`, 30);\n setIsTestVariant(isTest);\n } catch (e) {\n setIsTestVariant(false);\n } finally {\n setIsLoading(false);\n }\n };\n\n distributeTest();\n }, [isAdShowing, user]);\n\n if (isLoading) return null;\n\n if (!isTestVariant) {\n renderModal({\n user,\n Modal: AssignToOrganizationModal,\n onClose: () => setAdShowing(false),\n logAbTestAction: registerABTestActionRef.current,\n ...props\n });\n } else {\n setEPActions({ asset: target, target, action: 'click' });\n registerABTestActionRef.current({ target, action: 'click' });\n handleCustomNavigation(CTA_URLS.ASSIGN_TO_EVERYONE_BUTTON.URL);\n setAdShowing(false);\n }\n\n return null;\n};\n\nAssignToEveryoneAbTester.propTypes = {\n user: userPropType.isRequired,\n isAdShowing: bool.isRequired,\n setAdShowing: func.isRequired,\n ControlComponent: elementType.isRequired,\n TestComponent: elementType.isRequired\n};\n\nexport default AssignToEveryoneAbTester;\n","import React, { forwardRef, useState } from 'react';\nimport {\n func, arrayOf, shape, number\n} from 'prop-types';\nimport { Hooks } from '@jotforminc/uikit';\n\nimport { Button } from '@jotforminc/common-button';\nimport { StyledModal as Modal } from '@jotforminc/styled-modal';\n\nimport { IconExclamationTriangleFilled } from '@jotforminc/svg-icons';\nimport { ScRF, ScRB } from '../../sc/scRevokeAccess';\n\nimport { defaultRecordEvent } from '../../helpers/utils';\nimport { useTranslatedTexts } from '../../helpers/hooks';\n\nconst RevokeFromOrganizationModal = forwardRef((\n {\n formID,\n users,\n onRevoke,\n onFormPropChange,\n onCancel,\n recordEvent,\n t\n }, ref\n) => {\n const {\n REVOKE_FROM_ORGANIZATION, REVOKE_FROM_ORGANIZATION_DESC, REVOKE_FROM_ORGANIZATION_CONFIRM,\n YES_REVOKE_FROM_ORGANIZATION, NO_KEEP_ORGANIZATION_ASSIGN\n } = useTranslatedTexts(t);\n\n const initialValues = {\n isOperationDone: false,\n isOperationInProgress: false,\n isOperationAllowed: true\n };\n const [isOperationDone, setIsOperationDone] = useState(initialValues.isOperationDone);\n const [isOperationInProgress, setIsOperationInProgress] = useState(initialValues.isOperationInProgress);\n const [isOperationAllowed, setIsOperationAllowed] = useState(initialValues.isOperationAllowed);\n\n const reset = () => {\n setIsOperationInProgress(initialValues.isOperationInProgress);\n setIsOperationAllowed(initialValues.isOperationAllowed);\n setIsOperationDone(false);\n };\n\n const handleClose = () => {\n reset();\n if (!isOperationDone) {\n return onCancel();\n }\n };\n\n const handleRevoke = async () => {\n if (!isOperationAllowed) return;\n setIsOperationInProgress(true);\n setIsOperationAllowed(false);\n\n const emails = users.map(u => u.email);\n const result = await onRevoke(emails, true);\n if (!result) {\n setIsOperationInProgress(false);\n setIsOperationAllowed(true);\n // TODO Handle errors in UI too\n return;\n }\n setIsOperationInProgress(false);\n setIsOperationDone(true);\n onFormPropChange({ assignedToOrganization: 'No' });\n recordEvent('formRevokedFromOrganization', formID);\n };\n\n Hooks.useEffectIgnoreFirst(() => {\n if (isOperationDone) {\n setTimeout(() => {\n ref.current.hide();\n }, 300); // wait just a little to show operation done\n }\n }, [isOperationDone]);\n\n return (\n \n \n \n \n )}\n >\n \n
        \n \n
        {REVOKE_FROM_ORGANIZATION}
        \n

        {REVOKE_FROM_ORGANIZATION_DESC({ NUMBER_OF_EMAILS: users.length })}

        \n

        {REVOKE_FROM_ORGANIZATION_CONFIRM}

        \n
        \n
        \n \n );\n});\n\nexport default RevokeFromOrganizationModal;\n\nRevokeFromOrganizationModal.propTypes = {\n formID: number,\n onCancel: func,\n onRevoke: func,\n onFormPropChange: func,\n recordEvent: func,\n t: func,\n users: arrayOf(shape())\n};\n\nRevokeFromOrganizationModal.defaultProps = {\n formID: 0,\n onCancel: f => f,\n onRevoke: f => f,\n onFormPropChange: f => f,\n recordEvent: defaultRecordEvent,\n t: f => f,\n users: []\n};\n","import React, { useRef, useState } from 'react';\nimport {\n bool, func, number, shape\n} from 'prop-types';\nimport Toggle from '@jotforminc/toggle';\nimport { SDR_SOURCES, saveCustomerAsHubspotFormByUsername } from '@jotforminc/ep-utils';\nimport { AssignToEveryoneAbTester } from '@jotforminc/ep-share-panel';\nimport { getUrlParameter } from '@jotforminc/utils';\n\nimport { useTranslatedTexts } from '../../helpers/hooks';\nimport AssignToOrganizationModal from '../modals/AssignToOrganizationModal';\nimport RevokeFromOrganizationModal from '../modals/RevokeFromOrganizationModal';\nimport {\n defaultRecordEvent,\n fetchEnterpriseUsers\n} from '../../helpers/utils';\n\nconst isNewMagnetElementsInSettings = getUrlParameter('newMagnetElementsInSettings') === '1';\n\nconst AssignToOrganizationSection = ({\n user,\n formID,\n t,\n isEnterprise,\n recordEvent,\n onAssign,\n onRevoke,\n onFormPropChange,\n assignedToOrganization,\n onEnterpriseLinkClick\n}) => {\n const {\n ASSIGN_TO_EVERYONE_IN_ORGANIZATION, ASSIGN_TO_EVERYONE_IN_ORGANIZATION_DESC\n } = useTranslatedTexts(t);\n const assignToOrganizationModal = useRef('');\n const revokeFromOrganizationModal = useRef('');\n const initialValues = {\n toggleChecked: assignedToOrganization,\n isAdShowing: false,\n toggleLoading: false,\n users: []\n };\n\n const [toggleChecked, setToggleChecked] = useState(initialValues.toggleChecked);\n const [users, setUsers] = useState(initialValues.users);\n const [toggleLoading, setToggleLoading] = useState(initialValues.toggleLoading);\n const [isAdShowing, setAdShowing] = useState(initialValues.isAdShowing);\n\n const handleCancelAssign = () => setToggleChecked(false);\n const handleCancelRevoke = () => setToggleChecked(true);\n\n const openModal = () => {\n const modal = assignedToOrganization\n ? revokeFromOrganizationModal.current\n : assignToOrganizationModal.current;\n if (modal) modal.show();\n };\n\n const prepareAndOpenModal = async () => {\n if (!isEnterprise) {\n setAdShowing(true);\n saveCustomerAsHubspotFormByUsername({ lastProductAssetInteraction: SDR_SOURCES.SHARE_PANEL_ASSIGN_TO_EVERYONE });\n return;\n }\n\n if (!users || !users.length) {\n setToggleLoading(true);\n const enterpriseUsers = await fetchEnterpriseUsers()\n .catch(e => {\n // TODO handle error on UI too\n console.error('Users couldn\\'t fetched', e);\n setToggleLoading(false);\n });\n setToggleLoading(false);\n setUsers(enterpriseUsers);\n }\n setToggleChecked(!toggleChecked);\n openModal();\n };\n\n return (\n
        \n \n \n
        \n \n
        \n {isAdShowing\n ? (\n onEnterpriseLinkClick('button-enterprise-contact')}\n onLearnMoreClick={() => onEnterpriseLinkClick('button-enterprise-learn-more')}\n />\n )\n : null}\n
        \n );\n};\n\nAssignToOrganizationSection.propTypes = {\n user: shape({}),\n formID: number,\n t: func,\n isEnterprise: bool,\n recordEvent: func,\n onAssign: func,\n onRevoke: func,\n onFormPropChange: func,\n assignedToOrganization: bool,\n onEnterpriseLinkClick: func\n};\n\nAssignToOrganizationSection.defaultProps = {\n user: {},\n formID: 0,\n t: f => f,\n isEnterprise: false,\n recordEvent: defaultRecordEvent,\n onAssign: f => f,\n onRevoke: f => f,\n onFormPropChange: f => f,\n assignedToOrganization: false,\n onEnterpriseLinkClick: f => f\n};\n\nexport default AssignToOrganizationSection;\n","/* eslint-disable max-len */\nimport styled from 'styled-components';\n\n// TODO :: initial styles\nexport const ScPredefinedUsersSection = styled.div`\n .searchAndInvite {\n margin: -24px 0 18px 0;\n\n &-title {\n font-size: 15px;\n line-height: 18px;\n font-weight: 700;\n }\n\n &-subheader {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 30px;\n\n .jfCheckbox-item {\n padding: 6px;\n }\n }\n\n .searchInUsers {\n position: relative;\n\n &:before {\n content: '';\n background-image: url(\"data:image/svg+xml,%3Csvg fill='none' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='m15.2 13.73-3.17-3.17a6.36 6.36 0 1 0-1.47 1.46l3.17 3.18a1.04 1.04 0 0 0 1.47-1.47ZM3.83 9.89a4.28 4.28 0 1 1 6.06-6.06 4.28 4.28 0 0 1-6.06 6.06Z' fill='%236F76A7'/%3E%3C/svg%3E\");\n background-size: 15px;\n background-position: center;\n position: absolute;\n display: inline-block;\n width: 15px;\n height: 15px;\n margin: 15px 12px;\n }\n \n input {\n background: #FFFFFF;\n border: 1px solid #D0D4EC;\n border-radius: 4px;\n padding: 12px 12px 12px 32px;\n\n input {\n border: none;\n }\n }\n }\n\n .inviteMultiple {\n background: #78BB07;\n border-radius: 4px;\n color: #FFFFFF;\n border: none;\n cursor: pointer;\n padding: 12px 40px;\n \n &:hover {\n background: #4EB100;\n }\n }\n }\n\n .jfTable-wrapper {\n height: 400px;\n overflow: auto;\n }\n\n table {\n border-collapse: collapse;\n width: 100%;\n\n tbody {\n .jfTable-row {\n border-top: 1px solid rgba(94,105,137,0.33);\n }\n }\n\n .forCheckbox,\n .forUser {\n text-align: left;\n }\n\n .forStatus {\n text-align: right;\n }\n\n .jfTable-row {\n position: relative;\n\n .jfCheckbox-wrapper.isChecked {\n background: #0099FF;\n }\n }\n\n .jfTable-column {\n &.forCheckbox {\n margin: 0;\n padding: 0;\n width: 24px;\n\n .jfCheckbox-item {\n padding: 0;\n width: 22px;\n height: 22px;\n\n .jfCheckbox-wrapper {\n left: 0;\n }\n }\n }\n\n &.forUser {\n display: flex;\n\n .user-avatar {\n width: 30px;\n height: 30px;\n border-radius: 50%;\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover;\n }\n\n .user-content {\n display: flex;\n margin-left: 8px;\n flex-direction: column;\n\n .name {\n font-weight: 600;\n font-size: 14px;\n line-height: 18px;\n }\n\n .email {\n font-weight: 400;\n font-size: 12px;\n line-height: 16px;\n }\n }\n }\n }\n\n .inviteSingle {\n background-color: #E3E5F5;\n border-radius: 4px;\n color: #545B88;\n border: none;\n cursor: pointer;\n padding: 10px 24px;\n \n &:hover {\n background: #bebfcf;\n }\n\n &.invited {\n pointer-events: none;\n background-color: transparent;\n }\n }\n }\n`;\n","import React, {\n useState, useRef, useEffect\n} from 'react';\nimport { func, arrayOf, shape } from 'prop-types';\nimport { v4 as uuid } from 'uuid';\nimport { CheckboxItem } from '@jotforminc/checkbox';\nimport { useDebounce } from '@jotforminc/hooks';\n\nimport { useTranslatedTexts } from '../../helpers/hooks';\nimport { ScPredefinedUsersSection } from '../../sc/scInvitePredefinedUsersSection';\n\nconst InvitePredefinedUsersSection = ({\n t, allUsers, onInvite\n}) => {\n const {\n USERS, INVITATION_STATUS, INVITED, INVITE_BUTTON, INVITE_PEOPLE, SELECT_ALL, INVITE_SELECTED_BUTTON\n } = useTranslatedTexts(t);\n const [userList, setUserList] = useState(allUsers);\n const [selectedUsers, setSelectedUsers] = useState([]);\n const searchInputRef = useRef();\n const isAllSelected = userList.length > 0 && selectedUsers.length >= userList.length;\n\n const onSearch = val => {\n if (val) {\n setUserList(allUsers.filter(user => `${user.email || ''}${user.name || ''}`.toLowerCase().includes(val.toLowerCase())));\n } else {\n setUserList(allUsers);\n }\n };\n\n useEffect(() => {\n onSearch(searchInputRef.current.value);\n }, [allUsers]);\n\n const selectUser = email => {\n setSelectedUsers(currSelectedUsers => {\n const isSelected = currSelectedUsers.find(userEmail => userEmail === email);\n\n if (isSelected) {\n return currSelectedUsers.filter(userEmail => userEmail !== email);\n }\n\n return [...currSelectedUsers, email];\n });\n };\n\n const selectAll = () => {\n const newList = isAllSelected ? [] : userList.map(user => user.email);\n setSelectedUsers(newList);\n };\n\n return (\n \n
        \n

        {INVITE_PEOPLE}

        \n
        \n onSearch(searchInputRef.current.value))}\n onKeyDown={e => e.stopPropagation()}\n defaultValue=''\n />\n
        \n
        \n
        \n \n {SELECT_ALL}\n
        \n {selectedUsers.length > 0 && (\n \n )}\n
        \n
        \n
        \n
    \n \n \n \n \n \n \n \n {userList.map(user => {\n const {\n email = '', name = '', invitationSent, avatarURL = ''\n } = user || {};\n\n return (\n \n \n \n \n \n );\n })}\n \n
    \n {USERS}{INVITATION_STATUS}
    \n selectUser(email)}\n checked={selectedUsers.find(userEmail => userEmail === email)}\n />\n \n
    \n
    \n
    {name}
    \n
    {email}
    \n
    \n
    \n {invitationSent === true ? INVITED : (\n \n )}\n
    \n
    \n \n );\n};\n\nInvitePredefinedUsersSection.propTypes = {\n t: func,\n allUsers: arrayOf(shape({})),\n onInvite: func\n};\n\nInvitePredefinedUsersSection.defaultProps = {\n t: f => f,\n allUsers: [],\n onInvite: f => f\n};\n\nexport default InvitePredefinedUsersSection;\n","import { IconSalesforceFilled } from '@jotforminc/svg-icons';\n\n/** app properties\n * appName\n * appIcon\n * fetchUrl\n * defaultParams: default parameters for fetching\n * normalizeMethod: normalize the response\n * defaultObjectOption: default option for object\n * objectOptionsList: options of object\n * appInvitationUrl: invitation sending url\n * prefillComponentProvider: provider for rendering the prefill component\n*/\n\nconst APPS = {\n salesforce: {\n appName: 'Salesforce',\n appIcon: IconSalesforceFilled,\n fetchUrl: '/salesforce/getListOf',\n defaultObjectOption: 'Contact',\n objectOptionsList: ['Contact', 'Lead'],\n defaultParams: {\n fields: 'Id,Name,Email'\n },\n normalizeMethod: users => users.map(user => ({\n id: user.Id,\n name: user.Name,\n email: user.Email,\n avatarUrl: null,\n user: user\n })),\n appInvitationUrl: formID => `/API/salesforce/${formID}/sendInvitation`,\n prefillComponentProvider: 'salesforceV2'\n }\n};\n\nexport default APPS;\n","/* eslint-disable complexity */\nimport React, {\n useRef, useImperativeHandle, forwardRef, useState\n} from 'react';\nimport {\n string, func, arrayOf, shape, bool, oneOf, objectOf, oneOfType, number, node, element\n} from 'prop-types';\nimport { StyleSheetManager } from 'styled-components';\nimport classNames from 'classnames';\nimport { Feature, FeatureToggles } from '@jotforminc/feature-toggle';\nimport { isEnterprise as isEnterpriseFunc } from '@jotforminc/enterprise-utils';\nimport { t } from '@jotforminc/translation';\nimport { useMeasure } from '@jotforminc/hooks';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { ScWrapper } from '../sc/scIndex';\nimport SettingsModal from '../containers/modals/Settings';\nimport HeaderSection from '../containers/sections/Header';\nimport InviteSection from '../containers/sections/Invite';\nimport InviteByAppSection from '../containers/sections/InviteByApp';\nimport AssigneeListModal from '../containers/modals/AssigneeList';\nimport LinkSection from '../containers/sections/Link';\nimport AssignToEveryoneSection from '../containers/sections/AssignToOrganization';\nimport InvitePredefinedUsersSection from '../containers/sections/InvitePredefinedUsersSection';\nimport { defaultRecordEvent } from '../helpers/utils';\nimport APPS from '../helpers/apps';\nimport ALL_TEXTS, { SharingTextsModule } from '../helpers/texts';\nimport { USER_PERMISSION_OPTIONS, DEFAULT_LINK_SETTINGS, PERMISSION_LIST } from '../helpers/constants';\n\nconst SharePanel = forwardRef(({\n formID,\n link,\n assignees: assigneeList,\n alternativeDomains,\n onAlternativeDomainChange,\n assigneeProtected,\n ssoProtected,\n organizationAccess,\n assignedToOrganization,\n linkSettingsAvailable,\n linkSettingsValues,\n assigneeSubmissionPermission,\n useInviteSettingsPermission,\n assignLinkExpireDate,\n assignLinkExpireTimezone,\n onSend,\n onRevokeUser,\n onRevokeMultipleUser,\n onRevokeAllUsers,\n onViewSubmissions,\n handleSendReminder,\n onResendInvitation,\n onPropertyChange,\n onGenerateNewLink,\n features,\n recordEvent,\n onAssigneePermissionChange,\n onAssigneeResourcesChange,\n onRemoveAccessRequest,\n onApproveAccessRequest,\n onReminderEmailChange,\n assigneeLimit,\n onScheduledEmailRemainingTimeChange,\n userTimezone,\n isEnterprise,\n isSSOSupported,\n isShare,\n texts,\n editableLinkFormat,\n onLinkChange,\n editableLinkDefaultValue,\n isUsingCustomLink,\n onResetCustomLink,\n permissionOptions,\n userListPermissionOptions,\n defaultPermissionOption,\n onCopyClick,\n onOpenInNewTabClick,\n opensInModal,\n user,\n title,\n generateNewLinkModalDescription,\n className,\n onAccessSettingsChangeAttempt,\n resources,\n selectedResources,\n useOnlyInvite,\n onCloseModal,\n defaultInvitations,\n isEditDisabled,\n EditDisabledMessageRenderer,\n forceUserSlugModal,\n onUserSlugSet,\n hideInviteMessageSection,\n onEmailsChange,\n renderAssignPrefillModal,\n showAssignPrefill,\n onDismissAccessRequest,\n settingsModalProps,\n predefinedUsers,\n onInvite,\n isAvatarListEnabled,\n useNewStyledPermissionDropdown,\n customErrorMessage,\n forcePublicDataSharing,\n hasTeamSlug,\n allowPlusInEmail,\n skipAssignToOrganizationModal,\n overridePublicDataSharing,\n assigneeLimitWithoutUpgrade,\n renderAppPrefillSection,\n handleEmailErrorText,\n onPillListChange,\n excludeDataOnlyUsers,\n allowRequestAccess,\n isLoading\n}, ref) => {\n const settingsModalRef = useRef();\n const generateModalRef = useRef();\n const assigneeModalRef = useRef();\n const inviteSectionRef = useRef();\n const inviteByAppSectionRef = useRef();\n const [isInviteExpanded, setIsInviteExpanded] = useState(useOnlyInvite);\n const [isInviteByAppExpanded, setIsInviteByAppExpanded] = useState(window.location.href.includes('assignToSFContacts=1'));\n const [topRef, height] = useMeasure();\n\n useImperativeHandle(ref, () => ({\n settingsModalRef,\n generateModalRef,\n assigneeModalRef,\n isInviteExpanded,\n setIsInviteExpanded,\n inviteSectionRef\n }));\n\n SharingTextsModule.setTexts(texts);\n const onAvatarsClick = () => {\n recordEvent('openInviteSection', 'avatar');\n assigneeModalRef.current.show();\n };\n const getIsEnterprise = () => (\n isEnterprise === undefined ? isEnterpriseFunc() : isEnterprise\n );\n const onSettingsClick = () => settingsModalRef.current.show();\n const trackEnterpriseLink = action => {\n const { JotFormActions, location } = window;\n if (JotFormActions && user && user.username && !location.href.includes('.jotform.pro') && !['ADMIN', 'SUPPORT', 'INTERN'].includes(user.account_type.name)) {\n const logger = new JotFormActions('enterprise-links');\n logger.tick({\n actor: user.username,\n action,\n location: location.origin + location.pathname\n });\n }\n };\n\n const prodDebugProps = typeof window.commonProdDebugProps === 'object' ? window.commonProdDebugProps : {};\n\n const assignees = assigneeList\n ? Object.values(\n assigneeList.reduce((list, assignee) => {\n const { email } = assignee;\n const existingAssignee = list[email];\n\n if (existingAssignee) {\n existingAssignee.selectedResources.push(assignee);\n } else {\n // eslint-disable-next-line no-param-reassign\n list[email] = {\n ...assignee,\n selectedResources: [assignee]\n };\n }\n\n return list;\n }, {})\n )\n : [];\n\n let assignToEveryoneClass = {\n overflow: 'hidden'\n };\n\n const urlParams = new URLSearchParams(window.location.search);\n\n const isAnyInviteExpanded = isInviteExpanded || isInviteByAppExpanded;\n\n if (isAnyInviteExpanded) {\n assignToEveryoneClass = {\n ...assignToEveryoneClass,\n pointerEvents: 'none',\n height: 0,\n margin: 0,\n padding: 0,\n opacity: 0\n };\n }\n\n return (\n \n \n \n \n )}\n />\n\n \n\n {opensInModal && (\n \n )}\n />\n )}\n {/* invitation link and invite-section */}\n {!isInviteByAppExpanded\n && (\n
    \n \n \n
    \n )}\n />\n \n )}\n inactiveComponent={(\n \n )}\n />\n
    \n )}\n {/* invite by app section */}\n {!isInviteExpanded\n && (\n \n \n
  • \n )}\n />\n )}\n {isEnterprise\n ? (\n \n )}\n />\n ) : null}\n {/* assign to organization section */}\n \n \n
    \n )}\n />\n \n \n \n );\n});\n\nSharePanel.propTypes = {\n formID: number,\n link: string,\n assignees: arrayOf(shape({\n name: string,\n email: string\n })),\n alternativeDomains: arrayOf(string),\n isShare: bool,\n assigneeProtected: oneOf(['Yes', 'No']),\n ssoProtected: oneOf(['Yes', 'No']),\n assignedToOrganization: bool,\n organizationAccess: string,\n linkSettingsAvailable: arrayOf(shape({\n key: string,\n dynamicKey: string,\n defaultValue: oneOf(['Yes', 'No']),\n propName: string\n })),\n linkSettingsValues: shape({\n /* propName: oneOf(['Yes', 'No']) */\n }),\n assigneeSubmissionPermission: oneOf(PERMISSION_LIST),\n useInviteSettingsPermission: bool,\n assignLinkExpireDate: string,\n assignLinkExpireTimezone: string,\n assigneeLimit: oneOfType([string, number]),\n onSend: func,\n onRevokeUser: func,\n onRevokeAllUsers: func,\n onPropertyChange: func,\n onGenerateNewLink: func,\n onViewSubmissions: func,\n handleSendReminder: func,\n onResendInvitation: func,\n onAssigneePermissionChange: func,\n onRemoveAccessRequest: func,\n onApproveAccessRequest: func,\n features: objectOf(bool),\n recordEvent: func,\n onReminderEmailChange: func,\n onScheduledEmailRemainingTimeChange: func,\n onRevokeMultipleUser: func,\n userTimezone: string,\n isEnterprise: bool,\n isSSOSupported: bool,\n texts: shape(),\n editableLinkFormat: string,\n onLinkChange: func,\n isUsingCustomLink: bool,\n onResetCustomLink: func,\n editableLinkDefaultValue: string,\n permissionOptions: oneOfType([\n func,\n arrayOf(\n shape({\n showWhenSelected: string,\n text: string,\n desc: oneOfType([string, node]),\n value: string\n })\n )\n ]),\n userListPermissionOptions: oneOfType([\n func,\n arrayOf(shape({\n showWhenSelected: string,\n text: string,\n desc: oneOfType([string, node]),\n value: string\n }))\n ]),\n onAlternativeDomainChange: func,\n onCopyClick: func,\n onOpenInNewTabClick: func,\n opensInModal: bool,\n user: shape({}),\n title: oneOfType([element, string]),\n generateNewLinkModalDescription: string,\n className: string,\n onAccessSettingsChangeAttempt: func,\n defaultPermissionOption: oneOf(PERMISSION_LIST),\n resources: arrayOf(shape({})),\n selectedResources: arrayOf(string),\n onAssigneeResourcesChange: func,\n useOnlyInvite: bool,\n onCloseModal: func,\n defaultInvitations: arrayOf(string),\n isEditDisabled: bool,\n EditDisabledMessageRenderer: node,\n forceUserSlugModal: bool,\n onUserSlugSet: func,\n hideInviteMessageSection: bool,\n onEmailsChange: func,\n renderAssignPrefillModal: func,\n showAssignPrefill: bool,\n onDismissAccessRequest: func,\n settingsModalProps: shape({}),\n predefinedUsers: arrayOf(shape({})),\n onInvite: func,\n isAvatarListEnabled: bool,\n useNewStyledPermissionDropdown: bool,\n customErrorMessage: string,\n forcePublicDataSharing: bool,\n hasTeamSlug: bool,\n allowPlusInEmail: bool,\n skipAssignToOrganizationModal: bool,\n overridePublicDataSharing: bool,\n assigneeLimitWithoutUpgrade: bool,\n renderAppPrefillSection: func,\n handleEmailErrorText: func,\n onPillListChange: func,\n excludeDataOnlyUsers: bool,\n allowRequestAccess: oneOf(['Yes', 'No']),\n isLoading: bool\n};\n\nSharePanel.defaultProps = {\n formID: 0,\n link: '',\n assignees: [],\n alternativeDomains: [],\n isShare: false,\n assigneeProtected: 'No',\n organizationAccess: '',\n ssoProtected: 'No',\n assignedToOrganization: false,\n assigneeLimit: 100,\n assigneeSubmissionPermission: undefined,\n useInviteSettingsPermission: true,\n assignLinkExpireDate: '',\n assignLinkExpireTimezone: '',\n isEnterprise: undefined,\n isSSOSupported: false,\n onRevokeAllUsers: undefined,\n onSend: f => f,\n onRevokeUser: f => f,\n onRevokeMultipleUser: f => f,\n onPropertyChange: f => f,\n onViewSubmissions: f => f,\n handleSendReminder: f => f,\n onResendInvitation: f => f,\n onGenerateNewLink: f => f,\n onAssigneePermissionChange: f => f,\n onRemoveAccessRequest: f => f,\n onApproveAccessRequest: f => f,\n features: {},\n recordEvent: defaultRecordEvent,\n onReminderEmailChange: f => f,\n onScheduledEmailRemainingTimeChange: f => f,\n userTimezone: '',\n texts: ALL_TEXTS,\n editableLinkFormat: 'https://www.jotform.com/{}/',\n onLinkChange: () => new Promise(resolve => setTimeout(resolve, 600)),\n onResetCustomLink: f => f,\n isUsingCustomLink: false,\n editableLinkDefaultValue: '',\n permissionOptions: USER_PERMISSION_OPTIONS,\n userListPermissionOptions: USER_PERMISSION_OPTIONS,\n linkSettingsAvailable: DEFAULT_LINK_SETTINGS,\n linkSettingsValues: {},\n onAlternativeDomainChange: f => f,\n onCopyClick: f => f, // Required for muse team\n onOpenInNewTabClick: f => f, // Required for muse team\n opensInModal: false,\n user: {},\n title: null,\n generateNewLinkModalDescription: undefined,\n className: '',\n onAccessSettingsChangeAttempt: f => f,\n defaultPermissionOption: undefined,\n resources: [],\n selectedResources: [],\n onAssigneeResourcesChange: f => f,\n useOnlyInvite: false,\n onCloseModal: f => f,\n defaultInvitations: [],\n isEditDisabled: false,\n forceUserSlugModal: false,\n onUserSlugSet: f => f,\n EditDisabledMessageRenderer: <>,\n hideInviteMessageSection: false,\n onEmailsChange: f => f,\n renderAssignPrefillModal: f => f,\n showAssignPrefill: false,\n onDismissAccessRequest: f => f,\n settingsModalProps: {},\n predefinedUsers: [],\n onInvite: f => f,\n isAvatarListEnabled: true,\n useNewStyledPermissionDropdown: false,\n customErrorMessage: '',\n forcePublicDataSharing: false,\n hasTeamSlug: false,\n allowPlusInEmail: false,\n skipAssignToOrganizationModal: false,\n overridePublicDataSharing: false,\n assigneeLimitWithoutUpgrade: false,\n renderAppPrefillSection: f => f,\n handleEmailErrorText: null,\n onPillListChange: null,\n excludeDataOnlyUsers: false,\n allowRequestAccess: 'Yes',\n isLoading: false\n};\n\nexport default SharePanel;\n","import React, {\n useEffect,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport {\n arrayOf,\n bool,\n element,\n func,\n number,\n shape,\n string\n} from 'prop-types';\nimport classNames from 'classnames';\nimport { Tooltip } from '@jotforminc/uikit';\nimport IconPrivate from '../assets/svg/faq.svg';\n\nconst TabTitle = ({\n activeTab,\n disabled,\n index,\n onTabClick,\n title,\n tooltip,\n icon\n}) => {\n const ttRef = useRef();\n\n const tabClasses = useMemo(() => classNames('jShareModalTabs-tab', {\n active: activeTab === index,\n disabled\n }), [activeTab, disabled]);\n\n return (\n \n {icon}\n \n {title}\n \n {tooltip && (\n <>\n disabled && e.stopPropagation()}\n />\n {tooltip}\n \n )}\n \n );\n};\n\nTabTitle.propTypes = {\n activeTab: number.isRequired,\n disabled: bool,\n index: number.isRequired,\n onTabClick: func.isRequired,\n title: string.isRequired,\n tooltip: element,\n icon: element.isRequired\n};\n\nTabTitle.defaultProps = {\n disabled: false,\n tooltip: null\n};\n\nconst SharePanelTabs = ({\n SharePanelComponent,\n Tabs\n}) => {\n const [activeTab, setActiveTab] = useState(0);\n const onTabClick = index => () => setActiveTab(index);\n useEffect(() => {\n setActiveTab(0);\n }, [Tabs]);\n return (\n <>\n
    \n {Tabs.map(({\n title, disabled, tooltip, icon\n }, index) => (\n \n ))}\n
    \n {Tabs.map(({ content, isShare, title }, index) => (\n \n {isShare ? SharePanelComponent : content}\n
    \n ))}\n \n );\n};\n\nSharePanelTabs.propTypes = {\n SharePanelComponent: element.isRequired,\n Tabs: arrayOf(shape({})).isRequired\n};\n\nSharePanelTabs.defaultProps = {\n};\n\nexport default SharePanelTabs;\n","import React, {\n useRef, useMemo, forwardRef, useImperativeHandle, useState, useEffect, useLayoutEffect\n} from 'react';\nimport {\n shape, node, func, oneOfType, arrayOf, element, string\n} from 'prop-types';\nimport { StyledModal as Modal } from '@jotforminc/styled-modal';\nimport { Button } from '@jotforminc/magnet';\nimport SharePanel from '.';\nimport SharePanelTabs from './SharePanelTabs';\n\nconst ShareButton = forwardRef(({\n modalProps, shareProps, buttonProps, children, onClick, Tabs\n}, buttonRef) => {\n const [page, setPage] = useState();\n const modalRef = useRef();\n const sharePanelRef = useRef();\n const isTabbed = useMemo(() => Tabs.length > 0);\n\n const showModalPage = newPage => {\n modalRef.current.show();\n setPage(newPage);\n };\n\n useEffect(() => {\n if (!page) return;\n\n switch (page) {\n case 'assignees':\n return buttonRef.current.assigneeModalRef.current.show();\n case 'settings':\n return buttonRef.current.settingsModalRef.current.show();\n default:\n }\n }, [page]);\n\n useLayoutEffect(() => {\n if (page) {\n setPage(null);\n }\n }, [page]);\n\n const onButtonClick = e => {\n modalRef.current.show();\n if (onClick) {\n onClick(e);\n }\n };\n\n const onCloseModal = () => {\n modalRef.current.hide();\n };\n\n const SharePanelComponent = (\n \n );\n\n useImperativeHandle(buttonRef, () => ({\n ...sharePanelRef.current,\n modalRef: modalRef.current,\n showModalPage\n }));\n\n return (\n <>\n \n {isTabbed && }\n {!isTabbed && SharePanelComponent}\n \n \n \n );\n});\n\nShareButton.propTypes = {\n modalProps: shape({}).isRequired,\n shareProps: shape({}).isRequired,\n buttonProps: shape({}).isRequired,\n children: oneOfType([\n arrayOf(node),\n node\n ]).isRequired,\n onClick: func,\n Tabs: arrayOf(shape({\n title: string,\n content: element\n }))\n};\n\nShareButton.defaultProps = {\n onClick: null,\n Tabs: []\n};\n\nexport default ShareButton;\n","import React from 'react';\nimport { string } from 'prop-types';\nimport { ShareButton } from '@jotforminc/share-panel';\nimport { IconTurnArrowShortRightFilled } from '@jotforminc/svg-icons';\nimport { NUMBER_OR_STRING_PROPTYPE } from '../../constants/proptypes';\nimport { classNames } from '../../utils';\n\nconst SubmissionShareButton = ({ className, submissionID }) => {\n return (\n {\n return new Promise(resolve => {\n setTimeout(() => {\n resolve([...args]);\n }, 2000);\n });\n },\n features: { scheduleReminderEmail: true, companyAccessPermissions: true }\n }}\n buttonProps={{\n className: classNames('jfButton', 'forSubmissionShare', className),\n tabIndex: '-1'\n }}\n >\n \n Share Submission\n \n );\n};\n\nSubmissionShareButton.propTypes = {\n submissionID: NUMBER_OR_STRING_PROPTYPE.isRequired,\n className: string\n};\n\nSubmissionShareButton.defaultProps = {\n className: ''\n};\n\nexport default SubmissionShareButton;\n","import React, { forwardRef, useRef, useEffect } from 'react';\nimport {\n bool, string, arrayOf, func, shape\n} from 'prop-types';\nimport Tethered from 'react-tether';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport { connect } from 'react-redux';\n\nimport SVG from '../SVG';\nimport { classNames, ellipsisTruncate } from '../../utils';\nimport { NUMBER_OR_STRING_PROPTYPE, translatedProps } from '../../constants/proptypes';\nimport { activeSubmissionSelector } from '../../selectors';\n\nconst PDFButton = forwardRef(({\n onPDF,\n isChild,\n disabled,\n onSelectedPDF,\n isPDFDownloading,\n pdfTemplates,\n showAttachment,\n downloadUploads,\n isPDFMenuVisible,\n setPDFMenuVisibility,\n importedPDF,\n importedPdfIsConnected,\n renderOnlyList,\n iconName,\n t, // eslint-disable-line\n isSignSubmission,\n liteMode\n}, ref) => {\n const downloadStatusText = isPDFDownloading ? t.PREPARING : t.DOWNLOAD;\n const pdfMenuRef = useRef();\n\n const finalList = [{ id: '', title: t.CURRENT_VIEW, type: 'DOCUMENT' }, ...pdfTemplates];\n if (showAttachment) {\n finalList.push({ id: 'attachment', title: t.DOWNLOAD_ATTACHMENTS, type: 'ATTACHMENT' });\n }\n if (importedPDF && importedPdfIsConnected === 'Yes' && !isSignSubmission && !window.useFromPortal) {\n finalList.unshift({ id: '', title: t.DOWNLOAD_ORIGINAL_PDF, type: 'IMPORTED_PDF' });\n }\n\n const renderPDFTemplates = () => (\n finalList.map(({ id, title, type }) => (\n type === 'ATTACHMENT' ? (\n }\n onClick={downloadUploads}\n title={title}\n >\n {ellipsisTruncate(title, 42)}\n \n )\n : (\n }\n onClick={() => onSelectedPDF(id, type)}\n onMouseEnter={() => isChild && setPDFMenuVisibility(true)}\n onMouseLeave={() => isChild && setPDFMenuVisibility(false)}\n title={title}\n >\n {ellipsisTruncate(title, 42)}\n \n )\n ))\n );\n\n if (renderOnlyList) {\n return renderPDFTemplates();\n }\n\n useEffect(() => {\n if (isPDFMenuVisible && pdfMenuRef.current) {\n pdfMenuRef.current.focus();\n }\n }, [isPDFMenuVisible]);\n\n return (\n 1}\n >\n\n }\n onClick={() => onPDF()}\n disabled={disabled || isPDFDownloading ? 'disabled' : ''}\n onMouseEnter={() => isChild && setPDFMenuVisibility(true)}\n onMouseLeave={() => isChild && setPDFMenuVisibility(false)}\n >\n {isChild ? t.DOWNLOAD_AS_PDF : downloadStatusText}\n \n
    \n {renderPDFTemplates()}\n
    \n \n );\n});\n\nPDFButton.propTypes = {\n onPDF: func.isRequired,\n onSelectedPDF: func.isRequired,\n showAttachment: bool,\n downloadUploads: func,\n setPDFMenuVisibility: func.isRequired,\n isChild: bool,\n isPDFDownloading: bool,\n isPDFMenuVisible: bool,\n disabled: string,\n pdfTemplates: arrayOf(shape({\n id: NUMBER_OR_STRING_PROPTYPE.isRequired,\n title: string.isRequired\n })),\n importedPDF: string,\n renderOnlyList: bool,\n iconName: string,\n isSignSubmission: bool,\n ...translatedProps\n};\n\nPDFButton.defaultProps = {\n isChild: false,\n isPDFDownloading: false,\n isPDFMenuVisible: false,\n disabled: '',\n pdfTemplates: [],\n importedPDF: '',\n showAttachment: false,\n downloadUploads: f => f,\n renderOnlyList: false,\n iconName: 'IconDocumentPdfFilled',\n isSignSubmission: false\n};\n\nconst mapStateToProps = state => ({\n isSignSubmission: activeSubmissionSelector(state).isSignSubmission\n});\n\nexport default connect(mapStateToProps, null)(PDFButton);\n","/* eslint-disable complexity */\nimport React, {\n forwardRef, useState, useRef, useEffect\n} from 'react';\nimport {\n string,\n func,\n arrayOf,\n shape,\n bool\n} from 'prop-types';\nimport Tethered from 'react-tether';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport { generateFileName } from '@jotforminc/answer-utils';\nimport { handleCustomNavigation } from '@jotforminc/utils';\nimport { useDelayed } from '@jotforminc/hooks';\nimport { toast } from 'react-toastify';\n\nimport { connect } from 'react-redux';\nimport SVG from '../../components/SVG';\nimport { useClickOutsideState } from '../../hooks';\nimport { classNames } from '../../utils';\nimport { translatedProps, NUMBER_OR_STRING_PROPTYPE } from '../../constants/proptypes';\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\nimport {\n downloadSubmissions, checkDownloadStatus, generatePDF, generatePDFFilled, generateFillablePDF, generatePrintVersionPDF\n} from '../../api';\nimport GhostButton from '../../components/GhostButton';\nimport PDFButton from '../../components/PDFButton';\nimport {\n activeSubmissionIDSelector,\n formSelector,\n selectedSubmissionIDsSelector,\n submissionsSelector,\n isAdminSelector,\n fileUploadQidSelector,\n userSelector,\n allSubmissionsSelectedSelector,\n filterTextSelector,\n filterObjectSelector,\n filterResultCountSelector,\n questionsSelector,\n liteModeSelector,\n isSignFormSelector,\n activeTabIDSelector,\n getIsSentboxContextSelector,\n activeSubmissionSelector,\n encryptionProtocolSelector,\n isEncryptedSelector,\n getDownloadDisabledSubmissions\n} from '../../selectors';\nimport { prepareMultipleDownload, downloadAttachments } from '../../actions';\nimport { withInboxEnhancer } from '../../hocs/InboxEnhancer';\nimport { getFixedTimeFilters } from '../../utils/Submissions';\n\nconst defaultTetheredSettings = {\n attachment: 'bottom right',\n targetAttachment: 'top right',\n constraints: [{\n to: 'window',\n attachment: 'together',\n pin: true\n }],\n style: { zIndex: 100 }\n};\n\nconst activeTabFilter = {\n inbox: ['DELETED', 'ARCHIVED', 'CUSTOM'],\n archive: ['ACTIVE', 'DELETED'],\n trash: ['ACTIVE', 'ARCHIVED']\n};\n\n// eslint-disable-next-line max-statements\nexport const DownloadAllComponent = forwardRef(({\n form,\n submissionID,\n submissions,\n tetheredSettings,\n initiateMultipleDownload,\n downloadUploads,\n selectedSubmissionIDs,\n fileUploadQIDs,\n submissionCount,\n isAllSubmissionsSelected,\n className,\n menuClassName,\n subMenuClassName,\n disabled,\n useGhostButton,\n fullText,\n filterObject,\n liteMode,\n user,\n questions,\n eventTarget,\n t,\n isSignForm,\n activeTab,\n isSentboxContextSelector,\n isSignSubmission,\n isV1Encryption,\n downloadDisabledSubmissions\n}, ref) => {\n const {\n id: formID, importedPDF, importedPdfIsConnected, pdfTemplates = []\n } = form;\n const { username, email } = user;\n const [isDownloadAllMenuVisible, setDownloadAllMenuVisibility] = useClickOutsideState(false, [ref]);\n const [, clear, set] = useDelayed(setDownloadAllMenuVisibility, 100);\n const [isPDFMenuVisible, setPDFMenuVisibility] = useClickOutsideState(false, [ref]);\n const [, clearPDF, setPDF] = useDelayed(setPDFMenuVisibility, 100);\n const [isOverflowMenuVisible] = useClickOutsideState(false);\n const [isPDFDownloading, setPDFDownloadStatus] = useState(false);\n const downloadAllMenuRef = useRef();\n const branding21 = true;\n const noPdfTemplate = pdfTemplates.length < 1;\n const countOfSelectedSubmissions = submissions.length - selectedSubmissionIDs.length === 0 ? '' : selectedSubmissionIDs.length;\n const count = isAllSubmissionsSelected && selectedSubmissionIDs.length > 0 ? submissions.length - selectedSubmissionIDs.length : countOfSelectedSubmissions;\n const isHIPAA = form.isHIPAA === '1';\n\n const submissionExist = submissionCount > 0;\n const isSubmissionSelectedAfterSelectAll = isAllSubmissionsSelected && selectedSubmissionIDs.length !== 0;\n const isSelectAll = !isAllSubmissionsSelected && submissionExist && selectedSubmissionIDs.length === submissionCount;\n const isDeselectAll = isAllSubmissionsSelected && submissionExist && selectedSubmissionIDs.length === submissionCount;\n const checkDeselectAll = isDeselectAll ? '' : false;\n const allSubmissionsSelected = isSubmissionSelectedAfterSelectAll || isSelectAll ? true : checkDeselectAll;\n const isMultipleSubmissionSelected = allSubmissionsSelected || selectedSubmissionIDs.length > 0;\n // const enableButtons = isSubmissionSelected || isMultipleSubmissionSelected;\n const bulkSelectArray = (allSubmissionsSelected || isMultipleSubmissionSelected) ? selectedSubmissionIDs : [];\n const isDownloadAllowed = downloadDisabledSubmissions.every(downloadDisabledSubmission => !selectedSubmissionIDs.includes(downloadDisabledSubmission.id));\n\n const templateList = pdfTemplates.filter(temp => temp.type !== 'FORM');\n\n const getType = () => {\n let type = isAllSubmissionsSelected ? 'EXCLUDES' : 'INCLUDES';\n if (selectedSubmissionIDs.length < 1) {\n type = isSubmissionSelectedAfterSelectAll ? 'EXCLUDES' : 'ALL';\n }\n return type;\n };\n\n const type = getType();\n\n const onGenerateMultiplePDFFilled = () => {\n const actionType = 'INCLUDES';\n initiateMultipleDownload('importedPDF', actionType, activeTab);\n };\n\n const onDownloadAll = () => {\n setDownloadAllMenuVisibility(!isDownloadAllMenuVisible);\n };\n\n const checkDownload = id => {\n checkDownloadStatus(formID, id).then(({ status, url }) => {\n if (status === 'COMPLETED') {\n handleCustomNavigation(url, '_self', true);\n setPDFDownloadStatus(false);\n } else if (status === 'GENERATING' || status === 'UPLOADING') {\n setPDFDownloadStatus(true);\n setTimeout(() => {\n checkDownload(id);\n }, 5000);\n }\n });\n };\n\n const onGeneratePDF = (id, pdfType, tab = 'inbox') => {\n setPDFDownloadStatus(true);\n let generatePromise = null;\n if (pdfType === 'DOCUMENT' && !id) {\n generatePromise = generatePrintVersionPDF(formID, submissionID, { tabID: tab, liteMode });\n } else if (pdfType === 'DOCUMENT') {\n generatePromise = generatePDF(formID, id, submissionID, username, generateFileName(Object.values(questions)), liteMode, isHIPAA, tab);\n } else if (pdfType === 'IMPORTED_PDF') {\n generatePromise = generatePDFFilled(formID, submissionID);\n } else {\n generatePromise = generateFillablePDF(formID, id);\n }\n generatePromise.then(url => {\n setPDFDownloadStatus(false);\n setDownloadAllMenuVisibility(false);\n if (url) handleCustomNavigation(url, '_self', true);\n })\n .catch(() => {\n setPDFDownloadStatus(false);\n setDownloadAllMenuVisibility(false);\n toast.error(t.THERE_WAS_AN_ERROR_WHILE_DOWNLOADING_PDF_TRY_AGAIN, {\n position: toast.POSITION.TOP_RIGHT,\n className: 'error'\n });\n });\n };\n\n const onDownloadAllAttachments = () => {\n const isMultipleDownload = bulkSelectArray.length > 0 ? bulkSelectArray : 'all';\n downloadUploads(isMultipleDownload);\n };\n\n const onDownload = (docType, pdfID = '', pdfType = 'DOCUMENT') => {\n // eslint-disable-next-line no-nested-ternary\n const pdfAction = docType === 'pdf' ? (pdfID ? '-customizedVersion' : '-printVersion') : '';\n const actionType = type === 'ALL' ? 'All' : 'Selected';\n const action = `Download-${actionType}As${docType.toUpperCase()}${pdfAction}`;\n WatchmanRecorder.recordEvent(action, eventTarget);\n\n if (docType === 'pdf' && (selectedSubmissionIDs.length === 1 || submissionCount === 1) && type !== 'EXCLUDES') {\n return onGeneratePDF(pdfID, pdfType, activeTab);\n }\n\n let jobData = {\n type,\n submissionIDs: selectedSubmissionIDs,\n pdfType,\n tab: activeTab\n };\n\n if (fullText) jobData.fullText = fullText;\n if (filterObject) {\n const userTimeZone = user.time_zone || '';\n const fixedTimeFilter = getFixedTimeFilters(filterObject, userTimeZone);\n jobData = { ...jobData, ...fixedTimeFilter };\n }\n if (pdfID) {\n jobData.pdfID = pdfID;\n } else {\n jobData.inbox = '1';\n }\n\n jobData['status:ne'] = activeTabFilter[activeTab] ?? ['DELETED', 'ARCHIVED', 'CUSTOM'];\n downloadSubmissions(formID, docType, jobData, isHIPAA).then(({ result = {} }) => {\n if (result.status === 'success' && docType === 'pdf') {\n toast.success(t.WILL_SEND_EMAIL_ON_EXPORT_READY.replace('{email}', email), {\n type: toast.TYPE.SUCCESS,\n position: toast.POSITION.TOP_RIGHT,\n className: 'success',\n autoClose: false\n });\n }\n if (result.message === 'Job Received') {\n checkDownload(result.id);\n }\n });\n };\n\n const onPDF = () => {\n if (noPdfTemplate) {\n return onDownload('pdf');\n }\n\n setPDFMenuVisibility(!isPDFMenuVisible);\n setDownloadAllMenuVisibility(true);\n };\n\n const onSelectedPDF = (id, pdfType) => {\n setDownloadAllMenuVisibility(false);\n setPDFMenuVisibility(false);\n\n return onDownload('pdf', id, pdfType);\n };\n\n const downloadButtonText = count ? (\n <>\n {`${t.DOWNLOAD} `}\n {count}\n \n ) : t.DOWNLOAD_ALL;\n\n const clickHandler = fn => {\n return {\n onMouseUp: fn,\n onClick: fn\n };\n };\n\n const makeDownloadMenuVisible = () => {\n setDownloadAllMenuVisibility(true);\n };\n\n const onPdfPrintLeave = flag => {\n setPDFMenuVisibility(flag);\n };\n\n const tethered = {\n ...defaultTetheredSettings,\n ...tetheredSettings\n };\n\n useEffect(() => {\n if (isDownloadAllMenuVisible && downloadAllMenuRef.current) {\n downloadAllMenuRef.current.focus();\n }\n }, [isDownloadAllMenuVisible]);\n\n if (isSentboxContextSelector) return '';\n\n return (\n <>\n \n {!useGhostButton ? (\n }\n disabled={disabled || isPDFDownloading || !isDownloadAllowed || isV1Encryption ? 'disabled' : ''}\n aria-haspopup=\"menu\"\n {...clickHandler(onDownloadAll)}\n onClick={() => setDownloadAllMenuVisibility(!isDownloadAllMenuVisible)}\n >\n {isPDFDownloading ? t.PREPARING : downloadButtonText}\n \n ) : (\n setDownloadAllMenuVisibility(!isDownloadAllMenuVisible)}\n svgProps={{ className: 'jfInbox-actions-action-icon-svg forActionIcon' }}\n disabled={disabled || isPDFDownloading || !isDownloadAllowed || isV1Encryption ? 'disabled' : ''}\n className={classNames('jfInbox-actions-action-icon', { isDisabled: disabled })}\n />\n )}\n set(false)}\n className={classNames('jfMenu forDownloadAllMenu', menuClassName, { isVisible: isDownloadAllMenuVisible })}\n >\n { (importedPDF && importedPdfIsConnected === 'Yes' && !isSignSubmission) && !window.useFromPortal && (\n }\n {...clickHandler(onGenerateMultiplePDFFilled)}\n onMouseEnter={makeDownloadMenuVisible}\n // onMouseLeave={() => setDownloadAllMenuVisibility(false)}\n >\n {t.DOWNLOAD_ALL_AS_IMPORTED_PDF}\n\n \n )}\n }\n {...clickHandler(() => onDownload('csv'))}\n >\n {t.DOWNLOAD_ALL_AS_FORMAT.replace('{format}', 'CSV')}\n \n }\n {...clickHandler(() => onDownload('excel'))}\n >\n {t.DOWNLOAD_ALL_AS_FORMAT.replace('{format}', 'Excel')}\n \n {\n !isSignForm && (\n \n }\n {...clickHandler(() => { setPDFMenuVisibility(true); })}\n onMouseEnter={() => { setPDFMenuVisibility(true); }}\n onMouseLeave={() => { setPDF(false); }}\n >\n {t.DOWNLOAD_ALL_AS_FORMAT.replace('{format}', 'PDF')}\n \n \n \n
    \n \n )\n }\n {\n fileUploadQIDs.length > 0\n && (\n }\n onClick={onDownloadAllAttachments}\n >\n {t.DOWNLOAD_ATTACHMENTS}\n \n )\n }\n \n \n \n );\n});\n\nDownloadAllComponent.propTypes = {\n submissionID: string.isRequired,\n form: shape({}).isRequired,\n isAdmin: bool,\n user: shape({}).isRequired,\n initiateMultipleDownload: func,\n downloadUploads: func,\n className: string,\n disabled: string,\n selectedSubmissionIDs: arrayOf(NUMBER_OR_STRING_PROPTYPE),\n submissions: arrayOf(NUMBER_OR_STRING_PROPTYPE),\n fileUploadQIDs: arrayOf(NUMBER_OR_STRING_PROPTYPE),\n isAllSubmissionsSelected: bool,\n ...translatedProps,\n isSignSubmission: bool,\n isV1Encryption: bool,\n downloadDisabledSubmissions: arrayOf(string)\n};\n\nDownloadAllComponent.defaultProps = {\n initiateMultipleDownload: f => f,\n downloadUploads: f => f,\n isAdmin: null,\n className: '',\n disabled: '',\n selectedSubmissionIDs: [],\n submissions: [],\n fileUploadQIDs: [],\n isAllSubmissionsSelected: null,\n isSignSubmission: false,\n isV1Encryption: false,\n downloadDisabledSubmissions: []\n};\n\nconst mapState = state => ({\n isAdmin: isAdminSelector(state),\n form: formSelector(state),\n submissionID: activeSubmissionIDSelector(state),\n selectedSubmissionIDs: selectedSubmissionIDsSelector(state),\n submissions: submissionsSelector(state),\n fileUploadQIDs: fileUploadQidSelector(state),\n user: userSelector(state),\n isAllSubmissionsSelected: allSubmissionsSelectedSelector(state),\n filterText: filterTextSelector(state),\n filterObject: filterObjectSelector(state),\n submissionCount: filterResultCountSelector(state),\n questions: questionsSelector(state),\n liteMode: liteModeSelector(state),\n isSignForm: isSignFormSelector(state),\n activeTab: activeTabIDSelector(state),\n isSentboxContextSelector: getIsSentboxContextSelector(state),\n isSignSubmission: activeSubmissionSelector(state).isSignSubmission,\n isV1Encryption: isEncryptedSelector(state) && encryptionProtocolSelector(state) === 'JF-CSE-V1',\n downloadDisabledSubmissions: getDownloadDisabledSubmissions(state)\n});\n\nconst mapDispatch = {\n initiateMultipleDownload: prepareMultipleDownload,\n downloadUploads: downloadAttachments\n};\n\nexport default withInboxEnhancer('downloadAll', connect(mapState, mapDispatch))(DownloadAllComponent);\n","/* eslint-disable complexity */\nimport React, { useMemo, useRef } from 'react';\nimport Tethered from 'react-tether';\nimport {\n number,\n string,\n arrayOf,\n bool\n} from 'prop-types';\nimport { capitalizeFirstLetter } from '@jotforminc/utils';\nimport { useRole } from '@jotforminc/permissions';\nimport {\n classNames\n} from '../../utils';\n\nimport FeatureComponent from '../../components/Feature';\nimport {\n\n NUMBER_OR_STRING_PROPTYPE,\n enhancedProps\n\n} from '../../constants/proptypes';\nimport GhostButton from '../../components/GhostButton';\nimport FavoriteButton from '../../components/FavoriteButton';\nimport ReadButton from '../../components/ReadButton';\nimport ArchiveButton from '../../components/ArchiveButton';\nimport SubmissionShareButton from '../../components/SubmissionShareButton';\nimport RestoreButton from '../../components/RestoreButton';\nimport PurgeButton from '../../components/PurgeButton';\nimport DeleteButton from '../../components/DeleteButton';\nimport DownloadAllButton from '../DownloadAll';\nimport Pill from '../../components/Pill';\nimport { useClickOutsideState } from '../../hooks';\nimport { ROLES_DISABLE_TOOLBAR } from '../../constants';\n\nexport const SearchRightPanel = ({\n user,\n isAllSubmissionsSelected,\n isMultipleSubmissionSelected,\n selectedSubmissions,\n submissionCount,\n t,\n permissions,\n activeTab,\n filterText,\n isTeamContextAllowed,\n allowEdit,\n selectedSubmissionIDs,\n activeSubmissionIndex,\n isSubmissionDeleting,\n onMoveToTrash,\n onPurge,\n onArchive,\n onRestore,\n onSetSubmissionNew,\n onSetSubmissionsFlag,\n filteredSubmissions\n}) => {\n const overflowMenuRef = useRef(null);\n const [isOverflowMenuVisible, setOverflowMenuVisibility] = useClickOutsideState(false, [overflowMenuRef]);\n const isSubmissionSelected = activeSubmissionIndex !== -1;\n const role = useRole();\n\n const { flagged, unflagged } = useMemo(() => {\n return filteredSubmissions?.reduce((acc, curr) => {\n const isValid = (selectedSubmissions.indexOf(curr?.id) > -1 && !isAllSubmissionsSelected) || (isAllSubmissionsSelected && selectedSubmissions.indexOf(curr?.id) < 0);\n if (isValid) {\n if (curr?.flag === '0') {\n return {\n ...acc,\n unflagged: acc.unflagged + 1\n };\n }\n return {\n ...acc,\n flagged: acc.flagged + 1\n };\n }\n return {\n ...acc\n };\n }, { flagged: 0, unflagged: 0 });\n }, [isOverflowMenuVisible]);\n\n const { read, unread } = useMemo(() => {\n return filteredSubmissions?.reduce((acc, curr) => {\n const isValid = (selectedSubmissions.indexOf(curr?.id) > -1 && !isAllSubmissionsSelected) || (isAllSubmissionsSelected && selectedSubmissions.indexOf(curr?.id) < 0);\n if (isValid) {\n if (curr.new === '0') {\n return {\n ...acc,\n unread: acc.unread + 1\n };\n }\n return {\n ...acc,\n read: acc.read + 1\n };\n }\n return {\n ...acc\n };\n }, { read: 0, unread: 0 });\n }, [isOverflowMenuVisible]);\n\n const selectedCount = isAllSubmissionsSelected ? submissionCount - selectedSubmissions.length : selectedSubmissions.length;\n if (selectedCount === 0) {\n return null;\n }\n\n const [deleteDialogTitle, deleteDialogSubTitle] = isMultipleSubmissionSelected > 0\n ? [\n t.ARE_YOU_SURE_TO_PERMANENTLY_DELETE_SUBMISSIONS,\n t.SELECTED_SUBMISSIONS_WILL_BE_DELETED_PERMANENTLY.replace('{submissionCount}',\n isAllSubmissionsSelected ? submissionCount : selectedSubmissionIDs.length)\n ]\n : [t.ARE_YOU_SURE_TO_PERMANENTLY_DELETE_ACTIVE_SUBMISSION, t.CURRENT_SUBMISSION_WILL_BE_DELETED_PERMANENTLY];\n const enableButtons = isSubmissionSelected || isMultipleSubmissionSelected;\n\n const moreMenuTarget = `${capitalizeFirstLetter(activeTab)} - Select From List More Menu`;\n\n const shouldShowMore = ROLES_DISABLE_TOOLBAR.indexOf(role) === -1;\n\n const onOverflowMenuClick = () => {\n setOverflowMenuVisibility(!isOverflowMenuVisible);\n };\n\n if (activeTab === 'conversations') {\n return;\n }\n\n return (\n <>\n \n )}\n inactiveComponent={(\n \n {`${selectedCount} ${t.SELECTED}`}\n \n )}\n />\n \n \n \n \n \n
    \n {\n activeTab !== 'trash' && activeTab !== 'incompleteSubmissions'\n ? (\n <>\n {permissions.markAsUnread && (\n <>\n {unread > 0 && (\n \n )}\n {read > 0 && (\n \n )}\n
    \n \n )}\n {permissions.star && (\n <>\n {unflagged > 0 && (\n \n )}\n {flagged > 0 && (\n \n )}\n
    \n \n )}\n {permissions.archive && (\n \n )}\n {permissions.trash && isTeamContextAllowed && (allowEdit || activeTab !== 'sentbox') && (\n \n )}\n \n )}\n />\n \n ) : (\n <>\n \n \n \n )\n }\n
    \n \n \n )}\n />\n \n );\n};\n\nSearchRightPanel.propTypes = {\n submissionCount: number.isRequired,\n filterText: string.isRequired,\n selectedSubmissions: arrayOf(NUMBER_OR_STRING_PROPTYPE).isRequired,\n allowEdit: bool.isRequired,\n isTeamContextAllowed: bool.isRequired,\n ...enhancedProps\n};\n","/* eslint-disable max-lines */\n/* eslint-disable react/no-did-update-set-state */\nimport React, { Component } from 'react';\nimport { createPortal } from 'react-dom'; // ContextMenu\nimport { withRouter } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport {\n number,\n func,\n string,\n arrayOf,\n bool,\n shape\n} from 'prop-types';\n\nimport Tethered from 'react-tether'; // ContextMenu\nimport { withPermissions } from '@jotforminc/permissions';\nimport {\n CircleLoader\n} from '@jotforminc/apploaders';\nimport { Button } from '@jotforminc/magnet';\nimport { IconBars } from '@jotforminc/svg-icons';\nimport { capitalizeFirstLetter, nodeContains } from '@jotforminc/utils';\nimport { hasEncryptionKey } from '@jotforminc/form-encryption';\nimport SearchPanelToolbar from '../SearchPanelToolbar';\nimport FilterResultBar from '../../components/FilterResultBar';\nimport Warning from '../../components/Warnings';\nimport SubmissionList from '../../components/SubmissionList';\nimport NoResult from '../../components/NoResult';\nimport NoSubmission from '../../components/NoSubmission';\nimport NoPermission from '../../components/NoPermission';\nimport SubmissionListItemBase from '../../components/SubmissionListItem';\nimport Pill from '../../components/Pill';\nimport ContextMenu from '../../components/ContextMenu'; // ContextMenu\nimport ArchiveButton from '../../components/ArchiveButton'; // ContextMenu\nimport ReadButton from '../../components/ReadButton'; // ContextMenu\nimport FavoriteButton from '../../components/FavoriteButton'; // ContextMenu\nimport DeleteButton from '../../components/DeleteButton'; // ContextMenu\n\nimport {\n classNames, updateLocationParams, findIndexByID, parseLocationParams, contextMenuRenderer\n} from '../../utils';\nimport { withInboxEnhancer } from '../../hocs/InboxEnhancer';\nimport { withFormEnhancer } from '../../hocs/SubmissionEnhancer';\n\nimport {\n fetchSubmission,\n setSubmissionFlag,\n selectSubmission,\n selectBulkSubmissions,\n setFilterObject,\n fetchQuestionValues,\n renewSubmission,\n updateBulkSubmission,\n deleteBulkSubmission,\n setHighlightPendingApproval,\n deleteSubmission,\n fetchForm,\n fetchQuestions,\n renewQuestions,\n renewForm,\n setViews,\n setSettings,\n setCampaignSubmissionContentVisiblity\n} from '../../actions';\n\nimport {\n formIDSelector,\n questionsSelector,\n liteModeSelector,\n questionOrdersSelector,\n tagQuestionSelector,\n activeSubmissionIDSelector,\n filterTextSelector,\n filterResultCountSelector,\n selectedSubmissionIDsSelector,\n filteredSubmissionsSelector,\n filteredActiveSubmissionIndexSelector,\n unreadSubmissionCountSelector,\n appLoadedSelector,\n submissionDateFormatSelector,\n submissionDateLanguageSelector,\n filterObjectSelector,\n questionValuesSelector,\n activeSubmissionSelector,\n filteredSubmissionsLoadingSelector,\n isUnreadSelectedSelector,\n isFavoriteSelectedSelector,\n submissionEditModeSelector,\n headerFieldSelector,\n subheaderFieldSelector,\n userTypeSelector,\n formTitleSelector,\n activeTabIDSelector,\n isSubmissionViewNotAllowedSelector,\n isFormOwnerSelector,\n allSubmissionsSelectedSelector,\n formLoadingSelector,\n questionsLoadingSelector,\n isAllSentBoxSelector,\n userFormsSelector,\n isPreviousOrdersSelector,\n isPwaSelector, editSubmissionPreference,\n getUserTeamRoles, isTeamContextAllowedSelector,\n encryptionStatusSelector, submissionsDeletingSelector,\n userSelector, submissionCountSelector, isSignFormSelector,\n previousOrdersTypeSelector, isEncryptedSelector, encryptionProtocolSelector, campaignActiveSelector,\n formSelector,\n getAiAgents\n} from '../../selectors';\n\nimport {\n questionPropType,\n questionsPropType,\n questionOrdersPropType,\n submissionsPropType,\n NUMBER_OR_STRING_PROPTYPE,\n headerFieldPropType,\n enhancedProps,\n submissionPropType\n} from '../../constants/proptypes';\n\nimport {\n LEFT_PANEL_CLASS,\n SUBMISSION_API_LIMIT,\n FILTER_KEYWORDS,\n NAVIGATION_PANEL_CLASS,\n SEARCH_PROHIBITED_FIELDS,\n MOBILE_MAX_WIDTH,\n MOBILE_CLASS\n} from '../../constants';\nimport AdvanceSearch from '../../components/AdvanceSearch';\nimport PurgeButton from '../../components/PurgeButton';\nimport RestoreButton from '../../components/RestoreButton';\nimport EditButton from '../../components/EditButton';\nimport { getInboxViews, saveInboxView, updateInboxView } from '../../api';\nimport { SearchRightPanel } from './SearchRightPanel';\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\n\nconst SubmissionListItem = withFormEnhancer(SubmissionListItemBase);\n\nexport class SearchPanelComponent extends Component {\n constructor(props) {\n super(props);\n\n this.submissionList = null;\n this.onSetSubmission = this.onSetSubmission.bind(this);\n this.registerSubmissionListRef = this.registerSubmissionListRef.bind(this);\n this.onClearSelectedSubmissions = this.onClearSelectedSubmissions.bind(this);\n this.onPillClick = this.onPillClick.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.toggleNavigationMenu = this.toggleNavigationMenu.bind(this);\n this.toggleContextMenu = this.toggleContextMenu.bind(this); // ContextMenu\n this.hideContextMenu = this.hideContextMenu.bind(this); // ContextMenu\n this.setContextMenuState = this.setContextMenuState.bind(this);\n this.createNewTab = this.createNewTab.bind(this);\n this.hideResultBar = this.hideResultBar.bind(this);\n this.closeContextMenu = this.closeContextMenu.bind(this);\n\n this.state = {\n contextMenuX: null,\n contextMenuY: null,\n contextMenuVisibility: false,\n showFilterResultBar: false\n };\n\n this.contextMenuRef = React.createRef();\n }\n\n componentDidMount() {\n document.addEventListener('resize', this.scrollToSubmission, false);\n }\n\n componentDidUpdate({\n submissionIndex: submissionIndexPrev,\n submissionID: submissionIDPrev,\n formID: formIDPrev,\n filterObject: filterObjectPrev\n }) {\n const {\n submissionID: submissionIDCurrent,\n submissionIndex: submissionIndexCurrent,\n formID: formIDCurrent,\n onActiveSubmissionChange,\n filterObject,\n activeTab,\n allowEdit,\n permissions\n } = this.props;\n const { contextMenuVisibility } = this.state;\n const isSubmissionIndexChanged = submissionIndexCurrent !== -1 && submissionIndexPrev !== submissionIndexCurrent;\n const isSubmissionIdChanged = submissionIDCurrent !== submissionIDPrev;\n\n if (formIDPrev !== formIDCurrent) {\n this.onClearSelectedSubmissions();\n }\n\n if (isSubmissionIdChanged || isSubmissionIndexChanged) {\n this.scrollToSubmission();\n\n const { sid } = parseLocationParams();\n\n if (sid !== submissionIDCurrent) {\n onActiveSubmissionChange(submissionIDCurrent);\n }\n }\n\n if (JSON.stringify(filterObject) !== JSON.stringify(filterObjectPrev)) {\n if (!(Object.values(filterObject).length === 0 || (Object.values(filterObject).length === 1 && filterObject.timeFilterText === 'All time'))) {\n this.setState({ showFilterResultBar: true });\n } else {\n this.setState({ showFilterResultBar: false });\n }\n }\n\n const { isContextWillBePopulated } = contextMenuRenderer(activeTab, allowEdit, permissions);\n if (contextMenuVisibility && isContextWillBePopulated) {\n document.addEventListener('click', this.closeContextMenu, false);\n } else {\n document.removeEventListener('click', this.closeContextMenu, false);\n }\n }\n\n handleFilterChange({ target: { value } }) {\n const { updateFilterText } = this.props;\n updateFilterText(value);\n }\n\n onSetSubmission(selectedSubmission) {\n const {\n onActiveSubmissionChange, changeActiveForm, isAllSentBox, formID\n } = this.props;\n\n if (isAllSentBox && selectedSubmission?.form_id !== formID) {\n const { form } = selectedSubmission;\n const { properties, questions, ...formData } = form;\n const sanitizedForm = {\n ...formData,\n ...properties,\n id: form.id,\n pdfTemplates: [],\n new: parseInt(form.new, 10),\n count: parseInt(form.count, 10),\n flag: parseInt('0', 10)\n };\n changeActiveForm(questions, sanitizedForm);\n }\n onActiveSubmissionChange(selectedSubmission?.id);\n }\n\n onClearSelectedSubmissions() {\n const { onSelectBulkSubmission } = this.props;\n onSelectBulkSubmission('clear');\n }\n\n onPillClick(e) {\n const {\n liteMode,\n enablePillClick,\n updateFilterText,\n filterText,\n formID\n } = this.props;\n\n if (liteMode && enablePillClick) {\n // Open inbox on myforms\n if (global.window.JFComponents && global.window.JFComponents.navigateInbox) {\n global.window.JFComponents.navigateInbox(e.nativeEvent, formID, FILTER_KEYWORDS.UNREAD, true);\n }\n } else if (enablePillClick) {\n // toggle filter\n updateFilterText(filterText === FILTER_KEYWORDS.UNREAD ? '' : FILTER_KEYWORDS.UNREAD);\n }\n }\n\n get renderUnreadItems() {\n const {\n unreadSubmissionCount,\n enablePillClick,\n t,\n activeTab\n } = this.props;\n\n return (Boolean(unreadSubmissionCount) && activeTab !== 'trash') && (\n
    \n \n {unreadSubmissionCount}\n {` ${t.UNREAD}`}\n \n
    \n );\n }\n\n setContextMenuState(target) {\n const isSubmission = this.isTargetSubmission(target);\n if (isSubmission) {\n const { removeClass } = this.props;\n removeClass(LEFT_PANEL_CLASS);\n }\n if (!this.contextMenuRef || !this.contextMenuRef.current) return;\n const isElementContains = element => target && element instanceof global.Element && (element === target || nodeContains(element, target));\n const currentContains = isElementContains(this.contextMenuRef.current);\n const selfContains = isElementContains(this.contextMenuRef.current.self);\n\n if (currentContains || selfContains) return;\n this.setState({ contextMenuVisibility: false });\n }\n\n createNewTab(tabName = '') {\n const {\n history,\n onSetViews,\n formID,\n filterObject\n } = this.props;\n saveInboxView(formID, { filterObject, name: tabName.length > 0 ? tabName : 'Untitled Tab' }).then(tab => {\n getInboxViews(formID).then(newTabs => {\n onSetViews(newTabs);\n history.push(updateLocationParams({ tab: tab.id, sid: '', filterObject }));\n WatchmanRecorder.recordEvent('createNewTab', 'SearchPanelToolbar');\n });\n });\n }\n\n hideResultBar() {\n this.setState({ showFilterResultBar: false });\n }\n\n registerSubmissionListRef(ref) {\n this.submissionList = ref;\n }\n\n scrollToSubmission() {\n if (this.scrollTimeout) {\n clearTimeout(this.scrollTimeout);\n }\n\n this.scrollTimeout = setTimeout(() => {\n if (!this.submissionList) return;\n\n const { submissionID, filteredSubmissions } = this.props;\n const rowIndex = findIndexByID(filteredSubmissions, submissionID);\n\n if (rowIndex > -1) {\n this.submissionList.scrollToCell({ columnIndex: 0, rowIndex });\n }\n }, 17);\n }\n\n toggleNavigationMenu() {\n const { toggleClass } = this.props;\n toggleClass(NAVIGATION_PANEL_CLASS);\n }\n\n isTargetSubmission(target) {\n // Even pressing long on submission may return undefined sid, thats why we handle it with explicit className check\n const { className: targetClass = {} } = target || {};\n const isSubmission = typeof targetClass === 'string' && (targetClass.includes('jfList-item') || targetClass?.includes('jfSubmission-header-answer'));\n return isSubmission;\n }\n\n closeContextMenu(e) {\n const contextMenu = e.target.closest('.jfMenu.isContextMenu.isVisible');\n if (!contextMenu) {\n this.hideContextMenu();\n }\n }\n\n /* ContextMenu */\n toggleContextMenu(e, submission) {\n const { setSettingsPanel, activeSubmission, activeTab } = this.props;\n\n if ('signDocument' in activeSubmission) {\n return;\n }\n\n const { clientX, clientY, target } = e;\n const openSettingsPanel = !this.isTargetSubmission(target)\n && window.innerWidth <= MOBILE_MAX_WIDTH && activeTab === 'inbox';\n\n if (submission) {\n this.setState({\n contextMenuX: clientX,\n contextMenuY: clientY,\n contextMenuVisibility: true\n });\n\n this.onSetSubmission(submission);\n } else if (openSettingsPanel) {\n setSettingsPanel({\n isOpened: true\n });\n }\n e.preventDefault();\n }\n\n // TODO: There is an enormous inconsistency between mobile and desktop layout state transitions\n // TODO: All these layout updates will be moved to redux\n hideContextMenu({ target } = {}) {\n const { hasClass } = this.props;\n if (hasClass(MOBILE_CLASS)) {\n setTimeout(() => {\n this.setContextMenuState(target);\n }, 0);\n } else {\n this.setContextMenuState(target);\n }\n }\n\n renderContextMenuAnchor() {\n const {\n contextMenuX,\n contextMenuY\n } = this.state;\n\n return createPortal(\n ,\n global.document.body\n );\n }\n /* ContextMenu */\n\n // eslint-disable-next-line complexity\n render() {\n const {\n t,\n userType,\n formTitle,\n isUnreadSelected,\n isFavoriteSelected,\n activeSubmission,\n submissionCount,\n submissionsCount,\n filterResultCount,\n questions,\n tagQuestion,\n onSubmissionRequest,\n onSetSubmissionFlag,\n submissionID,\n selectedSubmissions,\n isAllSubmissionsSelected,\n onSelectSubmission,\n onSubmissionDelete,\n filteredSubmissions,\n appLoaded,\n filterText,\n updateFilterText,\n updateFilterObject,\n submissionDateFormat,\n submissionDateLanguage,\n filterObject,\n onSelectBulkSubmission,\n questionValues,\n getQuestionValues,\n submissionsLoading,\n disableDeleteConfirmation,\n onUpdateBulkSubmission,\n onDeleteBulkSubmission,\n headerField,\n subheaderField,\n activeTab,\n onEdit,\n isSubmissionViewNotAllowed,\n onRenewSubmission,\n toggleClass,\n hasClass,\n addClass,\n removeClass,\n permissions,\n isFormOwner,\n changeHighlightPendingApproval,\n isAllSentBox,\n formLoading,\n questionsLoading,\n userForms,\n isPreviousOrders,\n isPwa,\n previousOrdersType,\n isSignForm,\n allowEdit,\n teamRole,\n isTeamContextAllowed,\n encryptionStatus,\n isEncrypted,\n formID,\n encryptionProtocol,\n isEditMode,\n liteMode,\n campaignActive,\n showCampaignSubmission,\n user,\n changeFilter,\n form,\n aiAgents\n } = this.props;\n const isMultipleSubmissionSelected = selectedSubmissions.length > 0;\n const isAllSentboxWaiting = isAllSentBox && (formLoading || questionsLoading);\n const bulkUpdateArray = (isMultipleSubmissionSelected || isAllSubmissionsSelected) ? selectedSubmissions : [activeSubmission.id];\n const hasSubmissions = filteredSubmissions.length > 0;\n const [deleteDialogTitle, deleteDialogSubTitle] = isMultipleSubmissionSelected > 0\n ? [t.ARE_YOU_SURE_TO_PERMANENTLY_DELETE_SUBMISSIONS, t.SELECTED_SUBMISSIONS_WILL_BE_DELETED_PERMANENTLY.replace('{submissionCount}', selectedSubmissions.length)]\n : [t.ARE_YOU_SURE_TO_PERMANENTLY_DELETE_ACTIVE_SUBMISSION, t.CURRENT_SUBMISSION_WILL_BE_DELETED_PERMANENTLY];\n const questionList = Object.values(questions)\n .filter(question => question && SEARCH_PROHIBITED_FIELDS.indexOf(question.type) === -1 && ['tags'].indexOf(question.qid) === -1)\n .reduce((prev, curr) => {\n return {\n ...prev,\n [curr.qid]: curr\n };\n }, {});\n\n const onArchive = value => () => {\n this.hideContextMenu();\n onUpdateBulkSubmission(bulkUpdateArray, { prop: 'status', value: value ? 'ARCHIVED' : 'ACTIVE', status: activeSubmission.status });\n onSelectBulkSubmission('clear');\n };\n\n const onSetSubmissionNew = shouldRead => {\n const value = shouldRead ?? (isUnreadSelected ? '0' : '1');\n onUpdateBulkSubmission(bulkUpdateArray, { prop: 'new', value, status: activeSubmission.status });\n this.setState({ contextMenuVisibility: false });\n };\n\n const onSetSubmissionFlags = shouldStar => {\n const value = shouldStar ?? (isFavoriteSelected ? '0' : '1');\n onUpdateBulkSubmission(bulkUpdateArray, { prop: 'flag', value, status: activeSubmission.status });\n this.setState({ contextMenuVisibility: false });\n };\n\n const onPurge = () => {\n this.hideContextMenu();\n onDeleteBulkSubmission(bulkUpdateArray);\n onSelectBulkSubmission('clear');\n };\n\n const onPurgeAll = () => {\n onDeleteBulkSubmission(filteredSubmissions.map(submission => submission.id));\n onSelectBulkSubmission('clear');\n };\n\n const onMoveToTrash = () => {\n this.hideContextMenu();\n onUpdateBulkSubmission(bulkUpdateArray, { prop: 'status', value: 'DELETED', status: activeSubmission.status });\n onSelectBulkSubmission('clear');\n };\n\n const onRestore = () => {\n this.hideContextMenu();\n onUpdateBulkSubmission(bulkUpdateArray, { prop: 'status', value: 'ACTIVE', status: activeSubmission.status });\n onSelectBulkSubmission('clear');\n };\n\n const { // ContextMenu\n contextMenuVisibility, // ContextMenu\n showFilterResultBar\n } = this.state; // ContextMenu\n\n const renderTethered = hasSubmissions && (activeTab !== 'sentbox' || permissions?.editSubmissions) && activeTab !== 'incompleteSubmissions';\n const isArchived = activeTab === 'archive';\n const isCustomView = (/[0-9]/).test(activeTab);\n const isIncomplete = activeTab === 'incompleteSubmissions';\n const canCreateTab = !isIncomplete && !isCustomView && isFormOwner && Object.keys(filterObject).length > 0 && !isSignForm && filterResultCount > 0;\n const rightClickTarget = `${capitalizeFirstLetter(activeTab)} - Submission List Right click`;\n const { isContextWillBePopulated, contextMenuRenderGuide } = contextMenuRenderer(activeTab, allowEdit, permissions);\n const isMobile = window.innerWidth <= MOBILE_MAX_WIDTH;\n const isContextMenuVisible = isContextWillBePopulated && contextMenuVisibility && user.role !== 'readOnly';\n const showActions = isAllSubmissionsSelected || isMultipleSubmissionSelected;\n // eslint-disable-next-line no-nested-ternary\n const rowHeight = 90;\n\n return (\n
    \n {renderTethered && isTeamContextAllowed && (\n \n {this.renderContextMenuAnchor()}\n \n {contextMenuRenderGuide.restoreButton && (\n <>\n \n \n \n )}\n {contextMenuRenderGuide.editButton && (\n <>\n {contextMenuRenderGuide.deleteButton && (\n \n )}\n {\n this.hideContextMenu();\n onEdit();\n }}\n activeTab={activeTab}\n />\n \n )}\n {contextMenuRenderGuide.archiveGroup && (\n <>\n {contextMenuRenderGuide.archiveButton && (\n \n )}\n {contextMenuRenderGuide.readButton && (\n \n )}\n {contextMenuRenderGuide.favoriteButton && (\n \n )}\n {contextMenuRenderGuide.archiveDeleteButton && (\n \n )}\n \n )}\n \n \n )}\n
    \n {isMobile && (\n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n )}\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n {activeTab === 'trash' && submissionCount > 0 && (\n
    \n
    \n
    \n \n {t.SUBMISSIONS_IN_TRASH_EXPIRY_MESSAGE}\n
    \n \n
    \n \n
    \n
    \n
    \n )}\n updateFilterObject({})}\n t={t}\n />\n \n {(((!appLoaded && !hasSubmissions) || submissionsLoading) || isAllSentboxWaiting) && (\n
    \n \n
    \n )}\n {appLoaded && !hasSubmissions && !filterText && !submissionsLoading && isSubmissionViewNotAllowed && }\n {appLoaded && !hasSubmissions && !filterText && !submissionsLoading && !isSubmissionViewNotAllowed && (\n {\n updateFilterObject({});\n }} t={t}\n activeTab={activeTab}\n />\n )}\n {appLoaded && !hasSubmissions && filterText && !submissionsLoading && (\n 0}\n t={t}\n clearFilter={() => updateFilterText({})}\n />\n )}\n {((!submissionsLoading && hasSubmissions) && (!isAllSentboxWaiting)) && (\n (\n {\n const isSelected = selectedSubmissions.indexOf(submission.id) > -1;\n\n if (isAllSubmissionsSelected && !isSelected) return true;\n\n if (!isAllSubmissionsSelected && isSelected) return true;\n\n return false;\n })()}\n onRenewSubmission={onRenewSubmission}\n setSubmission={() => this.onSetSubmission(submission)}\n onPurgeSubmission={() => onSubmissionDelete(submission.id)}\n onSelectSubmission={() => onSelectSubmission(submission.id)}\n onSetSubmissionFlag={isFavorite => onSetSubmissionFlag(submission.id, isFavorite)}\n className={classNames((submission.new === '1' || submission.new === '2') && !isAllSentBox && 'isUnread', submission.id === submissionID && 'isActive')}\n t={t}\n submissionDateFormat={submissionDateFormat}\n submissionDateLanguage={submissionDateLanguage}\n isFormOwner={isFormOwner}\n isPreviousOrders={isPreviousOrders}\n isPwa={isPwa}\n isTeamContextAllowed={isTeamContextAllowed}\n showTaskStatus={isFormOwner || teamRole.includes('data_read_only') || teamRole.includes('data_collaborator')}\n changeFilter={changeFilter}\n aiAgents={aiAgents}\n />\n )}\n editMode={isEditMode}\n liteMode={liteMode}\n activeTab={activeTab}\n filterObject={filterObject}\n campaignActive={campaignActive}\n submissionID={submissionID}\n showCampaignSubmission={showCampaignSubmission}\n />\n )}\n
    \n
    \n );\n }\n}\n\nSearchPanelComponent.propTypes = {\n form: shape({}).isRequired,\n activeSubmission: submissionPropType.isRequired,\n questions: questionsPropType.isRequired,\n questionOrders: questionOrdersPropType.isRequired, // eslint-disable-line\n headerField: headerFieldPropType,\n subheaderField: headerFieldPropType,\n filteredSubmissions: submissionsPropType.isRequired,\n submissionCount: number.isRequired,\n onSubmissionRequest: func.isRequired,\n onActiveSubmissionChange: func.isRequired,\n onSetSubmissionFlag: func.isRequired,\n onSelectSubmission: func.isRequired,\n onSelectBulkSubmission: func.isRequired,\n updateFilterText: func.isRequired,\n getQuestionValues: func.isRequired,\n filterText: string.isRequired,\n filterObject: shape({}).isRequired,\n questionValues: shape({}).isRequired,\n selectedSubmissions: arrayOf(NUMBER_OR_STRING_PROPTYPE).isRequired,\n tagQuestion: questionPropType,\n submissionIndex: number,\n appLoaded: bool,\n submissionID: NUMBER_OR_STRING_PROPTYPE,\n enablePillClick: bool,\n submissionDateFormat: string.isRequired,\n submissionsLoading: bool,\n disableDeleteConfirmation: bool,\n isSubmissionViewNotAllowed: bool,\n changeHighlightPendingApproval: func.isRequired,\n isPreviousOrders: bool,\n isPwa: bool,\n allowEdit: bool.isRequired,\n teamRole: shape({}).isRequired,\n isTeamContextAllowed: bool.isRequired,\n isEncrypted: bool,\n encryptionProtocol: string,\n ...enhancedProps,\n showCampaignSubmission: func,\n user: shape({}),\n aiAgents: shape({}).isRequired,\n changeFilter: func.isRequired\n};\n\nSearchPanelComponent.defaultProps = {\n appLoaded: false,\n submissionIndex: 0,\n submissionID: undefined,\n tagQuestion: null,\n enablePillClick: true,\n submissionsLoading: false,\n disableDeleteConfirmation: false,\n isSubmissionViewNotAllowed: false,\n headerField: undefined,\n subheaderField: undefined,\n isPreviousOrders: false,\n isPwa: false,\n isEncrypted: false,\n encryptionProtocol: 'JF-CSE-V1',\n showCampaignSubmission: f => f,\n user: {}\n};\n\nconst mapStateToProps = stateProps => ({\n form: formSelector(stateProps),\n user: userSelector(stateProps),\n formID: formIDSelector(stateProps),\n formTitle: formTitleSelector(stateProps),\n questions: questionsSelector(stateProps),\n userType: userTypeSelector(stateProps),\n liteMode: liteModeSelector(stateProps),\n questionOrders: questionOrdersSelector(stateProps),\n filteredSubmissions: filteredSubmissionsSelector(stateProps),\n submissionCount: filterResultCountSelector(stateProps),\n tagQuestion: tagQuestionSelector(stateProps),\n headerField: headerFieldSelector(stateProps),\n subheaderField: subheaderFieldSelector(stateProps),\n activeSubmission: activeSubmissionSelector(stateProps),\n isUnreadSelected: isUnreadSelectedSelector(stateProps),\n isFavoriteSelected: isFavoriteSelectedSelector(stateProps),\n submissionID: activeSubmissionIDSelector(stateProps),\n submissionIndex: filteredActiveSubmissionIndexSelector(stateProps),\n filterText: filterTextSelector(stateProps),\n filterResultCount: filterResultCountSelector(stateProps),\n submissionsCount: submissionCountSelector(stateProps),\n selectedSubmissions: selectedSubmissionIDsSelector(stateProps),\n isAllSubmissionsSelected: allSubmissionsSelectedSelector(stateProps),\n unreadSubmissionCount: unreadSubmissionCountSelector(stateProps),\n appLoaded: appLoadedSelector(stateProps),\n submissionDateFormat: submissionDateFormatSelector(stateProps),\n submissionDateLanguage: submissionDateLanguageSelector(stateProps),\n filterObject: filterObjectSelector(stateProps),\n questionValues: questionValuesSelector(stateProps),\n submissionsLoading: filteredSubmissionsLoadingSelector(stateProps),\n formLoading: formLoadingSelector(stateProps),\n questionsLoading: questionsLoadingSelector(stateProps),\n isEditMode: submissionEditModeSelector(stateProps),\n activeTab: activeTabIDSelector(stateProps),\n isFormOwner: isFormOwnerSelector(stateProps),\n teamRole: getUserTeamRoles(stateProps),\n isAllSentBox: isAllSentBoxSelector(stateProps),\n isSignForm: isSignFormSelector(stateProps),\n isSubmissionViewNotAllowed: isSubmissionViewNotAllowedSelector(stateProps),\n isSubmissionDeleting: submissionsDeletingSelector(stateProps),\n userForms: userFormsSelector(stateProps),\n isPreviousOrders: isPreviousOrdersSelector(stateProps),\n isPwa: isPwaSelector(stateProps),\n previousOrdersType: previousOrdersTypeSelector(stateProps),\n allowEdit: editSubmissionPreference(stateProps),\n isTeamContextAllowed: isTeamContextAllowedSelector(stateProps),\n encryptionStatus: encryptionStatusSelector(stateProps),\n isEncrypted: isEncryptedSelector(stateProps),\n encryptionProtocol: encryptionProtocolSelector(stateProps),\n campaignActive: campaignActiveSelector(stateProps),\n aiAgents: getAiAgents(stateProps)\n});\n\nconst mapDispatchToProps = {\n onSubmissionDelete: deleteSubmission,\n onSubmissionRequest: fetchSubmission,\n onSetSubmissionFlag: setSubmissionFlag,\n onUpdateBulkSubmission: updateBulkSubmission,\n onDeleteBulkSubmission: deleteBulkSubmission,\n setFilterObject,\n onSetViews: setViews,\n onRenewSubmission: renewSubmission,\n onSelectSubmission: selectSubmission,\n onSelectBulkSubmission: selectBulkSubmissions,\n getQuestionValues: fetchQuestionValues,\n changeHighlightPendingApproval: setHighlightPendingApproval,\n fetchForm,\n fetchQuestions,\n renewQuestions,\n renewForm,\n setSettingsPanel: setSettings,\n showCampaignSubmission: setCampaignSubmissionContentVisiblity\n};\n\nconst mergeProps = (stateProps, dispatchProps, componentProps) => {\n const { activeSubmission } = stateProps;\n return {\n ...componentProps,\n ...stateProps,\n ...dispatchProps,\n changeActiveForm: (questions, form) => {\n dispatchProps.renewForm(form);\n dispatchProps.renewQuestions(form.id, questions);\n },\n onSubmissionRequest: ({ startIndex: offset = 0, stopIndex = SUBMISSION_API_LIMIT }) => {\n const limit = (stopIndex - offset) + 1;\n dispatchProps.onSubmissionRequest(offset, limit);\n },\n onEdit: () => {\n componentProps.history.push(updateLocationParams({ sid: activeSubmission.id, editMode: true }));\n },\n onActiveSubmissionChange: sid => {\n componentProps.history.push(updateLocationParams({ sid }));\n },\n updateFilterText: filterText => {\n return componentProps.history.push(updateLocationParams({ filterText }));\n },\n updateFilterObject: filterObject => {\n const { activeTab, formID } = stateProps;\n\n if ((/[0-9]/).test(activeTab)) {\n updateInboxView(formID, activeTab, { filterObject });\n }\n\n if (Object.keys(filterObject).length > 0) {\n return componentProps.history.push(updateLocationParams({ filterObject }));\n }\n\n componentProps.history.replace(/\\?.*/, '');\n },\n changeFilter: filterObject => {\n if (Object.keys(filterObject).length > 0) {\n return componentProps.history.push(updateLocationParams({ filterObject }));\n }\n\n componentProps.history.replace(/\\?.*/, '');\n }\n };\n};\n\nconst enhance = withInboxEnhancer('searchPanel', connect(mapStateToProps, mapDispatchToProps, mergeProps));\n// eslint-disable-next-line max-lines\n\nexport default withPermissions(withRouter(enhance(SearchPanelComponent)));\n","import React, { Component } from 'react';\nimport { arrayOf, string, shape } from 'prop-types';\n\nimport './Dropdown.scss';\n\nclass Dropdown extends Component {\n get wrapperClassNames() {\n const {\n wrapperClassName\n } = this.props;\n\n return [\n 'jfDropdownInbox-wrapper',\n wrapperClassName\n ].filter(a => a).join(' ');\n }\n\n get classNames() {\n const {\n className\n } = this.props;\n\n return [\n 'jfDropdownInbox',\n className\n ].filter(a => a).join(' ');\n }\n\n get renderItems() {\n const {\n items\n } = this.props;\n\n return items.map(({ value, text }) => );\n }\n\n render() {\n const {\n items,\n className,\n wrapperClassName,\n ...remainingProps\n } = this.props;\n\n return (\n
    \n \n
    \n );\n }\n}\n\nDropdown.propTypes = {\n className: string,\n wrapperClassName: string,\n items: arrayOf(shape({\n value: string,\n text: string\n }))\n};\n\nDropdown.defaultProps = {\n className: '',\n wrapperClassName: '',\n items: []\n};\n\nexport default Dropdown;\n","/* eslint-disable react/prop-types */\nimport React, { useEffect, useState } from 'react';\nimport { shape, func, string } from 'prop-types';\nimport { Checkbox } from '@jotforminc/magnet';\nimport { capitalizeFirstLetter, moment as Moment } from '@jotforminc/utils';\nimport moment from 'moment-timezone';\nimport { t as translateText } from '@jotforminc/translation';\nimport SVG from '../SVG';\nimport Dropdown from '../Dropdown';\nimport {\n classNames, getSubmissionDateLanguage, isHeaderFieldDisabled, getEmptyHeaderOption, getNoneHeaderOption\n} from '../../utils';\nimport WatchmanRecored, { withWatchMan } from '../../utils/WatchmanRecorder';\n\nimport {\n ALIGNMENTS,\n SPACING,\n DEFAULT_DATE_FORMAT,\n SUBMISSION_DATE_LANGUAGE_DROPDOWN_OPTIONS\n} from '../../constants';\n\nimport {\n headerFieldPropType,\n headerFieldOptionsPropType\n} from '../../constants/proptypes';\n\nconst GeneralSettings = ({\n form, updateFormWithoutID, t, user, createdAt, headerField, subheaderField, allHeaderFieldOptions\n}) => {\n const questionAlignment = form?.submissionLayoutPreference || 'left';\n const questionSpacing = form?.submissionSpacingPreference || 'compact';\n const hideSubmissionHeader = form?.hideSubmissionHeader === 'Yes';\n const submissionDateLanguage = getSubmissionDateLanguage(user, form);\n\n const onQuestionSpacingChange = ({ target: { value } }) => {\n const action = value === 'default' ? 'medium' : value;\n WatchmanRecored.recordEvent(`Settings-LinespacingChangedto${capitalizeFirstLetter(action)}`, 'Inbox');\n updateFormWithoutID({ submissionSpacingPreference: value });\n };\n\n const generateSubmissionDateFormatMap = () => {\n const serverTimezoneOffset = moment(createdAt).tz('America/New_York').format('Z');\n const [date, dateFormat] = createdAt ? [`${createdAt} ${serverTimezoneOffset}`, 'YYYY-MM-DD HH:mm ZZ'] : [];\n const { formatList } = Moment;\n if (formatList.indexOf(DEFAULT_DATE_FORMAT) === -1) {\n formatList.push(DEFAULT_DATE_FORMAT);\n }\n return formatList.map(format => ({\n value: format,\n text: Moment.formatDate(date, dateFormat, format)\n }));\n };\n const [submissionDateFormatMap, setSubmissionDateFormatMap] = useState(generateSubmissionDateFormatMap());\n\n const onHeaderFieldChange = withWatchMan('Settings-HeaderisChanged', 'Inbox', ({ target: { value } }) => {\n updateFormWithoutID({ inbox: [{ headerField: value, subheaderField }] });\n });\n\n const onHideSubmissionHeaderClick = withWatchMan('Settings-HideSubmissionHeaderisSelected', 'Inbox', () => {\n updateFormWithoutID({ hideSubmissionHeader: !hideSubmissionHeader ? 'Yes' : 'No' });\n });\n\n const onSubheaderFieldChange = withWatchMan('Settings-SubheaderisChanged', 'Inbox', ({ target: { value } }) => {\n updateFormWithoutID({ inbox: [{ headerField, subheaderField: value }] });\n });\n\n const onQuestionAlignmentChange = alignment => {\n WatchmanRecored.recordEvent(`Settings-QuestionAllignmentChangedto${capitalizeFirstLetter(alignment)}`, 'Inbox');\n updateFormWithoutID({ submissionLayoutPreference: alignment });\n };\n\n const onSubmissionDateLanguageChange = withWatchMan('Settings-DateLanguageisChanged', 'Inbox', ({ target: { value } }) => {\n updateFormWithoutID({ submissionDateLanguage: value });\n });\n\n const onSubmissionDateFormatChange = withWatchMan('Settings-DateFormatisChanged', 'Inbox', ({ target: { value } }) => {\n updateFormWithoutID({ submissionDateFormat: value });\n });\n\n useEffect(() => {\n if (form?.submissionDateFormat !== DEFAULT_DATE_FORMAT && Moment.formatList.length > 0 && Moment.formatList.indexOf(form?.submissionDateFormat) === -1) {\n updateFormWithoutID({ submissionDateFormat: Moment.formatList[0] });\n }\n }, [submissionDateFormatMap]);\n\n useEffect(() => {\n setSubmissionDateFormatMap(generateSubmissionDateFormatMap());\n }, [Moment.locale, createdAt]);\n\n const headerFieldOptions = allHeaderFieldOptions.filter(({ value }) => (value ? value !== subheaderField : true));\n const subheaderFieldOptions = allHeaderFieldOptions.filter(({ value }) => (value ? value !== headerField : true));\n if (!subheaderFieldOptions.length) {\n subheaderFieldOptions.push(getEmptyHeaderOption());\n } else {\n subheaderFieldOptions.push(getNoneHeaderOption());\n }\n\n return (\n
    \n

    {t.QUESTION_ALIGNMENT.toUpperCase()}

    \n
    \n
    \n {ALIGNMENTS.map(item => (\n
    \n
    {translateText(item.text)}
    \n onQuestionAlignmentChange(item.value)}\n onKeyUp={null}\n >\n \n
    \n
    \n ))}\n
    \n
    \n
    \n
    {t.LINE_SPACING.toUpperCase()}
    \n
    \n {\n SPACING.map(item => (\n onQuestionSpacingChange({ target: { value: item.value } })}\n onKeyUp={null}\n >\n \n {translateText(item.text)}\n
    \n ))\n }\n
    \n
    \n

    {t.LANGUAGE_SETTINGS.toUpperCase()}

    \n
    \n \n
    \n
    \n
    {t.DATE_FORMAT.toUpperCase()}
    \n
    \n \n
    \n
    \n
    {t.HEADER_SETTINGS.toUpperCase()}
    \n
    \n
    {t.SELECT_HEADER_FIELD}
    \n \n
    \n
    \n
    {t.SELECT_SUBHEADER_FIELD}
    \n \n
    {t.SELECT_SUBHEADER_FIELD_TIP}
    \n
    \n
    \n \n
    \n
    \n );\n};\n\nGeneralSettings.propTypes = {\n form: shape({}),\n updateFormWithoutID: func.isRequired,\n t: shape({}).isRequired,\n user: shape({}).isRequired,\n createdAt: string,\n headerField: headerFieldPropType,\n subheaderField: headerFieldPropType,\n allHeaderFieldOptions: headerFieldOptionsPropType.isRequired\n};\n\nGeneralSettings.defaultProps = {\n form: null,\n createdAt: '',\n headerField: null,\n subheaderField: null\n};\n\nexport default GeneralSettings;\n","import React from 'react';\nimport {\n node, bool, func, string, shape\n} from 'prop-types';\nimport { classNames, getDefaultHeaderText } from '../../utils';\nimport { translatedProps } from '../../constants/proptypes';\n\nconst Item = ({\n question, children, isSelectedField, isSelectedList, onClick, qid, contextMenu\n}) => {\n const itemText = question?.text ? question.text.replace(/<(?:.|\\n)*?>/gm, '') : '';\n\n return (\n \n { children }\n
    \n {itemText || getDefaultHeaderText(question)}\n
    \n {contextMenu && contextMenu}\n
    \n );\n};\n\nItem.propTypes = {\n question: shape({}).isRequired,\n children: node,\n isSelectedField: bool,\n isSelectedList: bool,\n onClick: func,\n qid: string.isRequired,\n ...translatedProps\n};\n\nItem.defaultProps = {\n children: null,\n isSelectedField: false,\n isSelectedList: false,\n onClick: f => f\n};\n\nexport default Item;\n","import React, { useMemo, useRef, createRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { Droppable, Draggable } from 'react-beautiful-dnd';\nimport { Checkbox } from '@jotforminc/magnet';\nimport { t } from '@jotforminc/translation';\nimport { Hooks, Popover } from '@jotforminc/uikit';\nimport SVG from '../SVG';\nimport Item from '../Item';\nimport { questionsPropType, translatedProps } from '../../constants/proptypes';\nimport { classNames } from '../../utils';\n\nconst moveArr = (array, from, to) => {\n array.splice(to, 0, array.splice(from, 1)[0]);\n return array;\n};\n\nconst ItemsListItems = ({\n id,\n onFieldClick,\n isSelected,\n questions,\n isDropDisabled,\n isDragDisabled,\n handleFieldSelected,\n setSelectedFields,\n NoResultFallback,\n items\n}) => {\n const contextMenuRef = useRef();\n const downloadOptionsMenuRef = useRef();\n const buttonsRef = useMemo(() => {\n if (!items.selected) return [];\n return items.selected?.map(() => createRef());\n }, [items.selected]);\n const { selected, unselected } = items;\n const [isContextMenuVisible, setContextMenuVisibility] = Hooks.useClickOutsideState(false, [downloadOptionsMenuRef, ...buttonsRef.map(ref => ref)]);\n\n const handleMoveItemByContextMenu = fields => {\n setSelectedFields(fields);\n setContextMenuVisibility(false);\n };\n\n const handleSort = (qid, type) => {\n const newSelected = [...selected];\n switch (type) {\n case 'toTop':\n return moveArr(newSelected, newSelected.indexOf(qid), 0);\n case 'up':\n return moveArr(newSelected, newSelected.indexOf(qid), newSelected.indexOf(qid) - 1);\n case 'down':\n return moveArr(newSelected, newSelected.indexOf(qid), newSelected.indexOf(qid) + 1);\n case 'toBottom':\n return moveArr(newSelected, newSelected.indexOf(qid), newSelected.length - 1);\n default:\n return newSelected;\n }\n };\n\n if (selected?.length < 1 && unselected?.length < 1 && NoResultFallback) {\n return NoResultFallback;\n }\n\n return (\n \n {(provided, droppableSnapshot) => (\n \n {selected?.length > 0 ? selected.map((qid, index) => {\n return (\n \n {(supplied, draggableSnapshot) => {\n return (\n {}}\n >\n \n {\n setContextMenuVisibility(isContextMenuVisible === qid ? false : qid);\n }}\n >\n \n \n {isContextMenuVisible === qid && (\n \n
    \n
      \n
    • \n handleMoveItemByContextMenu(handleSort(qid, 'toTop'))}\n className='jfInbox-field-list-draggable-item-menu-item'\n type=\"button\"\n >\n \n {t('Move to Top')}\n \n
    • \n
    • \n handleMoveItemByContextMenu(handleSort(qid, 'up'))}\n className='jfInbox-field-list-draggable-item-menu-item'\n type=\"button\"\n >\n \n {t('Move Up')}\n \n
    • \n
    • \n = selected.length - 1}\n onClick={() => handleMoveItemByContextMenu(handleSort(qid, 'down'))}\n className='jfInbox-field-list-draggable-item-menu-item'\n type=\"button\"\n >\n \n {t('Move Down')}\n \n
    • \n
    • \n = selected.length - 1}\n onClick={() => handleMoveItemByContextMenu(handleSort(qid, 'toBottom'))}\n className='jfInbox-field-list-draggable-item-menu-item'\n type=\"button\"\n >\n \n {t('Move to Bottom')}\n \n
    • \n
    \n
    \n \n )}\n
    \n )}\n >\n
    \n \n
    \n \n \n
    \n \n \n );\n }}\n \n );\n }) : null}\n {\n unselected?.length > 0\n ? (\n
    \n {\n unselected.map(qid => {\n return (\n
    \n \n
    \n \n
    \n \n
    \n );\n })\n }\n
    \n )\n : <>\n }\n {provided.placeholder}\n \n )}\n \n );\n};\n\nItemsListItems.propTypes = {\n id: PropTypes.string,\n list: PropTypes.arrayOf(PropTypes.string),\n isSelected: PropTypes.bool,\n onFieldClick: PropTypes.func,\n selectedFields: PropTypes.arrayOf(PropTypes.string),\n questions: questionsPropType.isRequired,\n children: PropTypes.node,\n isDropDisabled: PropTypes.bool,\n isDragDisabled: PropTypes.bool,\n NoResultFallback: PropTypes.node,\n items: PropTypes.shape({\n selected: PropTypes.arrayOf(PropTypes.string),\n unselected: PropTypes.arrayOf(PropTypes.string)\n }),\n ...translatedProps\n};\n\nItemsListItems.defaultProps = {\n id: 'droppable',\n list: [],\n isSelected: false,\n onFieldClick: f => f,\n selectedFields: [],\n children: null,\n isDropDisabled: false,\n isDragDisabled: false,\n NoResultFallback: null,\n items: { selected: [], unselected: [] }\n};\n\nexport default ItemsListItems;\n","import React, {\n useMemo,\n useState\n} from 'react';\nimport { arrayOf, shape, string } from 'prop-types';\nimport { DragDropContext } from 'react-beautiful-dnd';\nimport { Checkbox } from '@jotforminc/magnet';\nimport { classNames, getDefaultHeaderText } from '../../utils';\nimport ItemsListItems from '../ItemsListItems';\nimport SVG from '../SVG';\nimport TextInput from '../TextInput';\nimport { questionsPropType, translatedProps } from '../../constants/proptypes';\n\nconst ItemList = ({\n fieldList,\n selectedItemKey,\n questions,\n t,\n updateFormData,\n formID\n}) => {\n const [inputValue, setInputValue] = useState([]);\n\n const items = useMemo(() => {\n if (inputValue.length === 0) {\n return fieldList;\n }\n const { selected, unselected } = fieldList;\n return {\n selected: selected.filter(qid => {\n const text = questions[qid]?.text || getDefaultHeaderText(questions[qid]);\n if (typeof text !== 'string') return;\n return text.match(new RegExp(inputValue, 'gi'))?.length > 0;\n }),\n\n unselected: unselected.filter(qid => {\n const text = questions[qid]?.text || getDefaultHeaderText(questions[qid]);\n if (typeof text !== 'string') return;\n return text.match(new RegExp(inputValue, 'gi'))?.length > 0;\n })\n };\n }, [inputValue, fieldList]);\n\n const onInputValueChange = e => {\n setInputValue(e.target.value);\n };\n\n const handleFieldClick = qid => () => {\n const selectedFieldList = qid === 'created_at' ? [qid, ...items.selected] : [...items.selected, qid];\n\n const updatedSelectedFields = items.selected.indexOf(qid) >= 0\n ? items.selected.filter(field => field !== qid)\n : selectedFieldList;\n\n updateFormData(formID, { questionOrders: updatedSelectedFields });\n };\n\n const handleSelectAll = () => {\n const allSelectedFields = items.selected.length === 0\n ? [...items.selected, ...items.unselected]\n : [];\n updateFormData(formID, { questionOrders: allSelectedFields });\n };\n\n const handleDragEnd = action => {\n const { destination, source, draggableId } = action;\n const newQuestionOrders = [...items.selected];\n const qid = draggableId.replace('fields_', '').replace('selected_', '');\n\n const sourceID = source.droppableId;\n const destinationID = destination ? destination.droppableId : false;\n\n // dropped outside the list\n if (!destinationID || (sourceID === 'fields' && destinationID === 'fields')) {\n return;\n }\n\n if (sourceID === 'fields' && destinationID === 'selected') {\n newQuestionOrders.splice(destination.index, 0, qid);\n } else {\n newQuestionOrders.splice(source.index, 1);\n newQuestionOrders.splice(destination.index, 0, qid);\n }\n updateFormData(formID, { questionOrders: newQuestionOrders });\n };\n\n return (\n <>\n \n
    \n
    \n
    \n 0 && items.selected.length > 0}\n onChange={handleSelectAll}\n size=\"medium\"\n label={t.SHOW_ALL}\n role=\"checkbox\"\n ariaChecked={items.unselected.length === 0}\n tabIndex={0}\n aria-label={t.SHOW_ALL}\n />\n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n updateFormData(formID, { questionOrders: selectedList })}\n NoResultFallback={(\n
    \n
    {t.NO_SUBMISSIONS_TEXT_SEARCHED}
    \n

    {t.SUBMISSIONS_APPAER_HERE_SEARCHED}

    \n
    \n )}\n items={items}\n isDragDisabled={inputValue.length > 0}\n />\n
    \n
    \n \n \n );\n};\n// selectedFields list\nItemList.propTypes = {\n selectedItemKey: string,\n questions: questionsPropType.isRequired,\n fieldList: shape({ selected: arrayOf(string), unselected: arrayOf(string) }),\n ...translatedProps\n};\n\nItemList.defaultProps = {\n selectedItemKey: '',\n fieldList: { selected: [], unselected: [] }\n};\n\nexport default ItemList;\n","/* eslint-disable react/prop-types */\nimport React from 'react';\nimport {\n shape, func, arrayOf, string\n} from 'prop-types';\nimport { Checkbox } from '@jotforminc/magnet';\nimport Feature from '../Feature';\nimport { withWatchMan } from '../../utils/WatchmanRecorder';\nimport ItemList from '../ItemList';\n\nimport {\n questionsPropType\n} from '../../constants/proptypes';\n\nconst FieldsSettings = ({\n form, updateFormWithoutID, t, questions, updateFormData, fieldList\n}) => {\n const showApprovalStatus = form?.showApprovalStatus === 'Yes' || form.showApprovalStatus === undefined;\n const hideNonInputs = form?.hideNonInputSubmissionFields === 'Yes';\n const hideEmptyFields = form?.hideEmptySubmissionFields === 'Yes';\n const showMap = form?.showAddressOnMap === 'Yes';\n\n const onShowApprovalStatusClick = withWatchMan('Settings-ShowApprovalStatusSelected', 'Inbox', () => {\n updateFormWithoutID({ showApprovalStatus: !showApprovalStatus ? 'Yes' : 'No' });\n });\n\n const onHideNonInputs = withWatchMan('Settings-ShowHeadersAndTextisSelected', 'Inbox', () => {\n updateFormWithoutID({ hideNonInputSubmissionFields: !hideNonInputs ? 'Yes' : 'No' });\n });\n\n const onHideEmptyFields = withWatchMan('Settings-HideEmptyFormFieldsisSelected', 'Inbox', () => {\n updateFormWithoutID({ hideEmptySubmissionFields: !hideEmptyFields ? 'Yes' : 'No' });\n });\n\n const onShowAdressOnMapClick = withWatchMan('Settings-ShowAddressesonMapisSelected', 'Inbox', () => {\n updateFormWithoutID({ showAddressOnMap: !showMap ? 'Yes' : 'No' });\n });\n\n return (\n
    \n
    {t.FIELD_SETTINGS.toUpperCase()}
    \n \n \n
    \n )}\n />\n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    {t.SHOW_HIDE_FIELDS.toUpperCase()}
    \n \n
    \n );\n};\n\nFieldsSettings.propTypes = {\n form: shape({}),\n updateFormWithoutID: func.isRequired,\n t: shape({}).isRequired,\n questions: questionsPropType.isRequired,\n fieldList: shape({ selected: arrayOf(string), unselected: arrayOf(string) })\n};\n\nFieldsSettings.defaultProps = {\n form: {},\n fieldList: { selected: [], unselected: [] }\n};\n\nexport default FieldsSettings;\n","import React from 'react';\nimport {\n string, shape, arrayOf\n} from 'prop-types';\nimport classNames from 'classnames';\nimport styled from 'styled-components';\nimport { translationRenderer } from '@jotforminc/translation';\nimport MoreButton from '../components/MoreButton';\nimport ThreadAvatar from '../components/ThreadAvatar';\nimport IconCalendar from '../assets/iconCalendar.svg';\nimport ContactWithApproval from '../components/ContactWithApproval';\n\nconst IconDueDate = styled(IconCalendar)`\n margin-right: 0.375rem;\n width: 0.9375rem;\n height: 0.875rem;\n`;\n\nconst ActionLayout = ({\n title,\n className,\n approver,\n description,\n components,\n dueDate,\n id,\n formName,\n customMoreActionLayout,\n elementType\n}) => {\n const contactWithApproval = user => {\n return (\n \n \n \n );\n };\n\n if (customMoreActionLayout && elementType) {\n const currentLayout = customMoreActionLayout[elementType];\n const {\n avatarValues: {\n useCustomAvatar = true,\n avatar,\n user = null\n },\n middleHeaderTitle,\n headerText,\n showMoreButton = true,\n showOutcome = false,\n outcome\n } = currentLayout;\n return (\n
    \n
    \n
    \n {\n useCustomAvatar && (\n
    \n {avatar}\n
    \n )\n }\n {\n !useCustomAvatar && user && (\n
    \n {contactWithApproval(user)}\n
    \n )\n }\n
    \n
    \n \n {middleHeaderTitle || ''}\n \n
    \n {headerText || ''}\n
    \n {showOutcome && (\n
    \n {outcome()}\n
    \n )}\n
    \n {showMoreButton && }\n
    \n
    \n );\n }\n\n return (\n
    \n
    \n {approver ? (\n
    \n {contactWithApproval(approver)}\n
    \n ) : null}\n
    \n {title && !formName ? {translationRenderer('[1[{taskTitle}]] Step')({ renderer1: () => <>{title} })} : null}\n { formName ? (\n
    \n {(description || `Waiting for ${approver?.name || approver?.email}'s submission for ${formName}.`)}\n
    \n ) : (\n
    \n {(description || `Waiting for ${approver?.name || approver?.email}'s approval.`)}\n
    \n )}\n {dueDate\n ? (\n
    \n \n {` Due date: ${dueDate}`}\n
    \n ) : null }\n
    \n { !formName && }\n
    \n
    \n );\n};\n\nActionLayout.propTypes = {\n title: string,\n className: string,\n description: string,\n approver: shape({\n avatarUrl: string,\n name: string,\n email: string\n }),\n components: arrayOf(shape({})).isRequired,\n dueDate: string,\n id: string.isRequired,\n formName: string,\n customMoreActionLayout: shape(shape({})),\n elementType: string\n};\n\nActionLayout.defaultProps = {\n title: '',\n approver: null,\n className: '',\n description: '',\n dueDate: '',\n formName: null,\n customMoreActionLayout: null,\n elementType: null\n};\n\nexport default ActionLayout;\n","import React, { useMemo } from 'react';\nimport { string, arrayOf } from 'prop-types';\nimport styled from 'styled-components';\n\nimport ActionButton from './ActionButton';\nimport ActionLayout from '../SubmissionThread/ActionLayout';\nimport { useActionComponents } from '../hooks/useActionComponents';\n\nconst ErrorMessage = styled.div`\n display: inline-flex;\n align-items: center;\n`;\n\nconst ErrorIcon = styled.div`\n &::before {\n content: \"!\";\n color: #ffffff;\n background-color: #D53049;\n border-radius: 9px;\n height: 18px;\n width: 18px;\n line-height: 18px;\n font-size: 14px;\n font-weight: 700;\n text-align: center;\n display: flex;\n align-content: center;\n justify-content: center;\n margin-right: 0.25rem;\n }\n`;\n\nconst ErrorAction = ({\n errorMessage,\n errorActions,\n ...props\n}) => {\n const {\n takeover, reassign, cancelFlow, startOver, openWorkflowBuilder, retryAction\n } = useActionComponents({ ...props, fromError: true, ActionButton });\n\n const errorActionsToComponents = useMemo(() => ({\n takeOver: takeover,\n reassign,\n goToBuilder: openWorkflowBuilder,\n restart: startOver,\n cancel: cancelFlow,\n retry: retryAction\n }), [openWorkflowBuilder, cancelFlow, startOver, takeover, reassign, retryAction]);\n\n const componentsToRender = useMemo(() => {\n const components = errorActions.map(action => errorActionsToComponents[action]);\n return components.map(fn => fn());\n }, [errorActions, errorActionsToComponents]);\n\n return (\n \n \n {errorMessage}\n \n )}\n components={componentsToRender}\n />\n );\n};\n\nErrorAction.propTypes = {\n errorActions: arrayOf(string).isRequired,\n errorMessage: string.isRequired\n};\n\nexport default ErrorAction;\n","import { ABTestManager } from '@jotforminc/abtest-manager';\n\nexport const shouldShowNewDesign = async (user, dispatchedFrom) => {\n try {\n if (dispatchedFrom === 'sheets') return true;\n\n const getNewDesignParam = new URLSearchParams(window.location.search).get('limitDialogV2');\n const showNewDesign = getNewDesignParam === '1';\n\n if (showNewDesign) return true;\n if (user?.account_type?.name === 'GUEST') return false;\n\n const abTestManager = new ABTestManager({\n user: user,\n isTestEnabled: true,\n testName: 'limitDialogNewDesign',\n testVariantCode: '8781',\n controlVariantCode: '8771',\n urlParam: 'limitDialogV2',\n cacheVariantCodeAtLocalStorage: true\n });\n\n const getTestVariant = await abTestManager.isTestVariant();\n return getTestVariant;\n } catch (error) {\n return false;\n }\n};\n","import React, { Suspense } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Loading } from '@jotforminc/loading';\nimport { getAccountTypeName, getAvailablePlansForUser, decideActiveCampaign } from '@jotforminc/utils';\n\nimport {\n getLimitFromType,\n fetchUserPlans,\n fetchCombinedInfo,\n actionTracker\n} from '../utils';\n\nimport { shouldShowNewDesign } from '../utils/abtests';\n\nconst LazyLimitDialogModal = React.lazy(/* webpackChunkName: \"LimitDialogModal\" */ () => import('./LimitDialogModal'));\n\nconst openLimitDialog = async ({\n user: _user = {},\n plans: _plans = {},\n selectedLimitType = 'formCount',\n dispatchedFrom = '',\n portalRoot\n}) => {\n let user;\n let plans;\n\n const isCredentialsFetched = !!Object.keys(_user)?.length;\n if (isCredentialsFetched) {\n user = _user;\n } else {\n user = await fetchCombinedInfo();\n }\n\n const activeCampaign = decideActiveCampaign(user);\n const accountTypeName = getAccountTypeName(user);\n const selectedLimit = getLimitFromType(user, selectedLimitType);\n\n const isPlansFetched = !!Object.keys(_plans)?.length;\n if (isPlansFetched) {\n plans = _plans;\n } else {\n plans = await fetchUserPlans();\n }\n\n const isTestVariant = await shouldShowNewDesign(user, dispatchedFrom);\n\n const availablePlansForUser = getAvailablePlansForUser(accountTypeName);\n\n return new Promise((resolve, reject) => {\n const handleClose = () => {\n actionTracker({\n username: user?.username,\n action: 'close-btn-clicked',\n target: dispatchedFrom,\n isV2: isTestVariant\n });\n\n reject();\n ReactDOM.unmountComponentAtNode(portalRoot);\n };\n\n ReactDOM.render((\n }>\n \n \n ), portalRoot);\n });\n};\n\nexport default openLimitDialog;\n","import React, { useState } from 'react';\nimport { t } from '@jotforminc/translation';\nimport {\n Button,\n Dialog,\n DialogBody,\n DialogIcon,\n DialogTitle,\n DialogDescription,\n DialogActions,\n DialogCloseButton\n} from '@jotforminc/magnet';\nimport { IconInfoCircle } from '@jotforminc/svg-icons';\nimport { openFormLimitDialog } from '@jotforminc/limit-dialog';\n\nimport {\n bool,\n object,\n func\n} from 'prop-types';\nimport classNames from 'classnames';\nimport Outcome from './Outcome';\n\nconst StartFlowAction = ({\n onStartFlow,\n onRenewFlow,\n user,\n isWorkflowEnabled\n}) => {\n const isWorkflowReleased = window?.isWorkflowReleased;\n const startFlowText = isWorkflowReleased\n ? 'This submission is not connected to the flow. To start the flow click the button.'\n : 'This submission is not connected to the approval flow. To start the approval flow click the button.';\n\n const [isLoading, setLoading] = useState(false);\n const [isDialogOpen, setIsDialogOpen] = useState(false);\n\n const closeDialog = () => setIsDialogOpen(false);\n\n const openWorkflowRunsLimitDialog = ({ dispatchedFrom = 'workflow-components' } = {}) => {\n const rootElID = 'workflow-components-limit-dialog-root';\n let portalRoot = global.document.getElementById(rootElID);\n if (!portalRoot) {\n portalRoot = global.document.createElement('div');\n portalRoot.id = rootElID;\n global.document.body.appendChild(portalRoot);\n }\n\n openFormLimitDialog({\n user: user.campaign ? user : undefined,\n selectedLimitType: 'workflowRuns',\n dispatchedFrom,\n portalRoot: portalRoot\n }).catch(() => {});\n };\n\n const startFlow = async enableWorkflow => {\n setLoading(true);\n try {\n await onStartFlow(enableWorkflow);\n onRenewFlow();\n } catch (error) {\n if (error.data?.responseCode === 422) {\n closeDialog();\n openWorkflowRunsLimitDialog({\n dispatchedFrom: 'workflow-components-startFlow'\n });\n } else {\n throw error;\n }\n }\n setLoading(false);\n };\n\n const handleStartFlowClick = () => {\n if (!isWorkflowEnabled) {\n setIsDialogOpen(true);\n return;\n }\n return startFlow();\n };\n\n const handleStartAndEnableFlowClick = () => startFlow(true);\n\n const containerClassNames = classNames(\n 'wmApproval-task-container',\n {\n isLoading\n }\n );\n\n // TODO :: Translations\n return (\n
    \n
    \n
    \n
    {t(startFlowText)}
    \n \n {isDialogOpen\n && (\n \n \n \n {t('Approval flow is currently disabled.')}\n {t('Do you want to enable and start the flow?')}\n \n \n \n \n \n setIsDialogOpen(false)} />\n \n )}\n
    \n
    \n
    \n );\n};\n\nStartFlowAction.propTypes = {\n onStartFlow: func.isRequired,\n onRenewFlow: func.isRequired,\n user: object.isRequired,\n isWorkflowEnabled: bool\n};\n\nStartFlowAction.defaultProps = {\n isWorkflowEnabled: true\n};\n\nStartFlowAction.defaultProps = {};\n\nexport default StartFlowAction;\n","import React from 'react';\nimport {\n /* string, bool, func, */ shape\n} from 'prop-types';\nimport ActionLayout from '../SubmissionThread/ActionLayout';\nimport { useActionComponents } from '../hooks/useActionComponents';\nimport { TaskPropTypes } from '../constants/propTypes';\n\nconst TakeOver = props => {\n const { takeover, reassign } = useActionComponents(props);\n const {\n approver, task: {\n properties: {\n formName\n },\n element: { name: title } = {}\n } = {}\n } = props;\n\n return (\n \n );\n};\n\nTakeOver.propTypes = {\n // name: string.isRequired,\n // task: TaskPropTypes.isRequired,\n // isCommentRequired: bool.isRequired,\n // onTaskListRenew: func.isRequired,\n approver: shape({}).isRequired,\n task: TaskPropTypes.isRequired\n // submissionID: string.isRequired\n};\n\nexport default TakeOver;\n","import React from 'react';\nimport { shape, bool } from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { handleCustomNavigation } from '@jotforminc/utils';\nimport ActionLayout from '../SubmissionThread/ActionLayout';\nimport { useActionComponents } from '../hooks/useActionComponents';\nimport { TaskPropTypes } from '../constants/propTypes';\nimport { useWorkflow } from '../contexts';\nimport IconSignTrackAvatar from '../assets/icon_SignTrackAvatar.svg';\nimport Outcome from './Outcome';\n\nconst CustomMoreActions = props => {\n const { openSignInbox } = useActionComponents(props);\n const ActionLayoutComponent = {\n workflow_sign_document: [openSignInbox]\n };\n\n const {\n approver, task: {\n dueDate,\n accessLink,\n properties: {\n formName,\n assigneeUser\n },\n element: { name: title, type } = {}\n } = {},\n isCurrentUserApprover\n } = props;\n\n const { formatDate } = useWorkflow();\n\n const customMoreActionLayout = {\n workflow_sign_document: {\n avatarValues: {\n useCustomAvatar: true,\n avatar: ,\n user: null\n },\n middleHeaderTitle: t('Sign Document Step'),\n headerText: t('Waiting for signature.'),\n showMoreButton: true,\n useCustomAvavatar: true,\n showOutcome: false\n },\n workflow_assign_task: {\n avatar: ,\n middleHeaderTitle: title,\n headerText: isCurrentUserApprover ? 'Please complete this task.' : `Wait for ${approver.name || approver.email}`,\n showMoreButton: false,\n avatarValues: {\n useCustomAvatar: false,\n avatar: null,\n user: isCurrentUserApprover ? null : assigneeUser\n },\n showOutcome: isCurrentUserApprover,\n outcome: () => {\n return (\n handleCustomNavigation(accessLink, '_blank')}\n />\n );\n }\n }\n };\n\n return (\n \n );\n};\n\nCustomMoreActions.propTypes = {\n approver: shape({}).isRequired,\n task: TaskPropTypes.isRequired,\n isCurrentUserApprover: bool.isRequired\n};\n\nexport default CustomMoreActions;\n","import { t } from '@jotforminc/translation';\nimport { arrayOf, shape } from 'prop-types';\nimport React from 'react';\nimport { IconUsersMoreFilled } from '@jotforminc/svg-icons';\nimport styled from 'styled-components';\nimport MoreButton from './MoreButton';\nimport { useActionComponents } from '../hooks/useActionComponents';\nimport { useWorkflow } from '../contexts';\nimport AvatarGroupWithPanel from './AvatarGroupWithPanel';\nimport IconCalendar from '../assets/iconCalendar.svg';\nimport TeamImageWithWrapper from './TeamImageWithWrapper';\nimport { isTeamApproval } from '../utils/helper';\n\nconst IconDueDate = styled(IconCalendar)`\n margin-right: 0.375rem;\n width: 0.9375rem;\n height: 0.875rem;\n`;\n\nconst MultipleApprovalTakeOver = props => {\n const { formatDate } = useWorkflow();\n const { takeover, reassign } = useActionComponents({ ...props, isGroupApproval: true });\n const { task, subtasks } = props;\n const {\n element: { type: elementType, subType = null, name }, dueDate = null, properties: { approvalOptions }, updated_at: updatedAt, status, team, isCompleteAllowed = false\n } = task;\n const approverCount = Object.keys(subtasks).length;\n const customMultipleAction = type => {\n if (type === 'workflow_approval') {\n return {\n avatar: ,\n middleHeaderTitle: name || t('Approval Step')\n };\n }\n if (type === 'workflow_approval_with_sign') {\n return {\n avatar: ,\n middleHeaderTitle: name || t('Approve & Sign Step')\n };\n }\n\n if (isTeamApproval(type, team)) {\n return {\n middleHeaderTitle: 'Team Approval Step'\n };\n }\n };\n\n const currentLayout = customMultipleAction(subType || elementType);\n\n const getAvatarUrl = () => {\n if (isTeamApproval(subType || elementType, team)) {\n return (\n \n );\n }\n return currentLayout?.avatar;\n };\n\n return (\n
    \n
    \n
    \n
    \n {getAvatarUrl()}\n
    \n
    \n
    \n
    \n
    \n {t(currentLayout?.headerText || '')}\n
    \n \n {t(currentLayout?.middleHeaderTitle || '')}\n \n
    \n \n {t('Waiting')}\n \n
    \n {dueDate\n ? (\n
    \n \n {`${t('Due date')}: ${dueDate ? formatDate(dueDate) : null}`}\n
    \n ) : null}\n
    \n
    \n
    \n
    \n {isTeamApproval(currentLayout) && (team?.teamName)}\n
    \n
    \n
    {team?.teamName}
    \n \n
    \n
    \n {isCompleteAllowed && (\n \n )}\n
    \n
    \n );\n};\n\nMultipleApprovalTakeOver.propTypes = {\n task: arrayOf(shape),\n subtasks: shape({})\n\n};\n\nMultipleApprovalTakeOver.defaultProps = {\n task: [],\n subtasks: {}\n};\n\nexport default MultipleApprovalTakeOver;\n","/* eslint-disable complexity */\nimport React, { useCallback, useEffect, useMemo } from 'react';\nimport { t } from '@jotforminc/translation';\nimport { func, bool } from 'prop-types';\nimport classNames from 'classnames';\nimport { Dialog } from '@jotforminc/dialog';\nimport { moment as Moment, handleCustomNavigation } from '@jotforminc/utils';\n\nimport {\n IconPuzzlePieceFilled\n} from '@jotforminc/svg-icons';\nimport { useThread, useWorkflow } from '../contexts';\nimport TaskSection from './TaskSection';\nimport ErrorAction from '../components/ErrorAction';\nimport StartFlowAction from '../components/StartFlowAction';\nimport EntryLayout from '../SubmissionThread/EntryLayout';\nimport TakeOver from '../components/TakeOver';\nimport TaskMoreButton from '../components/TaskMoreButton';\nimport EntryTypes from '../SubmissionThread/EntryTypes';\nimport Entry from '../SubmissionThread/Entry';\nimport '../styles/index.scss';\nimport CustomMoreActions from '../components/CustomMoreActions';\nimport MultipleApprovalTakeOver from '../components/MultipleApprovalTakeOver';\n\nconst dialogProps = {\n type: 'warning',\n title: 'Errors on the Approval Flow',\n subTitles: [\n '
    ',\n `\n There are still some errors on the approval flow of this submission. \n You should fix these errors,\n then start over the approval flow.\n `\n ],\n submitButtonText: 'Open Approval Flow'\n};\n\nconst customMoreActions = ['workflow_sign_document', 'workflow_assign_task'];\n\nconst entryRenderer = ({\n task: {\n task, isCommentRequired, isCurrentUserApprover, name, avatarUrl, assigneeEmail: email, requestMore, subtasks\n },\n recordEvent, requestMoreInfoClick, submissionID, onTaskRenew, user, teamInfo\n}) => {\n const type = task?.element?.type;\n const subtask = subtasks?.[user.email];\n\n if (isCurrentUserApprover && type !== 'workflow_assign_form' && type !== 'workflow_assign_task') {\n const requestMoreVisible = requestMore === 'Yes';\n return (\n {\n recordEvent('WF-RequestMoreInfo', 'workflow');\n return requestMoreInfoClick(subtask?.id || task.id);\n }}\n requestMoreVisible={requestMoreVisible}\n />\n ),\n title: task?.element?.name,\n name: t('Please review this submission.')\n }}\n isCurrentUserApprover={isCurrentUserApprover}\n task={task}\n >\n \n \n );\n }\n if (type && customMoreActions.includes(type)) {\n return (\n \n\n );\n }\n if (Object.keys(subtasks).length) {\n return (\n \n );\n }\n if (type === 'workflow_integration' && task?.status === 'ACTIVE') {\n return (\n
    \n
    \n
    \n \n \n
    \n
    \n
    \n Integration Step\n
    \n
    \n Waiting...\n
    \n
    \n
    \n \n Waiting for running integrations.\n
    \n \n \n );\n }\n return (\n \n );\n};\n\nconst SubmissionWorkflowActions = ({\n onCancelStartOverError,\n recordEvent,\n afterTaskAction,\n requestMoreInfoClick,\n isEncrypted\n}) => {\n const {\n user,\n isFormOwner,\n instanceID,\n onTaskListRenew,\n submissionID,\n onStartOver,\n onCancelFlow,\n onStartFlow,\n workflowStatusDetails,\n workflowStatus,\n showFixErrorsInWorkflow,\n setShowFixErrorsInWorkflow,\n formID,\n activeTaskList,\n formatDate,\n undoFns,\n canUndo,\n fakeEntries,\n teamInfo,\n isWorkflowEnabled,\n onRetryAction\n } = useWorkflow();\n\n const {\n layout\n } = useThread();\n\n const errorInWorkflow = workflowStatus === 'ERRORED';\n const { errorReason = '' } = workflowStatusDetails || {};\n const isApproverChanged = errorReason === 'APPROVER_DOES_NOT_MATCH';\n const showTaskList = !errorInWorkflow || (!isFormOwner && errorInWorkflow && isApproverChanged); // show only when approver changed for approvers\n const erroredTaskList = (isFormOwner && errorInWorkflow) ? (activeTaskList || []).filter(task => (task.errorObj)) : [];\n const workflowNotStarted = workflowStatus === 'NOT_STARTED' && activeTaskList?.length === 0;\n const activeTaskIDs = useMemo(\n () => (\n activeTaskList\n ? activeTaskList\n .reduce(\n (prev, { task, subtasks = {} }) => [...prev, task.id, ...Object.values(subtasks).map(s => s.id)],\n []\n )\n : []),\n [activeTaskList]\n );\n\n const didTaskExpire = (undoFns && typeof undoFns === 'object' && undoFns !== null) ? Object.keys(undoFns || {}).some(id => activeTaskIDs.includes(id)) : false;\n\n const findDefinedFakeEntry = () => {\n const activeTaskIDsLength = activeTaskIDs.length;\n for (let i = 0; i < activeTaskIDsLength; i++) {\n if (fakeEntries[activeTaskIDs[i]]) {\n return fakeEntries[activeTaskIDs[i]];\n }\n }\n };\n const unsetShowDialogState = useCallback(() => setShowFixErrorsInWorkflow(false), []);\n const openWorkflowBuilder = useCallback(() => {\n unsetShowDialogState();\n handleCustomNavigation(`/workflow/withForm/${formID}`, '_blank');\n }, [formID]);\n\n useEffect(() => {\n if (user && user.time_zone && !Moment.time_zone) {\n Moment.setTimezone(user.time_zone);\n }\n }, []);\n\n const onTaskRenew = () => {\n afterTaskAction();\n onTaskListRenew();\n };\n return (\n <>\n {!didTaskExpire || !canUndo ? (\n
    \n {workflowNotStarted && isFormOwner && !isEncrypted && (\n \n )}\n {erroredTaskList.map(({\n task, errorObj: { message, actions }, isCommentRequired, name, avatarUrl, assigneeEmail: email\n }) => (\n onRetryAction(task)}\n />\n ))}\n \n\n {showTaskList && activeTaskList ? activeTaskList.map(props => entryRenderer({\n task: props, recordEvent, requestMoreInfoClick, formatDate, submissionID, onTaskRenew, user, teamInfo\n })) : null}\n
    \n ) : (\n <>\n \n \n \n )}\n \n );\n};\n\nSubmissionWorkflowActions.propTypes = {\n onCancelStartOverError: func,\n recordEvent: func,\n afterTaskAction: func,\n requestMoreInfoClick: func,\n isEncrypted: bool\n};\n\nSubmissionWorkflowActions.defaultProps = {\n onCancelStartOverError: f => f,\n recordEvent: f => f,\n afterTaskAction: f => f,\n requestMoreInfoClick: f => f,\n isEncrypted: false\n};\n\nexport default SubmissionWorkflowActions;\n","import TEXTS from './texts';\n\nconst STATUSES = {\n ACTIVE: TEXTS.PENDING,\n CANCELED: TEXTS.CANCELLED,\n COMPLETED: TEXTS.COMPLETED\n};\n\nexport default STATUSES;\n","import React, { useMemo } from 'react';\nimport {\n arrayOf, shape, func, bool, string\n} from 'prop-types';\nimport classNames from 'classnames';\nimport { Loading } from '@jotforminc/loading';\nimport TaskSection from './Task';\nimport TEXTS from '../constants/texts';\nimport STATUSES from '../constants/statuses';\nimport { InstanceStatusPropType, TaskPropTypes } from '../constants/propTypes';\nimport WorkflowApprovalIcon from '../assets/icon_workflowApproval.svg';\n\nconst ApprovalSection = ({\n instanceStatus, taskList, highlightActiveTask, isInitialized,\n onTaskCompleteGenerator, onTaskReassignGenerator, t, teamInfo\n}) => {\n const onlyApprovalTaskList = useMemo(\n () => taskList.filter(({ element: { type: elementType }, status }) => elementType === 'workflow_approval' && (instanceStatus !== 'COMPLETED' || status !== 'ACTIVE')), [taskList, instanceStatus]\n );\n\n return (\n
    \n
    \n
    \n
    \n \n
    \n
    \n {t(TEXTS.APPROVAL_STATUS)}\n
    \n
    \n
    \n
    {STATUSES[instanceStatus]}
    \n
    \n \n
    \n
    \n
    \n
    \n {onlyApprovalTaskList.map(({ id, ...properties }) => {\n const {\n element: {\n comment__commentRequired: commentRequired\n }\n } = properties;\n\n const isCommentRequired = commentRequired === 'Yes';\n\n return (\n \n );\n })}\n
    \n
    \n \n
    \n
    \n
    \n
    \n );\n};\n\nApprovalSection.propTypes = {\n taskList: arrayOf(shape(TaskPropTypes)),\n isInitialized: bool,\n highlightActiveTask: bool,\n instanceStatus: InstanceStatusPropType.isRequired,\n onTaskCompleteGenerator: func.isRequired,\n onTaskReassignGenerator: func.isRequired,\n t: func,\n teamInfo: shape({\n disableTeamPrefix: bool,\n teamID: string\n })\n};\n\nApprovalSection.defaultProps = {\n taskList: [],\n isInitialized: false,\n highlightActiveTask: false,\n t: text => text,\n teamInfo: {}\n};\n\nexport default ApprovalSection;\n","import React from 'react';\nimport {\n arrayOf, shape, string, func, bool, oneOfType, number\n} from 'prop-types';\n\nimport ApprovalSection from '../sections/Approval';\n\nimport { useSubmissionTaskInfo } from '../hooks';\n\nimport { TaskPropTypes, InstanceStatusPropType } from '../constants/propTypes';\n\nimport '../styles/WorkflowManagers.scss';\n\nconst ApprovalManager = ({\n taskList, t, fetchTaskFromApi, submissionID, instanceStatus,\n highlightActiveTask, onComplete, teamInfo\n}) => {\n const {\n isInitialized,\n taskListState,\n instanceStatusState,\n onTaskCompleteGenerator,\n onTaskReassignGenerator\n } = useSubmissionTaskInfo({\n taskList, submissionID, fetchTaskFromApi, instanceStatus, onComplete, teamInfo\n });\n\n return (\n \n );\n};\n\nApprovalManager.propTypes = {\n taskList: arrayOf(shape(TaskPropTypes)),\n fetchTaskFromApi: bool,\n submissionID: oneOfType([string, number]),\n instanceStatus: InstanceStatusPropType,\n highlightActiveTask: bool,\n t: func,\n onComplete: func,\n teamInfo: shape({\n disableTeamPrefix: bool,\n teamID: string\n })\n};\n\nApprovalManager.defaultProps = {\n taskList: [],\n fetchTaskFromApi: false,\n instanceStatus: undefined,\n submissionID: '',\n highlightActiveTask: false,\n t: text => text,\n onComplete: f => f,\n teamInfo: {}\n};\n\nexport default ApprovalManager;\n","import React, { useEffect, useRef } from 'react';\nimport { bool, func } from 'prop-types';\nimport { connect } from 'react-redux';\nimport { Hooks } from '@jotforminc/uikit';\nimport { ApprovalManager, useThread } from '@jotforminc/workflow-components';\nimport { useStateWithAutoReset } from '@jotforminc/hooks';\nimport { usePermissions } from '@jotforminc/permissions';\n\nimport {\n formSelector,\n activeSubmissionSelector,\n highlightPendingApprovalSelector,\n isSubmissionViewNotAllowedSelector\n} from '../../selectors';\n\nimport { setHighlightPendingApproval, setSubmissionPendingApproval } from '../../actions';\n\nimport { formPropType, submissionPropType } from '../../constants/proptypes';\n\nimport { getTeamInfoForWorkflow } from '../../utils';\n\nexport const SubmissionApprovalComponent = ({\n form, submission, isSubmissionViewNotAllowed, highlightPendingApproval,\n changeHighlightPendingApproval, changeSubmissionPendingApproval\n}) => {\n const containerRef = useRef(false);\n const { reload: reloadThread } = useThread();\n const permissions = usePermissions();\n const [highlightActiveTask, setHighlightActiveTask] = useStateWithAutoReset(false);\n const showApprovalStatus = form.showApprovalStatus === 'Yes' || form.showApprovalStatus === undefined;\n const teamInfo = getTeamInfoForWorkflow();\n\n const handleApprovalComplete = () => {\n changeSubmissionPendingApproval(submission.id, false);\n reloadThread();\n };\n\n useEffect(() => {\n if (highlightPendingApproval && containerRef.current) {\n const scrollContainer = document.querySelector('.jfInbox-submission-container');\n const domToScroll = document.querySelector('.wmApproval-task-container:not(.isCompleted)') || document.querySelector('.forSubmissionApproval');\n\n let expectedScrollDuration = 0;\n if (domToScroll) {\n const { bottom } = domToScroll.getBoundingClientRect();\n expectedScrollDuration = Math.abs((scrollContainer.scrollTop - bottom) / 2000).toFixed();\n scrollContainer.scrollTo({ top: bottom, behavior: 'smooth' });\n }\n\n setTimeout(() => setHighlightActiveTask(highlightPendingApproval), expectedScrollDuration);\n } else {\n setHighlightActiveTask(highlightPendingApproval);\n }\n }, [highlightPendingApproval, containerRef.current]);\n\n Hooks.useEffectIgnoreFirst(() => {\n if (!highlightActiveTask) {\n changeHighlightPendingApproval(false);\n }\n }, [highlightActiveTask]);\n\n const hasApprovalManager = permissions.pendingApprovals && showApprovalStatus && submission.answers && submission.id && submission.hasApproval && !isSubmissionViewNotAllowed;\n\n return (\n hasApprovalManager ? (\n
    \n
    \n \n
    \n
    \n ) : null\n );\n};\n\nconst mapStateToProps = state => ({\n form: formSelector(state),\n submission: activeSubmissionSelector(state),\n highlightPendingApproval: highlightPendingApprovalSelector(state),\n isSubmissionViewNotAllowed: isSubmissionViewNotAllowedSelector(state)\n});\n\nconst mapDispatchToProps = {\n changeHighlightPendingApproval: setHighlightPendingApproval,\n changeSubmissionPendingApproval: setSubmissionPendingApproval\n};\n\nconst mergeProps = (state, dispatch, componentProps) => {\n return {\n ...state,\n ...dispatch,\n ...componentProps\n };\n};\n\nSubmissionApprovalComponent.propTypes = {\n form: formPropType.isRequired,\n highlightPendingApproval: bool.isRequired,\n submission: submissionPropType.isRequired,\n isSubmissionViewNotAllowed: bool.isRequired,\n changeHighlightPendingApproval: func.isRequired,\n changeSubmissionPendingApproval: func.isRequired\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps, mergeProps)(SubmissionApprovalComponent);\n","import React from 'react';\nimport { func, string } from 'prop-types';\n\nimport Answer from '../Answer';\nimport {\n generateAnswerProps, extractColorStyle, generatePropsForSheetField, generateGlobalAnswerProps\n} from '../../utils';\nimport { NUMBER_OR_STRING_PROPTYPE } from '../../constants/proptypes';\n\nconst SubmissionAnswer = ({\n getOptionColor,\n ...props\n}) => {\n const { sheetField } = props;\n\n const globalGeneratedProps = generateGlobalAnswerProps(props);\n\n const generatedProps = sheetField === 'Yes'\n ? generatePropsForSheetField(props, { className: 'jfAnswer-answer' })\n : generateAnswerProps(props, { className: 'jfAnswer-answer' }, getOptionColor);\n\n return (\n \n );\n};\n\nSubmissionAnswer.propTypes = {\n getOptionColor: func,\n sheetField: string,\n qid: NUMBER_OR_STRING_PROPTYPE.isRequired\n};\n\nSubmissionAnswer.defaultProps = {\n sheetField: '',\n getOptionColor: extractColorStyle\n};\n\nexport default SubmissionAnswer;\n","/* eslint-disable no-constant-condition */\nimport React from 'react';\nimport {\n oneOfType,\n bool,\n element,\n func,\n arrayOf,\n objectOf,\n string,\n shape\n} from 'prop-types';\nimport isEmpty from 'lodash/isEmpty';\nimport { t } from '@jotforminc/translation';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport { Tooltip } from '@jotforminc/tooltip';\nimport { isQuestionAnswerEmpty } from '@jotforminc/answer-utils';\nimport { handleCustomNavigation } from '@jotforminc/utils';\nimport { WorkflowActions, SubmissionThread } from '@jotforminc/workflow-components';\nimport Feature from '../Feature';\nimport SubmissionApproval from '../../containers/SubmissionApproval';\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\n\nimport SubmissionAnswer from '../SubmissionAnswer';\n\nimport {\n dateStringToObject, extractColorStyle, handleDateFormat, isPaymentField, stringifyAnswerForType\n} from '../../utils';\n\nimport {\n DEFAULT_DATE_FORMAT,\n HEADER_TEXT_QUESTIONS,\n PREVIOUS_ORDERS_TYPES\n} from '../../constants';\n\nimport {\n submissionPropType,\n questionsPropType,\n questionOrdersPropType,\n userPropType,\n VALID_REACT_RENDER_PROPTYPE\n} from '../../constants/proptypes';\nimport SVG from '../SVG';\n\nconst Submission = ({\n user,\n questions,\n questionOrders,\n answerRenderer,\n submission,\n hideHeaderAndText,\n hideEmptyFields,\n fallbackContent,\n getOptionColor,\n products,\n paymentStrings,\n locale,\n standalone,\n dateFormat,\n setReplyVisibilityCustom,\n isEmail,\n activeTab,\n permissions,\n previousOrdersType,\n isNewAppointment,\n formID,\n onEmptySubmission,\n isEncrypted,\n onSetMessage\n}) => {\n const assignFormID = (false && submission?.assignFormData) ? submission?.assignFormData?.startPointFormID : false;\n const triggerID = (false && submission?.assignFormData) ? submission?.assignFormData?.triggerID : false;\n // eslint-disable-next-line complexity\n const children = questionOrders && submission.answers && !isEmpty(questions) && questionOrders.reduce((acc, qid) => {\n if (!questions[qid]) {\n return acc;\n }\n const question = questions[qid] || {};\n let answer = {};\n let label = '';\n switch (qid) {\n case 'created_at':\n answer = {\n answer: dateStringToObject(submission[qid]),\n userTimeZone: user.time_zone\n };\n switch (previousOrdersType) {\n case PREVIOUS_ORDERS_TYPES.STORE:\n label = t('Order Date');\n break;\n case PREVIOUS_ORDERS_TYPES.DONATION:\n label = t('Donation Date');\n break;\n default:\n label = t('Submission Date');\n break;\n }\n break;\n case 'ip':\n case 'id':\n answer = { answer: submission[qid] };\n break;\n case 'submitter':\n if (activeTab !== 'sentbox') {\n answer = { answer: submission.submittedBy };\n break;\n } else {\n answer = {};\n break;\n }\n case 'submittedVia':\n answer = { answer: submission.submittedVia };\n break;\n default:\n answer = submission.answers[qid] || {};\n break;\n }\n const isHeaderText = HEADER_TEXT_QUESTIONS.indexOf(question.type) > -1;\n if (hideHeaderAndText && isHeaderText) return acc;\n if (hideEmptyFields && !isHeaderText && isQuestionAnswerEmpty(answer.type, answer.answer, answer.selectedField)) return acc;\n\n const { text: questionText } = question;\n const { text: submissionText } = answer;\n const isPayment = isPaymentField(question?.type ? question.type : 'control_');\n\n answer = stringifyAnswerForType(answer);\n // Appointment Field\n const answerTimezone = answer.answer && answer.answer.timezone ? answer.answer.timezone.split(' ')[0] : '';\n const questionTimezone = question.timezone ? question.timezone.split(' ')[0] : '';\n const showTimezone = user.userType === 'formuser' || questionTimezone !== user.time_zone;\n\n // eslint-disable-next-line no-nested-ternary\n const timezone = user.userType !== 'formuser' ? (showTimezone && questionTimezone ? questionTimezone : user.time_zone) : answerTimezone;\n return [\n ...acc,\n {\n ...answer,\n ...question,\n text: submissionText || questionText,\n label: label || submissionText || questionText,\n getOptionColor,\n products,\n paymentStrings,\n locale,\n timezone,\n showTimezone,\n standalone,\n dateFormat: handleDateFormat(question?.type, dateFormat),\n setReplyVisibilityCustom,\n isEmail,\n permissions,\n submissionDate: submission.created_at,\n activeTab,\n widgetVideoMode: true,\n showImages: isPayment,\n formID: formID,\n submissionID: submission?.id,\n isNewAppointment\n }\n ];\n }, [])\n .filter(val => val)\n .map(answerRenderer);\n\n const showMail = id => {\n onSetMessage({\n type: 'Reply', useApi: false, taskID: id, requestMore: true, title: 'requestMoreInfo'\n });\n };\n\n if (onEmptySubmission) onEmptySubmission(!(children.length > 0));\n return children.length > 0\n ? (\n <>\n
    \n {assignFormID && triggerID ? (\n
    \n }\n onClick={() => handleCustomNavigation(`/inbox/${assignFormID}/${triggerID}`, '_blank')}\n >\n {t('View flow activity')}\n \n \n
    \n ) : null}\n {children}\n
    \n \n {activeTab !== 'sentbox' && (\n f}\n requestMoreInfoClick={id => showMail(id)}\n isEncrypted={isEncrypted}\n />\n )}\n \n \n )}\n />\n \n )}\n />\n \n )\n : fallbackContent;\n};\n\nSubmission.propTypes = {\n user: userPropType.isRequired,\n questions: questionsPropType.isRequired,\n submission: submissionPropType.isRequired,\n questionOrders: questionOrdersPropType.isRequired,\n answerRenderer: oneOfType([element, func]),\n hideHeaderAndText: bool,\n hideEmptyFields: bool,\n getOptionColor: func,\n fallbackContent: VALID_REACT_RENDER_PROPTYPE,\n paymentStrings: arrayOf(objectOf(string)),\n products: arrayOf(objectOf(oneOfType([shape({}), string]))),\n locale: string,\n standalone: bool,\n dateFormat: string,\n setReplyVisibilityCustom: func,\n isEmail: bool,\n activeTab: string,\n permissions: shape({}),\n previousOrdersType: string,\n isNewAppointment: bool,\n formID: string,\n onEmptySubmission: func,\n isEncrypted: bool,\n onSetMessage: func\n};\n\nSubmission.defaultProps = {\n answerRenderer: answerProps => {\n const { qid } = answerProps;\n return (\n \n );\n },\n hideEmptyFields: false,\n hideHeaderAndText: false,\n fallbackContent: null,\n getOptionColor: extractColorStyle,\n paymentStrings: [],\n products: [],\n locale: 'en',\n setReplyVisibilityCustom: null,\n standalone: false,\n dateFormat: DEFAULT_DATE_FORMAT,\n isEmail: false,\n activeTab: '',\n permissions: {},\n previousOrdersType: '',\n isNewAppointment: false,\n formID: '',\n onEmptySubmission: f => f,\n onSetMessage: f => f,\n isEncrypted: false\n};\n\nexport default Submission;\n","import React from 'react';\nimport { string } from 'prop-types';\n\nimport SVG from '../SVG';\nimport { renderable } from '../../constants/proptypes';\n\nconst NoAnswer = ({\n text,\n description,\n icon,\n ariaHidden,\n button\n}) => (\n
    \n
    \n \n
    \n
    \n {text}\n
    \n {description && {description}}\n {button && button}\n
    \n);\n\nNoAnswer.propTypes = {\n text: renderable.isRequired,\n icon: string,\n ariaHidden: string,\n description: string,\n button: renderable\n};\n\nNoAnswer.defaultProps = {\n icon: 'iconEmptyState',\n ariaHidden: 'false',\n description: '',\n button: f => f\n};\n\nexport default NoAnswer;\n","/* eslint-disable react/prop-types */\nimport React, { useMemo } from 'react';\nimport { shape, func } from 'prop-types';\nimport { Checkbox } from '@jotforminc/magnet';\nimport { t as translateText } from '@jotforminc/translation';\nimport SVG from '../SVG';\nimport Submission from '../Submission';\nimport NoAnswer from '../NoAnswer';\nimport { withWatchMan } from '../../utils/WatchmanRecorder';\nimport { classNames, getSubmissionDateLanguage, getSubmissionDateFormat } from '../../utils';\nimport { ALIGNMENTS, SPACING } from '../../constants';\n\nimport {\n formPropType,\n userPropType,\n submissionPropType,\n questionsPropType,\n questionOrdersPropType\n} from '../../constants/proptypes';\n\nconst PrintSettings = ({\n t, updateFormWithoutID, form, questions, questionOrders, submission, user\n}) => {\n const hideNonInputs = form?.hideNonInputSubmissionFields === 'Yes';\n const hideEmptyFields = form?.hideEmptySubmissionFields === 'Yes';\n const questionAlignment = form?.submissionPrintLayoutPreference || 'row';\n const questionSpacing = form?.submissionPrintSpacingPreference || 'high';\n const printThreadPreference = form?.submissionPrintThreadPreference || 'No';\n const { paymentStrings, products } = form;\n const questionList = questionOrders; // .slice(0, 10);\n const submissionDateLanguage = getSubmissionDateLanguage(user, form);\n const submissionDateFormat = getSubmissionDateFormat(form);\n const threadChecked = printThreadPreference === 'Yes';\n const submissionPreview = useMemo(() => {\n return (\n qid !== 'created_at')}\n hideHeaderAndText={hideNonInputs}\n hideEmptyFields={hideEmptyFields}\n products={products}\n paymentStrings={paymentStrings}\n fallbackContent={\n \n }\n locale={submissionDateLanguage}\n dateFormat={submissionDateFormat}\n />\n );\n }, [questions]);\n\n return (\n
    \n
    {t.LAYOUT.toUpperCase()}
    \n
    \n
    \n {ALIGNMENTS.map(item => {\n const value = item.value === 'top' ? 'column' : 'row';\n return (\n
    \n
    {translateText(item.text)}
    \n updateFormWithoutID({ submissionPrintLayoutPreference: value })}\n onKeyUp={null}\n >\n \n
    \n
    \n );\n })}\n
    \n
    \n
    \n
    {t.PREVIEW_LAYOUT.toUpperCase()}
    \n
    \n
    {translateText('Preview an example of your print layout settings.')}
    \n
    \n
    \n \n {submissionPreview}\n
    \n
    \n
    \n
    {t.LINE_SPACING.toUpperCase()}
    \n
    \n {\n SPACING.map(item => {\n const value = (item.value === 'compact' && 'high')\n || (item.value === 'wide' && 'low')\n || 'medium';\n return (\n updateFormWithoutID({ submissionPrintSpacingPreference: value }))}\n onKeyUp={null}\n >\n \n {translateText(item.text)}\n
    \n );\n })\n }\n
    \n
    \n
    {t.CONTENT.toUpperCase()}
    \n
    \n {\n updateFormWithoutID({ submissionPrintThreadPreference: e.target.checked ? 'Yes' : 'No' });\n }}\n size=\"medium\"\n label={t.INCLUDE_THREAD_LABEL}\n role=\"checkbox\"\n ariaChecked={threadChecked}\n tabIndex={0}\n aria-label={t.INCLUDE_THREAD_LABEL}\n />\n
    \n
    \n );\n};\n\nPrintSettings.propTypes = {\n updateFormWithoutID: func.isRequired,\n user: userPropType.isRequired,\n form: formPropType.isRequired,\n questions: questionsPropType.isRequired,\n questionOrders: questionOrdersPropType.isRequired,\n submission: submissionPropType.isRequired,\n t: shape({}).isRequired\n};\n\nexport default PrintSettings;\n","import React, { useState, useEffect, useRef } from 'react';\nimport { connect } from 'react-redux';\nimport { func } from 'prop-types';\nimport moment from 'moment-timezone';\nimport { moment as Moment } from '@jotforminc/utils';\nimport { t as translation } from '@jotforminc/translation';\nimport SVG from '../../components/SVG';\nimport GeneralSettings from '../../components/SettingsGeneral';\nimport FieldSettings from '../../components/SettingsFields';\nimport PrintSettings from '../../components/SettingsPrint';\n\nimport { setSettings, updateForm } from '../../actions';\n\nimport {\n MENU_SETTINGS,\n DEFAULT_DATE_FORMAT,\n LEFT_PANEL_CLASS,\n RIGHT_PANEL_CLASS\n} from '../../constants';\n\nimport {\n formPropType,\n userPropType,\n submissionPropType,\n questionsPropType,\n questionOrdersPropType,\n enhancedProps,\n headerFieldOptionsPropType,\n headerFieldPropType\n} from '../../constants/proptypes';\n\nimport {\n activeSubmissionSelector,\n questionsSelector,\n formSelector,\n questionOrdersSelector,\n userSelector,\n allHeaderFieldOptionsSelector,\n headerFieldSelector,\n subheaderFieldSelector,\n settingsPanelSelector,\n getFieldListSelector\n} from '../../selectors';\n\nimport { withInboxEnhancer } from '../../hocs/InboxEnhancer';\n\nexport const SettingsPanelComponent = ({\n form,\n questions,\n setSettingsPanel,\n addClass,\n removeClass,\n updateFormData,\n questionOrders,\n submission,\n allHeaderFieldOptions,\n headerField,\n subheaderField,\n user,\n t,\n settingsPanel,\n fieldList\n}) => {\n const menuContainerRef = useRef();\n const updateFormWithoutID = props => updateFormData(form.id, props);\n const generateSubmissionDateFormatMap = () => {\n const serverTimezoneOffset = moment(submission.created_at).tz('America/New_York').format('Z');\n const [date, dateFormat] = submission.created_at ? [`${submission.created_at} ${serverTimezoneOffset}`, 'YYYY-MM-DD HH:mm ZZ'] : [];\n const { formatList } = Moment;\n if (formatList.indexOf(DEFAULT_DATE_FORMAT) === -1) {\n formatList.push(DEFAULT_DATE_FORMAT);\n }\n return formatList.map(format => ({\n value: format,\n text: Moment.formatDate(date, dateFormat, format)\n }));\n };\n\n const [activeTab, setActiveTab] = useState('general');\n const [submissionDateFormatMap, setSubmissionDateFormatMap] = useState(generateSubmissionDateFormatMap());\n\n const onClose = () => {\n addClass(LEFT_PANEL_CLASS);\n setSettingsPanel({\n isOpened: false, activeTab: 'general'\n });\n };\n\n useEffect(() => {\n if (!menuContainerRef.current) return;\n menuContainerRef.current?.focus();\n return () => removeClass(RIGHT_PANEL_CLASS);\n }, []);\n\n useEffect(() => {\n setSubmissionDateFormatMap(generateSubmissionDateFormatMap());\n }, [Moment.locale, submission.created_at]);\n\n useEffect(() => {\n if (form.submissionDateFormat !== DEFAULT_DATE_FORMAT && Moment.formatList.length > 0 && Moment.formatList.indexOf(form.submissionDateFormat) === -1) {\n updateFormWithoutID({ submissionDateFormat: Moment.formatList[0] });\n }\n }, [submissionDateFormatMap]);\n\n useEffect(() => {\n if (settingsPanel.isOpened) {\n addClass(RIGHT_PANEL_CLASS);\n setActiveTab(settingsPanel.activeTab);\n }\n }, [settingsPanel]);\n\n return (\n <>\n
    \n
    \n
    \n
    \n {t.INBOX_SETTINGS}\n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n {Object.keys(MENU_SETTINGS).map(key => {\n return (\n setActiveTab(MENU_SETTINGS[key].value)}\n onKeyDown={null}\n >\n {translation(MENU_SETTINGS[key].label)}\n
    \n );\n })}\n
    \n \n {activeTab === 'general' && (\n \n \n \n )}\n {activeTab === 'fields' && (\n \n \n \n )}\n {activeTab === 'print' && (\n \n \n \n )}\n \n \n \n \n );\n};\n\nSettingsPanelComponent.propTypes = {\n user: userPropType.isRequired,\n form: formPropType.isRequired,\n questions: questionsPropType.isRequired,\n updateFormData: func.isRequired,\n questionOrders: questionOrdersPropType.isRequired,\n submission: submissionPropType.isRequired,\n allHeaderFieldOptions: headerFieldOptionsPropType.isRequired,\n headerField: headerFieldPropType,\n subheaderField: headerFieldPropType,\n ...enhancedProps\n};\n\nSettingsPanelComponent.defaultProps = {\n headerField: undefined,\n subheaderField: undefined\n};\n\nconst mapStateToProps = stateProps => ({\n form: formSelector(stateProps),\n user: userSelector(stateProps),\n questions: questionsSelector(stateProps),\n questionOrders: questionOrdersSelector(stateProps),\n submission: activeSubmissionSelector(stateProps),\n allHeaderFieldOptions: allHeaderFieldOptionsSelector(stateProps),\n headerField: headerFieldSelector(stateProps),\n subheaderField: subheaderFieldSelector(stateProps),\n settingsPanel: settingsPanelSelector(stateProps),\n fieldList: getFieldListSelector(stateProps)\n});\n\nconst mapDispatchToProps = {\n updateFormData: updateForm,\n setSettingsPanel: setSettings\n};\n\nconst enhance = withInboxEnhancer('settingsPanel', connect(mapStateToProps, mapDispatchToProps));\n\nexport default enhance(SettingsPanelComponent);\n","/* eslint-disable react/prop-types */\nimport React from 'react';\nimport Styled from 'styled-components';\nimport Container from '../Container';\n\nexport const LoaderSvg = Styled.svg`\n .envelope {\n transform-style: flat;\n transform-origin: center;\n animation-name: scale;\n animation-duration: 1.7s;\n animation-fill-mode: backwards;\n animation-direction: normal;\n animation-iteration-count: infinite;\n @media (prefers-reduced-motion) {\n animation: none;\n }\n }\n .animationGroup {\n transform: translateY(20px);\n animation-name: paperTransform;\n animation-duration: 1.7s;\n animation-iteration-count: infinite;\n @media (prefers-reduced-motion) {\n animation: none;\n }\n }\n .line {\n animation-duration: 2s;\n animation-iteration-count: infinite;\n animation-fill-mode: backwards;\n animation-timing-function: cubic-bezier(0.01, 0.63, 0.1, 0.99);\n stroke-dasharray: 10px;\n stroke-dashoffset: 10px;\n stroke-width: 2px;\n stroke-linejoin: round;\n stroke-linecap: round;\n @media (prefers-reduced-motion) {\n animation: none;\n }\n }\n .line1 {\n animation-name: drawLine1;\n\n }\n .line2 {\n animation-name: drawLine3;\n }\n\n @keyframes drawLine2 {\n 0% {\n stroke-dashoffset: 10px;\n }\n 15% {\n stroke-dashoffset: 10px;\n }\n 30% {\n stroke-dashoffset: 0px;\n }\n 100% {\n stroke-dashoffset: 0px;\n }\n }\n @keyframes drawLine1 {\n 0% {\n stroke-dashoffset: 10px;\n }\n 15% {\n stroke-dashoffset: 0px;\n }\n 100% {\n stroke-dashoffset: 0px;\n }\n }\n .line3 {\n animation-name: drawLine2;\n\n }\n @keyframes drawLine3 {\n 0% {\n stroke-dashoffset: 10px;\n }\n 30% {\n stroke-dashoffset: 10px;\n }\n 45% {\n stroke-dashoffset: 0px;\n }\n 100% {\n stroke-dashoffset: 0px;\n }\n }\n\n @keyframes scale {\n 0% { transform: scale(0); }\n 60% { transform: scale(0); }\n 70% {\n transform: scale(1);\n }\n 100% {\n transform: scale(1);\n }\n }\n @keyframes scale2 {\n 0% { transform: scale(1); }\n 10% { transform: scale(1.1); }\n 20% { transform: scale(1); }\n 100% {\n transform: scale(1);\n }\n }\n`;\n\nconst Loader = ({ className }) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Loader;\n","import React, { useRef, useEffect, useState } from 'react';\nimport { withRouter } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport { bool, func, string } from 'prop-types';\nimport { Loading } from '@jotforminc/loading';\nimport { handleCustomNavigation } from '@jotforminc/utils';\n\nimport { updateLocationParams, classNames } from '../../utils';\nimport { withInboxEnhancer } from '../../hocs/InboxEnhancer';\n\nimport { renewSubmission } from '../../actions';\n\nimport {\n activeSubmissionSelector,\n submissionEditModeSelector,\n formStyleSelector,\n formTitleSelector,\n formIDSelector,\n activeTabIDSelector\n} from '../../selectors';\n\nimport {\n submissionPropType,\n enhancedProps\n} from '../../constants/proptypes';\n\nexport const FormComponent = ({\n isEditMode,\n addClass,\n removeClass,\n onExitEditMode,\n onSubmissionComplete,\n formTitle,\n formID,\n submission,\n activeTab,\n t\n}) => {\n const { id: submissionID, token, session_id: session } = submission;\n const [isFrameLoaded, setFrameLoad] = useState(false);\n const onFrameLoad = () => setFrameLoad(true);\n const onExit = () => {\n onExitEditMode();\n };\n\n const iframeRef = useRef();\n\n const onMessage = e => {\n // feedback form does not have source? - use this info\n if (e.data && e.data.action && e.data.action === 'submission-completed' && e.source && (e.source === (iframeRef.current && iframeRef.current.contentWindow))) {\n onSubmissionComplete(submissionID);\n onExitEditMode();\n }\n };\n\n // Fixes iOS showing keyboard on every click/tap/whatever\n // if you remove the iframe when an input is focused as last action.\n const howILearnedToStopWorryingAboutBrowsersAndLoveTheBugs = () => {\n if (isFrameLoaded) {\n const fakeInput = global.document.createElement('input');\n global.document.body.appendChild(fakeInput);\n // Do not use style directly, it will fail on strict mode\n fakeInput.style.cssText = 'font-size: 72px; position: fixed; top: 0; left: 0;'; // <3 Even more iOS stupidity.\n fakeInput.focus();\n fakeInput.blur();\n fakeInput.remove();\n }\n };\n\n const editLink = submission?.session_id\n ? `/${formID}${session && `?session=${session}`}${token && `&stoken=${token}`}`\n : `/edit/${submissionID}?isEditInInbox=1&noToolBar=1&noRedirect=1`;\n\n useEffect(() => {\n // Reset frame state\n setFrameLoad(false);\n\n // Add window listeners\n global.window.addEventListener('message', onMessage);\n return () => global.window.removeEventListener('message', onMessage);\n }, [submissionID]);\n\n const redirectToApp = () => {\n const [key, val] = ['forceMobileDevice', '1'];\n const shouldForceMobile = () => {\n const url = new URL(window.location.href);\n const forceMobileVal = url.searchParams.get(key);\n return forceMobileVal === val;\n };\n // TODO :: do better\n const searchParams = new URLSearchParams(window.parent.location.search);\n if (shouldForceMobile()) searchParams.set(key, val);\n\n const existingSearchParams = searchParams && `&${searchParams}`;\n const appEditLink = `/app/${window.portalID}/${formID}/continue?session=${session}&stoken=${token}${existingSearchParams}`;\n handleCustomNavigation(appEditLink, '_self');\n };\n\n // Toggle edit mode class based on given prop\n useEffect(() => {\n if (isEditMode) {\n if (window.useFromPortal && submission?.session_id) {\n redirectToApp();\n }\n addClass('jfInbox--isEditMode');\n } else {\n removeClass('jfInbox--isEditMode');\n }\n }, [isEditMode]);\n\n return (\n
    \n
    \n \n ←\n {activeTab === 'sentbox' ? t.BACK_TO_SENTBOX_VIEW : t.BACK_TO_INBOX_VIEW}\n
    \n
    \n
    \n \n
    \n
    \n {isEditMode ? (\n \n ) : howILearnedToStopWorryingAboutBrowsersAndLoveTheBugs() }\n
    \n \n );\n};\n\nFormComponent.propTypes = {\n formTitle: string.isRequired,\n submission: submissionPropType.isRequired,\n isEditMode: bool,\n onExitEditMode: func,\n onSubmissionComplete: func,\n ...enhancedProps\n};\n\nFormComponent.defaultProps = {\n isEditMode: false,\n onExitEditMode: f => f,\n onSubmissionComplete: f => f\n};\n\nconst mapStateToProps = stateProps => ({\n formID: formIDSelector(stateProps),\n formTitle: formTitleSelector(stateProps),\n styles: formStyleSelector(stateProps),\n submission: activeSubmissionSelector(stateProps),\n isEditMode: submissionEditModeSelector(stateProps),\n activeTab: activeTabIDSelector(stateProps)\n});\n\nconst mapDispatchToProps = {\n onSubmissionComplete: renewSubmission\n};\n\nconst mergeProps = (stateProps, dispatchProps, compProps) => {\n return {\n ...stateProps,\n ...dispatchProps,\n ...compProps,\n onExitEditMode: () => {\n compProps.history.push(updateLocationParams({ editMode: false }));\n }\n };\n};\n\nconst enhance = withInboxEnhancer('form', connect(mapStateToProps, mapDispatchToProps, mergeProps));\n\nexport default withRouter(enhance(FormComponent));\n","/* eslint-disable no-param-reassign */\nexport class VerticalScrollShadow {\n constructor({\n target = null,\n shadowColor = 'red',\n shadowZIndex = 1,\n shadowHeight = { top: 32, bottom: 32 },\n shadowOffset = 10\n } = {}) {\n this.shadowColor = shadowColor;\n this.target = target;\n this.shadowZIndex = shadowZIndex;\n this.shadowHeight = shadowHeight;\n this.shadowOffset = shadowOffset;\n this.topShadowNode = null;\n this.bottomShadowNode = null;\n }\n\n shadowMarkup(dir, pTop, pRight, pBottom, pLeft) {\n const node = document.createElement('DIV');\n const topV = `top: ${dir === 'top' ? '0' : 'auto'};`;\n const bottom = `bottom: ${dir === 'bottom' ? '0' : 'auto'};`;\n const marginY = `margin-${dir === 'top' ? 'bottom' : 'top'}: -${\n this.shadowHeight[dir]\n }px;`;\n const transform = `transform: translateY(${\n // eslint-disable-next-line no-nested-ternary\n dir === 'top' ? (pTop > 0 ? pTop * -1 : 0) : pBottom\n }px);`;\n\n const width = `width: calc(100% + ${pLeft + pRight}px);`;\n const marginLeft = `margin-left: -${pLeft}px;`;\n const zIndex = `z-index:${this.shadowZIndex};`;\n const bg = `background: ${this.shadowColor};`;\n const defaultStyles = 'position:sticky;left:-24px;opacity:0;transition:.3s;flex-shrink: 0;pointer-events:none;';\n const height = `height:${this.shadowHeight[dir]}px;`;\n\n node.setAttribute('data-sd', dir);\n node.setAttribute(\n 'style',\n `${defaultStyles}${height}${zIndex}${topV}${bottom}${bg}${marginY}${transform}${width}${marginLeft}`\n );\n\n return node;\n }\n\n handleShadow() {\n const nodes = document.querySelectorAll(this.target);\n\n if (nodes && nodes.length > 0) {\n nodes.forEach(node => {\n const styles = window.getComputedStyle(node);\n const {\n paddingTop, paddingRight, paddingLeft, paddingBottom\n } = styles;\n this.topShadowNode = this.shadowMarkup(\n 'top',\n parseInt(paddingTop, 10),\n parseInt(paddingRight, 10),\n parseInt(paddingLeft, 10),\n parseInt(paddingBottom, 10)\n );\n this.bottomShadowNode = this.shadowMarkup(\n 'bottom',\n parseInt(paddingTop, 10),\n parseInt(paddingRight, 10),\n parseInt(paddingLeft, 10),\n parseInt(paddingBottom, 10)\n );\n\n node.prepend(this.topShadowNode);\n node.appendChild(this.bottomShadowNode);\n\n node.style.position = 'relative';\n this.showHideShadow(node, this.topShadowNode, this.bottomShadowNode);\n let top;\n let bottom = null;\n\n node.addEventListener('scroll', e => {\n if (!top && !bottom) {\n top = e.target.querySelector('[data-sd=\"top\"]');\n bottom = e.target.querySelector('[data-sd=\"bottom\"]');\n } else {\n this.showHideShadow(e.target, top, bottom);\n }\n });\n });\n }\n }\n\n showHideShadow(node, top, bottom) {\n top.style.opacity = `${node.scrollTop > this.shadowOffset ? '1' : '0'}`;\n bottom.style.opacity = `${\n node.scrollTop + node.offsetHeight + this.shadowOffset < node.scrollHeight\n ? '1'\n : '0'\n }`;\n }\n\n init() {\n this.handleShadow();\n }\n}\n","import React, { useEffect, useState } from 'react';\n\nconst MessageList = ({\n MessageComponent, messageList, viewMode, formID, isContinueChat,\n inputBackground, inputTextColor, agentBackgroundStart, agentBackgroundEnd,\n agentId, chatId, shouldShowFeedback, step, user, eventHandler, hasFeedbackPermission\n}) => {\n const [feedbacks, setFeedbacks] = useState(null);\n\n const fetchFeedbacks = async () => {\n try {\n if (!shouldShowFeedback) {\n return;\n }\n\n const filters = JSON.stringify({ 'status:ne': 'DELETED' });\n\n const res = await fetch(`/API/ai-agent/${agentId}/feedback?filter=${filters}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n\n const data = await res.json();\n if (typeof data?.content !== 'string') {\n setFeedbacks(data?.content);\n }\n } catch (error) {\n console.error('Error fetching feedback:', error);\n }\n };\n\n useEffect(() => {\n fetchFeedbacks();\n }, [agentId]);\n\n const handleFeedbackSubmitted = () => {\n fetchFeedbacks();\n };\n\n return messageList.map(message => {\n const existingFeedback = feedbacks?.find(f => f.chat_message_id === message.id);\n let feedbackInfo = null;\n if (existingFeedback) {\n feedbackInfo = {\n feedbackText: existingFeedback.content,\n feedbackRate: existingFeedback.rating,\n feedbackCreatedAt: existingFeedback.created_at,\n feedbackId: existingFeedback.uuid\n };\n }\n\n return (\n \n );\n });\n};\n\nexport default MessageList;\n","import sanitize from 'sanitize-html';\n\nexport const sanitizeHtmlForParagraphField = html => {\n return sanitize(html, {\n allowedTags: sanitize.defaults.allowedTags.concat(['img', 'span', 'h1', 'h2', 'h3', 'h4', 'audio', 'source', 'iframe', 'small', 'colgroup', 'col', 'i', 'sup', 'sub', 'nav']),\n allowedAttributes: {\n '*': ['href', 'align', 'alt', 'center', 'bgcolor', 'style', 'class', 'width', 'height', 'start'],\n img: ['src'],\n audio: ['controls', 'src'],\n iframe: ['src', 'allowfullscreen'],\n source: ['src', 'type'],\n a: ['target', 'title', 'rel'],\n table: ['border', 'cellspacing', 'cellpadding'],\n td: ['colspan', 'rowspan', 'valign'],\n tr: ['valign'],\n div: ['id']\n },\n allowedSchemesByTag: {\n a: ['http', 'https', 'ftp', 'mailto', 'tel']\n },\n transformTags: { a: sanitize.simpleTransform('a', { rel: 'nofollow' }) },\n parseStyleAttributes: false\n });\n};\n\nexport const sanitizeMessage = message => sanitize(message);\n","import React from 'react';\nimport { bool, string } from 'prop-types';\nimport classNames from 'classnames';\nimport { Flex } from '@jotforminc/magnet';\nimport { isBase64Image } from '@jotforminc/agent-utils';\nimport { t } from '@jotforminc/translation';\n\nexport const Avatar = ({\n url = null, from = null, hasUserAvatar = false\n}) => {\n return (\n \n {t('avatar')}\n \n );\n};\n\nAvatar.propTypes = {\n url: string,\n from: string,\n hasUserAvatar: bool\n};\n","import { Button, Checkbox } from '@jotforminc/magnet';\nimport classNames from 'classnames';\nimport {\n any, bool, func, string\n} from 'prop-types';\nimport React from 'react';\n\nconst ChoiceButton = ({\n text, image, Icon, isMultipleSelect = false, onSelect, isSelected, className = '', value, disabled, autoSelect = true\n}) => {\n return (\n \n {isMultipleSelect && (\n \n )}\n {image &&
    {text}
    }\n {text}\n \n );\n};\n\nChoiceButton.propTypes = {\n text: string.isRequired,\n value: any.isRequired,\n image: string,\n Icon: any,\n isMultipleSelect: bool,\n onSelect: func.isRequired,\n isSelected: bool.isRequired,\n className: string,\n disabled: bool,\n autoSelect: bool\n};\n\nexport default ChoiceButton;\n","import { useEffect, useState } from 'react';\nimport { getUrlParameter } from '@jotforminc/utils';\n\nconst useStep = (step = {}, answer) => {\n if (getUrlParameter('aiWidget') !== '1') return { stepState: {}, isDisabledForStep: false };\n const [stepState, setStepState] = useState({\n stepKey: step?.key,\n loopNo: step?.loop,\n lastAnswer: ''\n });\n\n useEffect(() => {\n if (Object.keys(step).length > 0 && answer && !stepState.lastAnswer && !step.currentAnswer[stepState.loopNo][stepState.stepKey]) {\n setStepState({\n ...stepState,\n lastAnswer: answer\n });\n }\n }, [answer]);\n\n return { stepState, isDisabledForStep: !!stepState.lastAnswer };\n};\n\nexport default useStep;\n","import React, { useEffect } from 'react';\nimport {\n bool, func, any, array, string, oneOfType, number, shape\n} from 'prop-types';\nimport { Flex } from '@jotforminc/magnet';\nimport { safeJSONParse } from '@jotforminc/utils';\nimport classNames from 'classnames';\nimport ChoiceButton from './ChoiceButton';\nimport useStep from '../hooks/useStep';\n\nconst ChoiceList = ({\n options, isMultipleSelect = false, isRequired, answer: _answer, setAnswer, isActive = false, inProgress, viewMode = false, defaultValue = '', enableNativeDropdown = false, visibleOptions = 1,\n step = {}\n}) => {\n const defaultSelectedOptions = options.map(o => o.text).filter(text => defaultValue.indexOf(text) > -1);\n\n const answer = typeof _answer === 'string' && isMultipleSelect ? safeJSONParse(_answer, []) : _answer;\n\n const { stepState, isDisabledForStep } = useStep(step, answer);\n\n useEffect(() => {\n if (!answer && defaultSelectedOptions.length > 0) {\n setAnswer(isMultipleSelect ? defaultSelectedOptions : defaultSelectedOptions[0]);\n }\n }, []);\n\n const handleSelection = value => () => {\n if (!isActive || viewMode || isDisabledForStep) return;\n if (isMultipleSelect) {\n const currentAnswer = answer && Array.isArray(answer) ? answer : [];\n if (currentAnswer.includes(value) && (!isRequired || currentAnswer.length > 1)) {\n setAnswer(currentAnswer.filter(o => o !== value));\n } else if (!currentAnswer.includes(value)) {\n setAnswer([...currentAnswer, value]);\n }\n } else {\n setAnswer(value);\n }\n };\n\n const isSelected = text => {\n return (answer && isMultipleSelect) ? (Array.isArray(answer) && answer.includes(text)) : answer === text;\n };\n\n return (\n \n {!viewMode && isMultipleSelect && options.length > 1 && (Select one or more)}\n {(options.length > 12 && enableNativeDropdown) ? (\n setAnswer(isMultipleSelect ? Array.from(selectedOptions).map(o => o.value) : selectedOptions[0].value)}\n >\n {!isMultipleSelect && }\n {options.map(({ text }) => (\n \n ))}\n \n ) : options.map(({ text, Icon }) => (\n \n ))}\n \n );\n};\n\nChoiceList.propTypes = {\n options: array.isRequired,\n isMultipleSelect: bool,\n isRequired: bool.isRequired,\n isActive: bool,\n inProgress: bool,\n setAnswer: func.isRequired,\n answer: any.isRequired,\n viewMode: bool,\n defaultValue: string,\n enableNativeDropdown: bool,\n visibleOptions: oneOfType([string, number]),\n step: shape({})\n};\n\nexport default ChoiceList;\n","import React from 'react';\nimport {\n bool, shape, func, any\n} from 'prop-types';\nimport { IconThumbsDown, IconThumbsUp } from '@jotforminc/svg-icons';\nimport ChoiceList from '../ChoiceList';\n\nconst Icons = { yes: IconThumbsUp, no: IconThumbsDown };\n\nconst YesNo = ({\n question = {}, answer, setAnswer, isActive = false, inProgress, viewMode = false\n}) => {\n const options = question?.options?.split('|').map(option => ({ text: option, Icon: Icons[option.toLowerCase()] }));\n\n return (\n \n );\n};\n\nYesNo.propTypes = {\n question: shape({}),\n isActive: bool,\n inProgress: bool,\n setAnswer: func.isRequired,\n answer: any.isRequired,\n viewMode: bool\n};\n\nexport default YesNo;\n","/* eslint-disable max-len */\n\nimport { COUNTRIES } from '../countries';\nimport { GENDERS } from '../genders';\nimport { DAYS } from '../days';\nimport { MONTHS } from '../months';\n\nconst lastHundredYears = (() => {\n const date = new Date();\n // get current year\n const cyear = (date.getYear() < 1000) ? date.getYear() + 1900 : date.getYear();\n const years = [];\n for (let year = cyear; year >= (cyear - 100); year--) {\n years.push(`${year}`);\n }\n\n return years;\n})();\n\nexport const specialOptions = {\n None: {\n controls: 'dropdown,radio,checkbox,matrix'\n },\n 'US States': {\n controls: 'dropdown',\n value: ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'District of Columbia', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming']\n },\n 'US States Abbr': {\n controls: 'dropdown',\n value: ['AL', 'AK', 'AR', 'AZ', 'CA', 'CO', 'CT', 'DC', 'DE', 'FL', 'GA', 'HI', 'ID', 'IL', 'IN', 'IA', 'KS', 'KY', 'LA', 'ME', 'MD', 'MA', 'MI', 'MN', 'MS', 'MO', 'MT', 'NE', 'NV', 'NH', 'NJ', 'NM', 'NY', 'NC', 'ND', 'OH', 'OK', 'OR', 'PA', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VT', 'VI', 'VA', 'WA', 'WV', 'WI', 'WY']\n },\n 'Canadian Provinces': {\n controls: 'dropdown',\n value: ['Alberta', 'British Columbia', 'Manitoba', 'New Brunswick', 'Newfoundland', 'Northwest Territories', 'Nova Scotia', 'Nunavut', 'Ontario', 'Prince Edward Island', 'Quebec', 'Saskatchewan', 'Yukon']\n },\n Countries: {\n controls: 'dropdown',\n value: COUNTRIES,\n localeValue: COUNTRIES.map(country => { return String.prototype.locale ? country.locale() : country; })\n },\n 'Last 100 Years': {\n controls: 'dropdown',\n value: lastHundredYears\n },\n Gender: {\n controls: 'dropdown,radio,checkbox',\n value: GENDERS,\n localeValue: GENDERS.map(gender => { return String.prototype.locale ? gender.locale() : gender; })\n },\n Days: {\n controls: 'dropdown,radio,checkbox',\n value: DAYS,\n localeValue: DAYS.map(day => { return String.prototype.locale ? day.locale() : day; })\n },\n Months: {\n controls: 'dropdown,radio,checkbox',\n value: MONTHS,\n localeValue: MONTHS.map(month => { return String.prototype.locale ? month.locale() : month; })\n },\n 'Time Zones': {\n controls: 'dropdown',\n value: ['[[Africa]]', 'Abidjan (GMT)', 'Accra (GMT)', 'Addis Ababa (GMT+03:00)', 'Algiers (GMT+01:00)', 'Asmara (GMT+03:00)', 'Bamako (GMT)', 'Bangui (GMT+01:00)', 'Banjul (GMT)', 'Bissau (GMT)', 'Blantyre (GMT+02:00)', 'Brazzaville (GMT+01:00)', 'Bujumbura (GMT+02:00)', 'Cairo (GMT+03:00)', 'Casablanca (GMT)', 'Ceuta (GMT+02:00)', 'Conakry (GMT)', 'Dakar (GMT)', 'Dar es Salaam (GMT+03:00)', 'Djibouti (GMT+03:00)', 'Douala (GMT+01:00)', 'El Aaiun (GMT)', 'Freetown (GMT)', 'Gaborone (GMT+02:00)', 'Harare (GMT+02:00)', 'Johannesburg (GMT+02:00)', 'Kampala (GMT+03:00)', 'Khartoum (GMT+03:00)', 'Kigali (GMT+02:00)', 'Kinshasa (GMT+01:00)', 'Lagos (GMT+01:00)', 'Libreville (GMT+01:00)', 'Lome (GMT)', 'Luanda (GMT+01:00)', 'Lubumbashi (GMT+02:00)', 'Lusaka (GMT+02:00)', 'Malabo (GMT+01:00)', 'Maputo (GMT+02:00)', 'Maseru (GMT+02:00)', 'Mbabane (GMT+02:00)', 'Mogadishu (GMT+03:00)', 'Monrovia (GMT)', 'Nairobi (GMT+03:00)', 'Ndjamena (GMT+01:00)', 'Niamey (GMT+01:00)', 'Nouakchott (GMT)', 'Ouagadougou (GMT)', 'Porto-Novo (GMT+01:00)', 'Sao Tome (GMT)', 'Tripoli (GMT+02:00)', 'Tunis (GMT+02:00)', 'Windhoek (GMT+01:00)', '[[America]]', 'Adak (GMT-09:00)', 'Anchorage (GMT-08:00)', 'Anguilla (GMT-04:00)', 'Antigua (GMT-04:00)', 'Araguaina (GMT-03:00)', 'Buenos Aires, Argentina (GMT-03:00)', 'Catamarca, Argentina (GMT-03:00)', 'Cordoba, Argentina (GMT-03:00)', 'Jujuy, Argentina (GMT-03:00)', 'La Rioja, Argentina (GMT-03:00)', 'Mendoza, Argentina (GMT-03:00)', 'Rio Gallegos, Argentina (GMT-03:00)', 'Salta, Argentina (GMT-03:00)', 'San Juan, Argentina (GMT-03:00)', 'San Luis, Argentina (GMT-04:00)', 'Tucuman, Argentina (GMT-03:00)', 'Ushuaia, Argentina (GMT-03:00)', 'Aruba (GMT-04:00)', 'Asuncion (GMT-04:00)', 'Atikokan (GMT-05:00)', 'Bahia (GMT-03:00)', 'Barbados (GMT-04:00)', 'Belem (GMT-03:00)', 'Belize (GMT-06:00)', 'Blanc-Sablon (GMT-04:00)', 'Boa Vista (GMT-04:00)', 'Bogota (GMT-05:00)', 'Boise (GMT-06:00)', 'Cambridge Bay (GMT-06:00)', 'Campo Grande (GMT-04:00)', 'Cancun (GMT-05:00)', 'Caracas (GMT-04:30)', 'Cayenne (GMT-03:00)', 'Cayman (GMT-05:00)', 'Chicago (GMT-05:00)', 'Chihuahua (GMT-06:00)', 'Costa Rica (GMT-06:00)', 'Cuiaba (GMT-04:00)', 'Curacao (GMT-04:00)', 'Danmarkshavn (GMT)', 'Dawson (GMT-07:00)', 'Dawson Creek (GMT-07:00)', 'Denver (GMT-06:00)', 'Detroit (GMT-04:00)', 'Dominica (GMT-04:00)', 'Edmonton (GMT-06:00)', 'Eirunepe (GMT-04:00)', 'El Salvador (GMT-06:00)', 'Fortaleza (GMT-03:00)', 'Glace Bay (GMT-03:00)', 'Godthab (GMT-02:00)', 'Goose Bay (GMT-03:00)', 'Grand Turk (GMT-04:00)', 'Grenada (GMT-04:00)', 'Guadeloupe (GMT-04:00)', 'Guatemala (GMT-06:00)', 'Guayaquil (GMT-05:00)', 'Guyana (GMT-04:00)', 'Halifax (GMT-03:00)', 'Havana (GMT-04:00)', 'Hermosillo (GMT-07:00)', 'Indianapolis, Indiana (GMT-04:00)', 'Knox, Indiana (GMT-05:00)', 'Marengo, Indiana (GMT-04:00)', 'Petersburg, Indiana (GMT-04:00)', 'Tell City, Indiana (GMT-05:00)', 'Vevay, Indiana (GMT-04:00)', 'Vincennes, Indiana (GMT-04:00)', 'Winamac, Indiana (GMT-04:00)', 'Inuvik (GMT-06:00)', 'Iqaluit (GMT-04:00)', 'Jamaica (GMT-05:00)', 'Juneau (GMT-08:00)', 'Louisville, Kentucky (GMT-04:00)', 'Monticello, Kentucky (GMT-04:00)', 'La Paz (GMT-04:00)', 'Lima (GMT-05:00)', 'Los Angeles (GMT-07:00)', 'Maceio (GMT-03:00)', 'Managua (GMT-06:00)', 'Manaus (GMT-04:00)', 'Marigot (GMT-04:00)', 'Martinique (GMT-04:00)', 'Mazatlan (GMT-06:00)', 'Menominee (GMT-05:00)', 'Merida (GMT-05:00)', 'Mexico City (GMT-05:00)', 'Miquelon (GMT-02:00)', 'Moncton (GMT-03:00)', 'Monterrey (GMT-05:00)', 'Montevideo (GMT-03:00)', 'Montreal (GMT-04:00)', 'Montserrat (GMT-04:00)', 'Nassau (GMT-04:00)', 'New York (GMT-04:00)', 'Nipigon (GMT-04:00)', 'Nome (GMT-08:00)', 'Noronha (GMT-02:00)', 'Center, North Dakota (GMT-05:00)', 'New Salem, North Dakota (GMT-05:00)', 'Panama (GMT-05:00)', 'Pangnirtung (GMT-04:00)', 'Paramaribo (GMT-03:00)', 'Phoenix (GMT-07:00)', 'Port-au-Prince (GMT-05:00)', 'Port of Spain (GMT-04:00)', 'Porto Velho (GMT-04:00)', 'Puerto Rico (GMT-04:00)', 'Rainy River (GMT-05:00)', 'Rankin Inlet (GMT-05:00)', 'Recife (GMT-03:00)', 'Regina (GMT-06:00)', 'Resolute (GMT-05:00)', 'Rio Branco (GMT-04:00)', 'Santarem (GMT-03:00)', 'Santiago (GMT-04:00)', 'Santo Domingo (GMT-04:00)', 'Sao Paulo (GMT-03:00)', 'Scoresbysund (GMT)', 'Shiprock (GMT-06:00)', 'St Barthelemy (GMT-04:00)', 'St Johns (GMT-02:30)', 'St Kitts (GMT-04:00)', 'St Lucia (GMT-04:00)', 'St Thomas (GMT-04:00)', 'St Vincent (GMT-04:00)', 'Swift Current (GMT-06:00)', 'Tegucigalpa (GMT-06:00)', 'Thule (GMT-03:00)', 'Thunder Bay (GMT-04:00)', 'Tijuana (GMT-07:00)', 'Toronto (GMT-04:00)', 'Tortola (GMT-04:00)', 'Vancouver (GMT-07:00)', 'Whitehorse (GMT-07:00)', 'Winnipeg (GMT-05:00)', 'Yakutat (GMT-08:00)', 'Yellowknife (GMT-06:00)', '[[Antarctica]]', 'Casey (GMT+11:00)', 'Davis (GMT+05:00)', 'DumontDUrville (GMT+10:00)', 'Mawson (GMT+05:00)', 'McMurdo (GMT+12:00)', 'Palmer (GMT-04:00)', 'Rothera (GMT-03:00)', 'South Pole (GMT+12:00)', 'Syowa (GMT+03:00)', 'Vostok (GMT+06:00)', '[[Arctic]]', 'Longyearbyen (GMT+02:00)', '[[Asia]]', 'Aden (GMT+03:00)', 'Almaty (GMT+06:00)', 'Amman (GMT+03:00)', 'Anadyr (GMT+13:00)', 'Aqtau (GMT+05:00)', 'Aqtobe (GMT+05:00)', 'Ashgabat (GMT+05:00)', 'Baghdad (GMT+03:00)', 'Bahrain (GMT+03:00)', 'Baku (GMT+05:00)', 'Bangkok (GMT+07:00)', 'Beirut (GMT+03:00)', 'Bishkek (GMT+06:00)', 'Brunei (GMT+08:00)', 'Choibalsan (GMT+08:00)', 'Chongqing (GMT+08:00)', 'Colombo (GMT+05:30)', 'Damascus (GMT+03:00)', 'Dhaka (GMT+07:00)', 'Dili (GMT+09:00)', 'Dubai (GMT+04:00)', 'Dushanbe (GMT+05:00)', 'Gaza (GMT+03:00)', 'Harbin (GMT+08:00)', 'Ho Chi Minh (GMT+07:00)', 'Hong Kong (GMT+08:00)', 'Hovd (GMT+07:00)', 'Irkutsk (GMT+09:00)', 'Jakarta (GMT+07:00)', 'Jayapura (GMT+09:00)', 'Jerusalem (GMT+03:00)', 'Kabul (GMT+04:30)', 'Kamchatka (GMT+13:00)', 'Karachi (GMT+06:00)', 'Kashgar (GMT+08:00)', 'Kathmandu (GMT+05:45)', 'Kolkata (GMT+05:30)', 'Krasnoyarsk (GMT+08:00)', 'Kuala Lumpur (GMT+08:00)', 'Kuching (GMT+08:00)', 'Kuwait (GMT+03:00)', 'Macau (GMT+08:00)', 'Magadan (GMT+12:00)', 'Makassar (GMT+08:00)', 'Manila (GMT+08:00)', 'Muscat (GMT+04:00)', 'Nicosia (GMT+03:00)', 'Novokuznetsk (GMT+07:00)', 'Novosibirsk (GMT+07:00)', 'Omsk (GMT+07:00)', 'Oral (GMT+05:00)', 'Phnom Penh (GMT+07:00)', 'Pontianak (GMT+07:00)', 'Pyongyang (GMT+09:00)', 'Qatar (GMT+03:00)', 'Qyzylorda (GMT+06:00)', 'Rangoon (GMT+06:30)', 'Riyadh (GMT+03:00)', 'Sakhalin (GMT+11:00)', 'Samarkand (GMT+05:00)', 'Seoul (GMT+09:00)', 'Shanghai (GMT+08:00)', 'Singapore (GMT+08:00)', 'Taipei (GMT+08:00)', 'Tashkent (GMT+05:00)', 'Tbilisi (GMT+04:00)', 'Tehran (GMT+04:30)', 'Thimphu (GMT+06:00)', 'Tokyo (GMT+09:00)', 'Ulaanbaatar (GMT+08:00)', 'Urumqi (GMT+08:00)', 'Vientiane (GMT+07:00)', 'Vladivostok (GMT+11:00)', 'Yakutsk (GMT+10:00)', 'Yekaterinburg (GMT+06:00)', 'Yerevan (GMT+05:00)', '[[Atlantic]]', 'Azores (GMT)', 'Bermuda (GMT-03:00)', 'Canary (GMT+01:00)', 'Cape Verde (GMT-01:00)', 'Faroe (GMT+01:00)', 'Madeira (GMT+01:00)', 'Reykjavik (GMT)', 'South Georgia (GMT-02:00)', 'St Helena (GMT)', 'Stanley (GMT-04:00)', '[[Australia]]', 'Adelaide (GMT+09:30)', 'Brisbane (GMT+10:00)', 'Broken Hill (GMT+09:30)', 'Currie (GMT+10:00)', 'Darwin (GMT+09:30)', 'Eucla (GMT+08:45)', 'Hobart (GMT+10:00)', 'Lindeman (GMT+10:00)', 'Lord Howe (GMT+10:30)', 'Melbourne (GMT+10:00)', 'Perth (GMT+08:00)', 'Sydney (GMT+10:00)', '[[Europe]]', 'Amsterdam (GMT+02:00)', 'Andorra (GMT+02:00)', 'Athens (GMT+03:00)', 'Belgrade (GMT+02:00)', 'Berlin (GMT+02:00)', 'Bratislava (GMT+02:00)', 'Brussels (GMT+02:00)', 'Bucharest (GMT+03:00)', 'Budapest (GMT+02:00)', 'Chisinau (GMT+03:00)', 'Copenhagen (GMT+02:00)', 'Dublin (GMT+01:00)', 'Gibraltar (GMT+02:00)', 'Guernsey (GMT+01:00)', 'Helsinki (GMT+03:00)', 'Isle of Man (GMT+01:00)', 'Istanbul (GMT+03:00)', 'Jersey (GMT+01:00)', 'Kaliningrad (GMT+03:00)', 'Kiev (GMT+03:00)', 'Lisbon (GMT+01:00)', 'Ljubljana (GMT+02:00)', 'London (GMT+01:00)', 'Luxembourg (GMT+02:00)', 'Madrid (GMT+02:00)', 'Malta (GMT+02:00)', 'Mariehamn (GMT+03:00)', 'Minsk (GMT+03:00)', 'Monaco (GMT+02:00)', 'Moscow (GMT+04:00)', 'Oslo (GMT+02:00)', 'Paris (GMT+02:00)', 'Podgorica (GMT+02:00)', 'Prague (GMT+02:00)', 'Riga (GMT+03:00)', 'Rome (GMT+02:00)', 'Samara (GMT+05:00)', 'San Marino (GMT+02:00)', 'Sarajevo (GMT+02:00)', 'Simferopol (GMT+03:00)', 'Skopje (GMT+02:00)', 'Sofia (GMT+03:00)', 'Stockholm (GMT+02:00)', 'Tallinn (GMT+03:00)', 'Tirane (GMT+02:00)', 'Uzhgorod (GMT+03:00)', 'Vaduz (GMT+02:00)', 'Vatican (GMT+02:00)', 'Vienna (GMT+02:00)', 'Vilnius (GMT+03:00)', 'Volgograd (GMT+04:00)', 'Warsaw (GMT+02:00)', 'Zagreb (GMT+02:00)', 'Zaporozhye (GMT+03:00)', 'Zurich (GMT+02:00)', '[[Indian]]', 'Antananarivo (GMT+03:00)', 'Chagos (GMT+06:00)', 'Christmas (GMT+07:00)', 'Cocos (GMT+06:30)', 'Comoro (GMT+03:00)', 'Kerguelen (GMT+05:00)', 'Mahe (GMT+04:00)', 'Maldives (GMT+05:00)', 'Mauritius (GMT+04:00)', 'Mayotte (GMT+03:00)', 'Reunion (GMT+04:00)', '[[Pacific]]', 'Apia (GMT-11:00)', 'Auckland (GMT+12:00)', 'Chatham (GMT+12:45)', 'Easter (GMT-06:00)', 'Efate (GMT+11:00)', 'Enderbury (GMT+13:00)', 'Fakaofo (GMT-10:00)', 'Fiji (GMT+12:00)', 'Funafuti (GMT+12:00)', 'Galapagos (GMT-06:00)', 'Gambier (GMT-09:00)', 'Guadalcanal (GMT+11:00)', 'Guam (GMT+10:00)', 'Honolulu (GMT-10:00)', 'Johnston (GMT-10:00)', 'Kiritimati (GMT+14:00)', 'Kosrae (GMT+11:00)', 'Kwajalein (GMT+12:00)', 'Majuro (GMT+12:00)', 'Marquesas (GMT-09:30)', 'Midway (GMT-11:00)', 'Nauru (GMT+12:00)', 'Niue (GMT-11:00)', 'Norfolk (GMT+11:30)', 'Noumea (GMT+11:00)', 'Pago Pago (GMT-11:00)', 'Palau (GMT+09:00)', 'Pitcairn (GMT-08:00)', 'Ponape (GMT+11:00)', 'Port Moresby (GMT+10:00)', 'Rarotonga (GMT-10:00)', 'Saipan (GMT+10:00)', 'Tahiti (GMT-10:00)', 'Tarawa (GMT+12:00)', 'Tongatapu (GMT+13:00)', 'Truk (GMT+10:00)', 'Wake (GMT+12:00)', 'Wallis (GMT+12:00)']\n }\n};\n","import React, { useEffect, useState } from 'react';\nimport {\n bool, shape, func, any\n} from 'prop-types';\nimport { STEPWISE_WIDGETS, specialOptions } from '@jotforminc/constants';\nimport { shuffleArray } from '@jotforminc/agent-utils';\nimport ChoiceList from '../ChoiceList';\n\nconst MultipleChoice = ({\n question = {}, answer, setAnswer, isActive = false, inProgress, viewMode = false, step = {}\n}) => {\n const [options, setOptions] = useState([]);\n\n useEffect(() => {\n if (STEPWISE_WIDGETS.includes(question?.selectedField)) {\n setOptions(step?.props?.options.map(option => ({ text: option })) || []);\n return;\n }\n let _options = [];\n if (question.special && question.special !== 'None') {\n _options = specialOptions[question.special]?.value || _options;\n } else if (question.options) {\n _options = question.options.split('|');\n }\n if (question.shuffle === 'Yes') {\n _options = shuffleArray(_options);\n }\n setOptions(_options.map(option => ({ text: option })));\n }, []);\n\n const isMultipleSelect = ['control_checkbox'].includes(question.type) || question.multipleSelections === 'Yes';\n\n return options.length > 0 ? (\n \n ) : '';\n};\n\nMultipleChoice.propTypes = {\n question: shape({}),\n isActive: bool,\n inProgress: bool,\n setAnswer: func.isRequired,\n answer: any.isRequired,\n viewMode: bool,\n step: shape({})\n};\n\nexport default MultipleChoice;\n","import React from 'react';\nimport {\n bool, shape, func, any\n} from 'prop-types';\nimport { Flex } from '@jotforminc/magnet';\nimport { safeJSONParse } from '@jotforminc/utils';\nimport ChoiceButton from '../ChoiceButton';\n\nconst ImageChoice = ({\n question = {}, answer, setAnswer, isActive = false, inProgress, viewMode = false\n}) => {\n const _answer = typeof answer === 'object' ? answer : safeJSONParse(answer, []);\n const options = typeof question.options === 'object' ? question.options : safeJSONParse(question.options, []);\n\n const isMultipleSelect = question.multipleSelection === 'Yes';\n\n const handleSelection = value => () => {\n if ((!isActive && !isMultipleSelect) || viewMode) {\n return;\n }\n\n setAnswer([value]);\n };\n\n return (\n <>\n \n {!viewMode && isMultipleSelect && options.length > 1 && (Select one or more)}\n {options.map(({ text, link }) => {\n const value = `${text}|${link}`;\n const isOptionSelected = _answer?.includes(value);\n return (\n \n );\n })}\n \n \n );\n};\n\nImageChoice.propTypes = {\n question: shape({}),\n isActive: bool,\n inProgress: bool,\n setAnswer: func.isRequired,\n answer: any.isRequired,\n viewMode: bool\n};\n\nexport default ImageChoice;\n","export const MATRIX_COLUMN_TYPE = {\n RadioButton: 'Radio Button',\n CheckBox: 'Check Box',\n TextBox: 'Text Box',\n CurrencyBox: 'Currency Box',\n NumbericTextBox: 'Numeric Text Box',\n Dropdown: 'Drop Down',\n EmojiSlider: 'Emoji Slider',\n Slider: 'Slider',\n YesNo: 'Yes No'\n};\n\nexport const getColumnType = (inputType, dcolumns, columnIndex) => {\n if (inputType === 'Dynamic') {\n return dcolumns[columnIndex].type;\n }\n return inputType;\n};\n","/* eslint-disable no-param-reassign */\nimport React, { useMemo, useState } from 'react';\nimport { shape, func, bool } from 'prop-types';\nimport { safeJSONParse } from '@jotforminc/utils';\nimport { MATRIX_COLUMN_TYPE } from '@jotforminc/agent-utils';\n\nconst MatrixSlider = ({\n question,\n setAnswer,\n answer,\n viewMode\n}) => {\n const [emojiClasses, setEmojiClasses] = useState({});\n const [currentValues, setCurrentValues] = useState({});\n const dcolumns = useMemo(() => safeJSONParse(question.dcolumns, []), [question]);\n const drows = useMemo(() => safeJSONParse(question.drows, []), [question]);\n const rowTitles = useMemo(() => drows.map(r => r.text), [drows]);\n const columnTitles = useMemo(() => dcolumns.map(c => c.text), [dcolumns]);\n const isEmojiSlider = useMemo(() => question.inputType === MATRIX_COLUMN_TYPE.EmojiSlider, [question]);\n const columnCount = useMemo(() => {\n if (isEmojiSlider) {\n return (parseInt(question.emojiCount, 10) || 5);\n }\n return dcolumns.length;\n }, [question, dcolumns]);\n\n const getColumnIndexFromValue = value => {\n return dcolumns.findIndex(col => col.text === value);\n };\n\n const getColumnTitleFromValue = value => {\n return columnTitles[parseInt(value, 10) - 1];\n };\n\n const centerOfSlider = useMemo(() => {\n return (!isEmojiSlider ? Math.ceil((columnCount + 1) / 2) : Math.ceil((columnCount) / 2));\n });\n\n const isInitial = index => {\n return !(answer && (answer[index] || answer[index] === 0));\n };\n\n const getDefaultValue = index => {\n if (!isInitial(index)) {\n return isEmojiSlider ? answer[index] : getColumnIndexFromValue(answer[index]) + 1;\n }\n return centerOfSlider;\n };\n\n const updateAnswer = newSelectedRange => {\n const rowIds = [];\n const colIds = [];\n const result = {};\n if (!isEmojiSlider) {\n for (let i = 0; i < drows.length; i++) {\n const val = !newSelectedRange[i] && newSelectedRange[i] !== 0 ? centerOfSlider : newSelectedRange[i];\n result[i] = getColumnTitleFromValue(val);\n rowIds.push(drows[i].id);\n }\n dcolumns.forEach(col => {\n colIds.push(col.id);\n });\n } else if (isEmojiSlider) {\n for (let i = 0; i < drows.length; i++) {\n const val = !newSelectedRange[i] && newSelectedRange[i] !== 0 ? centerOfSlider : newSelectedRange[i];\n result[i] = parseInt(val, 10);\n rowIds.push(i);\n }\n }\n setAnswer({\n ...result,\n ...(rowIds.length > 0 ? { rowIds: JSON.stringify(rowIds) } : {}),\n ...(colIds.length > 0 ? { colIds: JSON.stringify(colIds) } : {})\n });\n };\n\n const onSliderReleased = () => {\n updateAnswer(currentValues);\n };\n\n const onSliderChanged = ({ target }) => {\n const { value } = target;\n const rowIndex = target.id.match(/rangeInput_(\\d+)/)[1];\n setCurrentValues({\n ...currentValues,\n [rowIndex]: parseInt(value, 10)\n });\n if (!isEmojiSlider) {\n return;\n }\n setEmojiClasses({\n ...emojiClasses,\n [rowIndex]: `slider-emoji slider-icon-${parseInt(value, 10) || centerOfSlider}`\n });\n };\n\n const rangePointSpans = useMemo(() => {\n const result = [];\n for (let i = 0; i < columnCount; i++) {\n const leftPercent = (100 / (columnCount - 1)) * (i);\n result.push();\n }\n return result;\n }, [columnCount, dcolumns]);\n\n return (\n
    \n {drows.map((d, index) => {\n const inputProps = {\n type: 'range',\n min: 1,\n max: columnCount,\n id: `rangeInput_${index}`,\n ...(viewMode || isInitial(index) ? { value: getDefaultValue(index) } : null),\n className: `slider ${isEmojiSlider ? emojiClasses[index] || `slider-emoji slider-icon-${centerOfSlider}` : ''}`,\n onMouseUp: onSliderReleased,\n onTouchEnd: onSliderReleased,\n onChange: onSliderChanged,\n disabled: viewMode\n };\n return (\n <>\n
    \n {!isEmojiSlider ? {getColumnTitleFromValue(currentValues[index] || centerOfSlider)} : null}\n
    \n {rowTitles[index]}\n
    \n
    \n \n {rangePointSpans.filter((r, i) => i >= (currentValues[index] || centerOfSlider))}\n
    \n
    \n \n );\n })}\n
    \n );\n};\n\nMatrixSlider.propTypes = {\n question: shape({}).isRequired,\n setAnswer: func.isRequired,\n answer: shape(),\n viewMode: bool\n};\n\nexport default MatrixSlider;\n","/* eslint-disable no-param-reassign */\nimport React, { useMemo } from 'react';\nimport { shape, func, bool } from 'prop-types';\nimport { safeJSONParse } from '@jotforminc/utils';\n\nconst matrixYesNo = ({\n question,\n setAnswer,\n answer,\n viewMode\n}) => {\n const drows = useMemo(() => safeJSONParse(question.drows, []), [question]);\n const rowTitles = useMemo(() => drows.map(r => r.text), [drows]);\n const toggleLabels = useMemo(() => question.toggleText.split('|'), [question]);\n\n const onChange = ({ target }) => {\n const match = target.name.match(/row_radio_(\\d+)/);\n const result = { ...answer };\n const rowIds = [];\n result[match[1]] = target.value;\n\n for (let i = 0; i < drows.length; i++) {\n rowIds.push(drows[i].id);\n }\n setAnswer({\n ...result,\n rowIds: JSON.stringify(rowIds)\n });\n };\n\n return (\n
    \n {drows.map((r, rIndex) => {\n const yesInputID = `row_radio_${rIndex}_0`;\n const noInputID = `row_radio_${rIndex}_1`;\n return (\n <>\n
    \n
    \n
    {rowTitles[rIndex]}
    \n
    \n
    \n \n \n
    \n
    \n \n );\n })}\n
    \n );\n};\n\nmatrixYesNo.propTypes = {\n question: shape({}).isRequired,\n setAnswer: func.isRequired,\n answer: shape(),\n viewMode: bool\n};\n\nexport default matrixYesNo;\n","import React, { useEffect, useMemo, useState } from 'react';\nimport {\n any, bool, func, shape\n} from 'prop-types';\nimport Fields from '@jotforminc/form-fields';\nimport { SKIP_MESSAGES } from '@jotforminc/constants';\nimport '../../styles/matrix.scss';\nimport { safeJSONParse } from '@jotforminc/utils';\nimport { getColumnType, MATRIX_COLUMN_TYPE } from '@jotforminc/agent-utils';\nimport MatrixSlider from './MatrixSlider';\nimport MatrixYesNo from './MatrixYesNo';\n\nconst Matrix = ({\n question,\n setAnswer,\n answer,\n viewMode\n}\n) => {\n const [customAnswer, setCustomAnswer] = useState();\n const dcolumns = useMemo(() => safeJSONParse(question.dcolumns, []), [question.dcolumns]);\n\n useEffect(() => {\n if (typeof answer === 'string') {\n if (SKIP_MESSAGES.includes(answer)) {\n return;\n }\n setCustomAnswer(safeJSONParse(answer, []));\n } else {\n setCustomAnswer(answer);\n }\n }, [answer]);\n\n const generateInitialResult = (rowCount, columnCount) => {\n const result = {};\n for (let r = 0; r < rowCount; r++) {\n result[Number(r)] = [];\n for (let c = 0; c < columnCount; c++) {\n result[Number(r)].push('');\n }\n }\n result.rowIds = [];\n for (let i = 0; i < rowCount; i++) {\n result.rowIds.push(i.toString());\n }\n result.colIds = [];\n for (let i = 0; i < columnCount; i++) {\n result.colIds.push(i.toString());\n }\n return result;\n };\n\n const generateInitialResultForOldMatrix = (rowCount, columnCount) => {\n const result = [];\n for (let r = 0; r < rowCount; r++) {\n const rowResult = [];\n for (let c = 0; c < columnCount; c++) {\n rowResult.push('');\n }\n result.push(rowResult);\n }\n return result;\n };\n\n const getRowAndColumnFromInputName = target => {\n const nameMatch = target.name.match(/q\\d+_.*\\[(\\d+)\\]\\[(\\d+)\\]/);\n const idMatch = target.id.match(/.*_\\d+_(\\d+)_(\\d+)/);\n return {\n rowIndex: nameMatch ? parseInt(nameMatch[1], 10) : parseInt(idMatch[1], 10),\n columnIndex: nameMatch ? parseInt(nameMatch[2], 10) : parseInt(idMatch[2], 10)\n };\n };\n\n const checkAllColumnSameType = () => {\n if (question.inputType !== 'Dynamic') {\n return true;\n }\n const typeArr = dcolumns.map(c => c.type);\n return typeArr.filter(i => i === typeArr[0]).length === typeArr.length;\n };\n\n const getTable = () => document.querySelector(`input[name*=q${question.qid}_], select[name*=q${question.qid}_]`)?.closest('table');\n\n const isNewMatrixVersion = () => question.featureSet && question.featureSet.includes('useDcols') && question.featureSet.includes('useIds');\n\n const getTableResult = () => {\n const rowCount = question.mrows.split('|').length;\n const columnCount = dcolumns.length;\n const result = (isNewMatrixVersion() ? generateInitialResult : generateInitialResultForOldMatrix)(rowCount, columnCount);\n const table = getTable();\n table.querySelectorAll('input, select').forEach(item => {\n const { rowIndex, columnIndex } = getRowAndColumnFromInputName(item);\n const columnType = getColumnType(question.inputType, dcolumns, columnIndex);\n switch (true) {\n case checkAllColumnSameType(dcolumns) && columnType === MATRIX_COLUMN_TYPE.RadioButton:\n result[rowIndex][columnIndex] = item.checked ? item.value : '';\n break;\n case [MATRIX_COLUMN_TYPE.RadioButton, MATRIX_COLUMN_TYPE.CheckBox].includes(columnType):\n result[rowIndex][columnIndex] = item.checked ? item.value : '';\n break;\n default:\n result[rowIndex][columnIndex] = item.value;\n break;\n }\n });\n return result;\n };\n\n const handleMultipleRadioColumn = target => {\n const radioColumns = dcolumns.filter(col => col.type === MATRIX_COLUMN_TYPE.RadioButton);\n if (target.type === 'radio' && radioColumns.length > 1) {\n Array.from(target?.closest('tr').querySelectorAll(`input[type=\"radio\"]:not([name=\"${target.name}\"])`))\n .filter(input => input !== target)\n .forEach(input => {\n // eslint-disable-next-line no-param-reassign\n input.checked = false;\n });\n }\n };\n\n const onInputChange = ({ target }) => {\n handleMultipleRadioColumn(target);\n const result = getTableResult();\n setAnswer(result);\n return true;\n };\n const handleEventListener = (remove = false) => {\n const table = getTable();\n table?.querySelectorAll('input, select').forEach(item => {\n if (remove) {\n item.removeEventListener('change', onInputChange);\n } else {\n item.addEventListener('change', onInputChange);\n }\n });\n };\n\n const showAnswerOnTable = () => {\n if (!(customAnswer instanceof Array || customAnswer instanceof Object)) {\n return;\n }\n const table = getTable();\n table?.querySelectorAll('tr:has(input) td input, tr:has(select) td select').forEach(i => {\n const { rowIndex, columnIndex } = getRowAndColumnFromInputName(i);\n const columnType = getColumnType(question.inputType, dcolumns, columnIndex);\n const value = customAnswer[rowIndex]?.[columnIndex];\n if ([MATRIX_COLUMN_TYPE.RadioButton, MATRIX_COLUMN_TYPE.CheckBox].includes(columnType)) {\n // eslint-disable-next-line no-param-reassign\n i.checked = !!value;\n } else {\n // eslint-disable-next-line no-param-reassign\n i.value = value || '';\n }\n });\n };\n\n useEffect(() => {\n if (customAnswer) {\n showAnswerOnTable();\n }\n handleEventListener();\n window.JotForm = {\n setMatrixLayout: f => f,\n handleSingleChoiceWithMultiTypeColumnsForCardForms: f => f\n };\n return () => handleEventListener(true);\n }, [customAnswer]);\n\n const props = {\n qid: {\n value: `input_${question.qid}`\n },\n qname: {\n value: `q${question.qid}_${question.name}`\n },\n subLabel: {\n value: question.subLabel\n },\n id: {\n value: question.qid\n },\n mcolumns: {\n value: question.mcolumns\n },\n dcolumns: {\n value: question.dcolumns\n },\n drows: {\n value: question.drows\n },\n mrows: {\n value: question.mrows\n },\n calcMatrixValues: {\n value: question.calcMatrixValues\n },\n matrixwidth: {\n value: question.matrixwidth\n },\n matrixcells: {\n value: question.matrixcells\n },\n inputType: {\n value: question.inputType\n },\n dropdown: {\n value: question.dropdown\n },\n featureSet: {\n value: question.featureSet\n },\n // manageMatrixOptions: PropTypes.elementType,\n type: {\n value: 'control_matrix'\n },\n required: {\n value: question.required\n },\n passive: !!viewMode,\n focusedPosition: { mrows: question.mrows, mcolumns: question.mcolumns }\n };\n\n switch (true) {\n case [MATRIX_COLUMN_TYPE.EmojiSlider, MATRIX_COLUMN_TYPE.Slider].includes(question.inputType):\n return (\n \n );\n case question.inputType === MATRIX_COLUMN_TYPE.YesNo:\n return (\n \n );\n default:\n return ;\n }\n};\n\nMatrix.propTypes = {\n question: shape({}),\n isActive: bool,\n setAnswer: func.isRequired,\n answer: any.isRequired,\n viewMode: bool\n};\n\nexport default Matrix;\n","/* eslint-disable max-len */\n/* eslint-disable react/no-array-index-key */\n/* eslint-disable no-nested-ternary */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport { string } from 'prop-types';\nimport React, { memo } from 'react';\n\nconst StarIcon = ({ fill, stroke, ...props }) => {\n return (\n \n \n \n );\n};\n\nexport default memo(StarIcon);\n\nStarIcon.propTypes = {\n fill: string.isRequired,\n stroke: string.isRequired\n};\n","import StarIcon from '../components/icons/StarIcon';\n\nexport const STAR_RATING_STYLES = {\n Stars: { // yellow\n hoverColor: '#FAE9AF',\n activeColor: '#FFD53E',\n Icon: StarIcon\n },\n 'Stars 2': { // blue\n hoverColor: '#B8CDFF',\n activeColor: '#2E69FF',\n Icon: StarIcon\n }\n};\n\nexport const TYPE_DURATION_PER_CHARACTER = 10;\n","/* eslint-disable react/no-array-index-key */\n/* eslint-disable no-nested-ternary */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { useMemo, useState } from 'react';\nimport {\n func, shape, bool,\n any\n} from 'prop-types';\nimport classNames from 'classnames';\nimport { STAR_RATING_STYLES } from '../../constants';\n\nconst StarRating = ({\n setAnswer, question, isActive, viewMode, answer\n}) => {\n const [hoveredRating, setHoveredRating] = useState(null);\n const clickedRating = useMemo(() => (viewMode || answer ? parseInt(answer, 10) - 1 : null), [answer]);\n\n const starCount = parseInt(question.stars, 10) || 5;\n\n const { Icon, hoverColor, activeColor } = STAR_RATING_STYLES[question.starStyle] || STAR_RATING_STYLES.Stars;\n\n const handleStarClick = index => {\n if (!isActive || viewMode) return;\n setAnswer((index + 1));\n };\n const handleHover = index => {\n if (!isActive || viewMode) return;\n setHoveredRating(index);\n };\n\n return (\n <>\n
    \n \n
    \n {[...Array(starCount)].map((_, index) => (\n
    \n = index ? activeColor : (hoveredRating !== null && hoveredRating >= index ? hoverColor : '#fff')}\n stroke={clickedRating !== null && clickedRating >= index ? activeColor : (hoveredRating !== null && hoveredRating >= index ? activeColor : '#979dc6')}\n key={index}\n className={classNames('star-icon', { 'cursor-pointer': isActive })}\n tabIndex=\"0\"\n aria-label={`${index + 1} out of ${starCount}`}\n role=\"radio\"\n aria-checked={index === clickedRating ? 'true' : 'false'}\n onMouseEnter={() => handleHover(index)}\n onMouseLeave={() => handleHover(null)}\n onClick={() => handleStarClick(index)}\n />\n
    \n ))}\n
    \n
    \n
    \n \n );\n};\n\nStarRating.propTypes = {\n setAnswer: func.isRequired,\n isActive: bool.isRequired,\n question: shape({}).isRequired,\n viewMode: bool.isRequired,\n answer: any.isRequired\n};\n\nexport default StarRating;\n","import {\n bool, func, number, oneOfType, shape, string\n} from 'prop-types';\nimport React from 'react';\n\nconst ScaleRating = ({\n isActive, question, setAnswer, answer\n}) => {\n const {\n qid, scaleAmount, scaleFrom = 1\n } = question;\n\n const min = parseInt(scaleFrom, 10);\n const max = parseInt(scaleAmount, 10) + 1;\n\n const ratings = [...Array(max - min)].map((_value, index) => min + index);\n\n return (\n <>\n
    \n \n
    \n {ratings.map(rating => (\n
    \n isActive && setAnswer(rating)}\n />\n \n
    \n ))}\n
    \n
    \n
    \n \n );\n};\n\nScaleRating.propTypes = {\n isActive: bool.isRequired,\n question: shape({}).isRequired,\n setAnswer: func.isRequired,\n answer: oneOfType([string, number]).isRequired\n};\n\nexport default ScaleRating;\n","import React from 'react';\nimport { Button, Flex } from '@jotforminc/magnet';\nimport { bool, func } from 'prop-types';\nimport { t } from '@jotforminc/translation';\n\nconst Submit = ({\n setChatMode = f => f, logAction = f => f, logCommonAction = f => f, chatCompleted = false\n}) => {\n const handleSubmit = () => {\n logAction({ action: 'clicked', target: 'ReviewAndSubmit' });\n logCommonAction({ action: 'ReviewAndSubmit' });\n setChatMode('editsubmission');\n };\n\n return (\n <>\n \n \n {t('Review & Submit')}\n \n \n \n );\n};\n\nSubmit.propTypes = {\n setChatMode: func,\n logAction: func,\n logCommonAction: func,\n chatCompleted: bool\n};\n\nexport default Submit;\n","/* eslint-disable max-len */\nimport React, { memo } from 'react';\n\nfunction SignatureIcon() {\n return (\n \n \n \n );\n}\n\nexport default memo(SignatureIcon);\n","import React, { useEffect, useRef, useState } from 'react';\nimport { Button, Flex } from '@jotforminc/magnet';\nimport { IconTrashFilled } from '@jotforminc/svg-icons';\nimport { isBase64Image } from '@jotforminc/agent-utils';\nimport { any, bool, func } from 'prop-types';\nimport SignatureCanvas from 'react-signature-canvas';\nimport SignatureIcon from '../icons/SignatureIcon';\n\nconst Signature = ({\n setAnswer, viewMode = false, answer\n}) => {\n // const {\n // inprogress\n // } = useStore();\n const signRef = useRef();\n const [hideLabel, setHideLabel] = useState(false);\n\n useEffect(() => {\n if (answer && isBase64Image(answer)) {\n signRef.current.fromDataURL(answer);\n setHideLabel(true);\n }\n if (viewMode) {\n signRef.current.off();\n }\n }, [answer, viewMode]);\n\n const handleSignatureChange = async () => {\n const content = signRef.current?.toDataURL();\n setAnswer(content);\n };\n\n return (\n
    \n \n {!hideLabel\n && (\n
    \n \n \n Sign Here\n \n
    \n )}\n setHideLabel(true)}\n onEnd={handleSignatureChange}\n canvasProps={{ className: 'h-full max-w-full w-56 md:w-60 radius-xl absolute inset-0 border-ai-soft' }}\n clearOnResize={false}\n />\n \n {(!viewMode && answer) && (\n {\n setAnswer('');\n signRef.current?.clear();\n setHideLabel(false);\n }}\n startIcon={IconTrashFilled}\n showTextOnly=\"md\"\n disabled={!signRef.current || signRef.current?.toDataURL()?.length <= 0}\n >\n Clear\n \n )}\n
    \n );\n};\n\nSignature.propTypes = {\n setAnswer: func.isRequired,\n viewMode: bool,\n answer: any.isRequired\n};\n\nexport default Signature;\n","export const convertFileToBase64 = async file => {\n const toBase64 = fileObj => new Promise((resolve, reject) => {\n const reader = new window.FileReader();\n reader.readAsDataURL(fileObj);\n reader.onload = () => resolve(reader.result);\n reader.onerror = reject;\n });\n\n const base64Value = await toBase64(file);\n return base64Value;\n};\n\nexport const byteToSize = bytes => {\n if (bytes === 0) return '0 Byte';\n\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n const i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)), 10);\n\n return `${Math.round(bytes / 1024 ** i, 2)} ${sizes[i]}`;\n};\n","import React, { useMemo, useRef, useState } from 'react';\nimport {\n any, bool, func, shape\n} from 'prop-types';\nimport { Button, Flex } from '@jotforminc/magnet';\nimport WarningBox from '@jotforminc/warning-box';\nimport { IconCloudArrowUp, IconXmark, IconFolderFilled } from '@jotforminc/svg-icons';\nimport { formatBytes } from '@jotforminc/utils';\nimport { byteToSize, convertFileToBase64, isJsonString } from '@jotforminc/agent-utils';\n\nconst Upload = ({\n setAnswer, question, viewMode = false, answer\n}) => {\n const [warnings, setWarnings] = useState([]);\n\n const ref = useRef();\n const currentFiles = useMemo(() => {\n if (!Array.isArray(answer)) {\n return [];\n }\n if (viewMode && isJsonString(answer)) {\n const files = JSON.parse(answer);\n const mappedFiles = files.map(file => ({ name: file, size: '', type: '' }));\n return mappedFiles;\n }\n\n return answer;\n }, [answer]);\n\n const canUploadFiles = files => {\n setWarnings([]);\n let allowedFiles = files;\n const {\n fileLimit, extensions, limitFileSize, minFileSize, maxFileSize\n } = question;\n\n const fileLimitNumber = parseInt(fileLimit, 10);\n\n allowedFiles = allowedFiles.filter(file => {\n const extension = file.name.substring(file.name.lastIndexOf('.') + 1, file.name.length);\n const validExtension = question.extensions.includes(extension);\n if (!validExtension) {\n setWarnings(prev => [...prev, `${file.name} has invalid extension. Only ${extensions} are allowed.`]);\n }\n return validExtension;\n });\n\n if (limitFileSize === 'Yes') {\n allowedFiles = allowedFiles.filter(file => {\n const minFileSizeByte = parseInt(minFileSize, 10) * 1024;\n const maxFileSizeByte = parseInt(maxFileSize, 10) * 1024;\n const isFileTooSmall = file.size < minFileSizeByte;\n const isFileTooBig = file.size > maxFileSizeByte;\n if (isFileTooSmall || isFileTooBig) {\n const size = byteToSize(isFileTooSmall ? minFileSizeByte : maxFileSizeByte);\n const sizeWarning = `${file.name} is too ${isFileTooSmall ? 'small' : 'big'}, ${isFileTooSmall ? 'minimum' : 'maximum'} file size is ${size}.`;\n setWarnings(prev => [...prev, sizeWarning]);\n return false;\n }\n return true;\n });\n }\n\n if (allowedFiles.length > fileLimitNumber) {\n allowedFiles = allowedFiles.slice(0, fileLimitNumber);\n setWarnings(prev => [...prev, `Only ${fileLimitNumber} file uploads are allowed.`]);\n }\n\n return allowedFiles;\n };\n\n const handleUploadChange = async ({ target: { files } }) => {\n const allowedFiles = canUploadFiles(Array.from(files));\n if (allowedFiles.length === 0) return;\n const filesArray = await Promise.all(allowedFiles.map(async file => {\n const base64 = await convertFileToBase64(file);\n return {\n data: base64, name: file.name, size: file.size, type: file.type, rawFile: file\n };\n }));\n await setAnswer(currentFiles ? [...currentFiles, ...filesArray] : filesArray, true);\n };\n\n const handleDrop = event => {\n if (viewMode) return;\n event.preventDefault();\n const droppedFiles = event.dataTransfer.files;\n if (droppedFiles.length > 0) {\n handleUploadChange({ target: { files: droppedFiles } });\n }\n };\n\n const handleDeleteFile = async deletedFileName => {\n await setAnswer(currentFiles.filter(currFile => currFile.name !== deletedFileName), true);\n };\n\n const handleOnClickFileUpload = () => {\n if (viewMode) return;\n ref.current.click();\n };\n\n return (\n <>\n event.preventDefault()}\n >\n \n \n \n \n
    \n Click to upload\n {' '}\n or drag & drop here\n
    \n \n {currentFiles && (\n
    \n {currentFiles.map(file => {\n return (\n \n \n
    \n {file.type.includes('image') ? (\n \n ) : (\n \n )}\n
    \n {file.name}\n
    \n \n {file.size &&
    {formatBytes(file.size)}
    }\n {!viewMode && (\n handleDeleteFile(file.name)}\n />\n )}\n
    \n \n );\n })}\n
    \n )}\n {warnings.length > 0 && (\n warnings.map(warning => {\n return (\n \n {warning}\n \n );\n }\n )\n )}\n \n );\n};\n\nUpload.propTypes = {\n setAnswer: func.isRequired,\n question: shape.isRequired,\n viewMode: bool,\n answer: any.isRequired\n};\n\nexport default Upload;\n","import React, { useEffect, useState, useRef } from 'react';\nimport { safeJSONParse, formatBytes } from '@jotforminc/utils';\nimport {\n shape, bool, any, func\n} from 'prop-types';\nimport { IconCloudArrowUp, IconXmark } from '@jotforminc/svg-icons';\nimport { Button, Flex, Loader } from '@jotforminc/magnet';\nimport classNames from 'classnames';\nimport Widget from '../Widget';\n\nconst toDataURL = (url, callback) => {\n const xhr = new window.XMLHttpRequest();\n xhr.onload = () => {\n const reader = new window.FileReader();\n reader.onloadend = () => {\n callback(reader.result);\n };\n reader.readAsDataURL(xhr.response);\n };\n xhr.open('GET', url);\n xhr.responseType = 'blob';\n xhr.send();\n};\n\nconst ImageUploadPreview = props => {\n const {\n question, answer, setAnswer, viewMode = false\n } = props;\n const { qid } = question;\n const [widgetEl, setWidgetEl] = useState(null);\n const [img, setImg] = useState(null);\n const [loading, setLoading] = useState(false);\n const ref = useRef();\n const [file, setFile] = useState(null);\n\n useEffect(() => {\n if (answer) {\n const parsedAnswer = safeJSONParse(answer);\n const imgURL = parsedAnswer?.widget_metadata?.value[0]?.url;\n if (imgURL) {\n toDataURL(parsedAnswer?.widget_metadata?.value[0]?.url, base64 => {\n setFile({\n ...parsedAnswer?.widget_metadata?.value[0],\n base64\n });\n setImg(base64);\n setLoading(false);\n });\n } else {\n console.error('Image URL does not exists!');\n }\n }\n }, [answer]);\n\n useEffect(() => {\n const frameEl = document.querySelector(`#customFieldFrame_${qid}`);\n setWidgetEl(frameEl);\n }, []);\n\n const handleUploadChange = _e => {\n const firstFile = _e.target.files[0];\n const handleFile = e => {\n const content = e.target.result;\n // Send to widget\n setLoading(true);\n if (widgetEl) {\n widgetEl.contentWindow.postMessage(JSON.stringify({\n type: 'ai',\n data: content,\n name: firstFile.name\n }), '*');\n }\n };\n const fileData = new window.FileReader();\n fileData.onloadend = handleFile;\n fileData.readAsDataURL(firstFile);\n };\n const handleOnClickFileUpload = () => {\n if (viewMode) return;\n ref.current.click();\n };\n\n const handleDrop = event => {\n if (viewMode) return;\n event.preventDefault();\n const droppedFiles = event.dataTransfer.files;\n if (droppedFiles.length > 0) {\n handleUploadChange({ target: { files: droppedFiles } });\n }\n };\n\n const handleDeleteFile = async () => {\n await setAnswer(null);\n setImg(null);\n setFile(null);\n };\n\n return (\n <>\n
    \n \n
    \n {\n file ? (\n <>\n
    \n \n
    \n
    \n \n \n
    \n \n
    \n {file.name}\n
    \n \n
    {formatBytes((file.base64.length * 6) / 8)}
    \n {!viewMode && (\n handleDeleteFile(file.name)}\n />\n )}\n
    \n \n
    \n \n ) : (\n event.preventDefault()}\n >\n \n {\n loading ? (\n
    \n \n
    \n ) : (\n <>\n \n \n \n
    \n Click to upload\n {' '}\n or drag & drop here\n
    \n \n )\n }\n\n \n )\n }\n \n );\n};\n\nImageUploadPreview.propTypes = {\n setAnswer: func.isRequired,\n question: shape.isRequired,\n viewMode: bool,\n answer: any.isRequired\n};\n\nexport default ImageUploadPreview;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { safeJSONParse } from '@jotforminc/utils';\n\nconst isObject = data => {\n return data !== null && typeof data === 'object' && !Array.isArray(data);\n};\n\nconst constructUploadUrl = (url, owner, base) => {\n const sanitizedBase = decodeURIComponent(base)\n .replace(/&([a-zA-Z]+);/g, '&')\n .replace(/\\s/g, '%20');\n return `https://${url}/uploads/${owner}/form_files/${sanitizedBase}`;\n};\n\nconst PDFEmbedder = ({ question }) => {\n const parsedParams = safeJSONParse(question.link);\n let error;\n\n if (!parsedParams || !isObject(parsedParams)) {\n error = 'Invalid data format. Failed to load PDF.';\n return
    {error}
    ;\n }\n\n let link = '';\n\n try {\n if (parsedParams.url) {\n if (parsedParams.base && parsedParams.owner) {\n link = constructUploadUrl(parsedParams.url, parsedParams.owner, parsedParams.base);\n } else {\n link = parsedParams.url;\n }\n } else {\n error = 'PDF link not available.';\n return
    {error}
    ;\n }\n } catch (e) {\n error = 'There was an error loading the PDF.';\n return
    {error}
    ;\n }\n\n const src = `${link}?serveInlineWithCache=1`;\n\n return (\n <>\n \n \n );\n};\n\n// PropTypes tanımları\nPDFEmbedder.propTypes = {\n question: PropTypes.shape({\n link: PropTypes.string.isRequired,\n text: PropTypes.string.isRequired\n }).isRequired\n};\n\nexport default PDFEmbedder;\n","import React, { useEffect, useState, useRef } from 'react';\nimport { Flex, Button } from '@jotforminc/magnet';\nimport {\n shape, any, func, bool\n} from 'prop-types';\nimport { IconCameraFilled, IconArrowsRotate } from '@jotforminc/svg-icons';\nimport WarningBox from '@jotforminc/warning-box';\nimport Webcam from 'react-webcam';\n// import classNames from 'classnames';\n\nconst TakePhoto = props => {\n const {\n question, answer, setAnswer, isActive\n } = props;\n\n const { cameraFacing } = question;\n const CAMERA_ACCESS_STATES = {\n GRANTED: 'granted',\n PROMPT: 'prompt',\n DENIED: 'denied'\n };\n const [imgSrc, setImgSrc] = useState(null);\n const [skipped, setSkipped] = useState(false);\n const [permission, setPermission] = useState(null);\n const webcamRef = useRef(null);\n\n const isAnswerExists = answer?.includes('base64');\n const isFirefox = window.navigator.userAgent.match(/firefox/i);\n\n const askForPermission = async () => {\n /*\n If the user closed the prompt pop up, re-prompt\n If the user denied camera permission, re-prompt for permission will not work, AI will ask, please allow camera permission\n */\n try {\n await window.navigator.mediaDevices.getUserMedia({ audio: false, video: true });\n setPermission(CAMERA_ACCESS_STATES.GRANTED);\n } catch (e) {\n if (e.name === 'NotAllowedError') {\n setPermission(CAMERA_ACCESS_STATES.DENIED);\n } else {\n setPermission(CAMERA_ACCESS_STATES.GRANTED);\n }\n console.log(e.name, 'ERROR!');\n }\n };\n\n const handleCameraPermissions = async () => {\n if (isFirefox) return;\n try {\n const result = await window.navigator.permissions.query({ name: 'camera' });\n setPermission(result.state);\n\n result.onchange = () => {\n setPermission(result.state);\n };\n\n if (result.state === CAMERA_ACCESS_STATES.PROMPT) {\n askForPermission();\n }\n } catch {\n setPermission(CAMERA_ACCESS_STATES.DENIED);\n }\n };\n\n useEffect(() => {\n if (isFirefox) {\n askForPermission();\n }\n handleCameraPermissions();\n }, []);\n\n useEffect(() => {\n if (!isActive && answer && !isAnswerExists) {\n setSkipped(true);\n }\n }, [isActive, answer]);\n\n const capture = () => {\n if (permission === CAMERA_ACCESS_STATES.DENIED) return;\n if (permission === CAMERA_ACCESS_STATES.PROMPT) {\n askForPermission();\n } else if (skipped) {\n setSkipped(false);\n setImgSrc(null);\n } else {\n const imageSrc = webcamRef?.current?.getScreenshot();\n setAnswer(imageSrc);\n setImgSrc(imageSrc);\n }\n };\n\n const retake = () => {\n setSkipped(false);\n setAnswer(null);\n setImgSrc(null);\n };\n\n const isPictureMode = !skipped && (isAnswerExists || imgSrc);\n const isWebcamMode = permission === CAMERA_ACCESS_STATES.GRANTED && !skipped && !(isAnswerExists || imgSrc);\n\n const buttonProps = {\n className: 'retake-photo-btn',\n size: 'medium',\n rounded: false,\n variant: 'filled',\n colorStyle: isPictureMode ? 'secondary' : 'teams',\n onClick: isPictureMode ? retake : capture,\n startIcon: isPictureMode ? IconArrowsRotate : IconCameraFilled,\n style: { 'margin-top': '16px', 'padding-left': '16px' },\n children: isPictureMode ? 'Retake Photo' : 'Take Photo'\n };\n\n const videoConstraints = {\n width: 1280,\n height: 720,\n facingMode: cameraFacing === 'Front' ? 'user' : { exact: 'environment' }\n };\n\n const webcamProps = {\n ref: webcamRef,\n audio: false,\n height: 720,\n width: 1280,\n style: { borderRadius: 10 },\n screenshotFormat: 'image/jpeg',\n videoConstraint: videoConstraints\n };\n\n const warningProps = {\n isLongText: true,\n size: 'medium',\n colorStyle: 'warning',\n showAnimate: true,\n children: 'You need to give permission to the camera to take photos'\n };\n\n const renderArray = [isWebcamMode ? : ];\n\n return (\n <>\n \n {\n !isPictureMode && !(skipped && permission === CAMERA_ACCESS_STATES.GRANTED) ? renderArray : []\n }\n {\n isPictureMode && (\n \n )\n }\n \n
    \n
    \n \n );\n};\n\nTakePhoto.propTypes = {\n question: shape.isRequired,\n answer: any.isRequired,\n setAnswer: func.isRequired,\n isActive: bool.isRequired\n};\n\nexport default TakePhoto;\n","import React, { useState } from 'react';\nimport {\n shape, any, func, bool\n} from 'prop-types';\nimport { WIDGETS } from '@jotforminc/constants';\nimport { sanitizeHtmlForParagraphField } from '@jotforminc/agent-utils';\n// eslint-disable-next-line import/extensions\nimport ChoiceButton from '../../ChoiceButton';\n\nconst TermsAndCondition = props => {\n const {\n question, answer, setAnswer, isActive = false, inProgress\n } = props;\n\n const {\n selectedField: widgetID\n } = question;\n\n const [accepted, setAccepted] = useState(false);\n const isShortScrollableTerms = widgetID === WIDGETS.ShortScrollableTerms;\n\n const TermsAndConditionParams = ['termsText', 'acceptedText', 'termsLink', 'theme'];\n const ShortScrollableTermsParams = ['termsText', 'content', 'sendTermsConditionals', 'isBottomRequired'];\n const params = {};\n (isShortScrollableTerms ? ShortScrollableTermsParams : TermsAndConditionParams).forEach(p => { params[p] = question[p]; });\n\n if (!isShortScrollableTerms && !/^(https|http):\\/\\//i.test(params.termsLink)) {\n params.termsLink = `https://${params.termsLink}`;\n }\n\n // eslint-disable-next-line max-len\n const termsAndConditionText = sanitizeHtmlForParagraphField((isShortScrollableTerms ? params.content : params.termsText).replaceAll('{', ``).replaceAll('}', ''));\n const defaultText = isShortScrollableTerms ? 'By clicking the button, I agree to terms & conditions.' : 'I agree to terms & conditions';\n\n const accept = () => {\n // eslint-disable-next-line no-nested-ternary\n const newAnswer = isShortScrollableTerms ? (params.sendTermsConditionals === 'Yes' ? params.content : 'Accepted') : (params.acceptedText || 'Accepted');\n\n setAccepted(true);\n setAnswer(newAnswer);\n };\n\n return (\n <>\n \n \n \n );\n};\n\nTermsAndCondition.propTypes = {\n question: shape.isRequired,\n answer: any.isRequired,\n setAnswer: func.isRequired,\n isActive: bool,\n inProgress: bool\n};\n\nexport default TermsAndCondition;\n","import {\n any, bool, func, number, oneOfType, shape,\n string\n} from 'prop-types';\nimport Fields from '@jotforminc/form-fields';\nimport React, { useEffect } from 'react';\nimport { safeJSONParse } from '@jotforminc/utils';\n\nimport '../../styles/appointment.scss';\n\nwindow.JotForm = window.JotForm || {\n runAllCalculations: f => f, corrected: f => f, runConditionForId: f => f, server: '/server.php'\n};\n\nwindow.Element.prototype.triggerEvent = function elemFn(eventName) {\n const evt = document.createEvent('HTMLEvents');\n evt.initEvent(eventName, true, true);\n this.dispatchEvent(evt);\n};\n\nconst Appointment = ({\n question, setAnswer, answer, viewMode, formID\n}) => {\n const _answer = typeof answer === 'object' ? answer : safeJSONParse(answer, {});\n const fieldProps = Object.fromEntries(Object.entries(question).map(([key, value]) => [key, { value: value }]));\n\n const qid = `input_${question.qid}`;\n const qname = `q${question.qid}_${question.name}`;\n\n const allProps = {\n ...fieldProps,\n qid: { value: qid },\n id: { value: question.qid },\n qname: { value: qname },\n cdnconfig: { CDN: 'https://cdn.jotfor.ms/' },\n passive: viewMode,\n timeFormat: { value: fieldProps?.timeFormat?.value || '24 Hour' }\n };\n\n useEffect(() => {\n Object.entries(_answer).forEach(([key, value]) => {\n const el = document.querySelector(`[name=\"${qname}[${key}]\"]`);\n if (el) el.value = value;\n });\n }, []);\n\n useEffect(() => {\n const onInput = () => {\n const values = Array.from(document.querySelectorAll('.jfQuestion-fields > input')).reduce((prev, curr) => {\n return { ...prev, [curr.name.match(/\\[(.*?)\\]/)[1]]: curr.value };\n }, {});\n setAnswer(values);\n };\n const dateEl = document.querySelector(`#${qid}_date`);\n dateEl?.addEventListener('input', onInput);\n return () => dateEl?.removeEventListener('input', onInput);\n });\n\n useEffect(() => {\n window.JotForm.editValueSet = viewMode;\n window.JotForm.isEditMode = () => viewMode;\n window.__formInfo = { id: formID };\n }, [viewMode]);\n\n return (\n <>\n \n \n );\n};\n\nAppointment.propTypes = {\n question: shape({}).isRequired,\n setAnswer: func.isRequired,\n answer: any.isRequired,\n viewMode: bool.isRequired,\n formID: oneOfType([string, number]).isRequired\n};\n\nexport default Appointment;\n","import React from 'react';\nimport { shape } from 'prop-types';\n\nconst Image = ({\n question: {\n link, src, width, height, alt = 'A form image.'\n }\n}) => {\n const imgElement = (\n \n );\n if (link) {\n return ;\n }\n return (\n
    {imgElement}
    \n );\n};\n\nImage.propTypes = {\n question: shape({}).isRequired\n};\n\nexport default Image;\n","import React, { useState, useEffect } from 'react';\nimport { string, func, bool } from 'prop-types';\nimport { TYPE_DURATION_PER_CHARACTER } from '../constants';\n\nconst HTMLTyping = ({ htmlString, onTypingEnd, useSpan }) => {\n const [displayedHtml, setDisplayedHtml] = useState('');\n\n const decodeHtmlEntities = str => {\n const textarea = document.createElement('textarea');\n textarea.innerHTML = str;\n return textarea.value;\n };\n useEffect(() => {\n let index = 0;\n const decodedHtml = decodeHtmlEntities(htmlString);\n let tagOpened = false;\n let lastTimeout = null;\n const type = () => {\n const newText = decodedHtml.slice(0, index + 1);\n setDisplayedHtml(newText);\n index++;\n if (index !== decodedHtml.length) {\n if (newText.charAt(newText.length - 1) === '<') {\n tagOpened = true;\n type();\n } else if (tagOpened && newText.charAt(newText.length - 1) !== '>') {\n type();\n } else if (tagOpened && newText.charAt(newText.length - 1) === '>') {\n tagOpened = false;\n type();\n } else {\n lastTimeout = setTimeout(type, TYPE_DURATION_PER_CHARACTER);\n }\n } else if (onTypingEnd) {\n onTypingEnd();\n }\n };\n type();\n return () => {\n if (lastTimeout) {\n clearTimeout(lastTimeout);\n }\n };\n }, []);\n\n const Element = useSpan ? 'span' : 'div';\n\n return (\n \n );\n};\nHTMLTyping.propTypes = {\n htmlString: string.isRequired,\n onTypingEnd: func,\n useSpan: bool\n};\nHTMLTyping.defaultProps = {\n useSpan: false\n};\n\nexport default HTMLTyping;\n","import React from 'react';\nimport { bool, func, shape } from 'prop-types';\nimport { sanitizeHtmlForParagraphField } from '@jotforminc/agent-utils';\nimport HTMLTyping from '../HTMLTyping';\n\nconst Paragraph = ({\n question, viewMode, onTypingEnd, isActive\n}) => {\n const htmlString = sanitizeHtmlForParagraphField(question.text);\n return (\n

    \n {viewMode || !isActive\n ? \n : }\n

    \n );\n};\n\nParagraph.propTypes = {\n question: shape({}).isRequired,\n viewMode: bool.isRequired,\n onTypingEnd: func,\n isActive: bool\n};\n\nexport default Paragraph;\n","import React from 'react';\nimport {\n shape, string, func, bool\n} from 'prop-types';\nimport { Fields } from '@jotforminc/answer-fields';\nimport {\n capitalizeFirstLetter\n} from '@jotforminc/utils';\nimport { Button, Flex } from '@jotforminc/magnet';\nimport { useEventListener } from '@jotforminc/hooks';\n\nexport const normalizeFieldName = questionType => {\n const fieldType = questionType.replace('control_', '');\n return capitalizeFirstLetter(fieldType);\n};\n\nexport const getAnswerField = (questionType = '') => {\n if (questionType === 'control_head') {\n return Fields[normalizeFieldName('control_text')];\n }\n\n const Types = { ...Fields };\n return questionType ? Types[normalizeFieldName(questionType)] : null;\n};\n\nconst Review = ({\n question, formURL, chatId, setChatMode, setSubmitInprogress,\n submitinprogress, setSubmitErrored, answerCurrentQuestion\n}) => {\n const [isSubmitDisabled, setIsSubmitDisabled] = React.useState(false);\n const [isFormLoaded, setIsFormLoaded] = React.useState(false);\n\n const handleChangeQuestin = async val => {\n await answerCurrentQuestion({ answer: `I want to change ${val.text}` });\n };\n\n const handleSubmit = () => {\n document.querySelector('iframe').contentWindow.postMessage('submitDraft', '*');\n };\n\n useEventListener('message', ({ data }) => {\n switch (data.action) {\n case 'submission-error':\n case 'submission-completed':\n if (window.JOTFORM_ENV === 'DEVELOPMENT' || window.user?.account_type?.name === 'ADMIN') {\n console.log('submitMessage', data);\n }\n setSubmitErrored(data.action === 'submission-error');\n setSubmitInprogress(false);\n setChatMode('submitresult');\n break;\n case 'validation-error':\n setSubmitInprogress(false);\n break;\n case 'submission-pending-captcha':\n setSubmitInprogress(false);\n setIsSubmitDisabled(true);\n break;\n case 'submission-pending-signature':\n setSubmitInprogress(false);\n break;\n default:\n break;\n }\n });\n return (\n
    \n
    \n {question.title}\n
    \n
    \n {\n question.answers.map(val => {\n const Field = getAnswerField(val.type);\n return (\n \n \n handleChangeQuestin(val)}\n >\n Change\n \n \n );\n })\n }\n
    \n
    \n Is everything correct?\n \n Yes, submit my answers\n \n
    \n\n {\n setIsFormLoaded(true);\n }}\n id=\"ai-agent-manualfilling-formframe\"\n src={`${formURL}?&isAIAgentEmbed=1&chatID=${chatId}&nosubmit=1&no-form-toolbar=true&emailVerifiedInAgent=1&skipAutoSave=1`}\n title=\"ai-agent\"\n style={{ display: 'none' }}\n frameborder=\"0\"\n allow=\"geolocation; microphone; camera; fullscreen\"\n />\n
    \n );\n};\n\nReview.propTypes = {\n question: shape({}).isRequired,\n formURL: string,\n chatId: string,\n setChatMode: func,\n setSubmitInprogress: func,\n isFormLoaded: bool,\n submitinprogress: bool,\n setSubmitErrored: func,\n answerCurrentQuestion: func\n};\n\nexport default Review;\n","export const getProductListValue = (question, values) => {\n const products = {};\n const donationField = document.querySelector(`input[id='input_${question.qid}_donation']`);\n if (donationField) {\n return { price: donationField.value };\n }\n values.forEach((val, key, copyValues) => {\n const { name, value } = val;\n if (name.includes('cc_')) return;\n const hasBrackets = /\\[\\]/.test(name);\n const { name: copyName } = copyValues[key + 1] || {};\n if (hasBrackets) {\n return;\n }\n\n const hasCopyBrackets = /\\[\\]/.test(copyName);\n\n const nameParts = name.match(/\\[(.*?)\\]/g);\n\n const hasExpandedOption = !!nameParts[0].split('_')[2];\n const pid = name.match(/special_(\\d+)/)?.[1];\n const id = hasExpandedOption ? nameParts[0] : pid;\n const container = document.querySelector(`span[pid=\"${pid}\"]`);\n const checkbox = container.querySelector('.form-checkbox.form-product-input');\n\n if (!checkbox?.checked) return;\n const specialId = nameParts[1].replace(/[[\\]]/g, '');\n const sort = parseInt(specialId.match(/\\d+/)[0], 10);\n const typeId = document.getElementsByName(name)[0].id;\n const type = typeId.split('_')[2] || 'custom';\n\n if (id && !products[id]) {\n const options = [];\n options[0] = {\n selected: value,\n type,\n expanded: hasCopyBrackets ? '1' : '',\n sort\n };\n products[id] = {\n options,\n hasExpandedOption,\n pid: pid\n };\n return;\n }\n products[id].options.push({\n selected: value, type, expanded: hasCopyBrackets ? '1' : '', sort\n });\n });\n\n Object.keys(products).forEach(key => {\n const { options } = products[key];\n options.sort((a, b) => {\n return a.sort - b.sort;\n });\n });\n\n return Object.values(products);\n};\n\nexport const populateProductList = (question, items) => {\n const subProducts = []; // init sub-products container\n const { qid } = question;\n if (items instanceof Array) {\n items.forEach(item => {\n if (item.hasExpandedOption) {\n subProducts.push(item);\n }\n const checkbox = document.querySelector(`#input_${qid}_${item.pid}`);\n if (checkbox) {\n checkbox.checked = true;\n checkbox.triggerEvent('click');\n if ('options' in item) {\n item.options.forEach((option, i) => {\n if (document.querySelector(`#input_${qid}_${option.type}_${item.pid}_${i}`)) {\n document.querySelector(`#input_${qid}_${option.type}_${item.pid}_${i}`).value = option.selected;\n }\n });\n }\n }\n });\n } else if (items instanceof Object) {\n Object.entries(items).forEach(([key, value]) => {\n if (key === 'price') {\n document.querySelector(`#input_${qid}_donation`).value = value;\n }\n });\n }\n // populate subproduct options\n if (subProducts.length > 0) {\n for (let i = 0; i < subProducts.length; i++) {\n let elem = null;\n let subPid = '';\n const { options } = subProducts[i];\n // get subproduct ID for this item\n for (let j = 0; j < options.length; j++) {\n const opt = options[j];\n if (opt.expanded && document.querySelector(`input[value=\"${opt.selected}\"][name*=\"${subProducts[i].pid}\"]`).length > 0) {\n elem = document.querySelector(`input[value=\"${opt.selected}\"][name*=\"${subProducts[i].pid}\"]`);\n if (elem) {\n [subPid] = elem.name.match(/([0-9]+_[0-9]+)/);\n }\n }\n }\n // fill option values for this item\n for (let z = 0; z < options.length; z++) {\n const opt = options[z];\n if (!opt.expanded && opt.selected) {\n if (document.querySelector(`#input_${qid}_${opt.type}_${subPid}_${z}`)) {\n document.querySelector(`#input_${qid}_${opt.type}_${subPid}_${z}`).value = opt.selected;\n }\n }\n }\n }\n }\n};\n\nexport const getLayoutClass = paymentListSettings => {\n if (paymentListSettings && paymentListSettings[0]) {\n switch (paymentListSettings[0].productListLayout) {\n case 'HR':\n return 'card-1col';\n case 'V2C':\n return ' card-2col';\n case 'V3C':\n return 'card-3col';\n default:\n break;\n }\n }\n return null;\n};\n","import {\n any, bool, func, number, oneOfType, shape, string\n} from 'prop-types';\nimport Fields from '@jotforminc/form-fields';\nimport React, { useEffect, useRef, useState } from 'react';\nimport cn from 'classnames';\nimport ReactDOMServer from 'react-dom/server';\nimport { safeJSONParse } from '@jotforminc/utils';\nimport '../../styles/productList.scss';\nimport { getLayoutClass, getProductListValue, populateProductList } from '@jotforminc/agent-utils';\n\nconst inputElements = ['select', 'input'];\n\nconst ProductList = ({\n question, answer, setAnswer, formID\n}) => {\n const [formProperties, setFormProperties] = useState(window.formProperties); // TODO: decouple window usage somehow\n const dummyForm = useRef(null);\n const _answer = typeof answer === 'object' ? answer : safeJSONParse(answer, {});\n const fieldProps = Object.fromEntries(Object.entries(question).map(([key, value]) => [key, { value: value }]));\n\n const hasFormProperties = formProperties !== undefined;\n\n const qid = `input_${question.qid}`;\n const qname = `q${question.qid}_${question.name}`;\n\n const { paymentType } = question;\n\n useEffect(() => {\n if (!hasFormProperties) return;\n populateProductList(question, _answer);\n }, [hasFormProperties]);\n\n useEffect(() => {\n if (formProperties) return;\n fetch(`/API/form/${formID}/properties`).then(res => res.json()).then(({ content }) => {\n setFormProperties({\n ...content,\n products: [\n ...content.products.map(p => {\n return { ...p, options: JSON.parse(p.options) };\n })\n ]\n });\n }).catch(error => console.error(error));\n }, []);\n\n const allProps = {\n ...fieldProps,\n qid: { value: qid },\n id: { value: question.qid },\n qname: { value: qname },\n passive: false,\n formProperties,\n cdnconfig: { CDN: 'https://cdn.jotfor.ms/' },\n themeVersion: 'v2',\n isPortalProductListElement: true\n };\n\n const handleProductClick = ({ target, currentTarget }) => {\n if (inputElements.includes(target.nodeName.toLowerCase())) return;\n const checkbox = currentTarget.querySelector('.form-product-input');\n currentTarget.classList.toggle('p_selected');\n checkbox.checked = !checkbox.checked;\n checkbox.triggerEvent('change');\n };\n\n const handleChange = () => {\n const formData = Array.from(new FormData(dummyForm.current))\n .map(([name, value]) => ({ name, value }))\n .filter(({ name }) => name.split('_')[0] === `q${question.qid}`);\n const data = getProductListValue(question, formData);\n setAnswer(data);\n };\n\n const eventHandlers = (listener = 'addEventListener') => {\n const wrapper = document.querySelector('.product-container-wrapper');\n if (!wrapper) return;\n wrapper.querySelectorAll(inputElements.join(', ')).forEach(inputEl => inputEl[listener]('change', handleChange));\n document.querySelectorAll('.form-product-item').forEach(productEl => productEl[listener]('click', handleProductClick));\n };\n\n useEffect(() => {\n if (!hasFormProperties) return;\n eventHandlers();\n return () => eventHandlers('removeEventListener');\n }, [setAnswer, hasFormProperties]);\n\n return formProperties ? (\n \n )\n }}\n />\n ) : '';\n};\n\nProductList.propTypes = {\n question: shape({}).isRequired,\n setAnswer: func.isRequired,\n answer: any.isRequired,\n viewMode: bool.isRequired,\n formID: oneOfType([string, number]).isRequired\n};\n\nexport default ProductList;\n","import React from 'react';\nimport { string, bool } from 'prop-types';\nimport { Flex } from '@jotforminc/magnet';\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport Markdown from 'react-markdown';\nimport HTMLTyping from '../HTMLTyping';\n\nconst EmptyComponent = ({ children }) => children;\n\nconst Generic = ({\n message = '', viewMode, typing, from, isActive = true\n}) => {\n const parseMarkdown = () => {\n const notAllowedHTMLTags = [\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'em', 'img', 'blockquote', 'ul', 'ol', 'pre', 'code', 'hr', 'del', 'p'\n ];\n\n const a = ({ children, href }) => {children};\n\n return renderToStaticMarkup( [tag, EmptyComponent])) }}>{message});\n };\n const htmlMessage = from === 'user' ? message : parseMarkdown();\n\n return (\n \n

    \n <>\n {message === '~' &&

    }\n {message !== '~' && (viewMode || !typing || !isActive) && (\n \n )}\n {message !== '~' && !viewMode && typing && isActive && }\n \n

    \n \n );\n};\n\nGeneric.propTypes = {\n message: string,\n viewMode: bool.isRequired,\n typing: bool.isRequired,\n from: string.isRequired,\n isActive: bool\n};\n\nexport default Generic;\n","import { Button } from '@jotforminc/magnet';\nimport { func, node } from 'prop-types';\nimport React from 'react';\n\nconst ChatActionView = ({ onClick = f => f, children = null }) => {\n return (\n \n {children}\n \n );\n};\n\nChatActionView.propTypes = {\n children: node,\n onClick: func\n};\n\nexport default ChatActionView;\n","import React, {\n ComponentPropsWithRef, ElementType, forwardRef\n} from 'react';\nimport { cx } from 'class-variance-authority';\nimport { PolymorphicProps } from '../../types/system.types';\nimport { FlexItemComponentType, FlexItemProps } from './flex.types';\nimport { convertResponsiveClass } from '../../utils';\n\nimport '@jotforminc/jotform.css';\n\nimport {\n growClasses,\n orderClasses,\n shrinkClasses,\n alignSelfClasses\n} from './flex.cva';\n\nexport const FlexItem:FlexItemComponentType = forwardRef(\n (\n props: PolymorphicProps,\n ref?: ComponentPropsWithRef['ref']\n ): JSX.Element => {\n const {\n as = 'div',\n alignSelf,\n grow,\n shrink,\n order,\n children,\n className,\n ...rest\n } = props;\n\n const Component = as;\n const flexClasses = [\n ...convertResponsiveClass(grow, growClasses),\n ...convertResponsiveClass(shrink, shrinkClasses),\n ...convertResponsiveClass(order, orderClasses),\n ...convertResponsiveClass(alignSelf, alignSelfClasses)\n ];\n\n return (\n {children}\n );\n }\n);\n","export const getThemeClassNames = theme => {\n if (theme === 'light') {\n return 'bg-white color-navy-600';\n }\n return 'bg-navy-600 color-white';\n};\n\nexport const getEndIconClassNames = theme => {\n if (theme === 'light') {\n return {\n selected: 'color-navy-600',\n notSelected: 'color-navy-25 group-hover:color-navy-50 duration-300'\n };\n }\n return {\n selected: 'color-white',\n notSelected: 'color-navy-500 group-hover:color-navy-300 duration-300'\n };\n};\n","import React from 'react';\nimport { string, oneOf, bool } from 'prop-types';\nimport classNames from 'classnames';\nimport { getThemeClassNames } from '../../utils';\n\nexport const MenuItemSubheader = ({\n subheader,\n className,\n theme,\n isTitle\n}) => {\n const subheaderClassNames = classNames('list-item list-none px-2 py-3 text-sm font-medium',\n className,\n !isTitle ? getThemeClassNames(theme) : 'color-navy-300');\n\n return (\n
  • \n {subheader}\n
  • \n );\n};\n\nMenuItemSubheader.propTypes = {\n className: string,\n subheader: string,\n theme: oneOf(['dark', 'light']),\n isTitle: bool\n};\n\nMenuItemSubheader.defaultProps = {\n className: '',\n subheader: '',\n theme: 'dark',\n isTitle: false\n};\n","import React from 'react';\nimport {\n string, func, bool, oneOf, node\n} from 'prop-types';\nimport classNames from 'classnames';\n\nexport const MenuItemButton = ({\n id,\n onClick,\n isDisabled,\n className,\n theme,\n colorStyle,\n children\n}) => {\n const buttonClassNames = classNames(\n 'flex items-center w-full text-left p-2 duration-300 radius group',\n isDisabled && 'pointer-events-none opacity-30',\n className,\n {\n 'bg-navy-600 hover:bg-navy-400': theme === 'dark',\n 'bg-white hover:bg-navy-25': theme === 'light',\n 'color-white': theme === 'dark' && colorStyle === null,\n 'color-navy-600': theme === 'light' && colorStyle === null,\n 'color-red-400': colorStyle === 'red',\n 'color-orange-400': colorStyle === 'orange'\n }\n );\n\n return (\n \n {children}\n \n );\n};\n\nMenuItemButton.propTypes = {\n onClick: func,\n id: string.isRequired,\n isDisabled: bool,\n theme: oneOf(['dark', 'light']),\n colorStyle: oneOf([null, 'red', 'orange']),\n className: string,\n children: node.isRequired\n};\n\nMenuItemButton.defaultProps = {\n onClick: () => {},\n isDisabled: false,\n className: '',\n theme: 'dark',\n colorStyle: null\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport {\n string, oneOf, elementType\n} from 'prop-types';\nimport { getEndIconClassNames } from '../../utils';\n\nexport const MenuItemIcon = ({\n className,\n icon: Icon,\n hoverIcon: HoverIcon,\n position,\n isActive,\n theme\n}) => {\n const commonIconClassNames = classNames(\n 'w-4 h-4 shrink-0',\n className,\n {\n 'ml-2': position === 'end',\n 'mr-2': position === 'start'\n },\n typeof isActive === 'boolean' && getEndIconClassNames(theme)[isActive ? 'selected' : 'notSelected']\n );\n\n const hoverIconClassNames = classNames(commonIconClassNames, { 'group-hover:block hiddenjf': !!HoverIcon });\n const iconClassNames = classNames(commonIconClassNames, { 'group-hover:hiddenjf block': !!HoverIcon });\n\n return (\n <>\n {HoverIcon && }\n \n \n );\n};\n\nMenuItemIcon.propTypes = {\n className: string,\n icon: elementType.isRequired,\n hoverIcon: elementType,\n position: oneOf(['start', 'end']),\n theme: oneOf(['dark', 'light']),\n isActive: oneOf([true, false, null])\n};\n\nMenuItemIcon.defaultProps = {\n className: null,\n position: 'start',\n theme: 'dark',\n isActive: null,\n hoverIcon: null\n};\n","import React from 'react';\nimport { string, node, bool } from 'prop-types';\nimport classNames from 'classnames';\n\nexport const MenuItemTitle = ({\n children,\n className,\n isContext\n}) => {\n const titleClassNames = classNames(\n isContext ? 'text-15' : 'text-md',\n 'grow-1 truncate font-medium',\n className\n );\n\n return (\n \n {children}\n \n );\n};\n\nMenuItemTitle.propTypes = {\n children: node.isRequired,\n className: string,\n isContext: bool\n};\n\nMenuItemTitle.defaultProps = {\n className: '',\n isContext: false\n};\n","import React from 'react';\nimport { string, oneOf } from 'prop-types';\nimport classNames from 'classnames';\n\nexport const MenuItemBadge = ({\n colorStyle,\n text,\n className\n}) => {\n const badgeClassNames = classNames('px-1.5 py-0.5 ml-1 text-xxs radius text-uppercase font-bold',\n className,\n {\n 'bg-navy-300 color-white': colorStyle === 'gray',\n 'bg-blue-500 color-white': colorStyle === 'blue',\n 'bg-green-500 color white': colorStyle === 'green'\n });\n\n return (\n \n {text}\n \n );\n};\n\nMenuItemBadge.propTypes = {\n text: string,\n colorStyle: oneOf(['gray', 'blue', 'green']),\n className: string\n};\n\nMenuItemBadge.defaultProps = {\n colorStyle: 'gray',\n text: '',\n className: ''\n};\n","import React from 'react';\nimport { string } from 'prop-types';\nimport classNames from 'classnames';\n\nexport const MenuItemShortcut = ({\n text,\n className\n}) => {\n const shortCutClassNames = classNames(\n 'ml-1 text-xxs color-navy-300',\n className\n );\n\n return (\n \n {text}\n \n );\n};\n\nMenuItemShortcut.propTypes = {\n text: string,\n className: string\n};\n\nMenuItemShortcut.defaultProps = {\n text: '',\n className: ''\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport {\n string, node, oneOf, func, bool\n} from 'prop-types';\nimport { getThemeClassNames } from '../../utils';\n\nexport const MenuItem = ({\n className,\n children,\n theme,\n handleOnMouseEnter,\n id,\n isContext\n}) => {\n const menuItemClassNames = classNames(\n isContext ? 'px-2 py-0.5' : 'px-4 py-1',\n 'list-item list-none',\n getThemeClassNames(theme),\n className\n );\n\n return (\n \n {children}\n \n );\n};\n\nMenuItem.propTypes = {\n className: string,\n children: node.isRequired,\n theme: oneOf(['dark', 'light']),\n handleOnMouseEnter: func,\n id: string.isRequired,\n isContext: bool\n};\n\nMenuItem.defaultProps = {\n className: null,\n theme: 'dark',\n handleOnMouseEnter: () => {},\n isContext: false\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport {\n string, node, oneOf, bool\n} from 'prop-types';\nimport { getThemeClassNames } from '../../utils';\n\nexport const MenuList = ({\n className,\n children,\n theme,\n isContext\n}) => {\n const menuListClassNames = classNames(\n isContext ? 'py-2 radius max-h-70vh' : 'pb-3 max-h-80vh',\n 'list overflow-auto',\n getThemeClassNames(theme),\n className\n );\n\n return (\n
      \n {children}\n
    \n );\n};\n\nMenuList.propTypes = {\n className: string,\n children: node.isRequired,\n theme: oneOf(['dark', 'light']),\n isContext: bool\n\n};\n\nMenuList.defaultProps = {\n className: null,\n theme: 'dark',\n isContext: false\n};\n","import React from 'react';\nimport { oneOf, bool } from 'prop-types';\nimport classNames from 'classnames';\n\nexport const MenuDivider = ({ theme, isContext }) => {\n const dividerClass = classNames('h-px', {\n 'bg-navy-500': theme === 'dark',\n 'bg-gray-25': theme === 'light'\n });\n return (\n
  • \n
    \n
  • \n );\n};\n\nMenuDivider.propTypes = {\n theme: oneOf(['dark', 'light']),\n isContext: bool\n};\n\nMenuDivider.defaultProps = {\n theme: 'dark',\n isContext: false\n};\n","import React, {\n useMemo, useRef, useState, useEffect\n} from 'react';\nimport '@jotforminc/jotform.css';\n// eslint-disable-next-line no-restricted-imports\nimport '@jotforminc/jotform.css/animation.css';\nimport { usePopper } from 'react-popper';\nimport {\n func, shape, string, elementType, arrayOf, oneOf, bool\n} from 'prop-types';\nimport { IconChevronRight } from '@jotforminc/svg-icons';\nimport {\n MenuItemButton, MenuItemIcon, MenuItemTitle,\n MenuItemBadge, MenuDivider, MenuItem,\n MenuList, MenuItemSubheader, MenuItemShortcut\n} from '@jotforminc/drawer';\n\nexport const ContextMenu = React.forwardRef(({\n schema,\n strategy,\n placement,\n id,\n onMouseEnter,\n onOutsideClick,\n className,\n theme\n}, ref) => {\n const contextMenuRef = useRef();\n const timerRef = useRef(null);\n\n const [arrowElement, setArrowElement] = useState(null);\n const [subElement, setSubElement] = useState(null);\n const [selectedItemID, setSelectedItemID] = useState(null);\n\n const { styles, attributes } = usePopper(ref.current, contextMenuRef.current, {\n placement,\n strategy,\n modifiers: [{ name: 'arrow', options: { element: arrowElement } }]\n });\n\n const selectedItem = useMemo(() => {\n if (selectedItemID) return schema.children?.find(child => child.id === selectedItemID);\n }, [selectedItemID]);\n\n useEffect(() => {\n if (onOutsideClick) {\n const handleOutsideClick = event => {\n const isClickOutsideMenu = contextMenuRef.current && !contextMenuRef.current.contains(event.target);\n const isClickOutsideButton = ref.current && !ref.current.contains(event.target);\n if (isClickOutsideMenu && isClickOutsideButton) onOutsideClick();\n };\n document.addEventListener('click', handleOutsideClick, true);\n return () => {\n document.removeEventListener('click', handleOutsideClick, true);\n };\n }\n return () => {};\n }, []);\n\n const handleOnMouseEnter = e => {\n const _element = e.currentTarget;\n clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => {\n setSubElement({\n current: _element\n });\n setSelectedItemID(_element.getAttribute('id'));\n }, 200);\n };\n\n const renderItem = item => {\n if (item.customComponent) {\n return item.customComponent;\n }\n\n switch (item.type ?? 'item') {\n case 'subheader':\n return ;\n case 'item':\n const startIcon = item.icon;\n const endIcon = item.endIcon ?? (item.children?.length > 0 ? IconChevronRight : null);\n return (\n \n {!!startIcon && (\n \n )}\n {item.title}\n {!!item.badge && (\n \n )}\n {!!item.shortCut && (\n \n )}\n {!!endIcon && (\n \n )}\n \n );\n case 'element':\n return (\n \n );\n default:\n throw new Error('Unsupported type');\n }\n };\n\n return (\n <>\n \n \n {schema.children?.map(item => {\n if (!item.isVisible && typeof item.isVisible !== 'undefined') {\n return null;\n }\n\n // Sub-context-menu or element render node within container key\n // If you can use exclude custom node & component, component must be assign to container in children object\n if (item.type === 'element' && item.children) {\n return item.children?.map(child => {\n return child.container ? child.container : null;\n });\n }\n\n return (\n \n \n {item.customComponent ? item.customComponent : renderItem(item)}\n \n {item.hasDivider && }\n \n );\n })}\n \n
    \n
    \n\n {selectedItem && selectedItem.children && subElement && (\n {\n clearTimeout(timerRef.current);\n }}\n strategy={strategy}\n theme={theme}\n />\n )}\n \n );\n});\n\nconst schemaProps = {\n id: string.isRequired,\n title: string,\n icon: elementType,\n type: oneOf(['subheader', 'item', 'divider', 'element']),\n onClick: func,\n endIcon: elementType,\n badge: shape({\n text: string,\n colorStyle: string\n }),\n shortCut: string\n};\n\nContextMenu.propTypes = {\n zIndex: string,\n className: string,\n overlay: bool,\n theme: oneOf(['dark', 'light']),\n strategy: string,\n placement: string,\n schema: shape({\n ...schemaProps,\n children: arrayOf(shape(schemaProps))\n }).isRequired,\n id: string,\n onMouseEnter: func,\n onOutsideClick: func\n};\n\nContextMenu.defaultProps = {\n zIndex: null,\n overlay: true,\n className: '',\n theme: 'dark',\n strategy: 'fixed',\n placement: 'bottom',\n id: null,\n onMouseEnter: () => { },\n onOutsideClick: null\n};\n","import { getUrlParameter } from '@jotforminc/utils';\n\nexport const formatDate = dateString => {\n const date = new Date(dateString);\n\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n let hours = date.getHours();\n const minutes = date.getMinutes().toString().padStart(2, '0');\n const ampm = hours >= 12 ? 'PM' : 'AM';\n hours = hours % 12;\n hours = hours || 12;\n\n return `${months[date.getMonth()]} ${date.getDate()}, ${date.getFullYear()} ${hours}:${minutes} ${ampm}`;\n};\n\nexport const isTemplatePreview = () => getUrlParameter('isTemplatePreview') === '1';\nexport const isOneOone = () => getUrlParameter('oneOone') === '1';\n","import React, { useState, useRef } from 'react';\nimport {\n Button, Flex, FlexItem, Textarea\n} from '@jotforminc/magnet';\nimport { EmojiRendererWithoutLazy } from '@jotforminc/icon-selector';\nimport PropTypes from 'prop-types';\nimport {\n IconCheck, IconEllipsisHorizontal, IconPencilLineFilled, IconTrashFilled\n} from '@jotforminc/svg-icons';\nimport { ContextMenu } from '@jotforminc/context-menu';\nimport { t } from '@jotforminc/translation';\nimport { formatDate } from '../utils';\n\nconst emojis = ['weary', 'white_frowning_face', 'neutral_face', 'slightly_smiling_face', 'smile'];\nconst ratings = ['Worst', 'Fair', 'Neutral', 'Good', 'Best'];\n\nconst GiveFeedback = ({\n onClose,\n messageId,\n feedbackInfo = {},\n user,\n onFeedbackSubmitted,\n eventHandler = () => {},\n hasFeedbackPermission\n}) => {\n const [feedbackText, setFeedbackText] = useState(feedbackInfo?.feedbackText ?? '');\n const [feedbackRate, setFeedbackRate] = useState(feedbackInfo?.feedbackRate ?? '0');\n const [feedbackId, setFeedbackId] = useState(feedbackInfo?.feedbackId ?? null);\n const [isSubmitted, setIsSubmitted] = useState(!!feedbackInfo);\n const [showContextMenu, setShowContextMenu] = useState();\n const contextMenuButtonRef = useRef();\n const [feedbackCreatedAt, setFeedbackCreatedAt] = useState(feedbackInfo?.feedbackCreatedAt);\n const [selectedRating, setSelectedRating] = useState(parseInt(feedbackInfo?.feedbackRate, 10) ?? null);\n\n const handleSubmit = async e => {\n try {\n e.preventDefault();\n if (feedbackId) {\n await fetch(`/API/ai-agent/feedback/${feedbackId}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ rating: feedbackRate, content: feedbackText })\n });\n eventHandler('feedback-edited', {\n messageId,\n feedbackId\n });\n } else {\n const response = await fetch(`/API/ai-agent/messages/${messageId}/feedback`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ rating: feedbackRate, content: feedbackText })\n });\n const data = await response.json();\n setFeedbackId(data.content.uuid);\n setFeedbackCreatedAt(new Date());\n eventHandler('feedback-created', {\n messageId,\n feedbackId: data.content.uuid\n });\n }\n setIsSubmitted(true);\n onFeedbackSubmitted();\n } catch (error) {\n console.error('Error submitting feedback:', error);\n }\n };\n\n const handleRateChange = e => {\n const rate = e.currentTarget.getAttribute('data-rate');\n setFeedbackRate(rate);\n };\n\n const resetStates = () => {\n setFeedbackText('');\n setFeedbackRate('0');\n setFeedbackId(null);\n setFeedbackCreatedAt(null);\n };\n\n const resetView = () => {\n setShowContextMenu(false);\n setIsSubmitted(false);\n };\n\n const handleFeedbackEdit = () => {\n resetView();\n };\n\n const handleFeedbackDelete = async () => {\n if (!feedbackId) {\n return;\n }\n\n await fetch(`/API/ai-agent/feedback/${feedbackId}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ status: 'DELETED' })\n })\n .then(res => res.json())\n .then(res => {\n if (!res || !res.content) {\n return;\n }\n\n resetStates();\n resetView();\n onFeedbackSubmitted();\n eventHandler('feedback-deleted', {\n feedbackId,\n messageId\n });\n });\n };\n\n const getRatingText = (index, rate) => {\n if (!selectedRating) {\n if (index === 0) return 'Worst';\n if (index === emojis.length - 1) return 'Best';\n return '';\n }\n return selectedRating === rate ? ratings[index] : '';\n };\n\n const schemaOptions = {\n children: [\n {\n id: 'editFeedback',\n icon: IconPencilLineFilled,\n title: t('Edit Feedback'),\n onClick: handleFeedbackEdit\n },\n {\n id: 'deleteFeedback',\n icon: IconTrashFilled,\n title: t('Delete feedback'),\n onClick: handleFeedbackDelete,\n colorStyle: 'red'\n }\n ]\n };\n\n return (\n \n
    \n \n \n {feedbackId ? (\n <>\n
    \n \n
    \n \n

    {user?.name ?? user?.username ?? user?.email}

    \n {feedbackCreatedAt && isSubmitted && {formatDate(feedbackCreatedAt)}}\n
    \n \n ) : (\n
    \n {t('Give feedback to train your agent')}\n
    \n )}\n
    \n {feedbackId && hasFeedbackPermission && (\n
    \n setShowContextMenu(prevState => !prevState)}\n >\n \n \n {showContextMenu && (\n setShowContextMenu(false)}\n />\n )}\n
    \n )}\n
    \n \n {emojis.map((emoji, index) => {\n const rate = index + 1;\n const isRateChecked = Number(feedbackRate) === rate;\n return (\n \n {\n handleRateChange(e);\n setSelectedRating(rate);\n }}\n data-rate={rate.toString()}\n disabled={isSubmitted && !isRateChecked}\n startIcon={() => {\n return (\n \n \n \n );\n }}\n />\n {getRatingText(index, rate)}\n \n );\n })}\n \n {isSubmitted ? (\n {feedbackText}\n ) : (\n <>\n setFeedbackText(e.target.value)}\n />\n \n )}\n
    \n {isSubmitted ? (\n
    \n \n {t('Your feedback has been added.')}\n
    \n ) : (\n \n \n \n \n )}\n \n );\n};\n\nGiveFeedback.propTypes = {\n onClose: PropTypes.func.isRequired,\n onFeedbackSubmitted: PropTypes.func.isRequired,\n messageId: PropTypes.string.isRequired,\n feedbackInfo: PropTypes.shape({\n feedbackText: PropTypes.string,\n feedbackRate: PropTypes.string,\n feedbackId: PropTypes.string\n }),\n user: PropTypes.shape({\n avatarUrl: PropTypes.string,\n name: PropTypes.string,\n username: PropTypes.string,\n email: PropTypes.string\n }),\n eventHandler: PropTypes.func,\n hasFeedbackPermission: PropTypes.bool\n};\n\nexport default GiveFeedback;\n","import { useRef, useEffect, useState } from 'react';\nimport { useDebounce } from '@jotforminc/hooks';\n\nexport const useOutsideClick = callback => {\n const ref = useRef(null);\n\n useEffect(() => {\n const handleClickOutside = event => {\n if (ref.current && !ref.current.contains(event.target)) {\n callback();\n }\n };\n\n document.addEventListener('mouseup', handleClickOutside);\n document.addEventListener('touchend', handleClickOutside);\n\n return () => {\n document.removeEventListener('mouseup', handleClickOutside);\n document.removeEventListener('touchend', handleClickOutside);\n };\n }, [callback]);\n\n return ref;\n};\n\nexport const useScrollIntoElement = () => {\n const element = useRef();\n\n const autoScrollCancelEvents = ['wheel', 'touchmove', 'mousedown'];\n\n const scrollIntoElement = () => {\n const container = document.querySelector('#chat-container');\n if (!element.current || !container) return;\n const containerTop = container.getBoundingClientRect().top;\n const elementTop = element.current.getBoundingClientRect().top;\n const top = elementTop - containerTop + container.scrollTop;\n\n container.scrollTo({ top, behavior: 'smooth' });\n };\n\n useEffect(() => {\n if (window.ResizeObserver) {\n const container = document.querySelector('#chat-container');\n const resizeObserver = new window.ResizeObserver(scrollIntoElement);\n resizeObserver.observe(element.current);\n const cancelObserver = () => element.current && resizeObserver.unobserve(element.current);\n autoScrollCancelEvents.map(event => container.addEventListener(event, cancelObserver));\n return () => {\n cancelObserver();\n autoScrollCancelEvents.map(event => container.removeEventListener(event, cancelObserver));\n };\n }\n scrollIntoElement();\n }, []);\n\n return element;\n};\n\nexport const useScrollDownButton = containerRef => {\n const SCROLL_THRESHOLD = 5;\n const [showScrollDownButton, setShowScrollDownButton] = useState();\n\n const handleScroll = useDebounce(e => {\n const container = e.target;\n setShowScrollDownButton(container.offsetHeight !== 0 && Math.abs(container.scrollHeight - container.offsetHeight - container.scrollTop) > SCROLL_THRESHOLD);\n }, 100);\n\n useEffect(() => {\n containerRef.current?.addEventListener('scroll', handleScroll);\n return () => containerRef.current?.removeEventListener('scroll', handleScroll);\n }, []);\n\n return showScrollDownButton;\n};\n\nexport const useViewTransition = state => {\n const [internalState, setInternalState] = useState(state);\n const isTransitioning = useRef(false);\n const resolveUpdate = useRef();\n\n if (\n document.startViewTransition\n && state !== internalState\n && !isTransitioning.current\n ) {\n isTransitioning.current = true;\n document.startViewTransition(() => {\n setInternalState(state);\n return new Promise(r => {\n resolveUpdate.current = r;\n });\n });\n }\n\n useEffect(() => {\n if (resolveUpdate.current) {\n resolveUpdate.current();\n resolveUpdate.current = undefined;\n isTransitioning.current = false;\n }\n }, [internalState]);\n\n return document.startViewTransition ? internalState : state;\n};\n","import { STEPWISE_WIDGETS } from '@jotforminc/constants';\nimport { getUrlParameter } from '@jotforminc/utils';\n\nexport const isStepQuestion = question => (getUrlParameter('aiWidget') === '1' && STEPWISE_WIDGETS.includes(question?.selectedField));\n\nexport const isStepMultipleChoice = (step = {}, question) => (isStepQuestion(question) && step?.nextComponent === 'MultipleChoice');\n","import React from 'react';\n\nconst DefaultErrorBoundaryFallback = () =>
    An unexpected error has occurred.
    ;\n\nexport default DefaultErrorBoundaryFallback;\n","import React, { useCallback } from 'react';\nimport {\n func, oneOfType, arrayOf, node\n} from 'prop-types';\nimport { ErrorBoundary as ReactErrorBoundary } from 'react-error-boundary';\nimport Tracking from '@jotforminc/tracking';\nimport DefaultErrorBoundaryFallback from './DefaultErrorBoundaryFallback';\n\nconst ErrorBoundary = ({ fallback = DefaultErrorBoundaryFallback, children }) => {\n const handleError = useCallback((error, info) => {\n Tracking.captureException(error);\n console.log('error', error);\n console.log('error info', info);\n }, []);\n return (\n \n {children}\n \n );\n};\n\nErrorBoundary.propTypes = {\n fallback: func,\n children: oneOfType([arrayOf(node), node]).isRequired\n};\n\nexport default ErrorBoundary;\n","/* eslint-disable complexity */\nimport React, { useMemo, useState, forwardRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Flex } from '@jotforminc/magnet';\nimport { getUrlParameter } from '@jotforminc/utils';\nimport {\n oneOf,\n string,\n any,\n shape,\n bool,\n func,\n number,\n oneOfType\n} from 'prop-types';\nimport classNames from 'classnames';\nimport { isAutoSkipQuestion, sanitizeMessage } from '@jotforminc/agent-utils';\nimport { WIDGETS, SUPPORTED_PAYMENT_FIELDS } from '@jotforminc/constants';\nimport { IconMessageFilled } from '@jotforminc/svg-icons';\nimport { usePopper } from 'react-popper';\nimport { t } from '@jotforminc/translation';\nimport { Avatar } from './Avatar';\nimport {\n Generic, Signature, Paragraph, ScaleRating, StarRating, Submit, Upload, Image, MultipleChoice, Appointment, Widget, Matrix, ImageChoice, YesNo,\n ImageUploadPreview, TakePhoto, ProductList, TermsAndCondition, PDFEmbedder, Review\n} from './questions';\nimport ChatActionView from './ChatActionView';\nimport Inline from './questions/Inline';\nimport GiveFeedback from './GiveFeedback';\nimport { useOutsideClick } from '../hooks';\nimport { formatDate } from '../utils';\nimport { isStepMultipleChoice, isStepQuestion } from '../utils/stepUtils';\nimport { TYPE_DURATION_PER_CHARACTER } from '../constants';\nimport ErrorBoundary from './ErrorBoundary';\n\nconst MessageView = forwardRef(({\n avatarURL,\n answer,\n from = 'ai',\n message = null,\n question = {},\n viewMode = false,\n isQuickActionFirstMsg = false,\n isActive = false,\n inProgress = false,\n setAnswer = f => f,\n children = null,\n setChatMode = f => f,\n formID,\n action = {},\n messageID = '',\n logCommonAction = f => f,\n isContinueChat = false,\n typing,\n agentBackgroundStart,\n agentBackgroundEnd,\n onTypingEnd,\n chatId,\n agentId,\n shouldShowFeedback,\n user,\n feedbackInfo,\n step = {},\n createdAt,\n onFeedbackSubmitted,\n eventHandler,\n hasFeedbackPermission = false,\n formURL,\n setSubmitInprogress,\n submitinprogress,\n setSubmitErrored,\n chatCompleted,\n answerCurrentQuestion\n}, ref) => {\n const sanitizedMessage = message && from !== 'ai' ? sanitizeMessage(message) : message;\n const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n const [referenceElement, setReferenceElement] = useState(null);\n const [popperElement, setPopperElement] = useState(null);\n const { styles, attributes } = usePopper(referenceElement, popperElement, {\n placement: 'bottom-start'\n });\n\n const handlePopoverClose = () => {\n setIsPopoverOpen(false);\n eventHandler('feedback-closed', {\n messageId: messageID,\n chatId,\n agentId,\n formID\n });\n };\n\n const feedbackRef = useOutsideClick(handlePopoverClose);\n\n const handlePopoverOpen = () => {\n if (isPopoverOpen) {\n return;\n }\n\n setIsPopoverOpen(true);\n eventHandler('feedback-opened', {\n messageId: messageID,\n chatId,\n agentId,\n formID\n });\n };\n\n const feedbackComponent = useMemo(() => {\n return isPopoverOpen && createPortal(\n \n
    \n \n
    \n
    , document.body);\n }, [isPopoverOpen, styles, attributes, messageID, agentId, chatId]);\n\n const QuestionComponent = useMemo(() => {\n switch (true) {\n case question.type === 'control_yesno':\n return YesNo;\n case question.type === 'control_checkbox':\n case question.type === 'control_radio':\n case question.type === 'control_dropdown':\n case isStepMultipleChoice(step, question):\n return MultipleChoice;\n case question.type === 'control_imagechoice':\n return ImageChoice;\n case question.type === 'control_matrix':\n return Matrix;\n case question.type === 'control_rating':\n return StarRating;\n case question.type === 'control_scale':\n return ScaleRating;\n case question.type === 'control_submit' && from === 'ai':\n return Submit;\n case question.type === 'control_signature' || question.selectedField === WIDGETS.SmoothSignature:\n return Signature;\n case question.type === 'control_fileupload':\n return Upload;\n case question.type === 'control_widget' && question.selectedField === WIDGETS.ImageUploadPreview:\n return ImageUploadPreview;\n case question.type === 'control_widget' && question.selectedField === WIDGETS.PDFEmbedder:\n return PDFEmbedder;\n case question.type === 'control_widget' && question.selectedField === WIDGETS.TakePhoto:\n return TakePhoto;\n case question.type === 'control_widget' && (question.selectedField === WIDGETS.TermsAndCondition || question.selectedField === WIDGETS.ShortScrollableTerms):\n return TermsAndCondition;\n case question.type === 'control_appointment' && !getUrlParameter('newAppointmentConversation'):\n return Appointment;\n case question.type === 'control_inline':\n return Inline;\n case question.type === 'control_widget' && !isStepQuestion(question):\n return Widget;\n case question.type === 'control_image':\n return Image;\n case question.type === 'control_text':\n return Paragraph;\n case question.type === 'control_review':\n return Review;\n case SUPPORTED_PAYMENT_FIELDS.includes(question.type):\n return ProductList;\n default:\n return () => '';\n }\n }, [question, from]);\n\n const typingDuration = useMemo(() => (sanitizedMessage ? ((sanitizedMessage.length * (TYPE_DURATION_PER_CHARACTER + 1)) / 1000) : (1 / 20)), [sanitizedMessage]);\n\n return (\n \n \n
    \n {createdAt && message && formatDate(createdAt)}\n
    \n {hasFeedbackPermission && shouldShowFeedback && from === 'ai' ? (\n \n {feedbackInfo ? (\n <>\n 1\n {t('Feedback')}\n \n ) : (\n <>\n \n {t('Give Feedback')}\n \n )}\n \n ) : (\n feedbackInfo && (\n \n 1\n {t('Feedback')}\n \n )\n )}\n {feedbackComponent}\n \n \n {from === 'ai' && (\n \n )}\n
    \n {sanitizedMessage && (\n \n )}\n \n {(from === 'ai' && (isQuickActionFirstMsg || isAutoSkipQuestion(question))) && (\n \n \n \n )}\n {action && action.data && (\n \n {action.data.text || ''}\n \n )}\n
    \n {children}\n \n
    \n \n );\n});\n\nMessageView.propTypes = {\n from: oneOf(['ai', 'user']),\n question: shape({}),\n message: string,\n viewMode: bool,\n isQuickActionFirstMsg: bool,\n avatarURL: string.isRequired,\n isActive: bool,\n inProgress: bool,\n setAnswer: func,\n answer: any,\n children: any,\n setChatMode: func,\n formID: oneOfType([string, number]).isRequired,\n action: shape({}),\n messageID: string,\n logCommonAction: func,\n isContinueChat: bool,\n typing: bool,\n agentBackgroundStart: string,\n agentBackgroundEnd: string,\n chatId: string,\n agentId: string,\n onTypingEnd: func,\n shouldShowFeedback: bool,\n feedbackInfo: shape({}),\n user: shape({}),\n step: shape({}),\n createdAt: string,\n onFeedbackSubmitted: func,\n eventHandler: func,\n hasFeedbackPermission: bool,\n formURL: string,\n setSubmitInprogress: func,\n submitinprogress: bool,\n setSubmitErrored: func,\n chatCompleted: bool,\n answerCurrentQuestion: func\n};\n\nexport default MessageView;\n","import React from 'react';\nimport { string } from 'prop-types';\n\nconst FormHeader = ({\n logoClass, titleClass = '', formLogo, formTitle = 'Form'\n}) => {\n return (\n <>\n {formLogo && \"logo\"}\n

    {formTitle}

    \n \n );\n};\n\nFormHeader.propTypes = {\n logoClass: string.isRequired,\n titleClass: string,\n formLogo: string.isRequired,\n formTitle: string\n};\n\nexport default FormHeader;\n","import React, { useRef, useEffect } from 'react';\nimport { Flex } from '@jotforminc/magnet';\nimport {\n bool, number, oneOfType, shape, string, func\n} from 'prop-types';\nimport { VerticalScrollShadow } from '@jotforminc/agent-utils';\nimport MessageList from './MessageList';\nimport MessageView from './MessageView';\nimport FormHeader from './FormHeader';\n\nconst History = ({\n messageList,\n formLogo,\n formTitle = 'Form',\n formID,\n disableVerticalScrollShadow = false,\n styles,\n chatId = null,\n agentId = null,\n shouldShowFeedback = false,\n user,\n hasFeedbackPermission = false,\n eventHandler = () => {}\n}) => {\n const messageContainerRef = useRef();\n if (!disableVerticalScrollShadow) {\n useEffect(() => {\n const content = new VerticalScrollShadow({\n target: '#chat-container',\n shadowColor: 'rgba(0,0,0,.08)',\n shadowHeight: 32\n });\n content.init();\n }, []);\n }\n const {\n pageBackgroundStart = '#DADEF3',\n pageBackgroundEnd = '#DADEF3',\n chatBackground = '#ffffff',\n inputBackground = '#F3F3FE',\n inputTextColor = '#0a1551',\n sendButtonBackground = '#0a1551',\n sendButtonIconColor = '#ffffff',\n agentBackgroundStart = '#C8CEED',\n agentBackgroundEnd = '#C8CEED',\n fontFamily = 'inter, sans-serif'\n } = styles || {};\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nHistory.propTypes = {\n messageList: shape.isRequired,\n formLogo: string.isRequired,\n formTitle: string,\n formID: oneOfType([string, number]).isRequired,\n disableVerticalScrollShadow: bool,\n styles: shape({}),\n chatId: string,\n agentId: string,\n shouldShowFeedback: bool,\n user: shape({}),\n eventHandler: func,\n hasFeedbackPermission: bool\n};\n\nexport default History;\n","/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\nimport React, {\n useRef, useImperativeHandle, forwardRef, useEffect\n} from 'react';\nimport Tethered from 'react-tether';\nimport {\n string, shape, node, bool, arrayOf, func\n} from 'prop-types';\nimport { useClickOutsideState } from '../../hooks';\n\nconst TetheredMenu = forwardRef(({\n children,\n button,\n targetOffset,\n targetAttachment,\n attachment,\n renderElementToRef,\n style,\n excludedRefs,\n containerProps,\n onVisibilityChange,\n role,\n tabIndex\n}, ref) => {\n const buttonRef = useRef();\n const containerRef = useRef();\n const [isColorPanelVisible, setColorPanelVisiblity] = useClickOutsideState(false, [buttonRef, containerRef, ...excludedRefs]);\n const onColorPanelToggle = () => setColorPanelVisiblity(!isColorPanelVisible);\n const handleKeyUp = e => {\n e.preventDefault();\n e.stopPropagation();\n if (e.code === 'Escape' || e.keyCode === '27') {\n setColorPanelVisiblity(false);\n }\n };\n\n useEffect(() => {\n if (onVisibilityChange) onVisibilityChange(isColorPanelVisible);\n if (isColorPanelVisible) {\n document.addEventListener('keyup', handleKeyUp);\n if (containerRef.current) containerRef.current.focus();\n return;\n }\n if (buttonRef.current) buttonRef.current.focus();\n document.removeEventListener('keyup', handleKeyUp);\n }, [isColorPanelVisible]);\n\n useImperativeHandle(ref, () => ({\n toggle: () => {\n onColorPanelToggle();\n },\n show: () => {\n setColorPanelVisiblity(true);\n },\n hide: () => {\n setColorPanelVisiblity(false);\n }\n }\n ));\n\n return (\n \n {\n if (e.key === 'Escape') setColorPanelVisiblity(false);\n }}\n tabIndex={tabIndex}\n role={role}\n >\n {button}\n \n {isColorPanelVisible && (\n \n {children}\n \n )}\n \n );\n});\n\nTetheredMenu.propTypes = {\n children: node.isRequired,\n button: node.isRequired,\n isVisible: bool,\n targetOffset: string,\n targetAttachment: string,\n attachment: string,\n renderElementToRef: node,\n style: shape({}),\n excludedRefs: arrayOf(string),\n containerProps: shape({}),\n onVisibilityChange: func,\n role: string,\n tabIndex: bool\n};\n\nTetheredMenu.defaultProps = {\n targetOffset: '0 0',\n attachment: 'top right',\n targetAttachment: 'bottom right',\n renderElementToRef: null,\n style: {},\n isVisible: false,\n excludedRefs: [],\n containerProps: {},\n onVisibilityChange: f => f,\n role: null,\n tabIndex: null\n};\n\nexport default TetheredMenu;\n","const colors = [\n { label: 'Flesh', hex: '#FFCFA4' },\n { label: 'Watusi', hex: '#FFD8CF' },\n { label: 'Pig Pink', hex: '#FDDAF3' },\n { label: 'Fog 1', hex: '#E0D2FF' },\n { label: 'Cruise', hex: '#C3F0EB' },\n { label: 'Hawkes Blue', hex: '#D7EFFC' },\n { label: 'Tea Green', hex: '#DAF5C9' },\n { label: 'Fall Green', hex: '#EDE8C3' },\n { label: 'Apricot Peach', hex: '#FAD5B4' },\n { label: 'Periwinkle Grayapprox', hex: '#DEE5F2' },\n { label: 'Blizzard Blueapprox', hex: '#B2E1EF' },\n { label: 'Tuft Bush', hex: '#FFE1D0' },\n { label: 'Mauve 1', hex: '#F4CBFF' },\n { label: 'Titan White', hex: '#DEE3FF' },\n { label: 'Sidecar', hex: '#F1E2B3' },\n { label: 'Periwinkle', hex: '#C5DCFF' },\n { label: 'Madang', hex: '#BEEEC0' },\n { label: 'Fog 2', hex: '#D5D3FF' },\n { label: 'Your Pink', hex: '#FFC7C7' },\n { label: 'Cape Honey', hex: '#FFE8AC' },\n { label: 'Goldenrod', hex: '#F9CF63' },\n { label: 'Macaroni and Cheese', hex: '#FFBA7A' },\n { label: 'Cornflower Lilac', hex: '#FFB2A2' },\n { label: 'Chantilly', hex: '#F6B8E5' },\n { label: 'Melrose 1', hex: '#BFA4FC' },\n { label: 'Riptide', hex: '#90EBE1' },\n { label: 'French Pass', hex: '#BBE4FC' },\n { label: 'Granny Smith Apple 1', hex: '#B4E495' },\n { label: 'Sapling', hex: '#DBD5A3' },\n { label: 'Tacao 1', hex: '#EAB17B' },\n { label: 'Botticelli', hex: '#C8D2E4' },\n { label: 'Morning Glory', hex: '#96D0E2' },\n { label: 'Desert Sand', hex: '#F1CEBA' },\n { label: 'Mona Lisa', hex: '#FF9495' },\n { label: 'Mauve 2', hex: '#E594FF' },\n { label: 'Spindle', hex: '#ABB7E7' },\n { label: 'Putty', hex: '#E4CB7E' },\n { label: 'Anakiwa 1', hex: '#8FBCFF' },\n { label: 'Granny Smith Apple 2', hex: '#9BDD9D' },\n { label: 'Melrose 2', hex: '#B8B5FD' },\n { label: 'Cream Can', hex: '#F2BE53' },\n { label: 'Yellow Orange', hex: '#FFA34E' },\n { label: 'Vivid Tangerine', hex: '#FC927B' },\n { label: 'Lavender Magenta', hex: '#EE95D5' },\n { label: 'Portage', hex: '#9A70F3' },\n { label: 'Downy', hex: '#67D5C8' },\n { label: 'Anakiwa 2', hex: '#95D8FF' },\n { label: 'Feijoa', hex: '#9CDD73' },\n { label: 'Gimblet', hex: '#C1BA7A' },\n { label: 'Di Serria', hex: '#DC9652' },\n { label: 'Casper', hex: '#AEB9CE' },\n { label: 'Viking', hex: '#69BFDB' },\n { label: 'Tacao 2', hex: '#F2B38E' },\n { label: 'Medium Purple', hex: '#BA4DDF' },\n { label: 'Ship Cove', hex: '#7181C2' },\n { label: 'Turmeric', hex: '#CEAF52' },\n { label: 'Cornflower Blue', hex: '#5C99F4' },\n { label: 'De York', hex: '#78C27B' },\n { label: 'Melrose', hex: '#A09DFF' },\n { label: 'Burnt Sienna', hex: '#EB6061' }\n];\n\nexport default colors;\n","import React, {\n useRef,\n useState,\n useEffect,\n forwardRef,\n useMemo\n} from 'react';\nimport { bool, string } from 'prop-types';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport { TwoButtonPopup } from '@jotforminc/two-button-popup';\nimport { capitalizeFirstLetter } from '@jotforminc/utils';\nimport styled from 'styled-components';\nimport Fuse from 'fuse.js';\nimport { t } from '@jotforminc/translation';\nimport { IconTrashExclamationFilled } from '@jotforminc/svg-icons';\nimport { useRole } from '@jotforminc/permissions';\nimport TetheredMenu from '../TetheredMenu';\nimport colors from './colors';\nimport { classNames, getNextAvailableTagKey } from '../../utils';\nimport SVG from '../SVG';\nimport { withWatchMan } from '../../utils/WatchmanRecorder';\n\nconst Drop = styled.button`\n background: ${({ fill }) => `${(fill)}`};\n width: 20px;\n height: 20px;\n border-radius: 100%;\n display: inline-grid;\n border: none;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n svg {\n width: 12px;\n mix-blend-mode: multiply; \n * {\n fill: ${({ fill }) => `${(fill)}`};\n }\n .isTetherOpened & {\n mix-blend-mode: normal;\n * {\n fill: #ffffff;\n }\n }\n }\n`;\n/* eslint-disable react/prop-types */\nconst ColorPanel = ({ color, onSelectColor }) => {\n return (\n
    \n
    \n \n {t('Select a color')}\n
    \n
    \n {\n colors.map(({ label, hex: background }) => (\n onSelectColor(background)}\n style={{ background }}\n aria-label={t(label)}\n role=\"menuitem\"\n >\n {(color && color === background) && }\n \n ))\n }\n
    \n
    \n );\n};\n\nconst TagItem = ({\n value,\n choosen,\n onClickTag,\n color,\n onSelectColor,\n onEdit,\n onDelete,\n active,\n error,\n containerRef,\n tabIndex,\n setError,\n id,\n setIsInnerMenuOpened,\n isCollaborator\n}) => {\n const subMenuRef = useRef();\n const colorMenuRef = useRef();\n const tagButtonRef = useRef();\n const colorButtonRef = useRef();\n const textRef = useRef();\n const [isEditing, setIsEditing] = useState(false);\n\n const handleClickDelete = () => {\n subMenuRef.current.hide();\n onDelete();\n };\n\n const handleClickEdit = () => {\n setIsEditing(true);\n subMenuRef.current.hide();\n };\n\n const handleEdit = () => {\n if (!textRef.current?.value && setError) {\n setError({ [id]: t('Please enter at least 1 letter') });\n return;\n }\n setIsEditing(false);\n const newValue = textRef.current?.value.trim();\n\n if (newValue !== value) {\n onEdit(newValue);\n }\n };\n\n const handleSelectColor = newColor => {\n if (newColor !== color) {\n onSelectColor(newColor);\n }\n };\n\n const handleClickTag = () => {\n if (!isEditing) {\n onClickTag();\n }\n };\n\n const revertValue = () => {\n textRef.current.value = value;\n setIsEditing(false);\n };\n\n useEffect(() => {\n if (!textRef.current && !isEditing) return;\n textRef.current.focus();\n textRef.current.setSelectionRange(0, value.length);\n }, [isEditing]);\n\n useEffect(() => {\n if (!textRef.current) return;\n textRef.current.value = value;\n }, [value]);\n\n useEffect(() => {\n if (!textRef.current) return;\n if (error) {\n textRef.current.value = value;\n textRef.current.focus();\n return;\n }\n if (!isEditing) setIsEditing(true);\n }, [error]);\n\n const selectedColor = useMemo(() => (colors.find(item => item.hex === color)?.label || ''), [colors]);\n\n return (\n
  • \n
    \n \n {isEditing ? (\n {\n if (e.key === 'Enter' && !value.length <= 0) {\n handleEdit();\n }\n }}\n onChange={() => value.length > 0 && error && setError(null)}\n defaultValue={value}\n aria-label={error && error}\n />\n ) : (\n <>\n \n {value}\n \n \n )}\n \n
    \n {!isCollaborator && (\n <>\n \n \n \n )}\n >\n \n \n }\n ref={tagButtonRef}\n aria-label={`${t('More button for')} ${value} tag`}\n aria-haspopup=\"true\"\n />\n )}\n containerProps={{\n role: 'menu',\n className: classNames('jfTagMenu dark jfMenu forMoreMenu isVisible')\n }}\n >\n <>\n }\n tabIndex={0}\n onClick={handleClickEdit}\n aria-label={`${t('Edit')} ${value} tag`}\n >\n {t('Edit')}\n \n }\n onClick={handleClickDelete}\n tabIndex={0}\n aria-label={`${t('Delete')} ${value} tag`}\n >\n {t('Delete')}\n \n \n \n \n )}\n \n {\n isEditing && !error && (\n \n Press Enter to save\n \n )\n }\n {\n error && (\n \n {error}\n \n )\n }\n
  • \n );\n};\n\n// eslint-disable-next-line complexity\nconst Tags = forwardRef(({\n isTagMenuVisible,\n tagQuestion,\n submission,\n onAssignTag,\n onUpdateTag,\n setVisibility,\n onSaveDummyQuestions,\n activeTab,\n tagsArray\n}, ref) => {\n const tagAnswer = useMemo(() => {\n const rawAnswer = submission?.answers[tagQuestion?.qid]?.answer || [];\n return Array.isArray(rawAnswer) ? rawAnswer : Object.values(rawAnswer);\n }, [submission, tagQuestion]);\n\n const lastRef = useRef();\n const innerMenuRef = useRef();\n const [suggestIndex, setSuggestIndex] = useState(0);\n const [selectionStyle, setSelectionStyle] = useState(false);\n const [onBlured, setBlured] = useState(false);\n const [error, setError] = useState(null);\n const [suggestOpen, setSuggestOpen] = useState(true);\n const [searchValue, setSearchValue] = useState('');\n const [selectedColor, setSelectedColor] = useState();\n const [lineError, setLineError] = useState(null);\n const role = useRole();\n const fuseStore = useMemo(() => new Fuse(tagsArray, { threshold: 0, keys: ['value'] }), [tagsArray]);\n const isCollaborator = role === 'supporter';\n\n const filterTags = useMemo(() => (\n searchValue\n ? fuseStore.search(searchValue).map(({ item }) => item)\n : tagsArray\n ), [searchValue, fuseStore, tagsArray]);\n\n const nextAvailableColor = useMemo(() => {\n const availableColor = colors.find(c => {\n return tagsArray.every(tag => {\n return tag.color !== c.hex;\n });\n });\n return availableColor?.hex || colors[Math.floor(Math.random() * (colors.length - 0 + 1))].hex;\n }, [colors, tagsArray]);\n\n useEffect(() => {\n setSelectedColor(null);\n }, [tagAnswer, tagsArray]);\n\n const lastValue = useMemo(() => {\n if (\n !filterTags[suggestIndex]\n || searchValue.length === 0\n || !suggestOpen\n || onBlured\n ) {\n return '';\n }\n return filterTags[suggestIndex].value.toLowerCase().slice(searchValue.length);\n }, [filterTags, suggestOpen, onBlured, suggestIndex]);\n\n const finalValue = useMemo(() => {\n const final = searchValue ? searchValue.concat('', lastValue) : '';\n if (final.length < 96) {\n return final;\n }\n return final.substr(0, 96);\n }, [searchValue, lastValue]);\n\n useEffect(() => {\n setError(null);\n if (!searchValue) {\n setSuggestOpen(true);\n }\n if (filterTags.length > 0 && filterTags[0].value?.toLowerCase() === searchValue?.toLowerCase()) setSuggestOpen(true);\n if (filterTags.length === 0) setSuggestOpen(false);\n }, [searchValue, filterTags]);\n\n useEffect(() => {\n if (lastValue.length === 0) return;\n lastRef.current.setSelectionRange(searchValue.length, searchValue.length + lastValue.length);\n lastRef.current.autostyle = true;\n setSelectionStyle(true);\n }, [lastValue]);\n\n useEffect(() => {\n if (finalValue.length === 0) {\n lastRef.current.focus();\n }\n }, [finalValue]);\n\n useEffect(() => {\n const handleEscape = e => {\n if (innerMenuRef.current) {\n if (ref.current) ref.current.focus();\n return;\n }\n if (e.key === 'Escape') {\n if (ref.current) ref.current.focus();\n setVisibility(false);\n }\n };\n if (isTagMenuVisible && lastRef.current) {\n document.addEventListener('keyup', handleEscape);\n setSearchValue('');\n lastRef.current.focus();\n\n if (tagQuestion?.qid === 'tags') {\n onSaveDummyQuestions();\n }\n return;\n }\n document.removeEventListener('keyup', handleEscape);\n }, [isTagMenuVisible]);\n\n const handleClickTag = key => withWatchMan('Tag-added', capitalizeFirstLetter(activeTab), () => {\n const tagKey = `{${key}}`;\n const existingTag = tagAnswer.includes(tagKey);\n onAssignTag(existingTag ? tagAnswer.filter(val => val !== tagKey) : [tagKey, ...tagAnswer]);\n });\n\n const inputCursorPosition = () => {\n const start = lastRef.current.selectionStart;\n const end = lastRef.current.selectionEnd;\n const diff = end - start;\n if (start >= 0 && start === end) {\n lastRef.current.pos = start;\n lastRef.current.selection = false;\n setSuggestIndex(0);\n setSearchValue(searchValue + lastValue);\n return;\n }\n lastRef.current.selection = {\n start: start,\n end: end,\n selected: diff\n };\n };\n\n const handleSelectionStyle = () => {\n if (lastRef.current.autostyle) {\n lastRef.current.autostyle = false;\n return;\n }\n setSelectionStyle(false);\n };\n\n const handleCreate = withWatchMan('Tag-NewCreated', capitalizeFirstLetter(activeTab), () => {\n const tags = tagQuestion?.options_array;\n if (searchValue.length === 0) {\n lastRef.current.focus();\n setError(t('Please enter at least 1 letter'));\n return;\n }\n\n const tag = tagsArray.find(item => item.value === searchValue);\n\n const tagKey = tag ? tag.key : getNextAvailableTagKey(tags);\n\n const uniqKeyID = `{${tagKey}}`;\n\n const existingTag = tagAnswer.includes(uniqKeyID);\n\n if (existingTag) {\n return;\n }\n\n setSuggestOpen(false);\n\n const newTag = {\n [tagKey]: {\n key: tagKey,\n value: searchValue,\n isDeleted: false,\n color: selectedColor || nextAvailableColor\n }\n };\n\n const newTags = tag ? { ...tags, [tag.key]: { ...tag, isDeleted: false } } : { ...tags, ...newTag };\n\n onUpdateTag({ options_array: newTags });\n onAssignTag([...tagAnswer, uniqKeyID]);\n setSearchValue('');\n });\n\n const handleTagFilterChange = e => {\n setSuggestIndex(0);\n if (e.target.value.length > searchValue.length && filterTags.length > 0) setSuggestOpen(true);\n setSearchValue(e.target.value);\n };\n\n const handleSelectColor = tag => withWatchMan('Tag-SettingsColorChanged', capitalizeFirstLetter(activeTab), color => {\n const { options_array: optionsArray } = tagQuestion;\n\n onUpdateTag({\n options_array: { ...optionsArray, [tag.key]: { ...tag, color } }\n });\n });\n\n const handleEditValue = tag => withWatchMan('Tag-SettingsTextUpdated', capitalizeFirstLetter(activeTab), value => {\n const optionExists = tagsArray.find(option => option.value === value);\n\n if (optionExists) {\n setTimeout(() => setLineError(null), 2000);\n return setLineError({ [tag.key]: t('That tag is already exist. Try another.') });\n }\n\n const { options_array: optionsArray } = tagQuestion;\n\n onUpdateTag({\n options_array: { ...optionsArray, [tag.key]: { ...tag, value } }\n });\n });\n\n const handleKeyDown = e => {\n const KeyID = e.keyCode;\n switch (KeyID) {\n case 8:\n if (lastRef.current.selection) {\n e.preventDefault();\n e.stopPropagation();\n setSuggestOpen(false);\n setSearchValue(lastRef.current.value.substring(0, lastRef.current.selection.start) + lastRef.current.value.substring(lastRef.current.selection.end));\n lastRef.current.setSelectionRange(lastRef.current.selection.start, lastRef.current.selection.start);\n }\n return;\n case 13:\n case 10:\n if (filterTags.length > 0\n && suggestOpen\n && searchValue.length > 0) {\n handleClickTag(filterTags[suggestIndex].key)();\n } else {\n if (isCollaborator) return;\n handleCreate();\n }\n return;\n case 40:\n e.preventDefault();\n e.stopPropagation();\n setSuggestIndex(suggestIndex >= filterTags.length - 1 ? 0 : suggestIndex + 1);\n return false;\n case 38:\n e.preventDefault();\n e.stopPropagation();\n setSuggestIndex(suggestIndex <= 0 ? filterTags.length - 1 : suggestIndex - 1);\n return false;\n default:\n break;\n }\n };\n\n const [isWarningVisible, setWarningVisibility] = useState();\n const onDeleteSubmit = withWatchMan('Tag-SettingsDeleted', capitalizeFirstLetter(activeTab), () => {\n const { options_array: optionsArray } = tagQuestion;\n const tagKey = isWarningVisible;\n const tag = optionsArray[tagKey];\n\n onUpdateTag({\n options_array: { ...optionsArray, [tagKey]: { ...tag, isDeleted: true } }\n });\n\n setWarningVisibility();\n });\n const containerDom = global.document.getElementById('modal-container');\n\n const handleInnerMenuOpened = isOpened => {\n innerMenuRef.current = isOpened;\n };\n\n return (\n <>\n \n
    \n
    \n \n {t('Tags')}\n \n setVisibility(false)}\n className='jfTagMenu-header-iconClose'\n >\n \n \n
    \n
    \n
    \n setBlured(false)}\n onBlur={() => setBlured(true)}\n onKeyUp={handleSelectionStyle}\n onMouseUp={handleSelectionStyle}\n onSelectCapture={inputCursorPosition}\n className={`jfTagMenu-body-inputInput shake ${error ? 'error' : ''} ${selectionStyle ? 'auto-select' : ''}`}\n ref={lastRef}\n value={finalValue}\n onChange={handleTagFilterChange}\n placeholder={t(`${isCollaborator ? '' : 'Create or '}Search a Tag`)}\n tabIndex={isTagMenuVisible ? 0 : -1}\n aria-hidden={!isTagMenuVisible}\n />\n
    \n {\n error &&
    {error}
    \n }\n {\n (searchValue.length > 0) && (\n
    \n {\n t(suggestOpen || isCollaborator ? ((filterTags.length > 1 && 'Press \"Up\" or \"Down\" keys to switch') || 'Press \"Enter\" to select tag') : 'Press \"Enter\" to create new tag')\n }\n
    \n )\n }\n
    \n
    \n
    \n
    \n {(suggestOpen || isCollaborator) ? (\n
      \n {\n filterTags.map((item, index) => {\n return (\n {\n setWarningVisibility(item.key);\n }}\n isCollaborator={isCollaborator}\n />\n );\n })\n }\n
    \n )\n : (\n
    \n \n
    \n )}\n
    \n
    \n
    \n {!isCollaborator && (!suggestOpen || searchValue.length === 0) && (\n
    \n \n {t('Create a new tag')}\n {finalValue && (\n \n {`${\"'\"}${finalValue}${\"'\"}`}\n \n )}\n \n
    \n )}\n
    \n \n {isWarningVisible && (\n \n
    \n \n
    \n
    \n {t('Delete Tag')}\n
    \n

    \n {t('Are you sure you want to permanently delete the selected tag?')}\n

    \n

    \n {t('Current tag will be deleted from the tag list but not from the assigned submissions.')}\n {t('This action cannot be')}\n {t(' undone!')}\n

    \n \n )}\n className=\"dialog warning forDelete withIcon\"\n onClose={() => setWarningVisibility(false)}\n onSave={onDeleteSubmit}\n modalContainer={containerDom}\n saveText={t('DELETE')}\n cancelText={t('CANCEL')}\n showClose={true}\n />\n )}\n\n \n );\n});\n\nexport default Tags;\n\nTags.propTypes = {\n isTagMenuVisible: bool,\n activeTab: string\n};\n\nTags.defaultProps = {\n isTagMenuVisible: false,\n activeTab: 'inbox'\n};\n","/* eslint-disable complexity */\nimport React, {\n memo, useMemo, useRef\n} from 'react';\nimport {\n string, bool, shape\n} from 'prop-types';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport { useRole, usePermissions } from '@jotforminc/permissions';\nimport { t as translate } from '@jotforminc/translation';\nimport Tethered from 'react-tether';\nimport Tags from '../Tags';\nimport SVG from '../SVG';\nimport { useClickOutsideState } from '../../hooks';\nimport { classNames, nodeContainsClassname } from '../../utils';\n\nimport { translatedProps } from '../../constants/proptypes';\n\nconst SubmissionHeader = memo(({\n title,\n subtitle,\n className,\n t,\n isDraft,\n activeTab,\n isAllSentBox,\n subtitleVisible,\n isAllSentbox,\n answerTag,\n myPreviousOrder,\n isForSubmissionPanel,\n submission,\n tagQuestion,\n onAssignTag,\n onUpdateTag,\n onSaveDummyQuestions,\n tags,\n isTeamContextAllowed\n}) => {\n const showDraftTitle = isDraft && activeTab === 'sentbox';\n const role = useRole();\n const tagMenuButtonRef = useRef();\n const tagMenuRef = useRef();\n const moreButtonRef = useRef();\n const addTagRef = useRef();\n const permissions = usePermissions();\n const hasTetherClass = target => nodeContainsClassname(target, 'tether-element');\n const hasTwoButtonPopupModalClass = target => nodeContainsClassname(target, 'jfModal');\n const [isOverflowMenuVisible, setOverflowMenuVisibility] = useClickOutsideState(false, [moreButtonRef]);\n // eslint-disable-next-line no-unused-vars\n const onOverflowMenuToggle = () => setOverflowMenuVisibility(!isOverflowMenuVisible);\n const [isTagMenuVisible, setTagMenuVisibility] = useClickOutsideState(false, [addTagRef, tagMenuRef, hasTetherClass, hasTwoButtonPopupModalClass]);\n const onTagMenuToggle = () => setTagMenuVisibility(!isOverflowMenuVisible);\n const isIncomplete = activeTab === 'incompleteSubmissions' || submission?.session_id;\n\n const tagsArray = useMemo(() => (\n Object.values(tagQuestion?.options_array || {})\n .filter(tag => tag && tag.value) // eliminate falsy records\n .filter(tag => !tag.isDeleted || tag.isDeleted === 'false')\n ), [tagQuestion]);\n\n return (\n \n {!(role === 'supporter' && tagsArray.length === 0)\n && !myPreviousOrder && !isAllSentBox && role !== 'readOnly'\n && role !== 'workflowApprover' && role !== 'portalUser'\n && permissions?.editTags && !isIncomplete\n && isTeamContextAllowed && (\n \n {tags && React.cloneElement(tags, {\n InnerButton: (\n \n\n }\n onClick={onTagMenuToggle}\n tabIndex=\"0\"\n >\n {t.ADD_A_TAG}\n \n {isTagMenuVisible && (\n \n )}\n \n )\n })}\n \n )}\n
    \n {!isForSubmissionPanel && (\n
    \n {React.isValidElement(title) || typeof title === 'string' ? title : ''}\n
    \n )}\n {subtitleVisible && !isAllSentbox && !isForSubmissionPanel && (\n
    \n
    \n { subtitle }\n
    \n
    \n )}\n {myPreviousOrder && (\n
    \n \n {`${myPreviousOrder.count} `}\n { Number(myPreviousOrder.count) > 1 ? t.ITEMS : t.ITEM}\n {', Total: '}\n {myPreviousOrder.total}\n \n
    \n )}\n {answerTag && isAllSentbox && (answerTag)}\n
    \n \n );\n});\n\nSubmissionHeader.propTypes = {\n className: string,\n isDraft: bool,\n subtitleVisible: bool,\n myPreviousOrder: shape({\n count: string,\n total: string\n }),\n ...translatedProps\n};\n\nSubmissionHeader.defaultProps = {\n className: '',\n isDraft: false,\n subtitleVisible: true,\n myPreviousOrder: null\n};\n\nexport default SubmissionHeader;\n","import { func, number } from 'prop-types';\nimport React, { useState } from 'react';\nimport { useInterval } from '../../hooks';\n\nconst UndoToast = ({ undoTimeout = 5000, onUndo = f => f, closeToast }) => {\n const [timeLeft, setTimeLeft] = useState(undoTimeout || 5000);\n useInterval(() => {\n setTimeLeft(timeLeft - 1000);\n }, timeLeft > 0 ? 1000 : null);\n const readableTimeLeft = Math.floor(timeLeft / 1000);\n return (\n <>\n
    \n
    Task completed.
    \n
    \n
    \n Undo in\n {' '}\n {readableTimeLeft > 0 ? readableTimeLeft : 0}\n {' '}\n seconds.\n
    \n
    \n {\n closeToast();\n onUndo();\n }}\n >\n UNDO\n \n \n );\n};\n\nUndoToast.propTypes = {\n undoTimeout: number.isRequired,\n onUndo: func.isRequired,\n closeToast: func.isRequired\n};\n\nexport default UndoToast;\n","import axios from 'axios';\n\nexport const getUploadFieldsSize = ({ formID, submissionID }) => axios.get(`/API/form/${formID}/files?filter={\"submission_id\":\"${submissionID}\"}`);\n","/* istanbul ignore file */\n\nimport React, { useEffect, useState } from 'react';\nimport {\n string,\n oneOfType,\n arrayOf,\n shape,\n bool\n} from 'prop-types';\n\nimport { formatBytes } from '@jotforminc/utils';\nimport FileUploadList from './FileList';\nimport { getUploadFieldsSize } from '../api';\nimport { prepareFiles } from '../utils';\n\nconst FileUpload = ({\n answer, text, isEmail, formID, submissionID, iconNames\n}) => {\n const files = prepareFiles(answer);\n const [fileSizes, setFileSizes] = useState();\n\n const setUploadFileSizes = async () => {\n if (!formID || !submissionID) return;\n const sizes = await getUploadFieldsSize({\n formID: formID,\n submissionID: submissionID\n });\n setFileSizes(sizes);\n };\n\n useEffect(() => {\n setUploadFileSizes();\n }, [formID, submissionID]);\n\n const getFileSize = fileName => {\n const el = fileSizes?.filter(fileSize => {\n return fileSize.name === fileName;\n });\n if (!el) return null;\n const { 0: sizeEl } = el;\n return formatBytes(sizeEl ? sizeEl.size : null);\n };\n return (\n
    \n
    \n
    {text}
    \n
    \n
    \n
    \n {files.map((file, index) => {\n return (\n \n );\n })}\n
    \n
    \n
    \n );\n};\n\nFileUpload.propTypes = {\n text: string,\n answer: oneOfType([arrayOf(string), shape({})]),\n isEmail: bool,\n formID: string,\n submissionID: string,\n iconNames: shape({}) // { [fileIndex]: iconName }\n};\n\nFileUpload.defaultProps = {\n text: '',\n answer: [''],\n isEmail: false,\n formID: '',\n submissionID: '',\n iconNames: {}\n};\n\nexport default FileUpload;\n","import React from 'react';\nimport { FileUploadField } from '@jotforminc/upload-fields';\nimport { submissionPropType } from '../../constants/proptypes';\n\nexport const SignFileUploadFields = ({ submission }) => {\n return (\n <>\n {submission.sealedFileWithoutAuditURL && (\n \n )}\n {submission.sealedFileURL && (\n \n )}\n \n );\n};\n\nSignFileUploadFields.propTypes = {\n submission: submissionPropType.isRequired\n};\n","/* eslint-disable max-statements */\n/* eslint-disable no-nested-ternary */\nimport React, {\n useEffect, useState, useMemo, useLayoutEffect\n} from 'react';\nimport { withRouter } from 'react-router-dom';\nimport {\n func, bool, string, number\n} from 'prop-types';\nimport { toast } from 'react-toastify';\nimport { useFeatures } from '@paralleldrive/react-feature-toggles';\nimport { connect } from 'react-redux';\nimport { useWorkflow } from '@jotforminc/workflow-components';\nimport { hasEncryptionKey, EncryptedSubmissionPage } from '@jotforminc/form-encryption';\nimport moment from 'moment-timezone';\nimport { Button } from '@jotforminc/magnet';\nimport { safeJSONParse } from '@jotforminc/utils';\nimport { usePermissions } from '@jotforminc/permissions';\nimport { CircleLoader } from '@jotforminc/apploaders';\n\nimport { History } from '@jotforminc/agent-components';\nimport Submission from '../../components/Submission';\nimport NoSubmission from '../../components/NoSubmission';\nimport NoResult from '../../components/NoResult';\nimport NoAnswer from '../../components/NoAnswer';\nimport SVG from '../../components/SVG';\nimport SubmissionHeaderTitle from '../../components/SubmissionHeaderTitle';\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\nimport { getAnswerTag, getPrimaryAndSecondaryAnswer } from '../../utils/Submissions';\nimport {\n classNames, isElementInViewport, extractColorStyle, getPriceWithCurrency, updateLocationParams\n} from '../../utils';\nimport { useMomentDate } from '../../hooks';\n\nimport {\n assignTag,\n updateTag,\n setFilterObject,\n setMessage,\n addDummyQuestions,\n setDecryptionModal,\n setSettings,\n setSubmissionViewLoading\n} from '../../actions';\n\nimport {\n userSelector,\n activeSubmissionSelector,\n questionsSelector,\n filterTextSelector,\n questionOrdersSelector,\n appLoadedSelector,\n activeTabIDSelector,\n hideNonInputFieldsSelector,\n hideEmptyFieldsSelector,\n liteModeSelector,\n paymentStringsSelector,\n filterObjectSelector,\n productsSelector,\n hideSubmissionHeaderSelector,\n submissionDateFormatSelector,\n submissionDateLanguageSelector,\n formIDSelector,\n headerFieldSelector,\n subheaderFieldSelector,\n filteredSubmissionsLoadingSelector,\n isSubmissionViewNotAllowedSelector,\n isAllSentBoxSelector,\n questionsLoadingSelector,\n formLoadingSelector,\n isPreviousOrdersSelector,\n isPwaSelector,\n isNewAppointmentSelector,\n tagQuestionSelector,\n formTitleSelector,\n reverseActiveSubmissionIndexSelector,\n isTeamContextAllowedSelector,\n previousOrdersTypeSelector,\n encryptionProtocolSelector,\n getDownloadDisabledSubmissions,\n submissionCountSelector,\n isFormOwnerSelector,\n getIsTeamMember,\n formSelector,\n getIsAIHistoryViewVisible,\n agentSubmissionHistorySelector,\n isEncryptedSelector,\n isFormOwnerNotAdminSelector\n} from '../../selectors';\n\nimport {\n questionsPropType,\n submissionPropType,\n questionOrdersPropType,\n userPropType,\n enhancedProps,\n paymentStringsPropType,\n productsPropType,\n YES_NO_PROPTYPE,\n headerFieldPropType\n} from '../../constants/proptypes';\n\nimport { withInboxEnhancer } from '../../hocs/InboxEnhancer';\nimport NoPermission from '../../components/NoPermission';\nimport UndoToast from '../../components/UndoToast';\nimport { SignFileUploadFields } from '../SubmissionSign/SignFileUploadFields';\nimport { updateInboxView } from '../../api';\nimport { MOBILE_MAX_WIDTH } from '../../constants';\n\nlet measurementSent = false;\n\nconst shouldRefresh = window.location.href.indexOf('wf=1') > -1;\n\n// eslint-disable-next-line complexity\nexport const SubmissionViewComponent = ({\n user,\n paymentStrings,\n products,\n hideSubmissionHeader,\n submission,\n questions,\n questionOrders,\n headerField,\n subheaderField,\n appLoaded,\n hideHeaderAndText,\n hideEmptyFields,\n submissionsLoading,\n showHeaderDate,\n getOptionColor,\n t,\n submissionDateLanguage,\n submissionDateFormat,\n isSubmissionViewNotAllowed,\n addClass,\n filterText,\n filterObject,\n removeClass,\n standalone,\n activeTab,\n onSetMessage,\n isAllSentBox,\n formLoading,\n questionsLoading,\n isPreviousOrders,\n isPwa,\n previousOrdersType,\n isNewAppointment,\n formID,\n tags,\n tagQuestion,\n onAssignTag,\n onUpdateTag,\n updateFilterObject,\n onSaveDummyQuestions,\n isAllSentbox,\n formTitle,\n submissionIndex,\n isTeamContextAllowed,\n encryptionProtocol,\n submissionCount,\n encryptedEntriesCount,\n setDecryptionModalVisibility,\n setSettingsPanel,\n isOwner,\n isTeamMember,\n isAIHistoryViewVisible,\n agentSubmissionHistory,\n form,\n setSubmissionViewAsLoaded = () => {},\n isEncrypted,\n isFormOwnerNotAdmin\n}) => {\n const hasSubmissionAnswers = submission.answers;\n const isFavorite = submission.flag === '1';\n const [isSubmissionNumberSent, setSubmissionNumberSentStatus] = useState(false);\n const [isSubmissionEmpty, setIsSubmissionEmpty] = useState(false);\n const features = useFeatures();\n const permissions = usePermissions();\n\n const isAllSentboxWaiting = isAllSentBox && (formLoading || questionsLoading);\n const isSubmissionViewLoading = (\n ((!appLoaded && !hasSubmissionAnswers) || isAllSentboxWaiting)\n || (appLoaded && !hasSubmissionAnswers && submission.id && !isSubmissionViewNotAllowed)\n );\n\n useEffect(() => {\n if (!isSubmissionNumberSent && appLoaded && hasSubmissionAnswers) {\n const answerDoms = [...global.document.querySelectorAll('.jfSubmission-answer')];\n const numberOfVisibleAnswers = answerDoms.reduce(((prev, curr) => (isElementInViewport(curr) ? prev + 1 : prev)), 0);\n WatchmanRecorder.recordEvent('numberOfVisibleFields', numberOfVisibleAnswers);\n\n if (global.window.gtag && !measurementSent) {\n measurementSent = true;\n global.window.gtag('event', 'timing_complete', {\n name: 'timeToDisplayFirstAnswer',\n value: Math.round(global.performance.now()),\n event_category: 'JotForm Inbox'\n });\n }\n setSubmissionNumberSentStatus(true);\n }\n\n const chatContainer = document.getElementById('chat-container');\n if (chatContainer) {\n chatContainer.scrollTo({ top: 0 });\n }\n }, [appLoaded, hasSubmissionAnswers]);\n\n useEffect(() => {\n if (!appLoaded && isSubmissionNumberSent) {\n setSubmissionNumberSentStatus(false);\n }\n }, [appLoaded]);\n\n if (!hasSubmissionAnswers) {\n addClass('jfInbox--noSubmissions');\n } else {\n removeClass('jfInbox--noSubmissions');\n }\n\n const {\n onTaskListRenew, undoFns, showToastState, undoTaskToastShow, completeFns, undoTimeout, taskLists\n } = useWorkflow();\n\n const taskIDList = taskLists?.reduce((res, { task, subtasks = {} }) => ([...res, task?.id, ...(Object.values(subtasks).map(subtask => subtask.id))]), [])?.filter(Boolean);\n\n useEffect(() => {\n if (shouldRefresh) {\n const interval = setInterval(() => {\n if (submission.id) {\n onTaskListRenew();\n }\n }, 5000);\n\n return () => clearInterval(interval);\n }\n }, [submission]);\n\n const CloseButton = (\n <>\n {\n const completeFnID = Object.keys(undoFns).find(id => taskIDList.includes(id));\n if (completeFnID) {\n completeFns[completeFnID]();\n }\n toast.dismiss('undoToast');\n }}\n >\n \n \n \n );\n\n const answerTag = isAllSentbox ? getAnswerTag({ answers: submission.answers }) : false;\n // TODO: Move also current styles under .jfSubmissionViewHeader from .jfSubmissionView\n\n // eslint-disable-next-line\n let [headerTitle, headerSubtitle] = getPrimaryAndSecondaryAnswer({\n submission,\n primary: { field: headerField },\n secondary: { field: subheaderField },\n submissionIndex,\n t,\n formatOptions: {\n locale: submissionDateLanguage\n }\n });\n const myPreviousOrders = useMemo(() => {\n if (!isPreviousOrders || !isPwa || !submission || !submission?.answers) return null;\n const obj = safeJSONParse(submission.answers[11].answer?.paymentArray);\n const myPreviousOrderSubtitle = {\n total: getPriceWithCurrency(obj.total || 0, obj.currency),\n count: obj.shortView?.products?.length || 0\n };\n return myPreviousOrderSubtitle;\n }, [isPreviousOrders, submission]);\n\n const serverTimezoneOffset = moment(submission.created_at).tz('America/New_York').format('Z');\n const isDraft = submission.status === 'ENABLED';\n const submissionDate = (() => {\n const [formattedDate] = useMomentDate(`${submission.created_at} ${serverTimezoneOffset}`, 'YYYY-MM-DD HH:mm ZZ');\n return formattedDate.format('MMM D, YYYY h:mm A');\n })();\n\n if (activeTab === 'sentbox') {\n if (submission?.form?.title && window.location.pathname.indexOf('/sentbox/all') > -1) {\n headerTitle = submission.form.title;\n } else if (isPwa && isPreviousOrders) {\n headerTitle = submissionDate;\n } else {\n headerTitle = formTitle;\n }\n }\n\n const onUndoTask = () => {\n const undoFnID = Object.keys(undoFns).find(id => taskIDList.includes(id));\n if (undoFnID) {\n undoFns[undoFnID]();\n }\n };\n\n useEffect(() => {\n if (showToastState && features.includes('useCanUndo')) {\n toast(({ closeToast }) => , {\n type: toast.TYPE.SUCCESS,\n position: toast.POSITION.TOP_RIGHT,\n className: 'success',\n autoClose: 5000,\n pauseOnHover: false,\n pauseOnFocusLoss: false,\n hideProgressBar: true,\n closeButton: CloseButton,\n closeOnClick: false,\n toastId: 'undoToast'\n });\n undoTaskToastShow(false);\n }\n }, [showToastState]);\n\n useLayoutEffect(() => {\n if (!isSubmissionViewLoading) {\n setSubmissionViewAsLoaded();\n }\n }, [isSubmissionViewLoading]);\n\n const haveHeader = hideSubmissionHeader !== 'Yes' && (headerField || subheaderField || showHeaderDate);\n const showEncryptedView = submission?.encryptionProtocol === 'JF-CSE-V2' && !hasEncryptionKey(encryptionProtocol, formID);\n\n // inboxTab, featureFlag false, toggle On, -> conversation\n // inboxTab, featureFlag false, toggle Off -> submission\n // convTab, featureFlag false, toggle On, -> submission\n // convTab, featureFlag false, toggle Off -> conversation\n\n // inboxTab, featureFlag true, toggle On, -> submission, conversation\n // inboxTab, featureFlag true, toggle Off -> submission\n // convTab, featureFlag true, toggle On, -> conversation, submission\n // convTab, featureFlag true, toggle Off -> conversation\n\n const isSubmissionViewVisibleInInboxTab = activeTab === 'inbox';\n\n const isSubmissionViewVisibleInConversationTab = activeTab === 'conversations' && isAIHistoryViewVisible;\n\n const isSubmissionViewVisible = isSubmissionViewVisibleInConversationTab || isSubmissionViewVisibleInInboxTab || !submission?.aiAgentChatID || !['conversations', 'inbox'].includes(activeTab);\n\n const isHistoryViewVisibleInInbox = activeTab === 'inbox' && isAIHistoryViewVisible;\n\n const isHistoryViewVisibleInConversations = activeTab === 'conversations';\n\n const isHistoryViewVisible = (isHistoryViewVisibleInInbox || isHistoryViewVisibleInConversations) && submission?.aiAgentChatID;\n\n const isMobile = window.innerWidth <= MOBILE_MAX_WIDTH;\n\n // eslint-disable-next-line no-unused-vars\n const feedbackEventHandler = (target, details = {}) => {\n WatchmanRecorder.recordEvent(target, 'inbox-ai-transcript');\n };\n\n return (\n \n {isSubmissionViewLoading && }\n {appLoaded && !hasSubmissionAnswers && !submission.id && !isSubmissionViewNotAllowed && !submissionsLoading && !filterText && Object.keys(filterObject)?.length <= 0 && (\n \n )}\n {appLoaded && !hasSubmissionAnswers && !submission.id && !isSubmissionViewNotAllowed && (filterText || Object.keys(filterObject)?.length > 0) && (\n 0}\n activeTab={activeTab}\n filterObject={filterObject}\n t={t}\n clearFilter={() => {\n updateFilterObject({});\n }}\n />\n )}\n {appLoaded && !hasSubmissionAnswers && !submission.id && isSubmissionViewNotAllowed && }\n {(hasSubmissionAnswers && !isAllSentboxWaiting) && (\n <>\n {isSubmissionViewVisible && (\n
    \n {showEncryptedView\n ? (\n \n ) : (\n <>\n onSaveDummyQuestions(formID, questions)}\n tags={tags}\n submission={submission}\n isTeamContextAllowed={isTeamContextAllowed}\n />\n setIsSubmissionEmpty(isEmpty)}\n fallbackContent={(\n {\n setSettingsPanel({\n isOpened: true, activeTab: 'fields'\n });\n }}\n >\n {t.GOTO_FIELD_SETTINGS}\n \n )\n }\n />\n )}\n locale={submissionDateLanguage}\n standalone={standalone}\n dateFormat={submissionDateFormat}\n activeTab={activeTab}\n permissions={permissions}\n isAppPayment={isPreviousOrders && isPwa}\n previousOrdersType={previousOrdersType}\n isNewAppointment={isNewAppointment}\n formID={formID}\n onSetMessage={onSetMessage}\n isEncrypted={isEncrypted}\n />\n \n )}\n {(submission.isSignSubmission && (isOwner || isTeamMember)) && }\n
    \n )}\n {isHistoryViewVisible && (\n // eslint-disable-next-line max-len\n
    \n \n
    \n )}\n \n )}\n \n );\n};\n\nSubmissionViewComponent.propTypes = {\n user: userPropType.isRequired,\n submission: submissionPropType.isRequired,\n questions: questionsPropType.isRequired,\n questionOrders: questionOrdersPropType.isRequired,\n headerField: headerFieldPropType,\n subheaderField: headerFieldPropType,\n paymentStrings: paymentStringsPropType.isRequired,\n products: productsPropType.isRequired,\n hideSubmissionHeader: YES_NO_PROPTYPE.isRequired,\n submissionDateLanguage: string.isRequired,\n appLoaded: bool.isRequired,\n hideHeaderAndText: bool,\n hideEmptyFields: bool,\n showHeaderDate: bool,\n getOptionColor: func,\n activeTab: string,\n isNewAppointment: bool,\n isSubmissionViewNotAllowed: bool,\n standalone: bool,\n isTeamContextAllowed: bool.isRequired,\n encryptionProtocol: string.isRequired,\n encryptedEntriesCount: number,\n submissionCount: number,\n setDecryptionModalVisibility: func.isRequired,\n isFormOwnerNotAdmin: bool.isRequired,\n ...enhancedProps\n};\n\nSubmissionViewComponent.defaultProps = {\n getOptionColor: extractColorStyle,\n hideHeaderAndText: true,\n hideEmptyFields: false,\n showHeaderDate: true,\n isSubmissionViewNotAllowed: false,\n headerField: undefined,\n subheaderField: undefined,\n standalone: false,\n activeTab: 'inbox',\n isNewAppointment: false,\n encryptedEntriesCount: 0,\n submissionCount: 0\n};\n\nconst mapStateToProps = stateProps => {\n const liteMode = liteModeSelector(stateProps);\n const questionOrders = questionOrdersSelector(stateProps);\n const questions = questionsSelector(stateProps);\n const hideSubmissionHeader = hideSubmissionHeaderSelector(stateProps);\n\n return {\n liteMode,\n user: userSelector(stateProps),\n form: formSelector(stateProps),\n paymentStrings: paymentStringsSelector(stateProps),\n products: productsSelector(stateProps),\n hideSubmissionHeader,\n submission: activeSubmissionSelector(stateProps),\n questions,\n filterObject: filterObjectSelector(stateProps),\n filterText: filterTextSelector(stateProps),\n activeTab: activeTabIDSelector(stateProps),\n headerField: headerFieldSelector(stateProps),\n subheaderField: subheaderFieldSelector(stateProps),\n submissionsLoading: filteredSubmissionsLoadingSelector(stateProps),\n appLoaded: appLoadedSelector(stateProps),\n hideHeaderAndText: hideNonInputFieldsSelector(stateProps),\n hideEmptyFields: hideEmptyFieldsSelector(stateProps),\n questionOrders: questionOrders,\n showHeaderDate: liteMode ? true : questionOrders.indexOf('created_at') > -1,\n submissionDateFormat: submissionDateFormatSelector(stateProps),\n submissionDateLanguage: submissionDateLanguageSelector(stateProps),\n isSubmissionViewNotAllowed: isSubmissionViewNotAllowedSelector(stateProps),\n isAllSentBox: isAllSentBoxSelector(stateProps),\n questionsLoading: questionsLoadingSelector(stateProps),\n formLoading: formLoadingSelector(stateProps),\n standalone: true,\n isPreviousOrders: isPreviousOrdersSelector(stateProps),\n isPwa: isPwaSelector(stateProps),\n previousOrdersType: previousOrdersTypeSelector(stateProps),\n isNewAppointment: isNewAppointmentSelector(stateProps),\n formID: formIDSelector(stateProps),\n tagQuestion: tagQuestionSelector(stateProps),\n formTitle: formTitleSelector(stateProps),\n isAllSentbox: isAllSentBoxSelector(stateProps),\n submissionIndex: reverseActiveSubmissionIndexSelector(stateProps),\n isTeamContextAllowed: isTeamContextAllowedSelector(stateProps),\n encryptionProtocol: encryptionProtocolSelector(stateProps),\n encryptedEntriesCount: getDownloadDisabledSubmissions(stateProps).length,\n submissionCount: submissionCountSelector(stateProps),\n isOwner: isFormOwnerSelector(stateProps),\n isTeamMember: getIsTeamMember(stateProps),\n isAIHistoryViewVisible: getIsAIHistoryViewVisible(stateProps),\n agentSubmissionHistory: agentSubmissionHistorySelector(stateProps),\n isEncrypted: isEncryptedSelector(stateProps),\n isFormOwnerNotAdmin: isFormOwnerNotAdminSelector(stateProps)\n };\n};\n\nconst mapDispatchToProps = {\n onAssignTag: assignTag,\n onUpdateTag: updateTag,\n setFilterObj: setFilterObject,\n onSetMessage: setMessage,\n onSaveDummyQuestions: (formID, questions) => addDummyQuestions(formID, questions),\n setDecryptionModalVisibility: setDecryptionModal,\n setSettingsPanel: setSettings,\n setSubmissionViewAsLoaded: () => setSubmissionViewLoading(false)\n};\n\nconst mergeProps = (stateProps, dispatchProps, componentProps) => ({\n ...componentProps,\n ...stateProps,\n ...dispatchProps,\n updateFilterObject: filterObject => {\n const { activeTab, formID } = stateProps;\n\n if ((/[0-9]/).test(activeTab)) {\n updateInboxView(formID, activeTab, { filterObject });\n }\n\n if (Object.keys(filterObject).length > 0) {\n return componentProps.history.push(updateLocationParams({ filterObject }));\n }\n\n componentProps.history.replace(/\\?.*/, '');\n }\n});\n\nconst enhance = withInboxEnhancer('submissionViewNew', connect(mapStateToProps, mapDispatchToProps, mergeProps));\n\nexport default withRouter(enhance(SubmissionViewComponent));\n","/* eslint-disable no-nested-ternary */\nimport React from 'react';\nimport { t } from '@jotforminc/translation';\nimport styled, { keyframes, css } from 'styled-components';\nimport { rgba } from 'polished';\nimport {\n shape, string, func\n} from 'prop-types';\nimport { IconBellDiagonalFilled, IconPuzzlePieceFilled } from '@jotforminc/svg-icons';\nimport ThreadAvatar from './ThreadAvatar';\nimport { useWorkflow } from '../contexts';\nimport ContactWithApproval from './ContactWithApproval';\n\n// eslint-disable-next-line max-len\nconst takeoverIcon = \"data:image/svg+xml,%3Csvg width='16' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M2 0C.8955 0 0 .8945 0 2v10l.0117.2227.0313.1953C.2344 13.3242 1.038 14 2 14h7.2617l-1.8135-2.1289c-.2177-.2539-.3554-.5586-.415-.8711H2c-.5527 0-1-.4492-1-1V2a1 1 0 01.3389-.75 1.0113 1.0113 0 01.4795-.2344A.9252.9252 0 012 1h10c.1709 0 .332.043.4727.121.1552.0821.2851.2071.3779.3556A.9892.9892 0 0113 2v6.4766l.9443-.9493c.0186-.0195.0371-.039.0557-.0546V2c0-1.1055-.8955-2-2-2H2z' fill='%23fff'/%3E%3Cpath d='M2.6435 3.1484A.5075.5075 0 013 3h8c.2764 0 .5.2227.5.5a.499.499 0 01-.5.5H3a.499.499 0 01-.5-.5l.0127-.1133a.5213.5213 0 01.1308-.2383zM3 6a.499.499 0 00-.5.5c0 .2773.2236.5.5.5h6a.499.499 0 00.5-.5A.499.499 0 009 6H3zM14.653 8.2316c.3225-.3236.8287-.306 1.1308.0395.3021.3455.2856.888-.0368 1.2116l-4.2696 4.2857c-.3254.3266-.8371.3052-1.1377-.0476l-2.1305-2.5c-.2979-.3496-.2749-.8917.0514-1.2109.3263-.3192.8323-.2946 1.1302.055l1.584 1.8588 3.6782-3.692z' fill='%23fff'/%3E%3C/svg%3E\";\n\nconst ring = keyframes`\n 0% { transform: rotateZ(0); }\n 1% { transform: rotateZ(15deg); }\n 3% { transform: rotateZ(-14deg); }\n 5% { transform: rotateZ(17deg); }\n 7% { transform: rotateZ(-16deg); }\n 9% { transform: rotateZ(15deg); }\n 11% { transform: rotateZ(-14deg); }\n 13% { transform: rotateZ(13deg); }\n 15% { transform: rotateZ(-12deg); }\n 17% { transform: rotateZ(11deg); }\n 19% { transform: rotateZ(-10deg); }\n 21% { transform: rotateZ(9deg); }\n 23% { transform: rotateZ(-8deg); }\n 25% { transform: rotateZ(7deg); }\n 27% { transform: rotateZ(-6deg); }\n 29% { transform: rotateZ(5deg); }\n 31% { transform: rotateZ(-4deg); }\n 33% { transform: rotateZ(3deg); }\n 35% { transform: rotateZ(-2deg); }\n 37% { transform: rotateZ(1deg); }\n 39% { transform: rotateZ(-0.5deg); }\n 41% { transform: rotateZ(0.5deg); }\n\n 43% { transform: rotateZ(0); }\n 100% { transform: rotateZ(0); }\n`;\n\nconst textStyle = css`\nfont-size: 12px;\nfont-family: \"Circular\", sans-serif;\nfont-weight: 400;\n`;\n\nconst Text = styled.span`\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: inline-flex;\n align-items: center;\n\n flex-shrink: ${({ shrink }) => `${+(!!shrink)}`};\n\n ${textStyle}\n`;\n\n/* eslint-disable max-len */\n/* eslint-enable max-len */\n\nconst Avatar = styled(ThreadAvatar)``;\n\nconst Wrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n\n cursor: pointer;\n position: relative;\n\n border-radius: 4px;\n overflow: hidden;\n\n padding: 4px 8px;\n max-width: 360px;\n\n * + ${Text} {\n margin-left: 0.25rem;\n }\n\n ${Avatar} + ${Avatar} {\n margin-left: -5px;\n }\n`;\n\nconst WrapperApprover = styled(Wrapper)`\n background-color: #4599FF;\n border-color: #4599FF;\n color: #ffffff;\n flex-shrink: 0;\n svg {\n width: 18px;\n height: 18px;\n animation: ${ring} 4s 1s ease-in-out 2;\n transform-origin: 7px 3px;\n }\n\n &:hover {\n background-color: ${rgba('#4599FF', 0.80)}; /* stylelint-disable-line */\n }\n`;\n\nconst WrapperError = styled(Wrapper)`\n background-color: #D53049;\n border-color: #D53049;\n\n ${Text} {\n color: #ffffff;\n\n &::before {\n content: \"!\";\n background: #ffffff;\n color: #D53049;\n border-radius: 9px;\n height: 18px;\n width: 18px;\n font-size: 14px;\n font-weight: 700;\n text-align: center;\n display: flex;\n align-content: center;\n justify-content: center;\n margin-right: 0.25rem;\n }\n }\n\n &:hover {\n background-color: ${rgba('#D53049', 0.80)}; /* stylelint-disable-line */\n }\n`;\nconst WrapperOwner = styled(Wrapper)`\n /*\n &:hover {\n background-color: ${rgba('#DBE0EF', 0.20)}; /!* stylelint-disable-line *!/\n\n &:after {\n position: absolute;\n background-color: ${rgba('#01BD6F', 0.90)}; /!* stylelint-disable-line *!/\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n content: url(\"${takeoverIcon}\") \" ${({ textHover }) => textHover}\";\n color: #ffffff;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n ${textStyle}\n }\n }\n */\n\n ${Text} {\n color: #141E46;\n font-size: 16px;\n }\n`;\n\nconst WorkflowButton = ({\n className,\n submission,\n onClick\n}) => {\n const {\n taskLists,\n activeTaskList,\n isFormOwner,\n isCollaborator\n } = useWorkflow();\n\n const hasTask = !!taskLists?.length;\n const hasError = submission?.workflowStatus === 'ERRORED';\n const isWorkflowReleased = window?.isWorkflowReleased;\n if (!hasTask && !hasError) return null;\n const [lastActiveTask] = taskLists?.filter(({ isActive, isCurrentUserApprover }) => isActive && isCurrentUserApprover).slice(-1);\n const isApprover = Boolean(lastActiveTask);\n\n const renderError = () => (\n \n {isWorkflowReleased ? 'Error in Workflow' : 'Error in Approval Flow'}\n \n );\n\n const renderApprover = () => (\n \n \n {t('Action Required')}\n \n );\n\n const renderOwner = () => {\n const approvers = activeTaskList?.reduce((res, curr) => {\n const { subtasks, taskName, task } = curr;\n if (Object.keys(subtasks).length) {\n return [...res, ...(Object.values(subtasks).map(subtask => ({\n ...subtask, assigneeEmail: subtask.email, taskName, task: { element: task.element }\n })))];\n }\n res.push(curr);\n return res;\n }, []);\n\n const maximumApproversShow = 4;\n const otherApproversCount = approvers?.length - maximumApproversShow;\n const approverList = approvers?.slice(0, maximumApproversShow);\n const otherApproversCountText = `+${otherApproversCount}`;\n const filterForAvatars = approver => {\n if (approver && approver?.task && approver?.task?.element && approver?.task?.element?.type) {\n return approver.task.element.type !== 'workflow_sign_document';\n }\n return approver;\n };\n const approverListForAvatars = approverList?.filter(approver => filterForAvatars(approver));\n const isAllTasksSignDocuments = approvers?.every(approver => approver?.taskName === 'Sign Document');\n const isAllTasksForm = approvers?.every(approver => approver?.taskName === 'Form');\n const isAllTasksApproval = approvers?.every(approver => approver?.taskName === 'Approval');\n const notShowAvatar = isAllTasksSignDocuments;\n\n const taskNameToTaskText = {\n Approval: 'approval',\n Form: 'submission',\n Task: ' ',\n 'Sign Document': 'signature'\n };\n\n const renderApproversText = () => {\n if (!approvers || (approvers && approvers?.length <= 0)) {\n return;\n }\n const currentApprover = approvers?.[0];\n const { taskName: currentApproverTask } = currentApprover;\n const currentApproverText = taskNameToTaskText?.[currentApproverTask] || 'approval';\n const headerText = currentApproverTask === 'Task' ? `${currentApprover?.name || currentApprover?.assigneeEmail}` : `${currentApprover?.name || currentApprover?.assigneeEmail}'s`;\n\n if (currentApprover && currentApprover?.task?.integrations && currentApprover?.task?.integrations?.length > 0) {\n return (\n \n integrations\n \n );\n }\n\n if (approvers?.length === 1) {\n return (\n <>\n {!isAllTasksSignDocuments && {headerText}}\n {`${currentApproverText}.`}\n \n );\n }\n\n if (approvers?.length > 1) {\n if (isAllTasksSignDocuments || isAllTasksForm || isAllTasksApproval) {\n return (\n \n {`${currentApproverText}s.` }\n \n );\n }\n // extra check for unknown situations\n return (\n actors.\n );\n }\n };\n\n return (\n \n {!notShowAvatar && (\n approverListForAvatars.map(approver => {\n if (approver?.task?.integrations && approver?.task?.integrations?.length > 0) {\n return (\n \n \n \n );\n }\n return (\n (\n \n \n \n )\n );\n })\n )}\n {otherApproversCount > 0 && ()}\n Waiting for\n { renderApproversText() }\n\n \n );\n };\n\n if (hasError && isFormOwner) return renderError();\n if (isApprover) return renderApprover();\n if (isFormOwner || isCollaborator) return renderOwner();\n return null;\n\n // return (\n // isApprover\n // ? renderApprover()\n // : isFormOwner\n // ? hasError\n // ? renderError()\n // : renderOwner()\n // : null\n //\n // );\n};\n\nWorkflowButton.propTypes = {\n submission: shape({}).isRequired,\n className: string,\n onClick: func\n};\n\nWorkflowButton.defaultProps = {\n className: '',\n onClick: f => f\n};\n\nexport default WorkflowButton;\n","import React from 'react';\nimport { string, bool } from 'prop-types';\nimport moment from 'moment-timezone';\n\nimport SVG from '../SVG';\n\nimport { useMomentDate } from '../../hooks';\n\nimport { submissionPropType } from '../../constants/proptypes';\nimport { DEFAULT_DATE_FORMAT } from '../../constants';\n\nconst SubmissionDate = ({ submission, dateFormat, showIcon }) => {\n const serverTimezoneOffset = moment(submission.created_at).tz('America/New_York').format('Z');\n const [date] = useMomentDate(`${submission.created_at} ${serverTimezoneOffset}`, 'YYYY-MM-DD HH:mm ZZ');\n\n return (\n
    \n {showIcon && (\n
    \n \n
    \n )}\n
    \n
    \n {date.format(dateFormat)}\n
    \n
    \n
    \n );\n};\n\nSubmissionDate.propTypes = {\n submission: submissionPropType.isRequired,\n showIcon: bool,\n dateFormat: string\n};\n\nSubmissionDate.defaultProps = {\n showIcon: false,\n dateFormat: DEFAULT_DATE_FORMAT\n};\n\nexport default SubmissionDate;\n","import React from 'react';\nimport {\n bool,\n string\n} from 'prop-types';\nimport { IconEyeFilled } from '@jotforminc/svg-icons';\nimport classNames from 'classnames';\nimport '../../styles/_previewToggle.scss';\n\nconst PreviewToggle = ({\n checked = false,\n colorStyle = 'green',\n disabled = false,\n hideOnMobile = false,\n label = 'Preview',\n loading = false,\n previewToggleId = 'previewSwitch',\n ...rest\n}) => {\n return (\n <>\n \n \n \n \n {label}\n
    \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nPreviewToggle.propTypes = {\n checked: bool,\n colorStyle: string,\n disabled: bool,\n hideOnMobile: bool,\n label: string,\n loading: bool,\n previewToggleId: string\n};\n\nexport default PreviewToggle;\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport React, { useState, useRef } from 'react';\nimport { Popover } from '@jotforminc/uikit';\nimport { t } from '@jotforminc/translation';\nimport { string } from 'prop-types';\nimport { useDelayed } from '@jotforminc/hooks';\nimport IconLogoGrey from '../../assets/svg/logoGrey.svg';\n\nimport './brandingTooltip.scss';\n\nconst BrandingTooltip = ({ brandingDescription }) => {\n const [isTooltipVisible, setTooltipVisibility] = useState(false);\n const [, clearTooltip, setTooltip] = useDelayed(setTooltipVisibility, 200);\n const tooltipRef = useRef();\n const buttonRef = useRef();\n\n return (\n
    \n

    ----

    \n
    \n setTooltipVisibility(true)}\n onMouseLeave={() => setTooltip(false)}\n >\n \n
    \n {isTooltipVisible && (\n \n setTooltipVisibility(false)}\n className='jfTooltip inboxTooltip forBranding tooltip-inner arrowLeft'\n >\n {t('Remove Jotform Branding?')}\n

    \n \n {t('Upgrade your account')}\n \n {' '}\n {t('to remove it.')}\n

    \n
    \n \n )}\n

    {brandingDescription}

    \n \n \n );\n};\n\nBrandingTooltip.propTypes = {\n brandingDescription: string.isRequired\n};\n\nexport default BrandingTooltip;\n","import { RequestLayer, Interceptors } from '@jotforminc/request-layer';\n\nconst layer = new RequestLayer('/API', {\n interceptorConfig: {\n teamID: global.teamID || global.liteInboxTeamID,\n customResponseInterceptors: [Interceptors.requestManagerResponseNormalizer]\n }\n});\n\nexport default layer;\n","import qs from 'querystring';\nimport layer from './layer';\n\n/**\n * @typedef {{\n emailAddress: String,\n hostname: String,\n isValid: String,\n password: String,\n port: String,\n securityProtocol: String,\n username: String\n }} SMTPData\n */\n\nexport const sendEmailAPI = opts => layer.post('sendEmail', qs.stringify(opts));\n","import { t } from '@jotforminc/translation';\nimport { node, string } from 'prop-types';\nimport React from 'react';\nimport { useIsMobile } from '@jotforminc/hooks';\n\nconst CustomBadge = ({\n text,\n Icon,\n iconColor,\n backgrounColor,\n textColor\n}) => {\n const isMobile = useIsMobile(1040);\n\n return (\n
    \n {Icon && }\n {!isMobile && {t(text)}}\n
    \n );\n};\n\nexport default CustomBadge;\n\nCustomBadge.propTypes = {\n text: string,\n Icon: node,\n iconColor: string,\n backgrounColor: string,\n textColor: string\n};\n\nCustomBadge.defaultProps = {\n text: '',\n Icon: null,\n iconColor: '',\n backgrounColor: '',\n textColor: ''\n};\n","/* eslint-disable max-len */\nimport { string } from 'prop-types';\nimport React from 'react';\n\nexport const GoogleIcon = ({\n className\n}) => (\n \n \n \n \n \n \n \n \n \n \n);\n\nGoogleIcon.propTypes = {\n className: string\n};\n\nGoogleIcon.defaultProps = {\n className: ''\n};\n","import { string } from 'prop-types';\nimport React from 'react';\n\nexport const MicrosoftIcon = ({ className }) => (\n \n \n \n \n \n \n);\n\nMicrosoftIcon.propTypes = {\n className: string\n};\n\nMicrosoftIcon.defaultProps = {\n className: ''\n};\n","import { string } from 'prop-types';\nimport React from 'react';\n\nimport { useIsMobile } from '@jotforminc/hooks';\n\nimport { GoogleIcon } from '../../assets/google';\nimport { MicrosoftIcon } from '../../assets/microsoft';\n\nconst ProviderBadge = ({\n provider\n}) => {\n const isMobile = useIsMobile(1040);\n\n const renderProvider = () => {\n switch (provider) {\n case 'google':\n return (\n
    \n \n {!isMobile && Google}\n
    \n );\n case 'microsoft':\n return (\n
    \n \n {!isMobile && Microsoft}\n
    \n );\n default:\n return '';\n }\n };\n\n return renderProvider();\n};\n\nexport default ProviderBadge;\n\nProviderBadge.propTypes = {\n provider: string\n};\n\nProviderBadge.defaultProps = {\n provider: ''\n};\n","import { IconBuilding, IconUserFilled, IconProductTeamsBasicFilled } from '@jotforminc/svg-icons';\n\nexport const DROPDOWN_BADGE_TYPES = {\n organization: {\n badgeText: 'Organization',\n Icon: IconBuilding,\n iconColor: 'color-blue-500',\n backgroundColor: 'bg-blue-100',\n textColor: 'color-navy-700'\n },\n resourceOwner: {\n badgeText: 'Resource Owner',\n Icon: IconUserFilled,\n iconColor: 'color-orange-600',\n backgroundColor: 'bg-orange-100',\n textColor: 'color-navy-700'\n },\n team: {\n badgeText: 'Team',\n Icon: IconProductTeamsBasicFilled,\n iconColor: 'color-orange-600',\n backgroundColor: 'bg-orange-100',\n textColor: 'color-navy-700'\n }\n};\n","import { func, string } from 'prop-types';\nimport React from 'react';\n\nimport { IconCheckCircleFilled } from '@jotforminc/svg-icons';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\nimport CustomBadge from './CustomBadge';\nimport ProviderBadge from './ProviderBadge';\nimport { DROPDOWN_BADGE_TYPES } from '../../helpers/constants';\n\nconst DropdownItem = ({\n text,\n value,\n selectedValue,\n badgeType,\n provider,\n handleOptionSelect\n}) => {\n const isSelected = selectedValue === value;\n const {\n badgeText = '',\n Icon = null,\n iconColor = '',\n backgroundColor = '',\n textColor = ''\n } = DROPDOWN_BADGE_TYPES[badgeType] || {};\n\n return (\n handleOptionSelect(value)}\n onKeyDown={() => {}}\n >\n
    \n
    \n {text}\n {badgeType && isEnterprise() && (\n \n )}\n {provider && }\n
    \n {isSelected && (\n \n )}\n
    \n \n );\n};\n\nexport default DropdownItem;\n\nDropdownItem.propTypes = {\n text: string,\n value: string,\n selectedValue: string,\n badgeType: string,\n provider: string,\n handleOptionSelect: func\n};\n\nDropdownItem.defaultProps = {\n text: '',\n value: '',\n selectedValue: '',\n badgeType: '',\n provider: '',\n handleOptionSelect: f => f\n};\n","import { array, func, string } from 'prop-types';\nimport React from 'react';\n\nimport isArray from 'lodash/isArray';\nimport { t } from '@jotforminc/translation';\nimport DropdownItem from './DropdownItem';\n\nconst DropdownList = ({\n list,\n selectedValue,\n handleOptionSelect\n}) => {\n return (\n
    \n {list.map(({\n groupName = '',\n items = []\n }) => {\n return isArray(items) && items.length > 0 ? (\n
    \n {t(groupName)}\n {items.map(({\n text,\n value,\n owner = '',\n provider = ''\n }) => {\n return (\n \n );\n })}\n
    \n
    \n ) : '';\n })}\n
    \n );\n};\n\nexport default DropdownList;\n\nDropdownList.propTypes = {\n list: array,\n selectedValue: string,\n handleOptionSelect: func\n};\n\nDropdownList.defaultProps = {\n list: [],\n selectedValue: '',\n handleOptionSelect: f => f\n};\n","import {\n array, bool, func, shape, string\n} from 'prop-types';\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport isArray from 'lodash/isArray';\nimport isObject from 'lodash/isObject';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqual from 'lodash/isEqual';\nimport '../../styles/jfEmailWizard.scss';\nimport { t } from '@jotforminc/translation';\nimport { Button } from '@jotforminc/magnet';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\n\nimport DropdownList from './DropdownList';\nimport CustomBadge from './CustomBadge';\nimport ProviderBadge from './ProviderBadge';\n\nconst GroupedDropdown = ({\n options,\n value,\n setErrorList,\n errorList,\n onChange,\n navigationButtonProps,\n badgeTypesList,\n groupedList,\n ...properties\n}) => {\n const showNavigationProps = isObject(navigationButtonProps) && !isEmpty(navigationButtonProps);\n\n // Refs\n const dropdownRef = useRef(null);\n // States\n const [isOpened, setIsOpened] = useState(false);\n const [selectedOption, setSelectedOption] = useState({});\n const { senderEmail: isErrored } = errorList;\n const placeholderText = t('Choose one');\n const hasPlaceholderText = !selectedOption?.text;\n const badgeProperties = badgeTypesList[selectedOption?.owner || ''] || {};\n const isReadOnly = isObject(selectedOption) && !isEmpty(selectedOption) && isArray(options) && options.length === 1;\n\n const {\n badgeText,\n Icon,\n iconColor,\n backgroundColor,\n textColor\n } = badgeProperties;\n\n const handleOptionSelect = optionValue => {\n onChange(optionValue);\n setIsOpened(false);\n };\n\n useEffect(() => {\n if (!selectedOption && !errorList?.senderEmail && (!value || value === 'addNewAddress')) {\n setErrorList(prev => ({ ...prev, senderEmail: true }));\n } else if (selectedOption && errorList?.senderEmail) {\n setErrorList(prev => ({ ...prev, senderEmail: false }));\n }\n }, [selectedOption, errorList]);\n\n useEffect(() => {\n const newSelectedOption = isArray(options) && options.find(({ value: optionValue }) => optionValue === value);\n\n if (!isEqual(newSelectedOption, selectedOption)) {\n setSelectedOption(newSelectedOption);\n }\n }, [options, selectedOption, value]);\n\n useEffect(() => {\n /**\n * set isOpened to false, if clicked on outside of element\n */\n function handleClickOutside(event) {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\n setIsOpened(false);\n }\n }\n // Bind the event listener\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n // Unbind the event listener on clean up\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [dropdownRef]);\n\n useEffect(() => {\n if (isOpened) {\n const scrollableContent = document.querySelector('[data-testid=\"advance\"]');\n if (scrollableContent) {\n scrollableContent.scrollTo({\n top: scrollableContent.scrollHeight,\n behavior: 'smooth'\n });\n }\n }\n }, [isOpened]);\n\n return (\n
    \n
    \n setIsOpened(curr => !curr)}\n >\n
    \n {selectedOption?.text || placeholderText}\n {badgeProperties && isEnterprise() && (\n \n )}\n {selectedOption?.provider && }\n
    \n \n {isOpened && (\n
    \n \n
    \n )}\n {showNavigationProps && (\n \n {navigationButtonProps?.text}\n \n )}\n
    \n
    \n );\n};\n\nexport default GroupedDropdown;\n\nGroupedDropdown.propTypes = {\n options: array,\n value: string,\n errorList: shape({\n senderEmail: bool\n }),\n navigationButtonProps: shape(),\n setErrorList: func,\n onChange: func,\n groupedList: array,\n badgeTypesList: shape()\n};\n\nGroupedDropdown.defaultProps = {\n options: [],\n value: '',\n errorList: {\n senderEmail: false\n },\n navigationButtonProps: {},\n setErrorList: f => f,\n onChange: f => f,\n groupedList: [],\n badgeTypesList: {}\n};\n","import qs from 'querystring';\nimport layer from './layer';\n\n/**\n * Send a request to /user/settings\n * @function\n * @param {Object.} data Data to send, keys are in the form protocol:hostname\n */\nexport const addSMTPAccount = data => layer.post('user/settings', qs.stringify(data));\n\nexport const sendSmtpTestEmail = data => layer.post('user/sendSMTPTestEmail', qs.stringify(data));\n\nexport const getSenderEmailList = (formID, resourceType, teamID = '') => layer.get(`smtpConfig/getConfigsByResource/${formID}/${resourceType}`,\n teamID ? {\n headers: {\n 'jf-team-id': teamID\n }\n } : {}\n);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport '../../styles/_jfDropdown.css';\n\n/**\n * Displays a dropdown control\n */\nclass Dropdown extends Component {\n constructor(props) {\n super(props);\n\n this.renderSelectOptions = this.renderSelectOptions.bind(this);\n }\n\n get classNames() {\n const {\n className\n } = this.props;\n\n return [\n 'jfDropdown',\n className.trim()\n ].filter(a => a).join(' ');\n }\n\n renderSelectOptions(option) {\n const { idProp, titleProp } = this.props;\n const { [idProp]: id, [titleProp]: title } = option;\n if (option.type && option.type === 'group' && Array.isArray(option.options)) {\n return (\n \n {option.options.map(this.renderSelectOptions)}\n \n );\n }\n return ;\n }\n\n render() {\n const {\n id,\n name,\n value,\n label,\n onChange,\n options\n } = this.props;\n\n return (\n
    \n {label\n && (\n
    \n {label}\n
    \n )}\n
    \n \n {options.map(this.renderSelectOptions)}\n \n
    \n
    \n );\n }\n}\n\nDropdown.propTypes = {\n /** Label contents */\n label: PropTypes.oneOfType([\n PropTypes.elementType,\n PropTypes.node\n ]),\n /** name for select element */\n name: PropTypes.string,\n /** id for select element */\n id: PropTypes.string,\n /** class for the root container element */\n className: PropTypes.string,\n /** dropdown value */\n value: PropTypes.string,\n /** Items to display, can use any data to be configured with idProp and titleProp */\n options: PropTypes.arrayOf(PropTypes.shape({\n id: PropTypes.string,\n title: PropTypes.string\n })),\n /** Prop to use as dropdown item id in options array's objects */\n idProp: PropTypes.string,\n /** Prop to use as dropdown item title in options array's objects */\n titleProp: PropTypes.string,\n onChange: PropTypes.func\n};\n\nDropdown.defaultProps = {\n label: null,\n name: null,\n id: null,\n className: '',\n value: '',\n options: [],\n idProp: 'id',\n titleProp: 'title',\n onChange: f => f\n};\n\nexport default Dropdown;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\n// Assets\nimport IconValid from '../../assets/svg/iconValid.svg';\nimport IconInvalid from '../../assets/svg/iconInvalid.svg';\n\nimport '../../styles/_jfInput.scss';\n\n/** An input with validation */\nclass ValidatedInput extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n inputValue: props.value,\n wrapperClassName: ''\n };\n\n this.validate = this.validate.bind(this);\n this.handleOnBlur = this.handleOnBlur.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n }\n\n componentDidUpdate(prevProps) {\n const { value } = this.props;\n if (prevProps.value !== value) {\n this.setState({ // eslint-disable-line\n inputValue: value\n });\n }\n }\n\n handleInputChange({ target: { value: inputValue } }) {\n this.setState({\n inputValue\n });\n\n if (this.validateRequested) {\n this.validate(inputValue);\n }\n }\n\n handleOnBlur(e) {\n const { onBlur } = this.props;\n const { target: { value: inputValue } } = e;\n this.validate(inputValue);\n onBlur(e);\n }\n\n get classNames() {\n const {\n wrapperClassName\n } = this.state;\n\n const {\n className\n } = this.props;\n\n return [\n 'jfInput-line',\n className,\n wrapperClassName\n ].filter(a => a).join(' ');\n }\n\n get inputValue() {\n const { inputValue } = this.state;\n const isValid = this.validate();\n return isValid ? inputValue : null;\n }\n\n validateRequested = false;\n\n validate(inputValueParam) {\n const { inputValue } = this.state;\n const value = inputValueParam || inputValue;\n const {\n isRequired,\n validation\n } = this.props;\n\n const isInvalid = value || (isRequired && !value) ? !validation(value) : false;\n const wrapperClassName = isInvalid ? 'isInvalid' : 'isValid';\n const iconValidation = isInvalid ? : ;\n\n this.setState({\n wrapperClassName,\n iconValidation\n });\n\n this.validateRequested = true;\n return !isInvalid;\n }\n\n render() {\n const {\n type,\n disabled,\n label,\n placeholder,\n inputClassName\n } = this.props;\n\n const {\n inputValue,\n iconValidation\n } = this.state;\n\n return (\n
    \n {label &&
    {label}
    }\n
    \n \n {iconValidation && {iconValidation}}\n
    \n
    \n );\n }\n}\n\nValidatedInput.propTypes = {\n /** Class name of wrapping DOM object */\n className: PropTypes.string,\n /** type for the input element */\n type: PropTypes.string,\n /** Label text */\n label: PropTypes.string,\n /** initial contents */\n value: PropTypes.string,\n /** Is this field disabled? */\n disabled: PropTypes.string,\n /** Is this field required? */\n isRequired: PropTypes.bool,\n /** class for the input element */\n inputClassName: PropTypes.string,\n /** input placeholder */\n placeholder: PropTypes.string,\n /** a function to apply as a validation, returns true if validation passes */\n validation: PropTypes.func,\n /** called when input field is blured */\n onBlur: PropTypes.func\n};\n\nValidatedInput.defaultProps = {\n className: '',\n type: '',\n label: '',\n value: null,\n disabled: null,\n isRequired: false,\n inputClassName: '',\n placeholder: '',\n validation: f => f,\n onBlur: f => f\n};\n\nexport default ValidatedInput;\n","/**\n * Port validation\n * @function\n * @param {String} port to validate\n */\nexport const validatePort = port => /^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/\n .test(String(port).toLowerCase());\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport isEmpty from 'lodash/isEmpty';\nimport { t } from '@jotforminc/translation';\nimport { TwoButtonPopup } from '@jotforminc/two-button-popup';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport { validateHostname, validateEmail } from '@jotforminc/utils';\n\nimport Dropdown from '../../../fields/Dropdown';\nimport ValidatedInput from '../../../fields/ValidatedInput';\n\nimport '../../../styles/_jfInput.scss';\nimport { validatePort } from '../../../utils/validatePort';\n\n/**\n * Renders a modal for users to add or edit SMTP configurations.\n */\nclass CustomSender extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n dropdownValues: {\n securityProtocol: 'tls',\n port: '25'\n },\n error: '',\n reachedLimit: '',\n testMailSuccess: false\n };\n\n const {\n emailAddress,\n hostname,\n port,\n username,\n password,\n securityProtocol\n } = props.initialValues;\n\n this.isEditMode = !isEmpty(props.initialValues);\n this.isCustomPort = this.isEditMode && !CustomSender.portOptions.some(option => option.id === port);\n this.handleSaveSMTP = this.handleSaveSMTP.bind(this);\n this.handleCancelSMTP = this.handleCancelSMTP.bind(this);\n this.handleSecurityProtocolChange = this.handleSecurityProtocolChange.bind(this);\n this.handlePortChange = this.handlePortChange.bind(this);\n this.handleSendTestEmail = this.handleSendTestEmail.bind(this);\n\n this.senderFields = [\n {\n key: 'emailAddress',\n itemType: 'emailAddress',\n label: t('Email Address'),\n placeholder: 'example@yourserver.com',\n type: 'text',\n validation: validateEmail,\n disabled: emailAddress ? 'disabled' : null,\n value: emailAddress\n },\n {\n key: 'hostname',\n itemType: 'hostname',\n label: t('Hostname'),\n placeholder: 'smtp.yourserver.com',\n type: 'text',\n validation: validateHostname,\n value: hostname\n },\n {\n key: 'portDropdown',\n itemType: 'port',\n label: t('Port'),\n type: 'dropdown',\n options: CustomSender.portOptions,\n onChangeFn: this.handlePortChange\n },\n {\n key: 'port',\n itemType: 'port',\n label: t('Custom Port'),\n placeholder: '25',\n type: 'text',\n validation: validatePort,\n value: this.isCustomPort ? port : ''\n },\n {\n key: 'username',\n itemType: 'username',\n label: t('Username'),\n placeholder: t('Username'),\n type: 'text',\n validation: null,\n value: username\n },\n {\n key: 'password',\n itemType: 'password',\n label: t('Password'),\n placeholder: '#Password',\n type: 'password',\n validation: null,\n value: password\n },\n {\n key: 'securityProtocol',\n itemType: 'securityProtocol',\n label: t('Security Protocol'),\n type: 'dropdown',\n options: CustomSender.securityProtocolOptions,\n onChangeFn: this.handleSecurityProtocolChange,\n value: securityProtocol\n }\n ];\n }\n\n componentDidMount() {\n const { initialValues: { port: value = '25', securityProtocol = 'tls' } } = this.props;\n this.setState({ dropdownValues: { securityProtocol, port: this.isCustomPort ? 'custom' : value } });\n }\n\n handleSecurityProtocolChange({ target: { value: securityProtocol } }) {\n this.setState(state => ({\n dropdownValues: {\n ...state.dropdownValues,\n securityProtocol\n }\n }));\n }\n\n handlePortChange({ target: { value: port } }) {\n this.setState(state => ({\n dropdownValues: {\n ...state.dropdownValues,\n port\n }\n }));\n }\n\n async handleSaveSMTP() {\n const {\n dropdownValues: { securityProtocol, port }\n } = this.state;\n\n this.setState({ error: '', testMailSuccess: false });\n const data = Object.keys(this.inputRefs).reduce((accum, key) => {\n if (!this.inputRefs[key] || this.inputRefs[key].inputValue === undefined) {\n return accum;\n }\n const value = this.inputRefs[key].inputValue;\n return {\n ...accum,\n [key]: this.inputRefs[key].inputValue,\n isValid: accum.isValid && (value !== null)\n };\n }, { isValid: true });\n\n if (data.isValid) {\n const smtpSettings = {\n data: {\n ...data,\n ...(port !== 'custom' && { port }),\n securityProtocol\n },\n protocol: 'smtp'\n };\n\n const { onAddSenderEmail } = this.props;\n\n try {\n await onAddSenderEmail(smtpSettings, this.isEditMode);\n } catch (err) {\n this.setState({ error: err?.data?.message || err?.message });\n return false;\n }\n return true;\n }\n return false;\n }\n\n handleCancelSMTP() {\n const { onCancelSenderEmail } = this.props;\n onCancelSenderEmail();\n }\n\n async handleSendTestEmail() {\n const {\n dropdownValues: { securityProtocol, port }\n } = this.state;\n\n const {\n onSendTestEmail\n } = this.props;\n\n this.setState({ reachedLimit: '', error: '', testMailSuccess: false });\n\n const data = Object.keys(this.inputRefs).reduce((accum, key) => {\n if (!this.inputRefs[key] || this.inputRefs[key].inputValue === undefined) {\n return accum;\n }\n const value = this.inputRefs[key].inputValue;\n return {\n ...accum,\n [key]: this.inputRefs[key].inputValue,\n isValid: accum.isValid && (value !== null)\n };\n }, { isValid: true });\n\n if (data.isValid) {\n delete data.isValid;\n const smtpSettings = {\n data: {\n ...data,\n ...(port !== 'custom' && { port }),\n securityProtocol\n },\n protocol: 'smtp'\n };\n try {\n // Trigger send test email\n await onSendTestEmail(smtpSettings);\n this.setState({ error: '', testMailSuccess: true });\n } catch (err) {\n if (err.responseCode === 401) {\n this.setState({ reachedLimit: err?.data?.message || err?.message, testMailSuccess: false });\n } else {\n this.setState({ error: err?.data?.message || err?.message, testMailSuccess: false });\n }\n return false;\n }\n }\n }\n\n setInputRef = itemType => r => {\n this.inputRefs[itemType] = r;\n };\n\n inputRefs = {};\n\n renderNewSenderField({ itemType, ...rest }) {\n const { type } = rest;\n const { dropdownValues } = this.state;\n if (type === 'dropdown') {\n const {\n onChangeFn, label, options, key\n } = rest;\n return (\n
    \n
    {label}
    \n
    \n \n
    \n
    \n );\n }\n\n if (itemType === 'port' && dropdownValues.port !== 'custom') {\n return undefined;\n }\n\n return (\n \n );\n }\n\n render() {\n const {\n error,\n testMailSuccess,\n reachedLimit\n } = this.state;\n\n const {\n modalContainer\n } = this.props;\n\n this.inputRefs = {};\n\n return (\n <>\n \n \n
    \n )}\n mostBottomContent={reachedLimit !== '' && (\n <>\n
    \n
    !
    \n {reachedLimit}\n
    \n
    \n \n )}\n modalContainer={modalContainer}\n >\n {t('SMTP (Simple Mail Transfer Protocol) enables you to send your email through the specified server setting.')}\n\n
    \n {\n this.senderFields ? this.senderFields.map(obj => (\n this.renderNewSenderField({ ...obj, validation: obj.validation ? obj.validation : f => f })\n )) : null\n }\n\n {testMailSuccess && (\n
    \n
    \n {t('Test email sent successfully!')}\n
    \n )}\n\n {error !== '' && (\n
    \n
    !
    \n {error}\n
    \n ) }\n
    \n \n \n );\n }\n}\n\nCustomSender.securityProtocolOptions = [\n { id: 'tls', title: 'TLS' },\n { id: 'ssl', title: 'SSL' }\n];\n\nCustomSender.portOptions = [\n { id: '25', title: '25' },\n { id: '465', title: '465' },\n { id: '587', title: '587' },\n { id: '2525', title: '2525' },\n { id: 'custom', title: 'Custom' }\n];\n\nCustomSender.propTypes = {\n /** Indicates edit mode, emailAddress will be disabled */\n initialValues: PropTypes.shape({\n emailAddress: PropTypes.string.isRequired,\n hostname: PropTypes.string.isRequired,\n port: PropTypes.string.isRequired,\n username: PropTypes.string.isRequired,\n password: PropTypes.string.isRequired,\n securityProtocol: PropTypes.string.isRequired\n }),\n /** Called with the configured SMTP settings when a new configuration is added */\n onAddSenderEmail: PropTypes.func,\n /** Cancel was clicked on the popup */\n onCancelSenderEmail: PropTypes.func,\n /** Container to render the e-mail modal in */\n modalContainer: PropTypes.node,\n /** Handle send test mail */\n onSendTestEmail: PropTypes.func\n};\n\nCustomSender.defaultProps = {\n initialValues: {},\n onAddSenderEmail: f => f,\n onCancelSenderEmail: f => f,\n onSendTestEmail: f => f,\n modalContainer: null\n};\n\nexport default CustomSender;\n","import React, { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport isArray from 'lodash/isArray';\n\nimport Dropdown from '@jotforminc/dropdown';\nimport { isEnterprise as isEnterpriseFunc, isNewSMTPFlow } from '@jotforminc/enterprise-utils';\nimport { handleCustomNavigation } from '@jotforminc/utils';\nimport { GroupedDropdown, DROPDOWN_BADGE_TYPES } from '@jotforminc/email-wizards';\nimport { getBaseURL } from '@jotforminc/router-bridge';\n\nimport { t } from '@jotforminc/translation';\nimport { addSMTPAccount, sendSmtpTestEmail } from '../../utils/addSMTPAccount';\n\nimport CustomSender from './CustomSender';\nimport { getSenderEmail } from '../../utils';\n\nconst SenderEmail = ({\n modalContainer,\n senderEmail,\n cancelSenderEmail,\n onChange,\n sender,\n addSenderEmail,\n customSenders,\n user\n}) => {\n const isEnterprise = isEnterpriseFunc();\n const defaultSenderEmail = customSenders[0]?.value || (isEnterprise ? 'noreply@formresponse.com' : 'noreply@jotform.com');\n const onOptionClick = useCallback(val => {\n onChange({ senderEmail: val, sender });\n }, [onChange, sender]);\n\n const _addSenderEmail = useCallback(async newSenderEmail => {\n const data = {\n [`${newSenderEmail.protocol}:${newSenderEmail.data.hostname}`]: JSON.stringify(newSenderEmail.data)\n };\n\n const response = await addSMTPAccount(data);\n const { responseCode = 500, message = '' } = response;\n if (responseCode === 200) {\n addSenderEmail(newSenderEmail);\n return true;\n }\n if (responseCode >= 400) {\n throw new Error(message);\n }\n }, [addSenderEmail]);\n\n const sendTestEmail = useCallback(async email => {\n const response = await sendSmtpTestEmail(email.data);\n const { responseCode = 500, message = '' } = response;\n if (responseCode === 200) {\n return 'Success';\n }\n if (responseCode >= 400) {\n throw new Error(message);\n }\n }, []);\n\n const prepareGroupedList = list => {\n if (isArray(list) && list.length > 0) {\n const defaultEmail = list.find(({ type = false }) => type === 'DEFAULT');\n const otherEmails = list.filter(({ type = false }) => !type);\n\n const groupedList = [\n {\n groupName: 'Default Email',\n items: [\n { ...defaultEmail }\n ]\n },\n {\n groupName: 'Other Emails',\n items: otherEmails\n }\n ];\n\n return groupedList;\n }\n\n return [];\n };\n\n return (\n <>\n
    \n
    \n {isNewSMTPFlow(user) ? (\n {\n const navigateToSMTPSettings = `${getBaseURL()}/${window?.teamID ? `myaccount/team/${window.teamID}/team-settings` : 'myaccount/settings'}`;\n handleCustomNavigation(navigateToSMTPSettings, '_blank', true);\n }\n }}\n groupedList={prepareGroupedList(customSenders)}\n />\n ) : (\n \n )}\n
    \n
    \n { senderEmail === 'addNewAddress' && (\n \n ) }\n \n );\n};\n\nSenderEmail.propTypes = {\n /** JotForm user, senderEmails will get initially populated on dropdown. Updates will be handled internally */\n senderEmails: PropTypes.shape({}),\n /** Initial value to select from the dropdown. If not found in the list, defaults to noreply */\n senderEmail: PropTypes.string,\n /** Initial value to put in name textbox. */\n sender: PropTypes.string,\n /** An e-mail was selected from the dropdown */\n onChange: PropTypes.func,\n /** E-mail add modal was cancelled, container should update senderEmail or it will be left as \"+ Add new email address\" */\n cancelSenderEmail: PropTypes.func,\n /** E-mail add modal was approved, container should update senderEmail or it will be left as \"+ Add new email address\" */\n addSenderEmail: PropTypes.func,\n /** container for the add e-mail modal */\n modalContainer: PropTypes.node,\n customSenders: PropTypes.array,\n user: PropTypes.shape({})\n};\n\nSenderEmail.defaultProps = {\n senderEmails: {},\n senderEmail: null,\n sender: 'JotForm',\n onChange: f => f,\n cancelSenderEmail: f => f,\n addSenderEmail: f => f,\n modalContainer: null,\n customSenders: [],\n user: {}\n};\n\nexport default SenderEmail;\n","import React, { Component, createRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { WithContext as ReactTags } from 'react-tag-custom';\n\n/* An input with values as tags */\nclass TagsInput extends Component {\n constructor(props) {\n super(props);\n\n this.generateInputTagsFromValue = this.generateInputTagsFromValue.bind(this);\n this.handleAdd = this.handleAdd.bind(this);\n this.validate = this.validate.bind(this);\n this.handleInputBlur = this.handleInputBlur.bind(this);\n this.handleDelete = this.handleDelete.bind(this);\n this.validateAll = this.validateAll.bind(this);\n this.setHiddenCount = this.setHiddenCount.bind(this);\n this.addClassInputTagByValidate = this.addClassInputTagByValidate.bind(this);\n this.wrapperWidth = 0;\n\n // key & class values for tags\n this.emailDelimiterKeys = {\n TAB: 9,\n ENTER: 13,\n SPACE: 32,\n COMMA: 188\n };\n\n this.inputClassNames = {\n tag: 'jfInput-line-tagged-input-tag',\n tags: 'jfInput-line-tagged-input',\n tagInput: 'jfInput-line-tagged-input-wrapper',\n selected: 'jfInput-line-tagged-input-tags',\n tagInputField: 'jfMessage-mailto-line-input',\n remove: 'jfInput-line-tagged-input-remove'\n };\n\n const inputTags = this.generateInputTagsFromValue();\n const wrapperClassName = this.validateAll(inputTags);\n const readOnly = this.getReadOnlyVal(inputTags);\n this.countRef = createRef();\n this.state = {\n inputTags,\n wrapperClassName,\n readOnly,\n hiddenCount: 0\n };\n }\n\n componentDidUpdate(prevProps) {\n const { value, isBlured } = this.props;\n if (prevProps.value !== value) {\n const inputTags = this.generateInputTagsFromValue();\n const wrapperClassName = this.validateAll(inputTags);\n const readOnly = this.getReadOnlyVal(inputTags);\n this.setState({ // eslint-disable-line\n inputTags,\n wrapperClassName,\n readOnly\n });\n }\n if (prevProps.isBlured !== isBlured && isBlured === true) {\n this.setHiddenCount();\n }\n\n if (!isBlured) {\n const specificTagClass = 'jfInput-line-tagged-input-tag';\n this.addClassInputTagByValidate(this.inputClassNames.tag || specificTagClass);\n }\n }\n\n handleAdd(input) {\n const {\n inputTags\n } = this.state;\n const {\n requestMore,\n onTagsChange,\n shouldUnique\n } = this.props;\n\n if (input.text) {\n const texts = input.text.split(/[ ,]+/);\n texts.map(text => this.validate(text));\n\n let tagsToAdd = texts.map(text => ({ id: text, text }));\n if (shouldUnique) {\n tagsToAdd = tagsToAdd.filter(({ id }) => !inputTags.find(tag => tag.id === id));\n }\n\n if (requestMore && tagsToAdd.length === 1 && inputTags.length > 0) {\n // requestMoreInfo > email-To should not be more than one email\n return;\n }\n\n this.setState({ inputTags: inputTags.concat(tagsToAdd) }, onTagsChange);\n }\n }\n\n handleDelete(index) {\n const {\n inputTags\n } = this.state;\n\n const {\n onTagsChange\n } = this.props;\n\n if (index >= 0) {\n inputTags.splice(index, 1);\n\n if (inputTags.length > 0) {\n inputTags.map(inputTag => this.validate(inputTag.text));\n } else {\n this.setState({ wrapperClassName: 'isValid' });\n }\n\n this.setState({ inputTags }, onTagsChange);\n }\n }\n\n handleInputBlur(inputText) {\n const { onBlur } = this.props;\n this.handleAdd({ id: inputText, text: inputText });\n\n onBlur();\n }\n\n setHiddenCount() {\n const { isBlured } = this.props;\n if (!isBlured) return; // this.countref is only available when isBlured is equal to true\n\n const wrapper = this.countRef.current;\n const elements = this.countRef.current.children;\n const elementArray = Array.from(elements);\n const filteredElements = elementArray.filter(el => {\n return el.nodeName === 'DIV';\n });\n if (wrapper.scrollHeight > wrapper.offsetHeight) {\n filteredElements.some((el, index) => {\n if (el.getBoundingClientRect().top > wrapper.getBoundingClientRect().top) {\n this.setState({\n hiddenCount: filteredElements.length - index\n });\n return true;\n }\n return false;\n });\n return;\n }\n this.setState({\n hiddenCount: 0\n });\n }\n\n get classNames() {\n const {\n wrapperClassName\n } = this.state;\n\n const {\n className\n } = this.props;\n\n return [\n 'jfInput-line',\n className,\n wrapperClassName\n ].filter(a => a).join(' ');\n }\n\n getReadOnlyVal(inputTags) {\n const {\n requestMore\n } = this.props;\n\n return !!(requestMore && inputTags && inputTags.length > 1);\n }\n\n validate(inputValue) {\n // const value = inputValue || this.state.inputTags;\n const {\n validation\n } = this.props;\n\n return inputValue ? validation(inputValue) : true;\n }\n\n validateAll(inputTags) {\n const { onSuccessValidation } = this.props;\n\n const hasInvalidTag = inputTags.some(tag => {\n return !this.validate(tag.text);\n });\n\n const wrapperClassName = hasInvalidTag ? 'isInvalid' : 'isValid';\n\n if (!hasInvalidTag) {\n onSuccessValidation();\n }\n\n return wrapperClassName;\n }\n\n generateInputTagsFromValue() {\n const { value } = this.props;\n const texts = value && value.length > 0 ? value.split(',') : null;\n const inputTags = texts ? texts.map(t => ({ id: t, text: t })) : [];\n return inputTags;\n }\n\n addClassInputTagByValidate(targetTagClass) {\n const inputTagNodes = document.querySelectorAll(`.${targetTagClass}`);\n if (inputTagNodes) {\n inputTagNodes.forEach(inputTag => {\n const tagValue = inputTag?.childNodes[0];\n const validatedTagValue = this.validate(tagValue?.data);\n if (validatedTagValue) {\n inputTag.classList.add('validTag');\n } else {\n inputTag.classList.add('invalidTag');\n }\n });\n }\n }\n\n renderRemainingCount() {\n const {\n inputTags\n } = this.state;\n if (inputTags.length === 0) {\n return '1 Left';\n } if (inputTags.length >= 1) {\n return '0 Left';\n }\n }\n\n render() {\n const {\n label,\n placeholder,\n requestMore,\n isBlured,\n t\n } = this.props;\n\n const {\n inputTags,\n readOnly,\n hiddenCount\n } = this.state;\n\n const {\n TAB,\n ENTER,\n SPACE,\n COMMA\n } = this.emailDelimiterKeys;\n\n return (\n
    \n {label &&
    {label}
    }\n
    \n {!isBlured ? (\n \n ) : (\n
    \n {\n inputTags.map(tag => {\n let [validationBg, validationColor] = ['', ''];\n if (this.validate(tag?.text)) {\n validationBg = 'bg-navy-75';\n validationColor = 'color-navy-700';\n } else {\n validationBg = 'bg-red-300';\n validationColor = 'color-white';\n }\n return (\n
    \n {tag.text}\n
    \n );\n })\n }\n {hiddenCount > 0 && (\n \n +\n {`${hiddenCount} ${t('More')}`}\n \n )}\n
    \n )}\n
    \n {!isBlured && (\n
    \n {requestMore && this.renderRemainingCount()}\n
    \n )}\n
    \n );\n }\n}\n\nTagsInput.propTypes = {\n /** Label text */\n label: PropTypes.string,\n /** Default value */\n value: PropTypes.string,\n /** Class name of wrapping DOM object */\n className: PropTypes.string,\n /** input placeholder */\n placeholder: PropTypes.string,\n /** a function to apply as a validation, returns true if validation passes */\n validation: PropTypes.func,\n /** called when input field is blured */\n onBlur: PropTypes.func,\n /** called when the tags changed */\n onTagsChange: PropTypes.func,\n /** called when the tags validation successed */\n onSuccessValidation: PropTypes.func,\n requestMore: PropTypes.bool,\n /** determines if the inputs entered will be unique */\n shouldUnique: PropTypes.bool,\n isBlured: PropTypes.bool,\n t: PropTypes.func\n};\n\nTagsInput.defaultProps = {\n label: '',\n value: '',\n className: '',\n placeholder: '',\n validation: f => f,\n onBlur: f => f,\n onTagsChange: f => f,\n onSuccessValidation: f => f,\n requestMore: false,\n shouldUnique: false,\n isBlured: false,\n t: f => f\n};\n\nexport default TagsInput;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport TagInput from '@jotforminc/tag-input';\n\nclass MixedTagInput extends Component {\n render() {\n const {\n label, value, formArray, onChange, ...restProps\n } = this.props;\n\n return (\n <>\n
    {label}
    \n
    \n \n
    \n \n );\n }\n}\n\nMixedTagInput.propTypes = {\n label: PropTypes.string,\n value: PropTypes.string,\n formArray: PropTypes.array,\n onChange: PropTypes.func\n};\n\nMixedTagInput.defaultProps = {\n label: '',\n value: '',\n formArray: [],\n onChange: () => {}\n};\n\nexport default MixedTagInput;\n","/* eslint-disable react/prop-types */\n/* eslint-disable react/jsx-one-expression-per-line */\nimport React, { useState, useEffect } from 'react';\nimport { useDelayUnmount } from '@jotforminc/hooks';\n\nconst DelayedComponent = ({ children, isVisible, duration }) => {\n const [isMounted, setIsMounted] = useState(false);\n\n const [shouldRenderChild, className] = useDelayUnmount(isMounted, (duration || 250));\n useEffect(() => {\n if (!isMounted && isVisible) {\n setIsMounted(true);\n return;\n }\n setIsMounted(false);\n }, [isVisible]);\n\n return (\n shouldRenderChild && (\n
    \n {children}\n
    \n )\n );\n};\n\nexport default DelayedComponent;\n","import { createContext } from 'react';\n\nconst { Provider: PopoverProvider, Consumer: PopoverConsumer } = createContext();\nexport { PopoverProvider, PopoverConsumer };\n","import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\n\nimport { PopoverProvider } from './context';\n\n/**\n * Root provider for the popover\n */\nclass PopoverContainer extends Component {\n constructor(props) {\n super(props);\n\n this.handleTagEscape = this.handleTagEscape.bind(this);\n this.handleOutsideClick = this.handleOutsideClick.bind(this);\n this.registerCloseCallback = this.registerCloseCallback.bind(this);\n\n this.closeListeners = [];\n }\n\n componentDidMount() {\n global.document.addEventListener('keyup', this.handleTagEscape);\n global.document.addEventListener('click', this.handleOutsideClick, true);\n }\n\n componentWillUnmount() {\n global.document.removeEventListener('keyup', this.handleTagEscape);\n global.document.removeEventListener('click', this.handleOutsideClick, true);\n }\n\n handleTagEscape({ keyCode }) {\n if (keyCode !== 27) {\n return;\n }\n\n this.handleOutsideClick();\n }\n\n handleOutsideClick() {\n this.closeListeners.forEach(cb => {\n if (typeof cb === 'function') {\n cb();\n }\n });\n }\n\n get providerValue() {\n return {\n registerCloseCallback: this.registerCloseCallback,\n closePopovers: this.handleOutsideClick\n };\n }\n\n registerCloseCallback(cb, doRemove = false) {\n if (doRemove) {\n this.closeListeners = this.closeListeners.filter(currentCb => currentCb !== cb);\n return;\n }\n this.closeListeners.push(cb);\n }\n\n render() {\n const { id, className, children } = this.props;\n\n return (\n \n \n {children}\n \n \n );\n }\n}\n\nPopoverContainer.propTypes = {\n /** id to give to the container element */\n id: PropTypes.string,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.any),\n PropTypes.node,\n PropTypes.element\n ]),\n /** class to give to container element */\n className: PropTypes.string\n};\n\nPopoverContainer.defaultProps = {\n id: 'popover-container',\n children: [],\n className: ''\n};\nexport default PopoverContainer;\n","import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\n\nimport '../../styles/_jfPopover.scss';\n\nimport { PopoverConsumer } from './context';\n\n/**\n * Displays a popover that closes all other instances automatically\n */\nclass Popover extends Component {\n constructor(props) {\n super(props);\n\n this.hide = this.hide.bind(this);\n this.show = this.show.bind(this);\n\n this.state = {\n isHidden: true\n };\n }\n\n componentDidMount() {\n this.registerCloseCallback(this.hide);\n }\n\n componentWillUnmount() {\n this.registerCloseCallback(this.hide, true);\n }\n\n get wrapperClassNames() {\n const { isHidden } = this.state;\n const { className } = this.props;\n\n return [\n 'jfPopover-wrapper',\n className,\n isHidden ? 'isHidden' : null\n ].filter(a => a).join(' ');\n }\n\n get containerClassNames() {\n const { align, attach } = this.props;\n\n return [\n 'jfPopover-container',\n align ? `align${align}` : null,\n attach ? `attach${attach}` : null\n ].filter(a => a).join(' ');\n }\n\n show() {\n this.setState({\n isHidden: false\n });\n }\n\n hide() {\n this.setState({\n isHidden: true\n });\n }\n\n render() {\n const {\n title,\n align,\n attach,\n children,\n className,\n backgroundColor,\n ...remainingProps\n } = this.props;\n\n return (\n \n {({ registerCloseCallback }) => {\n this.registerCloseCallback = registerCloseCallback;\n return (\n \n
    \n
    \n {title &&
    {title}
    }\n {children}\n
    \n
    \n
    \n
    \n );\n }}\n
    \n );\n }\n}\n\nPopover.propTypes = {\n /** Content to display inside the popover */\n children: PropTypes.node,\n /** title of popover */\n title: PropTypes.string,\n /** class to pass to the wrapping element */\n className: PropTypes.string,\n /** Background color of the popover */\n backgroundColor: PropTypes.string,\n /** Alignment */\n align: PropTypes.oneOf(['Left', 'Center', 'Right']),\n /** Vertical alignment */\n attach: PropTypes.oneOf(['Top', 'Bottom'])\n};\n\nPopover.defaultProps = {\n title: '',\n className: '',\n children: null,\n backgroundColor: '',\n align: 'Center',\n attach: 'Top'\n};\n\nexport default Popover;\n","import React, { Component, createRef, Suspense } from 'react';\nimport ReCAPTCHA from 'react-google-recaptcha';\nimport { SketchPicker } from 'react-color';\nimport PropTypes from 'prop-types';\nimport { Picker } from '@jotforminc/emoji-mart';\nimport { t } from '@jotforminc/translation';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport { Tooltip } from '@jotforminc/tooltip';\nimport FormFields from '@jotforminc/form-fields-menu';\nimport { safeLazy } from '@jotforminc/safe-lazy-import';\n\nimport {\n IconBold, IconItalic, IconTextSize, IconUnderline, IconTextColor, IconAlignTextLeft, IconListBullet, IconListNumber,\n IconPaperPlaneFilled, IconPaperclipVertical, IconCheck\n} from '@jotforminc/svg-icons';\n// Editor Text Edit Icons\n\nimport { Popover, PopoverContainer } from '../Popover';\n// Editor Fluff Icons\nimport IconSmile from '../../assets/svg/iconSmile.svg';\n\n// Constants\nimport { TEXT_ALIGNMENTS, FONT_SIZES, FONT_FAMILIES } from '../../constants';\n/**\n * Displays the footer part for the message component\n */\nconst SubmissionTable = safeLazy(() => import('../SubmissionTable'));\nexport default class MessageFooter extends Component {\n constructor(props) {\n super(props);\n\n // Constant assignments\n this.fontSizesArray = FONT_SIZES;\n this.fontFamilyArray = FONT_FAMILIES;\n this.textAlignmentsArray = TEXT_ALIGNMENTS;\n\n // Bindings\n this.isFontSized = this.isFontSized.bind(this);\n this.isFontFamily = this.isFontFamily.bind(this);\n this.isTextAligned = this.isTextAligned.bind(this);\n this.handleFontSize = this.handleFontSize.bind(this);\n this.handleFontFace = this.handleFontFace.bind(this);\n this.handleFontList = this.handleFontList.bind(this);\n this.handleTextColor = this.handleTextColor.bind(this);\n this.handleTextAlignment = this.handleTextAlignment.bind(this);\n this.handleTextColorPicker = this.handleTextColorPicker.bind(this);\n this.showCaptcha = this.showCaptcha.bind(this);\n this.handleSend = this.handleSend.bind(this);\n this.toggleEmojiList = this.toggleEmojiList.bind(this);\n this.addEmojiItem = this.addEmojiItem.bind(this);\n this.closeOpenedPopups = this.closeOpenedPopups.bind(this);\n\n this.state = {\n isEmojiListOpened: false\n };\n\n this.popoverRef = createRef();\n this.textEditRef = createRef();\n this.formFieldRef = createRef();\n this.formFieldTargetRef = createRef();\n }\n\n handleFontList(e, isDropdownOpen, { className }) {\n if (isDropdownOpen) {\n this.actionHandler('click', `.${className}`);\n }\n }\n\n handleFontFace(fontFace) {\n this.actionHandler('click', '.forFontFamilyItem');\n this.editor.setFontFace(fontFace);\n }\n\n handleFontSize(fontSize) {\n this.actionHandler('click', '.forFontSizeItem');\n this.editor.setFontSize(fontSize);\n }\n\n handleTextAlignment(alignment) {\n this.actionHandler('click', '.forTextAlignItem');\n this.editor.setTextAlignment(alignment);\n }\n\n handleTextColorPicker(e, isDropdownOpen) {\n if (isDropdownOpen) {\n this.actionHandler('click', '.forColorPicker');\n }\n }\n\n handleTextColor({ hex }) {\n this.actionHandler('click', '.forFormatColor');\n this.editor.setTextColour(hex);\n }\n\n handleSend(e) {\n const { handleSend } = this.props;\n this.actionHandler('click', '.jfButton.send');\n handleSend(e);\n }\n\n handleFormFieldsButtonClick = () => {\n const { actionHandler } = this.props;\n this.formFieldRef.current.setMenuVisibility(true);\n this.setState({\n isEmojiListOpened: false\n });\n this.textEditRef?.current?.closeDropdown();\n actionHandler('click', '+FieldsMenuShowed');\n };\n\n handleFormat = format => () => {\n this.actionHandler('click', `.forFormat${format.watchman}`);\n this.editor[this.hasFormat(format) ? format.removeFunc : format.setFunc]();\n };\n\n get editor() {\n const { editor } = this.props;\n\n return editor;\n }\n\n get actionHandler() {\n const { actionHandler } = this.props;\n\n return actionHandler;\n }\n\n get textAlignment() {\n // Use default if editor has not initialized yet\n const defaultIcon = ;\n if (!this.editor) return defaultIcon;\n\n const textAlignment = this.textAlignmentsArray.find(({ key }) => this.isTextAligned(key));\n\n return textAlignment ? textAlignment.icon : defaultIcon;\n }\n\n get fontFace() {\n // Use default if editor has not initialized yet\n const defaultFont = 'Sans Serif';\n if (!this.editor) return defaultFont;\n\n const { family } = this.editor.getFontInfo();\n const activeFontFamily = this.fontFamilyArray.find(({ element }) => `${element}, sans-serif` === family);\n return (activeFontFamily && activeFontFamily.text) || defaultFont;\n }\n\n get fontColor() {\n const defaultColor = '#000';\n if (!this.editor) return defaultColor;\n\n const { color } = this.editor.getFontInfo();\n return color || defaultColor;\n }\n\n getFonts({\n constant, className, style, setFunc, hasFunc\n }) {\n return constant.map(({\n text, element, key, icon\n }) => (\n this[setFunc](element || key)}\n onKeyPress={() => this[setFunc](element || key)}\n className={`${className} ${this[hasFunc](element || key) ? 'isActive' : ''}`}\n >\n {this[hasFunc](element) && }\n {text}\n {icon}\n \n ));\n }\n\n hasFormat(format) {\n return this.editor && this.editor.hasFormat(format.editor);\n }\n\n isFontSized(fontSize) {\n return this.editor && this.editor.hasFormat('SPAN', { class: 'size', style: `font-size: ${fontSize}` });\n }\n\n isFontFamily(fontFamily) {\n return this.editor && this.editor.hasFormat('SPAN', { class: 'font', style: `font-family: ${fontFamily}, sans-serif;` });\n }\n\n isTextAligned(alignment) {\n return this.editor && this.editor.hasFormat('DIV', { class: ` align-${alignment}` });\n }\n\n showCaptcha(state = true) {\n if (state) {\n this.popoverRef.current.show();\n } else {\n this.popoverRef.current.hide();\n }\n }\n\n closeOpenedPopups() {\n this.textEditRef?.current?.closeDropdown();\n this.setState({ isEmojiListOpened: false });\n }\n\n toggleEmojiList() {\n this.textEditRef?.current?.closeDropdown();\n\n this.setState(prevState => ({\n isEmojiListOpened: !prevState.isEmojiListOpened\n }));\n }\n\n addEmojiItem({ native = '' }) {\n this.actionHandler('click', '.addEmojiItem');\n // get selected text\n const defaultText = this.editor.getSelectedText();\n\n // insert selected emoji\n this.editor.insertHTML(`${defaultText}${native}`);\n\n // close emoji list\n this.setState({\n isEmojiListOpened: false\n });\n }\n\n renderEditorItems() {\n return (\n <>\n { this.handleFontList(e, isDropdownOpen, MessageFooter.formats.FONT_FAMILY); }}\n aria-haspopup=\"listbox\"\n aria-label={t('Font Families')}\n listenerElementClass=\"jfMessage-container\"\n >\n {this.fontFace}\n \n \n \n \n \n );\n }\n}\n\nMessageFooter.formats = {\n BOLD: {\n editor: 'B',\n watchman: 'Bold',\n setFunc: 'bold',\n removeFunc: 'removeBold'\n },\n ITALIC: {\n editor: 'I',\n watchman: 'Italic',\n setFunc: 'italic',\n removeFunc: 'removeItalic'\n },\n UNDERLINE: {\n editor: 'U',\n watchman: 'Underline',\n setFunc: 'underline',\n removeFunc: 'removeUnderline'\n },\n ORDERED_LIST: {\n editor: 'OL',\n watchman: 'ListNumber',\n setFunc: 'makeOrderedList',\n removeFunc: 'removeList'\n },\n UNORDERED_LIST: {\n editor: 'UL',\n watchman: 'ListBullet',\n setFunc: 'makeUnorderedList',\n removeFunc: 'removeList'\n },\n FONT_FAMILY: {\n className: 'forFontFamily',\n style: 'fontFamily',\n constant: FONT_FAMILIES,\n setFunc: 'handleFontFace',\n hasFunc: 'isFontFamily'\n },\n FONT_SIZE: {\n className: 'forFontSize',\n constant: FONT_SIZES,\n setFunc: 'handleFontSize',\n hasFunc: 'isFontSized'\n },\n TEXT_ALIGNMENT: {\n className: 'forFormatTextAlign',\n style: 'fontSize',\n constant: TEXT_ALIGNMENTS,\n setFunc: 'handleTextAlignment',\n hasFunc: 'isTextAligned'\n }\n};\n\n// eslnt does not play well with getDerivedStateFromProps. See https://github.com/yannickcr/eslint-plugin-react/issues/1759\nMessageFooter.propTypes = {\n path: PropTypes.string,\n /** Disable send button */\n disableSend: PropTypes.bool,\n loading: PropTypes.bool,\n isAttachmentError: PropTypes.bool,\n /* adding attachment functionality */\n hasAttachment: PropTypes.bool,\n onFileChange: PropTypes.func,\n /** Text to display in a tooltip near send button */\n warningText: PropTypes.string,\n /** Does this user needs captcha validation? */\n isCaptchaValidationRequired: PropTypes.bool,\n // onShowAttachmentFeedback: PropTypes.func,\n handleRecaptchaChange: PropTypes.func,\n /** Send button is clicked */\n handleSend: PropTypes.func,\n /** Squire editor */\n editor: PropTypes.shape({\n getFontInfo: PropTypes.func,\n setFontSize: PropTypes.func,\n hasFormat: PropTypes.func,\n setFontFace: PropTypes.func,\n setTextAlignment: PropTypes.func,\n setTextColour: PropTypes.func,\n getSelectedText: PropTypes.func,\n insertHTML: PropTypes.func\n }),\n /** Called with a reference to recaptcha */\n recaptchaRefSetter: PropTypes.func,\n /** Handler to handle watchman events. Accepts an action and a target. */\n actionHandler: PropTypes.func,\n submissionTable: PropTypes.string,\n showAddFields: PropTypes.bool,\n formArray: PropTypes.array,\n inputRef: PropTypes.shape({}),\n buttonRef: PropTypes.shape({}),\n formTitle: PropTypes.string,\n onFormFieldAdd: PropTypes.func,\n withSubmissionTableProps: PropTypes.shape({}),\n isLoaded: PropTypes.bool,\n user: PropTypes.shape({}),\n recaptchaSite: PropTypes.string\n};\n\nMessageFooter.defaultProps = {\n path: '',\n disableSend: false,\n warningText: '',\n isCaptchaValidationRequired: false,\n hasAttachment: false,\n loading: false,\n isAttachmentError: false,\n onFileChange: f => f,\n // onShowAttachmentFeedback: f => f,\n handleRecaptchaChange: f => f,\n handleSend: f => f,\n editor: null,\n recaptchaRefSetter: f => f,\n actionHandler: f => f,\n submissionTable: null,\n showAddFields: false,\n formArray: [],\n inputRef: null,\n buttonRef: null,\n formTitle: '',\n onFormFieldAdd: f => f,\n withSubmissionTableProps: null,\n isLoaded: false,\n user: null,\n recaptchaSite: ''\n};\n","/* eslint-disable complexity */\n/* eslint-disable max-statements */\n/* eslint-disable max-lines */\nimport React, { Component, createRef } from 'react';\nimport PropTypes from 'prop-types';\nimport isEqual from 'lodash/isEqual';\nimport debounce from 'lodash/debounce';\nimport axios from 'axios';\nimport { Resizable } from 're-resizable';\nimport Squire from 'squire-rte';\nimport { t } from '@jotforminc/translation';\nimport { Dialog } from '@jotforminc/dialog';\nimport { Tooltip } from '@jotforminc/tooltip';\nimport { formatBytes, validateEmail } from '@jotforminc/utils';\nimport { isEnterprise as isEnterpriseFunc, isNewSMTPFlow } from '@jotforminc/enterprise-utils';\n\nimport {\n IconEnvelopeClosedFilled, IconXmark, IconExclamationCircle, IconGearFilled, IconLineHorizontal, IconArrowsToCenter, IconArrowsFromCenter, IconInfo, IconRocketSquareBrokenFilled\n} from '@jotforminc/svg-icons';\nimport { getActiveApp, getFullPath } from '@jotforminc/router-bridge';\n\nimport BrandingTooltip from './BrandingTooltip';\nimport {\n arrangeCustomSender, arrangeCustomSenderNewSMTPFlow, editorInputHandler, extractResourceID, getSenderEmail, getSenderOptions, purifyContent\n} from '../utils';\nimport { sendEmailAPI } from '../utils/sendEmailAPI';\nimport NewSenderEmail from './NewSenderEmail';\nimport TagsInput from '../fields/TagsInput';\nimport MixedTagInput from '../fields/MixedTagInput';\nimport DelayedComponent from './DelayedComponent';\n\nimport '../styles/_jfNewMessage.scss';\nimport '../styles/_jfButton.scss';\n\nimport MessageFooter from './MessageFooter';\nimport { PAID_PLANS } from '../constants';\n\nimport { getSenderEmailList } from '../utils/addSMTPAccount';\n\n/**\n * A component to display an e-mail popover.\n * Requires a Popover container (JFComponents/Popover/container) up in the react tree.\n * You can place this near the root of your react application.\n */\nexport class Message extends Component {\n constructor(props) {\n super(props);\n\n const {\n actionHandler,\n onLoaded,\n project\n } = this.props;\n\n this.state = {\n path: null,\n subject: '',\n messageFrom: 'noreply@jotform.com',\n messageFromName: 'Jotform',\n showMessageFrom: false,\n messageTo: '',\n messageCc: '',\n messageBcc: '',\n warningText: '',\n disableSend: false,\n recapthcaResponse: '',\n isRecaptchaReady: false,\n isMessageMinimized: false,\n isMessageMailtoCCEnabled: false,\n isMessageMailtoBCCEnabled: false,\n isResizing: false,\n isResized: false,\n hasErrorClass: false,\n tagsValueObj: {},\n isSettingsOpen: false,\n selectedSenderEmail: [],\n attachments: [],\n loading: false,\n isAttachmentError: false,\n isReachedLimitBSG: false,\n isReachedLimitTO: false,\n isReachedLimitCC: false,\n isReachedLimitBCC: false,\n inputLimitTO: false,\n inputLimitCC: false,\n inputLimitBCC: false,\n inputLimitBSG: false,\n customSenders: []\n };\n\n this.editor = null;\n this.editorDiv = null;\n this.initialSubject = props.subject;\n this.brandingDescription = {\n inbox: 'Use Jotform Inbox to manage submissions like a pro.',\n sheets: 'Use Jotform Tables to manage your data in an all-in-one workspace.'\n }[project] ?? '';\n\n // Bindings\n this.handleSend = this.handleSend.bind(this);\n this.handleAddSenderEmail = this.handleAddSenderEmail.bind(this);\n this.handleCancelSenderEmail = this.handleCancelSenderEmail.bind(this);\n this.handleMessageMinimize = this.handleMessageMinimize.bind(this);\n this.handleTagsChange = this.handleTagsChange.bind(this);\n this.handleMessageViewMode = this.handleMessageViewMode.bind(this);\n this.handleMessageMailtoCC = this.handleMessageMailtoCC.bind(this);\n this.handleMessageMailtoBCC = this.handleMessageMailtoBCC.bind(this);\n this.handleMessageSettings = this.handleMessageSettings.bind(this);\n this.renderMessageSettingsFormFields = this.renderMessageSettingsFormFields.bind(this);\n this.handleMessageEmptyFields = this.handleMessageEmptyFields.bind(this);\n this.handleMessageVisibility = this.handleMessageVisibility.bind(this);\n this.purifyInputContent = this.purifyInputContent.bind(this);\n this.removeTooltipErrorMessage = this.removeTooltipErrorMessage.bind(this);\n this.renderErrorMessage = this.renderErrorMessage.bind(this);\n this.handleMessageAutoHideFields = this.handleMessageAutoHideFields.bind(this);\n this.handleTooltipClick = this.handleTooltipClick.bind(this);\n this.handleRecaptchaChange = this.handleRecaptchaChange.bind(this);\n this.isCaptchaValidationRequired = this.isCaptchaValidationRequired.bind(this);\n this.handleRecaptchaRef = this.handleRecaptchaRef.bind(this);\n this.handleCloseClick = this.handleCloseClick.bind(this);\n this.additionalCheckForEmail = this.additionalCheckForEmail.bind(this);\n this.logReplyToEmailChange = this.logReplyToEmailChange.bind(this);\n this.handleDrop = this.handleDrop.bind(this);\n this.handleFiles = this.handleFiles.bind(this);\n this.prepareFiles = this.prepareFiles.bind(this);\n this.uploadFiles = this.uploadFiles.bind(this);\n this.validateUploadFiles = this.validateUploadFiles.bind(this);\n this.moveProgressBar = this.moveProgressBar.bind(this);\n this.getMessageFrom = this.getMessageFrom.bind(this);\n\n this.mailToWrapper = createRef();\n this.transitionWrapper = createRef();\n this.footer = createRef();\n this.animatedElement = createRef();\n this.dropAreaRef = createRef();\n this.fileProgressBarRef = createRef();\n this.scrollContainer = createRef();\n this.actionHandler = actionHandler;\n this.loaded = onLoaded;\n this.selection = 0;\n }\n\n static getDerivedStateFromProps(nextProps, prevState) {\n const {\n title,\n messageTo,\n messageFrom,\n messageFromName,\n messageReplyTo,\n subject,\n isMessageOpen,\n messageViewMode,\n showMinimizeButton,\n showChangeMessageViewModeButton,\n contentStatus,\n user\n } = nextProps;\n\n if (isMessageOpen !== prevState.isMessageOpen) {\n // Just hiding message is enoughs\n if (!isMessageOpen) return { isMessageOpen };\n\n // Return to initial state to component\n return {\n title,\n messageTo,\n messageFrom,\n messageFromName,\n messageReplyTo,\n disableSend: false,\n subject,\n isMessageMinimized: messageViewMode === 'minimized',\n isMessageFullScreen: messageViewMode === 'fullscreen',\n isMessageOpen,\n showMinimizeButton,\n showChangeMessageViewModeButton,\n contentStatus,\n isFreeUser: user.account_type.name === 'FREE'\n };\n }\n\n if (nextProps.title !== prevState.title) {\n return {\n title: nextProps.title\n };\n }\n\n if (contentStatus !== prevState.contentStatus) {\n return {\n contentStatus\n };\n }\n\n return null;\n }\n\n getResourceType = type => {\n switch (type) {\n case 'form-builder':\n return 'FORM';\n case 'sheets':\n return 'SHEET';\n case 'workflow':\n return 'WORKFLOW';\n default:\n return 'FORM';\n }\n };\n\n fetchSenderEmails() {\n let resourceID = extractResourceID(getFullPath());\n const resourceType = this.getResourceType(getActiveApp());\n const { user = {}, formID = '' } = this.props;\n\n if (!resourceID) {\n resourceID = formID || '';\n }\n\n const teamID = window?.teamID || window?.liteInboxTeamID || '';\n\n const { messageFrom = '' } = this.state;\n\n getSenderEmailList(resourceID, resourceType, teamID).then(resp => {\n const senderOptions = getSenderOptions(isNewSMTPFlow(user) ? arrangeCustomSenderNewSMTPFlow(resp) : arrangeCustomSender(resp));\n this.setState({ customSenders: senderOptions });\n if (!senderOptions.find(({ value = '' }) => value === messageFrom)) {\n this.setState({ messageFrom: senderOptions[0]?.value || '' });\n }\n }).catch(({ message = 'Something Went Wrong' }) => {\n console.error(message);\n });\n }\n\n componentDidMount() {\n // TODO: check loaded\n this.editor = new Squire(this.editorDiv, { blockTag: 'DIV' });\n const {\n contentStatus, user: { senderEmails }, hasAttachment, withSubmissionTableProps\n } = this.props;\n\n this.fetchSenderEmails();\n\n if (contentStatus) {\n // For to render `Preparing content...` placeholder\n this.setEmailContents();\n }\n if (withSubmissionTableProps && this.transitionWrapper.current) {\n this.transitionWrapper?.current.addEventListener('transitionend', e => {\n this.setInputCounts(e);\n });\n }\n this.editor.addEventListener('willPaste', e => {\n e.preventDefault();\n const div = document.createElement('div');\n div.appendChild(e.fragment);\n const text = div.innerHTML;\n const defaultText = this.editor.getSelectedText();\n const encodedText = purifyContent(`${defaultText}${text}`);\n this.editor.insertHTML(encodedText);\n });\n\n this.editor.addEventListener('keydown', debounce(this.purifyInputContent, 300));\n this.setState({ senderEmails });\n this.editor.addEventListener('pathChange', ({ path }) => this.setState({ path }));\n this.editor.addEventListener('focus', () => {\n this.selection = this.editor.getSelection();\n if (withSubmissionTableProps) {\n this.setEnabled();\n }\n });\n\n const { messageTo } = this.state;\n const userType = this.userPlans;\n const messageToCount = this.getEmailCount(messageTo);\n // If the free user has multiple emails, set the first email as the messageTo.\n if (withSubmissionTableProps && userType === 'FREE' && messageToCount > 0) {\n this.setState({\n messageTo: messageTo.split(',')[0]\n });\n }\n\n // TODO WIP\n // eslint-disable-next-line react/destructuring-assignment\n if (hasAttachment) {\n ['dragenter', 'dragover', 'dragleave'].forEach(eventName => {\n this.dropAreaRef.current.addEventListener(eventName, e => {\n e.preventDefault();\n e.stopPropagation();\n });\n });\n }\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n /*\n Why?: To delete the bounce class\n from the message container when completed\n What is 350?: 350ms is animation duration value from CSS\n */\n if (nextState.hasErrorClass) {\n setTimeout(() => {\n this.setState({\n hasErrorClass: false\n });\n }, 350);\n }\n\n const { toLeft, withSubmissionTableProps } = this.props;\n\n return !isEqual(nextState, this.state)\n || !isEqual(nextProps.toLeft, toLeft) || !isEqual(nextProps.withSubmissionTableProps, withSubmissionTableProps);\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { isMessageOpen, messageMethod, withSubmissionTableProps } = this.props;\n const {\n messageFrom, contentStatus, messageTo, attachments, isBlured, messageCc, messageBcc\n } = this.state;\n if (\n (isMessageOpen && isMessageOpen !== prevProps.isMessageOpen)\n || (prevProps.contentStatus === 'loading' && contentStatus === 'ready')\n ) {\n this.setEmailContents();\n }\n if (messageFrom !== 'addNewAddress') this.lastMessageFrom = messageFrom;\n if (withSubmissionTableProps && prevState.isBlured !== isBlured) {\n if (isBlured !== 'messageCc' && messageCc.length <= 0) {\n this.setMailCcVisibility('isMessageMailtoCCEnabled');\n }\n if (isBlured !== 'messageBcc' && messageBcc.length <= 0) {\n this.setMailCcVisibility('isMessageMailtoBCCEnabled');\n }\n }\n if (prevProps.messageMethod !== messageMethod) {\n const messageToCheckFormat = messageTo?.split(',').map(x => ({ text: x }));\n if (messageToCheckFormat) {\n this.checkTagsValue(messageToCheckFormat, 'messageTo');\n }\n }\n if (withSubmissionTableProps && (messageTo.length >= 0 || messageCc.length >= 0 || messageBcc.length >= 0)) {\n this.checkEmailRecipientLimits();\n }\n\n if (prevState.attachments.length !== attachments.length) {\n this.validateUploadFiles();\n }\n }\n\n handleTitleMinimize() {\n const {\n isMessageMinimized\n } = this.state;\n\n if (isMessageMinimized) {\n this.actionHandler('click', '.jfMessage-header-action.forMinimize mode-open from-title');\n this.setState({ isMessageMinimized: false });\n }\n }\n\n handleTagsChange(messageType) {\n const { actionHandler } = this.props;\n const { [messageType]: { state: { inputTags } } } = this.inputRefs;\n const value = inputTags.map(tag => tag.text).join(',');\n this.setState({\n [messageType]: value\n });\n\n actionHandler('change', `${messageType} ${value}`);\n this.checkTagsValue(inputTags, messageType);\n }\n\n handleMessageMinimize() {\n const {\n isMessageMinimized\n } = this.state;\n\n this.footer.current?.closeOpenedPopups();\n\n const minimizeButtonMode = !isMessageMinimized ? 'mode-minimize' : 'mode-open';\n this.actionHandler('click', `.jfMessage-header-action.forMinimize ${minimizeButtonMode}`);\n\n this.setState({ isMessageMinimized: !isMessageMinimized });\n }\n\n handleInsertSelection(start, end, HTMLElement) {\n // eslint-disable-next-line no-undef\n const range = new Range();\n range.setStartBefore(start);\n range.setEndAfter(end);\n this.editor.setSelection(range);\n this.editor.insertHTML(HTMLElement);\n }\n\n handleMessageViewMode() {\n const {\n isMessageFullScreen\n } = this.state;\n\n const maximizeButtonMode = !isMessageFullScreen ? 'mode-fullscreen' : 'mode-open';\n this.actionHandler('click', `.jfMessage-header-action.forMaximize ${maximizeButtonMode}`);\n\n this.setState({ isMessageFullScreen: !isMessageFullScreen, isMessageMinimized: false });\n }\n\n handleMessageMailtoCC() {\n const {\n isMessageMailtoCCEnabled\n } = this.state;\n\n if (!isMessageMailtoCCEnabled) {\n this.actionHandler('click', '.jfMessage-mailto-link-cc');\n }\n\n this.setState({ isMessageMailtoCCEnabled: !isMessageMailtoCCEnabled });\n }\n\n handleMessageMailtoBCC() {\n const {\n isMessageMailtoBCCEnabled\n } = this.state;\n\n if (!isMessageMailtoBCCEnabled) {\n this.actionHandler('click', '.jfMessage-mailto-link-bcc');\n }\n\n this.setState({ isMessageMailtoBCCEnabled: !isMessageMailtoBCCEnabled });\n }\n\n handleMessageSettings() {\n // toggle show/hide component\n this.setState(prevState => ({\n isSettingsOpen: !prevState.isSettingsOpen\n }));\n }\n\n handleMessageAutoHideFields() {\n const {\n messageCc: { inputValue: messageCc },\n messageBcc: { inputValue: messageBcc }\n } = this.inputRefs;\n\n this.setState({\n isMessageMailtoCCEnabled: !!messageCc,\n isMessageMailtoBCCEnabled: !!messageBcc\n });\n }\n\n handleMessageEmptyFields(e) {\n const { relatedTarget } = e;\n if (\n relatedTarget\n && relatedTarget.dataset\n && !relatedTarget.dataset.origin\n ) {\n this.handleMessageAutoHideFields();\n }\n }\n\n handleCloseClick() {\n this.setState({ isMessageFullScreen: false, isMessageMinimized: false });\n this.actionHandler('click', '.jfMessage-header-action.forClose');\n this.handleMessageVisibility();\n }\n\n handleMessageVisibility() {\n const {\n onMessageVisibilityChange\n } = this.props;\n\n // remove Tooltip error message when Message component closed\n this.removeTooltipErrorMessage();\n\n this.handleMessageAutoHideFields();\n onMessageVisibilityChange();\n }\n\n handleTooltipClick(e) {\n e.stopPropagation();\n this.removeTooltipErrorMessage();\n }\n\n handleMessageFromChange(messageFromName, messageFrom) {\n this.setState({\n messageFrom,\n messageFromName,\n showMessageFrom: true\n });\n }\n\n handleRecaptchaChange(recapthcaResponse) {\n const {\n attachments\n } = this.state;\n this.setState({\n recapthcaResponse\n });\n\n if (recapthcaResponse) {\n this.footer.current.showCaptcha();\n if (attachments.length > 0) {\n this.prepareFiles();\n } else {\n this.handleSend();\n }\n }\n }\n\n handleRecaptchaRef(ref) {\n this.ReCAPTCHA = ref;\n this.setState({ isRecaptchaReady: true });\n }\n\n handleCancelSenderEmail() {\n this.setState({\n messageFrom: this.lastMessageFrom\n });\n }\n\n handleAddSenderEmail(newSenderEmail) {\n const { senderEmails } = this.state;\n this.setState({\n messageFrom: newSenderEmail.data.emailAddress,\n senderEmails: {\n ...senderEmails,\n [`${newSenderEmail.protocol}:${newSenderEmail.data.emailAddress}`]: newSenderEmail.data\n }\n });\n this.actionHandler('change', `addSenderEmail ${newSenderEmail}`);\n }\n\n handleSend() {\n // Check messageTo/messageFrom field\n const {\n showMessageFrom,\n messageFrom,\n messageFromName,\n recapthcaResponse,\n tagsValueObj,\n messageReplyTo,\n attachments\n } = this.state;\n\n this.data = Object.keys(this.inputRefs).reduce((accum, key) => {\n const { inputValue } = this.inputRefs[key];\n const inputTags = this.inputRefs[key].inputTags && this.inputRefs[key].inputTags.map(tag => { return tag.text; }).join(',');\n const inputTagsValue = this.inputRefs[key].props && this.inputRefs[key].props.value;\n\n return {\n ...accum,\n [key]: inputValue || inputTags || inputTagsValue,\n isValid: accum && (inputValue !== null || inputTags !== null)\n };\n }, { isValid: true });\n\n // if subject is empty, use form title as default subject\n if (this.data.subject === '') {\n this.data.subject = this.initialSubject;\n }\n\n const {\n isValid,\n subject,\n messageTo,\n messageCc,\n messageBcc\n } = this.data;\n\n const mailHeader = {\n subject,\n messageTo,\n messageCc,\n messageBcc,\n messageFrom: this.getMessageFrom(),\n messageReplyTo\n };\n\n // check email\n if (!this.checkTagsValue()) {\n const indexArr = [];\n\n Object.keys(tagsValueObj).find((key, index) => {\n if (!tagsValueObj[key]) {\n indexArr.push(index);\n }\n\n return null;\n });\n\n // Error hierarchy between To, Cc and Bcc\n return this.renderErrorMessage(`Please make sure \"${Object.keys(tagsValueObj)[Math.min(...indexArr)].split('message')[1]}\" adress is proper.`);\n }\n\n if (messageTo === '' || messageTo === null) {\n return this.renderErrorMessage('Please specify at least one recipient.');\n }\n\n if (this.isCaptchaValidationRequired() && !recapthcaResponse) {\n this.footer.current.showCaptcha();\n return false;\n }\n\n if (showMessageFrom && (messageFrom === '' || messageFrom === null)) {\n return this.renderErrorMessage('Please specify from field.');\n }\n\n if (messageFromName === '' || messageFromName === null) {\n return this.renderErrorMessage('Please specify from name.');\n }\n\n // Check message content\n const messageContent = this.editor.getHTML();\n if (messageContent === '') {\n return this.renderErrorMessage('Mail body should not be empty.');\n }\n\n // Clear warning message before sending and start sending process\n this.setState({\n warningText: '',\n disableSend: false,\n hasErrorClass: false\n });\n\n const uploadNames = attachments.map(({ raw }) => raw.name);\n\n // Extract prop methods\n const {\n formID,\n submissionID,\n messageMethod,\n onMessageSendError,\n onMessageSendSuccess,\n onMessageVisibilityChange,\n rmiMailCreate,\n newReplyForwardTemplate,\n project\n } = this.props;\n\n const mail = {\n mailHeader,\n messageContent,\n hasAttachment: uploadNames?.length !== 0,\n uploadNames: JSON.stringify(uploadNames)\n };\n if (isValid) {\n if (rmiMailCreate) {\n rmiMailCreate(mail);\n onMessageVisibilityChange();\n } else {\n const regexForFormFields = /([^{]+)|(\\{[^}]*\\})/g;\n const fixedSubject = subject.match(regexForFormFields) !== null ? subject.match(regexForFormFields).join(' ') : subject;\n\n const sendEmail = sendEmailAPI({\n formID,\n from: messageFrom,\n senderName: messageFromName,\n replyTo: messageReplyTo,\n to: messageTo,\n cc: messageCc,\n bcc: messageBcc,\n subject: fixedSubject,\n body: messageContent,\n type: messageMethod,\n submissionID,\n response: recapthcaResponse,\n rce: 1,\n hasAttachment: uploadNames.length !== 0,\n uploadNames: JSON.stringify(uploadNames),\n newReplyForwardTemplate: newReplyForwardTemplate,\n project,\n brandingDescription: this.brandingDescription\n });\n\n // Make the api call\n sendEmail.then(resp => {\n // Reset ReCAPTCHA\n if (this.isCaptchaValidationRequired()) {\n this.ReCAPTCHA.reset();\n }\n // Clear button disable, and reset recaptcha related states\n this.setState({\n disableSend: false,\n recapthcaResponse: ''\n });\n\n this.footer.current.showCaptcha(false);\n\n if (resp) {\n // Call success callback\n onMessageSendSuccess(resp);\n }\n\n // Hide message container\n onMessageVisibilityChange();\n })\n .catch(error => {\n const errorMessage = error.response && error.response.data ? error.response.data.error : '';\n\n // Clear button disable\n this.setState({\n warningText: errorMessage,\n disableSend: false\n });\n\n // Call error callback\n onMessageSendError(error);\n });\n }\n }\n }\n\n handleDrop(e) {\n const {\n hasAttachment\n } = this.props;\n e.preventDefault();\n e.stopPropagation();\n\n if (hasAttachment) {\n const files = e.target.files || e.dataTransfer.files;\n const { editor, scrollContainer } = this;\n this.handleFiles([...files]);\n this.actionHandler('change', 'attachmentAdded');\n setTimeout(() => {\n scrollContainer.current?.scrollTo(0, scrollContainer?.current.scrollHeight);\n editor?.focus();\n }, 200);\n }\n }\n\n handleFiles(files) {\n const {\n uploadRules\n } = this.props;\n files.forEach((file, i) => {\n const reader = new global.FileReader();\n reader.addEventListener('load', result => {\n const newFile = {\n key: `${file.name}-${i}`,\n src: result,\n size: formatBytes(file.size),\n name: file.name,\n raw: file,\n error: file.size > uploadRules?.sizePerFile\n };\n this.setState(prevState => ({\n attachments: [...prevState.attachments, newFile]\n }));\n });\n reader.readAsDataURL(file);\n });\n }\n\n onFormFieldAdd = addedField => {\n const { actionHandler } = this.props;\n const submissionTableContainer = this.editorDiv.querySelector('.submissonTable');\n this.editor.setSelection(this.editor._lastSelection);\n if (submissionTableContainer && submissionTableContainer.contains(this.editor._lastSelection.commonAncestorContainer)) {\n // eslint-disable-next-line no-undef\n const range = new Range();\n range.setStart(submissionTableContainer?.nextSibling, 0);\n range.setEnd(submissionTableContainer?.nextSibling, 0);\n this.editor.setSelection(range);\n }\n this.editor.insertHTML(addedField[0]);\n actionHandler('change', 'formFieldAddedOnMail');\n };\n\n setEnabled() {\n const {\n isMessageMailtoBCCEnabled, messageBcc, isMessageMailtoCCEnabled, messageCc\n } = this.state;\n const isBccEnabled = isMessageMailtoBCCEnabled && messageBcc.length <= 0;\n const isCCEnabled = isMessageMailtoCCEnabled && messageCc.length <= 0;\n this.setState({\n isBlured: 'editor',\n isMessageMailtoCCEnabled: isCCEnabled ? false : isMessageMailtoCCEnabled,\n isMessageMailtoBCCEnabled: isBccEnabled ? false : isMessageMailtoBCCEnabled\n });\n }\n\n setMailCcVisibility(key) {\n this.setState({\n [key]: false\n });\n }\n\n getMessageFrom() {\n // Fixes #4092673 let me know if something comes up please @gokay\n const { user } = this.props;\n // eslint-disable-next-line react/prop-types\n const { senderEmails: senderEmailsObj = {} } = user || {};\n const { messageFrom } = this.state;\n const senderEmails = Object.keys(senderEmailsObj);\n return senderEmails.some(x => x.includes(messageFrom)) ? `smtp:${messageFrom}` : messageFrom;\n }\n\n setEmailContents() {\n const {\n requestEmailContents, answers, contentStatus, onLoaded\n } = this.props;\n Promise.resolve(requestEmailContents(answers)).then(content => {\n this.editor.setHTML(content);\n if (contentStatus === 'ready') onLoaded();\n });\n }\n\n setInputRef = emailType => r => {\n this.inputRefs[emailType] = r;\n };\n\n setInputCounts(e) {\n const { isMessageMailtoCCEnabled, isMessageMailtoBCCEnabled } = this.state;\n if (e.propertyName === 'transform') {\n this.inputRefs.messageTo?.setHiddenCount();\n }\n if (isMessageMailtoCCEnabled) this.inputRefs.messageCc?.setHiddenCount();\n if (isMessageMailtoBCCEnabled) this.inputRefs.messageBcc?.setHiddenCount();\n }\n\n get messageClassNames() {\n const {\n isMessageMinimized,\n isMessageFullScreen,\n isMessageOpen,\n isResizing,\n isResized\n } = this.state;\n const {\n className\n } = this.props;\n\n return [\n 'jfMessage',\n isMessageOpen && 'isVisible',\n isMessageMinimized && 'isMinimized',\n isMessageFullScreen && 'isBig',\n isResizing && 'isResizing',\n isResized && 'isResized',\n className && className\n\n ].filter(a => a).join(' ');\n }\n\n get renderComponent() {\n this.inputRefs = {};\n\n const {\n actionHandler,\n titleIcon,\n requestMore,\n toLeft,\n hasAttachment,\n uploadRules: {\n numberPerUpload,\n formattedSizePerFile\n },\n formArray,\n mailToPlaceholder,\n withSubmissionTableProps,\n showAddFields,\n contentStatus,\n user,\n recaptchaSite\n } = this.props;\n const {\n title,\n subject,\n isMessageMinimized,\n isMessageFullScreen,\n isMessageMailtoCCEnabled,\n isMessageMailtoBCCEnabled,\n path,\n disableSend,\n warningText,\n showMinimizeButton,\n showChangeMessageViewModeButton,\n messageTo,\n messageCc,\n messageBcc,\n attachments,\n loading,\n isAttachmentError,\n isBlured,\n isFreeUser,\n isReachedLimitTO,\n isReachedLimitCC,\n isReachedLimitBCC,\n isReachedLimitBSG,\n inputLimitTO,\n inputLimitCC,\n inputLimitBCC,\n inputLimitBSG,\n messageFrom,\n customSenders\n } = this.state;\n const isEnterprise = isEnterpriseFunc();\n const defaultFrom = isEnterprise ? 'noreply@formresponse.com' : 'noreply@jotform.com';\n const userType = this.userPlans;\n const isUserBSG = PAID_PLANS.includes(userType);\n const isVisibleInInbox = withSubmissionTableProps;\n\n return (\n <>\n
    \n \n {titleIcon}\n {title}\n
    \n
    \n { showMinimizeButton\n && (\n \n
    \n \n
    \n
    \n )}\n { showChangeMessageViewModeButton\n && (\n \n {isMessageFullScreen ? : }\n \n )}\n \n \n \n \n \n
    \n \n
    \n
    \n \n
    \n
    \n {t('From: ')}\n
    \n {messageFrom ? getSenderEmail(customSenders, messageFrom) || messageFrom : defaultFrom}\n
    \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n Cc\n
    \n \n Bcc\n
    \n
    \n }\n text=\"\"\n align=\"Center\"\n />\n {\n this.setState({\n isBlured: 'messageTo'\n });\n }}\n ref={this.mailToWrapper}\n className={`${isBlured !== 'messageTo' ? 'tagBlured' : ''} jfMessage-mailto-line-wrapper withValidatedInput`}\n >\n {toLeft}\n this.handleTagsChange('messageTo')}\n isRequired\n shouldUnique={true}\n ref={this.setInputRef('messageTo')}\n requestMore={requestMore}\n placeholder={mailToPlaceholder}\n isMessageFullScreen={isMessageFullScreen}\n />\n \n \n
    \n }\n text=\"\"\n align=\"Center\"\n />\n {\n this.setState({\n isBlured: 'messageCc'\n });\n }}\n className={`${isBlured !== 'messageCc' ? 'tagBlured' : ''} jfMessage-mailto-line-wrapper withValidatedInput`}\n >\n this.handleTagsChange('messageCc')}\n onSuccessValidation={this.removeTooltipErrorMessage}\n shouldUnique={true}\n ref={this.setInputRef('messageCc')}\n placeholder={mailToPlaceholder}\n />\n
    \n \n
    \n }\n text=\"\"\n align=\"Center\"\n />\n {\n this.setState({\n isBlured: 'messageBcc'\n });\n }}\n className={`${isBlured !== 'messageBcc' ? 'tagBlured' : ''} jfMessage-mailto-line-wrapper withValidatedInput`}\n >\n this.handleTagsChange('messageBcc')}\n onSuccessValidation={this.removeTooltipErrorMessage}\n // onBlur={(e) => { this.handleMessageEmptyFields(e); }}\n shouldUnique={true}\n ref={this.setInputRef('messageBcc')}\n placeholder={mailToPlaceholder}\n />\n
    \n \n \n
    \n
    \n }\n text=\"\"\n align=\"Center\"\n />\n
    \n { this.setState({ subject: v }); }}\n ref={this.setInputRef('subject')}\n onAddTag={() => this.actionHandler('change', 'formFieldAddedOnSubject')}\n onRemove={() => this.actionHandler('change', 'formFieldRemovedOnSubject')}\n />\n
    \n
    \n
    \n \n\n
    \n
    \n { this.editorDiv = editorDiv; }}\n style={{ height: '100%', fontSize: '14px' }}\n />\n {isFreeUser && }\n { hasAttachment\n && attachments.length > 0 && (\n
    \n {\n attachments.map(({\n key, name, size, src, error\n }, i) => (\n \n \n
    \n {name}\n
    \n
    \n (\n {size}\n )\n
    \n
    \n {error ? (\n \n {`File size cannot be larger than ${formattedSizePerFile}.`}\n
    \n ) : (\n \n \n
    \n )}\n {\n if (!loading) {\n this.setState({ attachments: attachments.filter(file => file.key !== key) });\n this.actionHandler('change', 'attachmentRemoved');\n }\n }}\n role=\"button\"\n aria-label={t('Remove attachment')}\n tabIndex=\"-1\"\n >\n \n \n \n ))\n }\n {\n attachments.length > numberPerUpload && (\n
    \n {\n `You can only upload ${numberPerUpload} files.`\n }\n
    \n )\n }\n \n )}\n \n \n
    \n
    \n \n {t('To add more than one recipient, please ')}\n \n {t('upgrade your account.')}\n \n
    \n
    \n \n \n
    \n
    \n \n \n \n {t('Upgrade to Jotform Enterprise to add more recipients.')}\n
    \n
    \n \n {t('Contact Sales')}\n \n \n {t('Learn More')}\n \n
    \n
    \n \n \n \n 0 && hasAttachment ? this.prepareFiles : this.handleSend,\n editor: this.editor,\n recaptchaRefSetter: this.handleRecaptchaRef,\n ref: this.footer,\n formArray: formArray,\n actionHandler,\n withSubmissionTableProps: withSubmissionTableProps,\n showAddFields,\n onFormFieldAdd: this.onFormFieldAdd,\n isLoaded: contentStatus === 'ready',\n user: user,\n recaptchaSite\n }}\n />\n \n \n );\n }\n\n get renderStatic() {\n return (\n
    \n {this.renderComponent}\n
    \n );\n }\n\n get renderResizable() {\n const { isMessageFullScreen, hasErrorClass } = this.state;\n\n return (\n {\n this.setState({ isResizing: false });\n }}\n onResizeStart={() => {\n this.setState({ isResizing: true });\n this.setState({ isResized: true });\n }}\n enable={{\n top: !isMessageFullScreen,\n left: !isMessageFullScreen,\n topLeft: !isMessageFullScreen\n }}\n >\n {this.renderComponent}\n \n );\n }\n\n getEmailCount(emails) {\n if (emails === '') {\n return { validEmailsCount: 0, invalidEmailsCount: 0, totalEmailsCount: 0 };\n }\n\n const preEmailArray = emails.split(',');\n\n const {\n valid: validEmails,\n invalid: invalidEmails\n } = preEmailArray.reduce((emailArr, email) => {\n const validatedEmail = validateEmail(email?.trim());\n if (validatedEmail) {\n emailArr.valid.push(email?.trim());\n } else {\n emailArr.invalid.push(email?.trim());\n }\n return emailArr;\n }, { valid: [], invalid: [] });\n\n const totalEmailsCount = validEmails?.length + invalidEmails?.length;\n\n return { validEmailsCount: validEmails?.length, invalidEmailsCount: invalidEmails?.length, totalEmailsCount };\n }\n\n get userPlans() {\n const { user } = this.props;\n const { account_type: accountType } = user;\n\n return accountType.name;\n }\n\n checkEmailRecipientLimits() {\n const { messageTo, messageBcc, messageCc } = this.state;\n\n const userType = this.userPlans;\n const isUserBSG = PAID_PLANS.includes(userType);\n\n const messageToCount = this.getEmailCount(messageTo);\n const messageCcCount = this.getEmailCount(messageCc);\n const messageBccCount = this.getEmailCount(messageBcc);\n\n const BSGLimitCount = (messageToCount?.validEmailsCount + messageCcCount?.validEmailsCount + messageBccCount?.validEmailsCount);\n\n // BSG Total limit count for input limitation\n const BSGTotalLimitCount = (messageToCount?.totalEmailsCount + messageCcCount?.totalEmailsCount + messageBccCount?.totalEmailsCount);\n\n if (userType === 'FREE') {\n this.setState({\n isReachedLimitTO: messageToCount?.validEmailsCount > 0,\n isReachedLimitCC: messageCcCount?.validEmailsCount > 0,\n isReachedLimitBCC: messageBccCount?.validEmailsCount > 0,\n inputLimitTO: messageToCount?.totalEmailsCount > 0,\n inputLimitCC: messageCcCount?.totalEmailsCount > 0,\n inputLimitBCC: messageBccCount?.totalEmailsCount > 0\n });\n return;\n }\n\n if (isUserBSG) {\n this.setState({\n isReachedLimitBSG: BSGLimitCount >= 10,\n inputLimitBSG: BSGTotalLimitCount >= 10\n });\n return null;\n }\n }\n\n validateUploadFiles() {\n const {\n uploadRules: {\n sizePerFile,\n formattedSizePerFile,\n numberPerUpload\n }\n } = this.props;\n const { attachments } = this.state;\n\n const isSizePerFileExceeded = attachments.some(({ raw }) => raw.size > sizePerFile);\n const isNumberPerUploadExceeded = attachments.length > numberPerUpload;\n\n if (isSizePerFileExceeded) {\n this.renderErrorMessage(`File size cannot be larger than ${formattedSizePerFile}.`, true);\n } else if (isNumberPerUploadExceeded) {\n this.renderErrorMessage(`You can only upload ${numberPerUpload} files.`, true);\n } else {\n this.removeTooltipErrorMessage();\n }\n }\n\n // TODO WILL BE RECONFIGURED\n moveProgressBar(percent, index) {\n const elem = document.querySelector(`#progressBar-${index}`);\n\n if (elem?.style?.display === 'none') {\n elem.style.display = 'block';\n }\n const bar = elem.querySelector('.bar');\n const { width } = bar.style;\n if (width !== '100%' && percent !== 100) {\n bar.style.width = `${percent}%`;\n } else {\n elem.style.display = 'none';\n }\n }\n\n async uploadFiles(raw, index) {\n const {\n formID,\n project\n } = this.props;\n const fd = new global.FormData();\n fd.append('file[]', raw, raw.name);\n\n try {\n const { data: { message, success } } = await axios.post(\n `/API/${project}/form/${formID}/projectFiles`,\n fd,\n {\n onUploadProgress: progressEvent => {\n const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);\n this.moveProgressBar(percentCompleted, index);\n },\n headers: { 'Content-Type': 'multipart/form-data', 'jf-team-id': window.teamID },\n withCredentials: true\n }\n );\n\n if (success) {\n return true;\n }\n this.renderErrorMessage(message);\n } catch (err) {\n this.renderErrorMessage(err);\n }\n }\n\n prepareFiles() {\n const {\n attachments,\n loading,\n recapthcaResponse,\n warningText\n } = this.state;\n if (!loading && warningText === '') {\n if (this.isCaptchaValidationRequired() && !recapthcaResponse) {\n this.footer.current.showCaptcha();\n return false;\n }\n if (recapthcaResponse) {\n this.footer.current.showCaptcha(false);\n }\n this.setState({\n loading: true\n });\n\n try {\n let uploadCount = 0;\n attachments.forEach(async ({ raw }, i) => {\n const isUploaded = await this.uploadFiles(raw, i);\n\n if (isUploaded) {\n uploadCount++;\n }\n if (uploadCount === attachments.length) {\n this.handleSend();\n }\n });\n } catch (err) {\n this.renderErrorMessage(err);\n } finally {\n this.setState({\n loading: false\n });\n }\n }\n }\n\n additionalCheckForEmail(email) {\n if (\n !document\n && !document.createElement\n ) return true;\n\n const input = document.createElement('input');\n input.setAttribute('type', 'email');\n input.setAttribute('id', email);\n input.value = email;\n\n return input && input.validity && input.validity.valid;\n }\n\n checkTagsValue(arr = [], type) {\n const { tagsValueObj } = this.state;\n\n if (type) {\n let status = !arr || arr.length < 1;\n\n for (let i = 0; i < arr.length; i++) {\n const email = arr[i].text;\n\n if (\n !this.additionalCheckForEmail(email)\n || !validateEmail(email?.trim())\n ) {\n status = false;\n this.setState({\n disableSend: true\n });\n break;\n }\n\n this.setState({\n disableSend: false\n });\n status = true;\n }\n\n this.setState(prevState => ({\n tagsValueObj: {\n ...prevState.tagsValueObj,\n [type]: status\n }\n }));\n }\n\n return Object.keys(tagsValueObj).every(key => tagsValueObj[key]);\n }\n\n purifyInputContent(e) {\n if (e.key !== 'Enter' && e.key !== 'Backspace') {\n editorInputHandler(this.editor);\n }\n }\n\n removeTooltipErrorMessage() {\n this.setState({\n warningText: '',\n hasErrorClass: false,\n isAttachmentError: false\n });\n }\n\n isCaptchaValidationRequired() {\n const {\n user: { account_type: { name: accountType = null } = {}, isReviewed }\n } = this.props;\n\n if (global.location.hostname === 'www.jotform.ooo') {\n return false;\n }\n\n return (!isReviewed || ['GUEST', 'FREE'].indexOf(accountType) > -1);\n }\n\n // eslint-disable-next-line react/sort-comp\n logReplyToEmailChange = debounce(() => {\n const {\n messageReplyTo: currReplyEmail\n } = this.props;\n const {\n messageReplyTo: updatedReplyEmail\n } = this.state;\n\n if (currReplyEmail !== updatedReplyEmail) {\n this.actionHandler('change', 'NewReplytoEmailAdded');\n }\n }, 5000);\n\n renderErrorMessage(msg, isAttachmentError = false) {\n return this.setState({\n warningText: t(msg),\n hasErrorClass: true,\n isAttachmentError\n });\n }\n\n renderMessageSettingsFormFields() {\n const { modalContainer } = this.props;\n\n const {\n messageFrom, messageFromName, messageReplyTo, senderEmails, customSenders\n } = this.state;\n const renderReplyTo = () => (\n this.setState({ messageReplyTo: value })}\n onKeyDown={this.logReplyToEmailChange}\n />\n );\n\n const { user: userData } = this.props;\n return [\n // {\n // fieldTitle: t('Sender Name'),\n // element: this.setState({ messageFromName: e.target.value })} />\n // },\n {\n fieldTitle: t('Reply-to Email'),\n element: renderReplyTo()\n },\n {\n fieldTitle: t('Sender Email'),\n fieldSubTitle: t(\"Users can receive emails using your own SMTP server instead of Jotform's servers.\"),\n element: {\n this.handleMessageFromChange(sender, senderEmail);\n if (senderEmail === 'noreply@formresponse.com') {\n this.actionHandler('change', 'FormresponseSelected');\n }\n }}\n modalContainer={modalContainer}\n />\n }\n ];\n }\n\n render() {\n const {\n renderStatic, renderResizable, props: { resizable }, state: { isSettingsOpen }\n } = this;\n return (\n <>\n }\n />\n
    \n {resizable ? renderResizable : renderStatic }\n
    \n \n );\n }\n}\n\n// eslnt does not play well with getDerivedStateFromProps. See https://github.com/yannickcr/eslint-plugin-react/issues/1759\nMessage.propTypes = {\n /** User as received from JotForm API */\n user: PropTypes.shape({\n isReviewed: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool\n ]),\n account_type: PropTypes.oneOfType([PropTypes.shape({\n name: PropTypes.string\n }), PropTypes.string]),\n senderEmails: PropTypes.shape({}),\n username: PropTypes.string\n }),\n uploadRules: PropTypes.shape({\n sizePerFile: PropTypes.number, // 5MB per file\n formattedSizePerFile: PropTypes.string,\n numberPerUpload: PropTypes.number\n }),\n /** Title of the message popover */\n title: PropTypes.string, // eslint-disable-line react/no-unused-prop-types\n titleIcon: PropTypes.node,\n /** JotForm form id */\n formID: PropTypes.string,\n /** Subject line for for email */\n subject: PropTypes.string, // eslint-disable-line react/no-unused-prop-types\n /** Default e-mail address to send e-mail to */\n messageTo: PropTypes.string,\n /** Default e-mail address to reply e-mail to */\n messageReplyTo: PropTypes.string,\n /** Default sender e-mail - will default to noreply if does not match an SMTP record on user's settings */\n messageFrom: PropTypes.string,\n /** Default sender name */\n messageFromName: PropTypes.string,\n /** Method accepted by JotForm e-mail API ('submissions-reply', 'submissions-forward') */\n messageMethod: PropTypes.string,\n /** An object/array to be passed to requestEmailContents */\n answers: PropTypes.arrayOf(PropTypes.shape({})),\n /** Whether to display the popover */\n isMessageOpen: PropTypes.bool,\n /**\n * Whether to display Message in regular size or fullscreen ('regular'|'fullscreen')\n */\n messageViewMode: PropTypes.string,\n /**\n * Whether to display minimize action button\n */\n showMinimizeButton: PropTypes.bool,\n /**\n * Whether to display change message view mode action button\n */\n showChangeMessageViewModeButton: PropTypes.bool,\n /** Callback to handle close action on the popover.\n * You can set isMessageOpen to false.\n */\n onMessageVisibilityChange: PropTypes.func,\n /** There was an error sending the message */\n onMessageSendError: PropTypes.func,\n /** Message is successfully sent */\n onMessageSendSuccess: PropTypes.func,\n /** A callback to generate the contents of the e-mail body.\n * You can return the value as a string or a Promise resolving into a string.\n */\n requestEmailContents: PropTypes.func,\n /** Handler to handle watchman events. Accepts an action and a target. */\n actionHandler: PropTypes.func,\n /** Defines whether the component is resizable or not */\n resizable: PropTypes.bool,\n mailToPlaceholder: PropTypes.string,\n hasAttachment: PropTypes.bool,\n project: PropTypes.string,\n modalContainer: PropTypes.node,\n submissionID: PropTypes.string,\n contentStatus: PropTypes.oneOf(['loading', 'ready', false]),\n toLeft: PropTypes.node,\n rmiMailCreate: PropTypes.func,\n requestMore: PropTypes.bool,\n onLoaded: PropTypes.func,\n /** Form fields for add to subject */\n formArray: PropTypes.array,\n withSubmissionTableProps: PropTypes.shape({\n submissionTable: PropTypes.string\n }),\n showAddFields: PropTypes.bool,\n newReplyForwardTemplate: PropTypes.bool,\n className: PropTypes.string,\n recaptchaSite: PropTypes.string\n};\n\nMessage.defaultProps = {\n user: {\n isReviewed: false,\n account_type: {\n name: ''\n },\n username: ''\n },\n onLoaded: f => f,\n uploadRules: {\n sizePerFile: 5000000, // 5MB per file\n formattedSizePerFile: '5 MB',\n numberPerUpload: 3\n },\n title: '',\n titleIcon: null,\n subject: '',\n formID: '',\n messageTo: '',\n messageFrom: '',\n messageFromName: 'Jotform',\n messageReplyTo: '',\n messageMethod: '',\n mailToPlaceholder: '',\n answers: [],\n isMessageOpen: false,\n messageViewMode: 'regular',\n showMinimizeButton: true,\n showChangeMessageViewModeButton: true,\n hasAttachment: false,\n project: '',\n onMessageVisibilityChange: f => f,\n onMessageSendError: f => f,\n onMessageSendSuccess: f => f,\n requestEmailContents: f => f,\n actionHandler: f => f,\n resizable: false,\n modalContainer: null,\n submissionID: '',\n contentStatus: false,\n toLeft: null,\n rmiMailCreate: null,\n requestMore: false,\n formArray: [],\n withSubmissionTableProps: null,\n showAddFields: false,\n newReplyForwardTemplate: false,\n className: '',\n recaptchaSite: ''\n};\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport { string } from 'prop-types';\nimport React from 'react';\n\nconst RequestMoreInfo = ({\n emailContentTitle,\n editLink,\n editLinkText\n}) => {\n return (\n
    \n
    \n {emailContentTitle}\n
    \n
    \n \n \n {editLinkText}\n \n
    \n );\n};\n\nRequestMoreInfo.propTypes = {\n editLink: string.isRequired,\n editLinkText: string,\n emailContentTitle: string.isRequired\n};\n\nRequestMoreInfo.defaultProps = {\n editLinkText: 'Edit'\n};\n\nexport default RequestMoreInfo;\n","import RequestMoreInfo from './RequestMoreInfo';\n\nexport default {\n RequestMoreInfo\n};\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport { string } from 'prop-types';\nimport React from 'react';\nimport { Templates } from '@jotforminc/message';\n\nimport {\n formPropType,\n submissionPropType,\n translatedProps\n} from '../../constants/proptypes';\nimport t from '../../constants/texts';\n\nconst RequestMoreEmail = ({\n submission, form, taskID\n}) => {\n if (!form) return null;\n\n const {\n title\n } = form;\n\n const {\n id: submissionID\n } = submission;\n\n const editLink = `${global.document.location.origin}/edit/${submissionID}?taskID=${taskID}&requestMoreInfo=1`;\n\n const emailContentTitle = `We need more information about your ${title} submission. Use Edit Submission button to update your submission.`;\n\n return (\n \n );\n};\n\nRequestMoreEmail.propTypes = {\n form: formPropType.isRequired,\n submission: submissionPropType.isRequired,\n taskID: string.isRequired,\n ...translatedProps\n};\n\nexport default RequestMoreEmail;\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport React from 'react';\nimport {\n bool,\n string\n} from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport {\n formPropType,\n submissionPropType\n} from '../../constants/proptypes';\nimport RequestMoreEmail from '../RequestMoreEmail';\n\nconst EmailPreContent = ({\n submission, form, requestMore, taskID\n}) => {\n if (!form) return null;\n\n const style = { fontSize: '14px !important', lineHeight: '22px !important', margin: '0 !important' };\n return (\n
    \n {requestMore && taskID\n ? (\n \n )\n : (\n <>\n
    \n
    \n {t('Hi,')}\n
    \n {t('You can see the submission data below:')}\n
    \n
    \n \n )}\n
    \n
    \n );\n};\n\nEmailPreContent.propTypes = {\n form: formPropType.isRequired,\n submission: submissionPropType.isRequired,\n requestMore: bool.isRequired,\n taskID: string\n};\n\nEmailPreContent.defaultProps = {\n taskID: null\n};\n\nexport default EmailPreContent;\n","/* eslint-disable max-statements */\n/* eslint-disable max-len */\n/* eslint-disable no-unused-expressions */\nimport React, {\n forwardRef, useEffect, useMemo, useState\n} from 'react';\nimport {\n bool,\n string,\n func,\n arrayOf,\n oneOfType,\n shape,\n node\n} from 'prop-types';\nimport { toast } from 'react-toastify';\nimport {\n useWorkflow\n} from '@jotforminc/workflow-components';\nimport { Message as NewMessage } from '@jotforminc/message';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\nimport {\n assert,\n prepareMailContentLight,\n getSubmissionDateLanguage,\n prepareFormFieldsOptions\n} from '../../utils';\n\nimport {\n formPropType,\n userPropType,\n submissionPropType,\n questionsPropType,\n translatedProps,\n NUMBER_OR_STRING_PROPTYPE\n} from '../../constants/proptypes';\nimport EmailPreContent from '../MailPreContent';\nimport SVG from '../SVG';\nimport { requestMoreInfoTask } from '../../api';\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\nimport { MESSAGE_TYPES } from '../../constants';\n\nconst Mail = forwardRef(({\n user,\n form,\n submission: { answers },\n fullNameQid,\n emailQid,\n isReply,\n containerSelector,\n onVisibilityChange,\n onError,\n onSuccess,\n isOpen,\n questions,\n questionOrders,\n submission,\n hideEmptyFields,\n hideHeaderAndText,\n submissionDateFormat,\n useAPI,\n t,\n toLeft,\n editorTitle,\n requestMore,\n taskID,\n preContent,\n editorSize,\n messageToReply,\n messageToForward,\n eventTarget,\n isReplyVisibleCustom,\n className,\n isOpened,\n actionHandler,\n recaptchaSite\n}, mailRef) => {\n const {\n id,\n title,\n products,\n paymentStrings\n } = form;\n\n const { onTaskListRenew } = useWorkflow();\n const formArray = prepareFormFieldsOptions([form]);\n const submissionDateLanguage = getSubmissionDateLanguage(user, form);\n const containerDom = global.document.querySelector(containerSelector);\n assert(containerDom !== null, new Error(`Mail container could not be found by given selector: ${containerSelector}`));\n\n const fullName = (fullNameQid && answers[fullNameQid]) ? answers[fullNameQid].prettyFormat : '';\n const pureQuestionOrders = questionOrders.filter(qid => qid !== 'created_at');\n const emailAddresses = emailQid.length > 0 ? emailQid.map(qid => {\n if (qid.qid) {\n if (typeof answers[qid.qid].answer === 'object') {\n return answers[qid.qid].answer[`field_${qid.fieldID}`];\n }\n return '';\n }\n return (answers[qid] || {}).answer || '';\n }).filter(mail => mail) : [];\n\n const getVisibleEmailAddresses = emailQid.length > 0 ? emailQid.map(qid => {\n if (qid.qid) {\n if (typeof answers[qid.qid].answer === 'object') {\n return answers[qid.qid].answer[`field_${qid.fieldID}`];\n }\n return '';\n }\n if (questions[qid]?.hidden !== 'Yes') {\n return (answers[qid] || {}).answer || '';\n }\n return '';\n }).filter(mail => mail) : [];\n\n const orderedQuestions = useMemo(() => {\n return questionOrders.map((qid, index) => {\n return { ...questions[qid], order: index };\n });\n }, [questions, questionOrders]);\n\n const handleMessageSendSuccess = () => {\n const action = isReplyVisibleCustom ? 'EmailClick&' : '';\n const flow = isReply ? 'Reply' : 'Forward';\n const actionFlow = action + flow;\n\n WatchmanRecorder.recordEvent(`${actionFlow}-SendEmail`, eventTarget);\n\n onSuccess();\n toast.success(t.EMAIL_SENT_SUCCESSFULLY, {\n type: toast.TYPE.SUCCESS,\n position: toast.POSITION.TOP_RIGHT,\n className: 'success'\n });\n };\n // TODO: Full render deosnt work currently with mail component\n if (process.env.NODE_ENV === 'test') {\n return null;\n }\n\n const mailContent = async () => {\n if (!isOpen) return '';\n if (preContent && preContent.indexOf('quotationWrapper') > -1) {\n return preContent;\n }\n const mailBody = await prepareMailContentLight(\n ,\n isReply,\n title,\n {\n email: emailAddresses[0] || '',\n name: fullName\n },\n submission,\n submissionDateFormat\n );\n return preContent + mailBody;\n };\n\n const [contentState, setContentState] = useState({\n mailContent: () => '',\n contentStatus: 'loading'\n });\n\n useEffect(() => {\n if (!isOpened) return;\n const { editorDiv } = mailRef.current;\n\n if (isReply) {\n return editorDiv.focus?.();\n }\n\n // i hate this line\n return editorDiv.parentElement.parentElement.querySelector('.jfMessage-mailto-line-input')?.focus?.();\n }, [isOpened]);\n\n useEffect(() => {\n if (!isOpened) return;\n setContentState({\n mailContent: mailContent,\n contentStatus: 'ready'\n });\n }, [isOpened]);\n\n const handleRmiMailCreate = mailData => {\n // send RMI API Request\n // update Thread and show RMI entry\n if (taskID && mailData) {\n requestMoreInfoTask(taskID, mailData).then(() => {\n toast.success(t.EMAIL_SENT_SUCCESSFULLY, {\n type: toast.TYPE.SUCCESS,\n position: toast.POSITION.TOP_RIGHT,\n className: 'success'\n });\n onTaskListRenew();\n });\n }\n };\n\n const emailSubject = requestMore ? `We need more information about your submission for ${title}` : title;\n\n const messageToRequestMore = getVisibleEmailAddresses.length > 0 ? getVisibleEmailAddresses[0] : '';\n const messageTo = messageToReply || (emailAddresses.length ? emailAddresses.join(',') : '');\n const to = requestMore ? messageToRequestMore : messageTo;\n\n return (\n <>\n }\n onMessageVisibilityChange={() => {\n if (onVisibilityChange) onVisibilityChange();\n }}\n onMessageSendError={onError}\n onMessageSendSuccess={handleMessageSendSuccess}\n requestEmailContents={contentState.mailContent}\n useAPI={useAPI}\n toLeft={toLeft}\n messageViewMode={editorSize}\n // resizable\n rmiMailCreate={requestMore && handleRmiMailCreate}\n requestMore={requestMore}\n contentStatus={contentState.contentStatus}\n formArray={formArray}\n withSubmissionTableProps={{\n questions: orderedQuestions,\n submitButtonText: 'Create',\n hideEmptyFields: hideEmptyFields,\n hideHeaderAndText: hideHeaderAndText,\n submission: submission\n }}\n newReplyForwardTemplate\n showAddFields={answers}\n actionHandler={actionHandler}\n recaptchaSite={recaptchaSite}\n />\n \n );\n});\n\nMail.propTypes = {\n questionOrders: arrayOf(NUMBER_OR_STRING_PROPTYPE).isRequired,\n questions: questionsPropType.isRequired,\n form: formPropType.isRequired,\n user: userPropType.isRequired,\n submission: submissionPropType.isRequired,\n isReply: bool.isRequired,\n isOpen: bool.isRequired,\n containerSelector: string,\n submissionDateFormat: string.isRequired,\n onVisibilityChange: func.isRequired,\n hideEmptyFields: bool.isRequired,\n hideHeaderAndText: bool.isRequired,\n onError: func,\n onSuccess: func,\n fullNameQid: NUMBER_OR_STRING_PROPTYPE,\n emailQid: arrayOf(oneOfType([string, shape({})])).isRequired,\n useAPI: bool,\n toLeft: node,\n requestMore: bool,\n taskID: string,\n preContent: string,\n editorSize: string,\n messageToReply: string,\n messageToForward: string,\n className: string,\n isReplyVisibleCustom: oneOfType([bool, string]),\n actionHandler: func,\n recaptchaSite: string,\n ...translatedProps\n};\n\nMail.defaultProps = {\n onError: f => f,\n onSuccess: f => f,\n fullNameQid: null,\n containerSelector: '#reply-content',\n useAPI: false,\n requestMore: false,\n className: 'custom',\n toLeft: null,\n taskID: null,\n preContent: '',\n editorSize: '',\n messageToReply: '',\n messageToForward: '',\n isReplyVisibleCustom: false,\n actionHandler: f => f,\n recaptchaSite: ''\n};\n\nexport default Mail;\n","import React from 'react';\nimport {\n string,\n func,\n node,\n number\n} from 'prop-types';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport classNames from 'classnames';\n\nimport SVG from '../SVG';\nimport { translatedProps } from '../../constants/proptypes';\n\nconst ReplyButton = ({\n disabled,\n onClick,\n iconName,\n className,\n t,\n children,\n tabIndex\n}) => {\n return (\n }\n onClick={onClick}\n disabled={disabled}\n aria-label={t.REPLY}\n tabIndex={tabIndex}\n >\n {children || t.REPLY}\n \n );\n};\n\nReplyButton.propTypes = {\n disabled: string,\n onClick: func.isRequired,\n iconName: string,\n children: node,\n tabIndex: number,\n ...translatedProps\n};\n\nReplyButton.defaultProps = {\n disabled: '',\n iconName: 'IconReply',\n children: undefined,\n tabIndex: -1\n};\n\nexport default ReplyButton;\n","import React from 'react';\nimport { func, string } from 'prop-types';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport classNames from 'classnames';\n\nimport SVG from '../SVG';\nimport { translatedProps } from '../../constants/proptypes';\n\nconst ForwardButton = ({\n onClick,\n disabled,\n iconName,\n className,\n t, // eslint-disable-line\n}) => {\n return (\n }\n onClick={onClick}\n disabled={disabled}\n >\n {t.FORWARD}\n \n );\n};\n\nForwardButton.propTypes = {\n disabled: string,\n onClick: func.isRequired,\n iconName: string,\n ...translatedProps\n};\n\nForwardButton.defaultProps = {\n disabled: '',\n iconName: 'IconForward'\n};\n\nexport default ForwardButton;\n","import React from 'react';\nimport { func, string } from 'prop-types';\nimport { ButtonField as Button } from '@jotforminc/button-field';\n\nimport SVG from '../SVG';\nimport { translatedProps } from '../../constants/proptypes';\n\nconst PDFEditorButton = ({\n onClick,\n t, // eslint-disable-line,\n disabled,\n iconName\n}) => {\n return (\n }\n onClick={onClick}\n disabled={disabled}\n >\n {t.OPEN_IN_PDF_EDITOR}\n \n );\n};\n\nPDFEditorButton.propTypes = {\n onClick: func.isRequired,\n iconName: string,\n ...translatedProps\n};\n\nPDFEditorButton.defaultProps = {\n iconName: 'IconDocumentPdfFilled'\n};\n\nexport default PDFEditorButton;\n","import React, { useState } from 'react';\nimport { connect } from 'react-redux';\nimport { string, bool, func } from 'prop-types';\nimport { FlushPrivateKeysWizard, ManageEncryptionButton } from '@jotforminc/form-encryption';\nimport { setDecryptionModal } from '../../actions';\n\nimport { translatedProps } from '../../constants/proptypes';\nimport { formIDSelector } from '../../selectors';\n\nconst EncryptionButton = ({\n formID,\n isSubmissionsIncludeEncryptedEntry,\n hasEncryptionKey,\n setDecryptionModalVisibility,\n user\n}) => {\n const [isEncryptionModalVisible, setEncryptionModalVisible] = useState(false);\n const formPreviouslyEncrypted = isSubmissionsIncludeEncryptedEntry && !hasEncryptionKey;\n\n const onEncryptionModalClose = () => setEncryptionModalVisible(false);\n const onEncryptionModalSubmit = () => {\n global.window.location.reload();\n };\n const onEncryptionButtonClick = () => {\n if (formPreviouslyEncrypted) {\n setDecryptionModalVisibility(true);\n } else {\n setEncryptionModalVisible(true);\n }\n };\n return (\n <>\n \n \n \n );\n};\n\nEncryptionButton.propTypes = {\n ...translatedProps,\n formID: string,\n isSubmissionsIncludeEncryptedEntry: bool,\n hasEncryptionKey: bool,\n setDecryptionModalVisibility: func.isRequired\n};\n\nEncryptionButton.defaultProps = {\n formID: '',\n isSubmissionsIncludeEncryptedEntry: false,\n hasEncryptionKey: false\n};\n\nconst mapStateToProps = stateProps => ({\n formID: formIDSelector(stateProps)\n});\n\nconst mapDispatchToProps = {\n setDecryptionModalVisibility: setDecryptionModal\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(EncryptionButton);\n","import React, { forwardRef, useState } from 'react';\nimport {\n string,\n arrayOf,\n shape,\n bool,\n func\n} from 'prop-types';\nimport Tethered from 'react-tether';\nimport { toast } from 'react-toastify';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport { generateFileName } from '@jotforminc/answer-utils';\nimport { handleCustomNavigation, downloadPDFCheckingNoCache } from '@jotforminc/utils';\n\nimport SVG from '../SVG';\nimport GhostButton from '../GhostButton';\n\nimport { useClickOutsideState } from '../../hooks';\nimport {\n generatePDF, generatePDFFilled, generateFillablePDF, generatePrintVersionPDF\n} from '../../api';\nimport { classNames, downloadFile } from '../../utils';\nimport {\n NUMBER_OR_STRING_PROPTYPE, translatedProps, questionsPropType\n} from '../../constants/proptypes';\nimport PDFButton from '../PDFButton';\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\n\nconst DownloadButton = forwardRef(({\n formID,\n submissionID,\n username,\n disabled,\n pdfTemplates,\n isSideMenu,\n questions,\n liteMode,\n activeTab,\n isLeftPanel,\n useGhostButton,\n showAttachment,\n downloadUploads,\n isHIPAA,\n importedPDF,\n importedPdfIsConnected,\n className,\n iconName,\n pdfWrapperClassName,\n t,\n eventTarget,\n isSignSubmission,\n sealedFileURL,\n sealedFileWithoutAuditURL\n}, ref) => {\n const noPdfTemplate = pdfTemplates.length < 1;\n\n const [isDownloadMenuVisible, setDownloadMenuVisibility] = useClickOutsideState(false, [ref]);\n const [isPDFDownloading, setPDFDownloadStatus] = useState(false);\n const [isPDFMenuVisible, setPDFMenuVisibility] = useClickOutsideState(false, [ref]);\n const [isOverflowMenuVisible] = useClickOutsideState(false);\n\n const onGeneratePDF = (id, type, tab = 'inbox') => {\n setPDFDownloadStatus(true);\n let generatePromise = null;\n if (type === 'DOCUMENT' && !id) {\n generatePromise = generatePrintVersionPDF(formID, submissionID, { tabID: tab, liteMode });\n } else if (type === 'DOCUMENT') {\n generatePromise = generatePDF(formID, id, submissionID, username, generateFileName(Object.values(questions)), liteMode, isHIPAA, tab);\n } else if (type === 'IMPORTED_PDF') {\n generatePromise = generatePDFFilled(formID, submissionID);\n } else {\n generatePromise = generateFillablePDF(formID, id);\n }\n generatePromise.then(url => {\n setPDFDownloadStatus(false);\n setDownloadMenuVisibility(false);\n if (url) downloadPDFCheckingNoCache(url, () => handleCustomNavigation(url, '_self', true));\n })\n .catch(() => {\n setPDFDownloadStatus(false);\n setDownloadMenuVisibility(false);\n toast.error(t.THERE_WAS_AN_ERROR_WHILE_DOWNLOADING_PDF_TRY_AGAIN, {\n position: toast.POSITION.TOP_RIGHT,\n className: 'error'\n });\n });\n };\n\n const onPDF = () => {\n if (noPdfTemplate) {\n return onGeneratePDF('', 'DOCUMENT', activeTab);\n }\n\n setPDFMenuVisibility(!isPDFMenuVisible);\n setDownloadMenuVisibility(true);\n };\n\n const onSelectedPDF = (id, type) => {\n const pdfAction = id ? 'customizedVersion' : 'printVersion';\n if (type === 'IMPORTED_PDF') {\n WatchmanRecorder.recordEvent('Download-Single-SmartPDF', eventTarget);\n } else {\n WatchmanRecorder.recordEvent(`Download-SingleAsPDF-${pdfAction}`, eventTarget);\n }\n\n setDownloadMenuVisibility(false);\n setPDFMenuVisibility(false);\n\n return onGeneratePDF(id, type, activeTab);\n };\n\n return liteMode ? (\n \n ) : (\n \n {!useGhostButton ? (\n }\n className={classNames('jfSubmissionView-heading-panel-toolbar-menu', 'jfButton-padding-large', 'forDownload', 'hideOnPrint', isOverflowMenuVisible && 'isActive', className)}\n disabled={disabled || isPDFDownloading ? 'disabled' : ''}\n onClick={() => setDownloadMenuVisibility(!isDownloadMenuVisible)}\n >\n {isPDFDownloading ? t.PREPARING : t.DOWNLOAD}\n \n )\n : (\n setDownloadMenuVisibility(!isDownloadMenuVisible)}\n svgProps={{ className: 'jfInbox-actions-action-icon-svg forActionIcon' }}\n disabled={disabled}\n className={classNames('jfInbox-actions-action-icon', (disabled) && 'isDisabled', className)}\n />\n )}\n
    \n \n {isSignSubmission\n && (\n <>\n {sealedFileWithoutAuditURL\n && (\n downloadFile(sealedFileWithoutAuditURL)}\n icon={}\n >\n {t.SIGN_SIGNED_DOCUMENT}\n \n )}\n downloadFile(sealedFileURL)}\n icon={}\n >\n {t.SIGN_SIGNED_DOCUMENT_WITH_AUDIT}\n \n \n )}\n
    \n \n );\n});\n\nDownloadButton.propTypes = {\n formID: string.isRequired,\n submissionID: string.isRequired,\n username: string.isRequired,\n disabled: string,\n questions: questionsPropType,\n pdfTemplates: arrayOf(shape({\n id: NUMBER_OR_STRING_PROPTYPE.isRequired,\n title: string.isRequired\n })),\n isSideMenu: bool,\n liteMode: bool,\n useGhostButton: bool,\n showAttachment: bool,\n downloadUploads: func,\n isLeftPanel: bool,\n isHIPAA: bool,\n importedPDF: string,\n className: string,\n iconName: string,\n pdfWrapperClassName: string,\n eventTarget: string,\n isSignSubmission: bool,\n sealedFileURL: string,\n sealedFileWithoutAuditURL: string,\n ...translatedProps\n};\n\nDownloadButton.defaultProps = {\n disabled: '',\n pdfTemplates: [],\n isSideMenu: false,\n liteMode: false,\n useGhostButton: false,\n showAttachment: false,\n downloadUploads: f => f,\n isLeftPanel: false,\n isHIPAA: false,\n questions: {},\n importedPDF: '',\n className: '',\n iconName: 'IconArrowDownToLine',\n pdfWrapperClassName: '',\n eventTarget: 'inbox',\n isSignSubmission: false,\n sealedFileURL: '',\n sealedFileWithoutAuditURL: ''\n};\n\nexport default DownloadButton;\n","import React from 'react';\nimport { func, string } from 'prop-types';\nimport { ButtonField as Button } from '@jotforminc/button-field';\n\nimport SVG from '../SVG';\nimport { translatedProps } from '../../constants/proptypes';\nimport { classNames } from '../../utils';\n\nconst SettingsButton = ({\n className,\n onClick,\n t // eslint-disable-line\n}) => {\n return (\n }\n onClick={onClick}\n >\n {t.SETTINGS}\n \n );\n};\n\nSettingsButton.propTypes = {\n className: string,\n onClick: func.isRequired,\n ...translatedProps\n};\n\nSettingsButton.defaultProps = {\n className: null\n};\n\nexport default SettingsButton;\n","/* eslint-disable no-unused-vars */\nimport React, {\n useRef, useState, useMemo, useEffect\n} from 'react';\nimport { TwoButtonPopup as Modal } from '@jotforminc/two-button-popup';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport { CircleLoader } from '@jotforminc/apploaders';\nimport { IconUsersFilled } from '@jotforminc/svg-icons';\nimport {\n bool, node, shape, string\n} from 'prop-types';\n\nimport GhostButton from '../GhostButton';\n\nimport SVG from '../SVG';\nimport { classNames } from '../../utils';\n\nimport { translatedProps } from '../../constants/proptypes';\n\nconst RequestAccessButton = ({\n step,\n saveText,\n buttonText,\n descriptionText,\n titleText,\n tooltipText,\n onSendRequest,\n useGhostButton,\n disableButtonIcon,\n disabled,\n className,\n icon,\n innerIcon,\n t,\n disableTooltip,\n modalRef\n}) => {\n const ref = useRef();\n const modalCurrentRef = modalRef || useRef();\n const [message, setMessage] = useState('');\n\n const [isModalVisible, setModalVisible] = useState(false, [ref]);\n const onRequestAccessClick = () => setModalVisible(!isModalVisible);\n\n const modalContainer = document.querySelector('#modal-container');\n modalCurrentRef.current = modalContainer;\n\n const stepText = useMemo(() => {\n if (step === 'loading') {\n return (\n \n \n {t.PLEASE_WAIT}\n
    \n );\n } if (step === 'done') {\n return (\n \n \n {t.REQUESTED}\n \n );\n }\n if (step === '') {\n return saveText;\n }\n\n if (step === 'error') {\n return t.SOMETHING_WENT_WRONG;\n }\n\n return saveText;\n }, [step]);\n\n useEffect(() => {\n if (step === 'done') {\n setTimeout(() => {\n setModalVisible(false);\n setMessage('');\n }, 1500);\n }\n }, [step]);\n\n return (\n <>\n {!useGhostButton ? (\n \n )}\n onClick={onRequestAccessClick}\n disabled={disabled}\n >\n {buttonText}\n {innerIcon}\n \n\n ) : (\n \n {buttonText}\n \n )}\n {isModalVisible && (\n \n \n {titleText}\n \n )}\n modalContainer={document.querySelector('#modal-container')}\n saveText={stepText}\n cancelText={t.CANCEL}\n showClose\n onSave={() => onSendRequest(message)}\n onCancel={() => setModalVisible(false)}\n onClose={() => setModalVisible(false)}\n >\n
    \n

    {descriptionText}

    \n
    \n setMessage(value)}\n />\n
    \n
    \n \n )}\n \n );\n};\n\nRequestAccessButton.propTypes = {\n saveText: string,\n buttonText: string,\n titleText: string,\n descriptionText: string,\n icon: string,\n innerIcon: node,\n disableTooltip: bool,\n modalRef: shape({}),\n ...translatedProps\n};\n\nRequestAccessButton.defaultProps = {\n saveText: '',\n buttonText: '',\n descriptionText: '',\n titleText: '',\n icon: '',\n innerIcon: null,\n disableTooltip: false,\n modalRef: null\n};\n\nexport default RequestAccessButton;\n","/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n/* eslint-disable max-lines */\n/* eslint-disable max-statements */\nimport React, {\n useRef, useState, useEffect, useMemo\n} from 'react';\nimport {\n func, bool, string, arrayOf\n} from 'prop-types';\nimport { createPortal } from 'react-dom';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { getBaseURL } from '@jotforminc/router-bridge';\nimport Tethered from 'react-tether';\nimport { hasEncryptionKey } from '@jotforminc/form-encryption';\nimport { useWorkflow } from '@jotforminc/workflow-components';\nimport { usePermissions, useRole } from '@jotforminc/permissions';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport { Dialog } from '@jotforminc/dialog';\nimport { capitalizeFirstLetter, handleCustomNavigation, saveBlobAsFile } from '@jotforminc/utils';\nimport { useFeatures } from '@paralleldrive/react-feature-toggles';\nimport { toast } from 'react-toastify';\nimport { PreviewToggle } from '@jotforminc/header-components';\nimport { t as translation } from '@jotforminc/translation';\nimport keyboardJS from '../../vendor/keyboard';\nimport { useClickOutsideState } from '../../hooks';\nimport { withInboxEnhancer } from '../../hocs/InboxEnhancer';\nimport {\n classNames, updateLocationParams, handleShortcut, closeLastSubmissionEdit\n} from '../../utils';\nimport Feature from '../../components/Feature';\nimport SVG from '../../components/SVG';\nimport Mail from '../../components/Mail';\nimport ReadButton from '../../components/ReadButton';\nimport FavoriteButton from '../../components/FavoriteButton';\nimport ReplyButton from '../../components/ReplyButton';\nimport ForwardButton from '../../components/ForwardButton';\nimport EditButton from '../../components/EditButton';\nimport PDFEditorButton from '../../components/PDFEditorButton';\nimport SubmissionShareButton from '../../components/SubmissionShareButton';\nimport EncryptionButton from '../../components/EncryptionButton';\nimport DownloadButton from '../../components/DownloadButton';\nimport SettingsButton from '../../components/SettingsButton';\nimport ArchiveButton from '../../components/ArchiveButton';\nimport DeleteButton from '../../components/DeleteButton';\nimport PurgeButton from '../../components/PurgeButton';\nimport RequestAccessButton from '../../components/RequestAccessButton';\n\nimport {\n HEADER_TEXT_QUESTIONS\n} from '../../constants';\nimport WatchmanRecorder, { withWatchMan } from '../../utils/WatchmanRecorder';\n\nimport {\n formSelector,\n userSelector,\n userTypeSelector,\n emailQidSelector,\n fullNameQidSelector,\n questionsSelector,\n questionOrdersSelector,\n activeSubmissionSelector,\n liteModeSelector,\n hideEmptyFieldsSelector,\n hideNonInputFieldsSelector,\n submissionDateFormatSelector,\n activeTabIDSelector,\n editSubmissionPreference,\n tagQuestionSelector,\n isFormOwnerSelector,\n fileUploadQidSelector,\n isAdminSelector,\n isFormFillerAllowedToContactSelector,\n isAllSentBoxSelector,\n isPreviousOrdersSelector,\n isPwaSelector,\n isTeamContextAllowedSelector,\n isMessageContainerVisibleSelector,\n submissionsSelector,\n getIsSubmissionsIncludeEncryptedEntry,\n getRecaptchaSiteSelector,\n isSentBoxSelector,\n nextSubmissionIDSelector,\n getIsAIHistoryViewVisible\n} from '../../selectors';\n\nimport {\n updateForm,\n deleteSubmission,\n setEditMode,\n updateFormSync,\n setSubmissionNew,\n setSubmissionFlag,\n setFilterText,\n preparePrint,\n printComplete,\n updateBulkSubmission,\n prepareMultipleDownload,\n renewSubmission,\n assignTag,\n updateTag,\n addDummyQuestions,\n downloadAttachments,\n setMessage,\n selectBulkSubmissions,\n setSettings,\n setAIHistoryVisibility\n} from '../../actions';\n\nimport {\n formPropType,\n userPropType,\n submissionPropType,\n NUMBER_OR_STRING_PROPTYPE,\n questionsPropType,\n questionOrdersPropType,\n enhancedProps\n} from '../../constants/proptypes';\nimport {\n terminateWorkflow, deleteRequest, startOverWorkflow, requestEditAccess as requestAccess, downloadAgentHistory\n} from '../../api';\nimport RestoreButton from '../../components/RestoreButton';\n\n// eslint-disable-next-line complexity\nexport const SubmissionToolbarComponent = ({\n form,\n user,\n onEdit,\n onPurgeSubmission,\n userType,\n emailQid,\n allowEdit,\n questions,\n activeTab,\n isFormFillerAllowedToContact,\n liteMode,\n submission,\n fullNameQid,\n fileUploadQIDs,\n onArchive,\n onMoveToInbox,\n onMoveToTrash,\n onUpdateForm,\n downloadUploads,\n initiatePrint,\n completePrint,\n questionOrders,\n hideEmptyFields,\n hideHeaderAndText,\n onSetSubmissionNew,\n onRenewSubmission,\n onSetSubmissionFlag,\n onRestoreSubmission,\n submissionDateFormat,\n handleMessageComponent,\n enableEncryptionButton,\n isFormOwner,\n t,\n isAllSentBox,\n isPreviousOrders,\n isPwa,\n isTeamContextAllowed,\n onSetMessage,\n isMessageContainerVisible,\n isSubmissionsIncludeEncryptedEntry,\n setSettingsPanel,\n recaptchaSite,\n isSentBox,\n onSetAIHistoryVisibility,\n isAIHistoryViewVisible\n}) => {\n const mailRef = useRef();\n const moreButtonRef = useRef();\n const downloadButtonRef = useRef();\n const pdfButtonRef = useRef();\n const overflowMenuRef = useRef();\n\n const role = useRole();\n const [isReplyVisible, setReplyVisibility] = useState(false);\n const [isMailReply, setMailReply] = useState(false);\n const [isForwardVisible, setForwardVisibility] = useState(false);\n const [isReplyHover, setIsReplyHover] = useState(false);\n const [editRequestStep, setEditRequestStep] = useState('');\n const [deleteRequestStep, setDeleteRequestStep] = useState('');\n const [agentHistoryDownloading, setAgentHistoryDownloading] = useState(false);\n const [isOverflowMenuVisible, setOverflowMenuVisibility] = useClickOutsideState(false, [moreButtonRef, downloadButtonRef, pdfButtonRef]);\n const onOverflowMenuToggle = () => setOverflowMenuVisibility(!isOverflowMenuVisible);\n const onMailVisibilityChange = (mailVisibility = false) => { setReplyVisibility(mailVisibility); setForwardVisibility(mailVisibility); };\n\n useEffect(() => {\n const handleEscape = e => {\n if (e.key === 'Escape') {\n setOverflowMenuVisibility(false);\n if (moreButtonRef.current) moreButtonRef.current.self.focus();\n }\n };\n if (isOverflowMenuVisible && overflowMenuRef.current) {\n overflowMenuRef.current.focus();\n document.addEventListener('keyup', handleEscape);\n return;\n }\n document.removeEventListener('keyup', handleEscape);\n }, [isOverflowMenuVisible]);\n\n const permissions = usePermissions();\n const {\n instanceID, onTaskListRenew = f => f\n } = useWorkflow();\n\n const inboxAvailable = global.window.JFComponents && global.window.JFComponents.navigateInbox;\n const isFormUser = userType === 'formuser';\n const isUser = userType === 'user';\n const isGuest = (user?.account_type?.name || user?.account_type) === 'GUEST';\n const isUnread = submission.new === '1' || submission.new === '2';\n const isFavorite = submission.flag === '1';\n const isInSentbox = activeTab === 'sentbox';\n const isSubmittedByFormOwner = isInSentbox && user?.email === submission?.submittedBy?.email;\n const { pdfTemplates } = form;\n const isEncryptedForm = form.isEncrypted === 'Yes';\n const encryptionProtocol = form?.encryptionProtocol;\n const hasAttachment = useMemo(() => fileUploadQIDs && fileUploadQIDs.some(qid => submission.answers[qid] && submission.answers[qid].answer && submission.answers[qid].answer.length > 0),\n [submission]);\n\n const safeQuestions = user.isHIPAA !== '1' ? questions : Object.keys(questions).reduce((acc, qid) => {\n if (!questions[qid].protected || questions[qid].protected !== 'Yes') {\n acc[qid] = questions[qid];\n }\n return acc;\n }, {});\n\n const isIncomplete = activeTab === 'incompleteSubmissions' || submission?.session_id;\n const shouldShowForward = !isIncomplete && permissions.forward\n && !!(Object.keys(safeQuestions).filter(k => {\n if (!safeQuestions[k]) return false;\n\n if (\n ['created_at', 'ip', 'id', 'tags'].indexOf(k) > -1\n || HEADER_TEXT_QUESTIONS.indexOf(safeQuestions[k].type) > -1\n ) {\n return false;\n }\n return true;\n }).length);\n\n const isRequestDeleteOwner = isFormOwner && submission?.hasDeleteRequest;\n const shouldShowFavorite = activeTab !== 'trash' && !liteMode && permissions.star;\n const shouldShowReply = activeTab !== 'sentbox' && shouldShowForward && permissions.reply;\n const checkShouldShowEdit = () => {\n if (submission.isSignSubmission) return false;\n\n return (activeTab !== 'sentbox' || allowEdit) && permissions.editSubmissions && !(isPreviousOrders && isPwa);\n };\n const checkShouldShowRequestEdit = () => {\n if (submission.isSignSubmission) return false;\n return (role === 'assignee' || role === 'readOnly') && !permissions?.editSubmissions;\n };\n const shouldShowEdit = checkShouldShowEdit();\n const shouldShowRequestEdit = checkShouldShowRequestEdit();\n const shouldShowView = activeTab === 'sentbox' && !(isPreviousOrders && isPwa);\n const shouldShowTerminateFlow = isFormOwner && (submission.workflowStatus === 'ACTIVE' || submission.workflowStatus === 'FAILED');\n const isSentboxView = role === 'assignee' || role === 'portalUser' || isAllSentBox || isSentBox;\n const isSubmissionDeletable = activeTab === 'inbox' || activeTab === 'trash';\n const contactButtonText = (isPreviousOrders && isPwa) ? t.CONTACT_US : t.SEND_MESSAGE;\n const commentButtonText = isSentboxView ? contactButtonText : t.ADD_A_NOTE;\n const isAllowedToComment = useMemo(() => {\n if (activeTab === 'sentbox') {\n return (isSentboxView && isFormFillerAllowedToContact && permissions?.editNotes);\n }\n return permissions?.editNotes;\n }, [role, isFormFillerAllowedToContact, activeTab]);\n\n const onPDFEditor = () => {\n WatchmanRecorder.recordEvent('onPDFEditor', 'submissionToolbar'); // TODO: can we handle these in ActionTracker?\n handleCustomNavigation(`/pdf-editor/${form.id}?preview=true&submission=${submission.id}&from=jingle&createDoc=1`, 'jfPDFDesigner');\n };\n\n const onPrintComplete = () => {\n completePrint();\n global.window.removeEventListener('mousemove', onPrintComplete);\n };\n\n // const onNoteCountClick = () => {\n // WatchmanRecorder.recordEvent('onNoteCountClick', 'submissionList');\n // addClass(NOTES_PANEL_CLASS);\n // removeClass(NOTES_PANEL_MINIMIZED_CLASS);\n // };\n\n const downloadHistory = async (formID, chatID) => {\n setAgentHistoryDownloading(true);\n try {\n WatchmanRecorder.recordEvent('download', 'inbox-ai-transcript');\n const response = await downloadAgentHistory(formID, chatID);\n console.log(response);\n saveBlobAsFile(new global.Blob([response.data], { type: 'application/pdf' }), `${chatID}.pdf`);\n // handleCustomNavigation(url, '_self', true);\n } catch (err) {\n console.log(err);\n } finally {\n setAgentHistoryDownloading(false);\n }\n };\n\n const onPrintClick = withWatchMan('Print', capitalizeFirstLetter(activeTab), ({\n layout, spacing, thread, save\n }) => {\n if (save) {\n onUpdateForm(form.id, {\n submissionPrintLayoutPreference: layout,\n submissionPrintSpacingPreference: spacing,\n submissionPrintThreadPreference: thread\n });\n }\n\n initiatePrint(layout, spacing, thread);\n global.window.print();\n global.window.addEventListener('mousemove', onPrintComplete);\n });\n\n const onReply = () => {\n setMailReply(true);\n setReplyVisibility(true);\n\n if (mailRef.current) {\n if (mailRef.current.state.isMessageMinimized) mailRef.current.setState({ isMessageMinimized: false });\n }\n };\n const onForward = () => {\n setMailReply(false);\n setForwardVisibility(true);\n\n if (mailRef.current) {\n if (mailRef.current.state.isMessageMinimized) mailRef.current.setState({ isMessageMinimized: false });\n }\n };\n\n const features = useFeatures();\n const isNewMessage = features.includes('isNewMessage');\n const onToggleSubmissionNotes = () => {\n return document.querySelector('.jfInbox-submission-view .buttons [name=\"IconMessageFilled\"]').parentNode.parentNode.click();\n };\n\n const onToggleSettingsPanel = () => {\n WatchmanRecorder.recordEvent('onToggleSettingsPanel', 'submissionToolbar'); // TODO: can we handle these in ActionTracker?\n setSettingsPanel({\n isOpened: true, activeTab: 'general'\n });\n };\n\n const [terminateWarningVisible, setTerminateWarningVisibility] = useState();\n\n const showTerminateWarning = () => setTerminateWarningVisibility(true);\n const closeTerminateWarning = () => setTerminateWarningVisibility(false);\n\n const [reStartWarningVisible, setRestartWarningVisibility] = useState();\n\n const showRestartWarning = () => setRestartWarningVisibility(true);\n const closeRestartWarning = () => setRestartWarningVisibility(false);\n\n const handleTerminateWorkflow = async () => {\n const res = await terminateWorkflow(instanceID);\n if (res) {\n await onTaskListRenew();\n await closeTerminateWarning();\n }\n };\n\n const handleRestartWorkflow = async () => {\n const res = await startOverWorkflow(instanceID);\n if (res?.[0]?.status === 'ACTIVE') {\n await onTaskListRenew();\n await closeRestartWarning();\n }\n };\n\n const showMail = type => e => {\n if (features.includes('isNewEmail')) {\n return document.querySelector(`.jfInbox-submission-view .buttons [name=\"Icon${type}\"]`)?.parentNode.parentNode.click();\n }\n\n let fn;\n\n if (type === 'Reply') {\n fn = handleMessageComponent !== null ? () => handleMessageComponent(type) : onReply;\n }\n\n if (type === 'Forward') {\n fn = handleMessageComponent !== null ? () => handleMessageComponent(type) : onForward;\n }\n\n return fn(e);\n };\n\n const onSendRequestEditAccess = async message => {\n setEditRequestStep('loading');\n const isDisabled = editRequestStep === 'done' || !permissions?.requestEdit;\n if (['readOnly', 'assignee'].indexOf(role) > -1 && !isDisabled) {\n const isReadOnly = role === 'readOnly';\n const data = await requestAccess(form.id,\n {\n message,\n accessType: isReadOnly ? 'supporter' : 'submitAndEdit',\n preventToast: true\n },\n isReadOnly ? 'inbox' : 'form');\n\n if (data === 'success') {\n setEditRequestStep('done');\n WatchmanRecorder.recordEvent('requestEdit', 'Submission Toolbar');\n } else {\n setEditRequestStep('error');\n }\n } else {\n setEditRequestStep('error');\n }\n };\n\n const onSendRequestDeleteAccess = async message => {\n setDeleteRequestStep('loading');\n\n try {\n const data = await requestAccess(form.id,\n {\n message,\n action: 'DELETE',\n submission_id: submission.id,\n preventToast: true\n },\n 'inbox');\n\n if (data === 'success') {\n setDeleteRequestStep('done');\n onRenewSubmission(submission.id, false);\n WatchmanRecorder.recordEvent('requestDelete', 'Submission Toolbar');\n }\n } catch {\n setDeleteRequestStep('error');\n } finally {\n setTimeout(() => {\n setDeleteRequestStep('');\n }, 1500);\n }\n };\n\n const onDiscardDeleteRequest = async () => {\n try {\n const data = await deleteRequest(submission?.deleteRequestID);\n if (data === 'success') {\n onRenewSubmission(submission.id, false);\n }\n } catch {\n console.log('error');\n }\n };\n\n useEffect(() => {\n const replySC = handleShortcut(showMail('Reply'));\n const forwardSC = handleShortcut(showMail('Forward'));\n\n if (emailQid.length > 0) {\n keyboardJS.bind('r', replySC);\n }\n\n keyboardJS.bind('f', forwardSC);\n\n return () => {\n keyboardJS.unbind('r', replySC);\n keyboardJS.unbind('f', forwardSC);\n };\n }, [emailQid]);\n\n useEffect(() => {\n const archiveSC = () => {\n if (activeTab !== 'trash' && activeTab !== 'archive' && permissions.archive) {\n onArchive();\n }\n };\n\n const handleArchiveSC = handleShortcut(archiveSC);\n\n if (permissions?.archive && submission?.id) {\n keyboardJS.bind('e', handleArchiveSC);\n }\n\n return () => {\n keyboardJS.unbind('e', handleArchiveSC);\n };\n }, [permissions?.archive, submission?.id, activeTab]);\n\n const [isOpened, setIsOpened] = useState('closed');\n const containerDom = global.document.querySelector('#reply-content');\n\n useEffect(() => {\n // Cleanup workflow undo callbacks\n toast.dismiss('undoToast');\n }, [submission?.id]);\n\n useEffect(() => {\n if (isReplyVisible || isForwardVisible) {\n setIsOpened('opened');\n }\n }, [isReplyVisible, isForwardVisible]);\n\n const handleViewForm = () => {\n const baseURL = getBaseURL();\n const url = `${baseURL}/${form.id}`;\n handleCustomNavigation(url, '_blank', true).focus();\n };\n\n const messageContainer = (\n
    \n { (isReplyVisible || isForwardVisible) && (\n \n )}\n
    \n );\n\n const moreMenuTarget = `${capitalizeFirstLetter(activeTab)} - Submission More Menu`;\n const isEncryptedEntriesOnView = isEncryptedForm || isSubmissionsIncludeEncryptedEntry;\n\n const handleAIHistoryVisiblityChange = e => {\n e.preventDefault();\n WatchmanRecorder.recordEvent(isAIHistoryViewVisible ? 'closed' : 'opened', 'inbox-ai-transcript');\n onSetAIHistoryVisibility(!isAIHistoryViewVisible);\n };\n\n return (\n <>\n {submission.answers && (\n createPortal(messageContainer, containerDom)\n )}\n
    \n {\n isEncryptedEntriesOnView && (\n
    \n \n
    \n )\n }\n {\n (permissions?.reply && role !== 'supporter' && activeTab !== 'conversations') && (\n \n {(shouldShowReply || shouldShowForward) && !isAllSentBox && !isSubmittedByFormOwner ? (\n
    0 && !isMessageContainerVisible) ? '' : 'isDisabled'}`}>\n onSetMessage({\n type: 'Reply', useApi: true, title: 'reply', requestMore: false\n }) : showMail('Reply')}\n />\n
    \n ) : null}\n \n )}\n inactiveComponent={(\n <>\n {shouldShowReply ? (\n setIsReplyHover(true)}\n onMouseLeave={() => setIsReplyHover(false)}\n className=\"jfSubmissionToolbar-item forReply withHover\"\n >\n (isNewMessage ? onSetMessage({ type: 'Reply', useApi: true, requestMore: false }) : showMail('Reply'))}\n disabled={emailQid.length > 0 && !isMessageContainerVisible ? '' : 'disabled'}\n iconName=\"IconReply\"\n />\n
    \n {t.NO_EMAIL_FIELD}\n
    \n
    \n ) : null}\n {(shouldShowForward && !features.includes('submissionThread')) ? (\n <>\n
    \n onSetMessage({\n type: 'Forward', useApi: true, title: 'forward', requestMore: false\n }) : showMail('Forward')}\n disabled={!isMessageContainerVisible ? '' : 'disabled'}\n iconName=\"IconForward\"\n />\n
    \n \n ) : null}\n \n )}\n />\n )\n }\n {(isSentboxView || role === 'supporter') && shouldShowEdit && !isIncomplete && activeTab !== 'conversations' && (\n <>\n
    \n \n
    \n \n )}\n {isSentboxView && permissions?.download && !isIncomplete && (\n
    \n downloadUploads('activeSubmission')}\n importedPdfIsConnected={form.importedPdfIsConnected}\n isSideMenu={false}\n t={t}\n pdfWrapperClassName=\"toolbarDownloadItems\"\n eventTarget={moreMenuTarget}\n >\n {t.DOWNLOAD}\n \n
    \n )}\n {role === 'assignee' && isIncomplete && activeTab !== 'conversations' && (\n <>\n
    \n }\n onClick={onEdit}\n >\n {t.CONTINUE_TO_EDIT}\n \n
    \n
    \n \n
    \n \n )}\n {((isAllowedToComment && !submission?.aiIncompleteSubmission && activeTab !== 'conversations')) && (\n \n
    \n }\n onClick={isNewMessage ? () => onSetMessage({ type: 'comment', title: 'Comment' }) : onToggleSubmissionNotes}\n tabIndex=\"0\"\n aria-label={t.ADD_A_NOTE}\n >\n {commentButtonText}\n \n
    \n \n )}\n />\n )}\n {\n role === 'portalUser' && permissions?.print && !permissions?.editSubmissions && !isIncomplete && (\n
    \n }\n onClick={onPrintClick}\n >\n {t.PRINT}\n \n
    \n )\n }\n {(role === 'workflowApprover' || role === 'readOnly') && !isIncomplete ? (\n <>\n
    \n }\n onClick={onPrintClick}\n >\n {t.PRINT}\n \n
    \n
    \n downloadUploads('activeSubmission')}\n liteMode={liteMode}\n importedPDF={form.importedPDF}\n importedPdfIsConnected={form.importedPdfIsConnected}\n t={t}\n pdfWrapperClassName=\"toolbarDownloadItems\"\n eventTarget={moreMenuTarget}\n activeTab={activeTab}\n >\n {t.DOWNLOAD}\n \n
    \n \n ) : null}\n {submission.aiAgentChatID && !submission?.aiIncompleteSubmission && !submission?.aiDraftlessSubmission && (activeTab === 'inbox' || activeTab === 'conversations') && (\n
    \n \n
    \n )}\n {role !== 'readOnly' && role !== 'workflowApprover' && role !== 'portalUser' && !isIncomplete ? (\n <>\n
    \n \n }\n onClick={onOverflowMenuToggle}\n aria-haspopup=\"menu\"\n tabIndex={0}\n aria-label={t.MORE}\n >\n {t.MORE}\n \n \n\n {activeTab !== 'conversations' && (\n downloadUploads('activeSubmission')}\n importedPdfIsConnected={form.importedPdfIsConnected}\n isSideMenu\n t={t}\n pdfWrapperClassName=\"toolbarDownloadItems\"\n eventTarget={moreMenuTarget}\n isSignSubmission={submission.isSignSubmission}\n sealedFileURL={submission.sealedFileURL}\n sealedFileWithoutAuditURL={submission.sealedFileWithoutAuditURL}\n >\n {t.DOWNLOAD}\n \n )}\n\n {submission.aiAgentChatID && activeTab === 'conversations' && (\n downloadHistory(form.id, submission.aiAgentChatID)}\n icon={}\n // variant='outline'\n className=\"forSubmissionMenu\"\n disabled={agentHistoryDownloading}\n aria-label={agentHistoryDownloading ? t.PREPARING : 'Download'}\n >\n {agentHistoryDownloading ? t.PREPARING : 'Download'}\n \n )}\n\n {permissions.print && activeTab !== 'conversations' && (\n }\n onClick={onPrintClick}\n >\n {t.PRINT}\n \n )}\n {isUser && permissions.customizePDF && activeTab !== 'conversations' && (\n \n )}\n {activeTab !== 'conversations' &&
    }\n {shouldShowEdit && activeTab !== 'conversations' && (\n <>\n \n )}\n />\n
    \n \n )}\n {permissions?.reply && activeTab !== 'conversations' && (\n onSetMessage({\n type: 'Reply', useApi: true, title: 'reply', requestMore: false\n }) : showMail('Reply')}\n disabled={emailQid.length > 0 && !isMessageContainerVisible ? '' : 'disabled'}\n iconName=\"IconReply\"\n eventTarget={capitalizeFirstLetter(activeTab)}\n />\n )}\n {permissions?.forward && activeTab !== 'conversations' && (\n onSetMessage({\n type: 'Forward', useApi: true, title: 'forward', requestMore: false\n }) : showMail('Forward')}\n disabled={!isMessageContainerVisible ? '' : 'disabled'}\n iconName=\"IconForward\"\n />\n )}\n {shouldShowRequestEdit && activeTab !== 'conversations' && (\n \n )}\n />\n )}\n {permissions?.editNotes && isAllowedToComment && activeTab !== 'conversations' && (\n }\n onClick={isNewMessage ? () => onSetMessage({ type: 'comment', title: 'Comment' }) : onToggleSubmissionNotes}\n >\n {activeTab === 'sentbox' ? t.SEND_MESSAGE : t.ADD_A_NOTE}\n \n )}\n />\n )}\n {activeTab !== 'conversations' && isTeamContextAllowed && (shouldShowFavorite || permissions?.markAsUnread) ?
    : null}\n {shouldShowFavorite && isTeamContextAllowed && activeTab !== 'conversations' && (\n \n )}\n {permissions.markAsUnread && isTeamContextAllowed && activeTab !== 'conversations' && (\n \n )}\n {activeTab !== 'trash' && permissions.archive && isTeamContextAllowed && activeTab !== 'conversations' && (\n (activeTab === 'archive' ? onMoveToInbox() : onArchive())}\n eventTarget={moreMenuTarget}\n isSingle\n />\n )}\n\n {shouldShowTerminateFlow && activeTab !== 'conversations' ? (\n <>\n }\n onClick={showTerminateWarning}\n >\n {t.TERMINATE_APPROVAL_FLOW}\n \n }\n onClick={showRestartWarning}\n >\n {t.RESTART_APPROVAL_FLOW}\n \n \n ) : null}\n {(activeTab !== 'trash' && (permissions.archive || shouldShowEdit) && activeTab !== 'conversations') &&
    }\n \n )}\n />\n {inboxAvailable && liteMode && (\n }\n >\n {t.OPEN_IN_JOTFORM_INBOX}\n \n )}\n {shouldShowView && (\n <>\n handleViewForm()}\n className=\"forInbox jfButton-padding-large\"\n icon={}\n >\n {role === 'assignee' ? t.FILL_THIS_FORM : t.VIEW_FORM}\n \n \n )}\n {enableEncryptionButton && }\n {isFormOwner && (\n \n )}\n {activeTab !== 'trash' && permissions.trash && isTeamContextAllowed && activeTab !== 'conversations' && (\n \n )}\n {activeTab === 'trash' && permissions.trash && isTeamContextAllowed && (\n <>\n
    \n \n \n \n )}\n {role === 'assignee' && activeTab === 'sentbox'\n && (\n \n

    {t.DELETE_REQUEST_WILL_BE_SENT_TO_OWNER}

    \n
    \n )}\n titleText={t.REQUEST_DELETE_FOR_SUBMISSION}\n icon=\"IconTrashFilled\"\n disableTooltip\n className=\"forDelete\"\n />\n )}\n />\n )}\n {\n isFormOwner && submission.hasDeleteRequest && isSubmissionDeletable && isTeamContextAllowed && (\n <>\n
    \n \n \n \n {t.SUBMISSION_REQUESTED_TO_BE_DELETED}\n
    \n \n \n {t.DISCARD_DELETE_REQUEST}\n \n \n
    \n
    \n )}\n />\n \n )\n }\n
    \n \n
    \n \n ) : null}\n
    \n \n \n \n );\n};\n\nconst mapStateToProps = stateProps => {\n const submissions = submissionsSelector(stateProps);\n const isSubmissionsIncludeEncryptedEntry = getIsSubmissionsIncludeEncryptedEntry(submissions);\n\n return ({\n user: userSelector(stateProps),\n userType: userTypeSelector(stateProps),\n form: formSelector(stateProps),\n activeTab: activeTabIDSelector(stateProps),\n isFormFillerAllowedToContact: isFormFillerAllowedToContactSelector(stateProps),\n allowEdit: editSubmissionPreference(stateProps),\n liteMode: liteModeSelector(stateProps),\n emailQid: emailQidSelector(stateProps),\n fullNameQid: fullNameQidSelector(stateProps),\n fileUploadQIDs: fileUploadQidSelector(stateProps),\n questions: questionsSelector(stateProps),\n questionOrders: questionOrdersSelector(stateProps),\n submission: activeSubmissionSelector(stateProps),\n hideEmptyFields: hideEmptyFieldsSelector(stateProps),\n hideHeaderAndText: hideNonInputFieldsSelector(stateProps),\n submissionDateFormat: submissionDateFormatSelector(stateProps),\n isFormOwner: isFormOwnerSelector(stateProps),\n tagQuestion: tagQuestionSelector(stateProps),\n isAdmin: isAdminSelector(stateProps),\n isAllSentBox: isAllSentBoxSelector(stateProps),\n isPreviousOrders: isPreviousOrdersSelector(stateProps),\n isPwa: isPwaSelector(stateProps),\n isTeamContextAllowed: isTeamContextAllowedSelector(stateProps),\n isMessageContainerVisible: isMessageContainerVisibleSelector(stateProps),\n isSubmissionsIncludeEncryptedEntry,\n recaptchaSite: getRecaptchaSiteSelector(stateProps),\n isSentBox: isSentBoxSelector(stateProps),\n nextSubmissionID: nextSubmissionIDSelector(stateProps),\n isAIHistoryViewVisible: getIsAIHistoryViewVisible(stateProps)\n });\n};\n\nconst mapDispatchToProps = {\n onSubmissionDelete: deleteSubmission,\n onFormUpdateSync: updateFormSync,\n onSelectSubmission: selectBulkSubmissions,\n setEditMode,\n onSetSubmissionNew: setSubmissionNew,\n onUpdateForm: updateForm,\n updateFilterText: setFilterText,\n initiatePrint: preparePrint,\n completePrint: printComplete,\n setSubmissionFlag,\n updateBulkSubmission,\n initiateMultipleDownload: prepareMultipleDownload,\n downloadUploads: downloadAttachments,\n onRenewSubmission: renewSubmission,\n onAssignTag: assignTag,\n onUpdateTag: updateTag,\n addDummyQuestions,\n onSetMessage: setMessage,\n setSettingsPanel: setSettings,\n onSetAIHistoryVisibility: setAIHistoryVisibility\n};\n\nconst mergeProps = (stateProps, dispatchProps, componentProps) => {\n const {\n submission: { id: sid },\n form: { id: formID },\n questions,\n nextSubmissionID\n } = stateProps;\n const { history } = componentProps;\n\n return {\n ...componentProps,\n ...stateProps,\n ...dispatchProps,\n onEdit: () => {\n const location = updateLocationParams({ editMode: true, sid, formID }).replace(/^\\/myforms\\//, '');\n\n if (stateProps.liteMode) {\n return handleCustomNavigation(`/inbox/${location}`, '_blank');\n }\n\n componentProps.history.push(location);\n },\n onArchive: () => {\n dispatchProps.updateBulkSubmission([sid], { prop: 'status', value: 'ARCHIVED', aggKey: 'includes' });\n },\n onMoveToInbox: () => {\n dispatchProps.updateBulkSubmission([sid], { prop: 'status', value: 'ACTIVE', aggKey: 'includes' });\n },\n onMoveToTrash: () => {\n closeLastSubmissionEdit(nextSubmissionID, history);\n dispatchProps.updateBulkSubmission([sid], { prop: 'status', value: 'DELETED', aggKey: 'includes' });\n dispatchProps.onSelectSubmission('clear');\n },\n onSetSubmissionFlag: flag => {\n dispatchProps.setSubmissionFlag(sid, flag);\n },\n onUpdateBulkSubmission: data => {\n dispatchProps.updateBulkSubmission(sid, data);\n },\n onPurgeSubmission: () => {\n closeLastSubmissionEdit(nextSubmissionID, history);\n dispatchProps.onSubmissionDelete(sid);\n dispatchProps.onSelectSubmission('clear');\n },\n onRestoreSubmission: () => {\n dispatchProps.updateBulkSubmission([sid], { prop: 'status', value: 'ACTIVE', aggKey: 'includes' });\n },\n onSaveDummyQuestions: () => dispatchProps.addDummyQuestions(formID, questions)\n\n };\n};\n\nSubmissionToolbarComponent.propTypes = {\n user: userPropType.isRequired,\n isFormOwner: bool,\n form: formPropType.isRequired,\n questions: questionsPropType.isRequired,\n questionOrders: questionOrdersPropType.isRequired,\n submission: submissionPropType.isRequired,\n allowEdit: bool.isRequired,\n completePrint: func.isRequired,\n onSetSubmissionNew: func.isRequired,\n onSetSubmissionFlag: func.isRequired,\n liteMode: bool,\n onEdit: func,\n downloadUploads: func,\n emailQid: arrayOf(string),\n fullNameQid: NUMBER_OR_STRING_PROPTYPE,\n fileUploadQIDs: arrayOf(string),\n hideEmptyFields: bool,\n hideHeaderAndText: bool,\n enableEncryptionButton: bool,\n onUpdateForm: func,\n initiatePrint: func.isRequired,\n submissionDateFormat: string.isRequired,\n handleMessageComponent: func,\n userType: string.isRequired,\n activeTab: string,\n isAllSentBox: bool,\n isPreviousOrders: bool,\n isPwa: bool,\n isTeamContextAllowed: bool.isRequired,\n onSetMessage: func,\n onSetAIHistoryVisibility: func.isRequired,\n isSubmissionsIncludeEncryptedEntry: bool,\n recaptchaSite: string,\n isSentBox: bool,\n isAIHistoryViewVisible: bool.isRequired,\n ...enhancedProps\n};\n\nSubmissionToolbarComponent.defaultProps = {\n fullNameQid: null,\n fileUploadQIDs: [],\n isFormOwner: false,\n emailQid: [''],\n liteMode: false,\n hideEmptyFields: false,\n hideHeaderAndText: false,\n enableEncryptionButton: false,\n onUpdateForm: f => f,\n downloadUploads: f => f,\n onEdit: f => f,\n activeTab: '',\n handleMessageComponent: null,\n isAllSentBox: false,\n isPreviousOrders: false,\n isPwa: false,\n onSetMessage: f => f,\n isSubmissionsIncludeEncryptedEntry: false,\n recaptchaSite: '',\n isSentBox: false\n};\n\nconst enhance = withInboxEnhancer('submissionToolbar', connect(mapStateToProps, mapDispatchToProps, mergeProps));\n\nexport default withRouter(enhance(SubmissionToolbarComponent));\n","import React from 'react';\nimport styled from 'styled-components';\nimport { string, number, shape } from 'prop-types';\n\nconst SpinnerBlade = styled.div`\n @keyframes blinkAnim {\n 0% { opacity: 1 }\n 100% { opacity: 0 }\n }\n\n width: ${({ blade }) => blade.width}px; height: 100%;\n position: absolute;\n top: 50%; left: 50%;\n\n &:before {\n content: \"\";\n top: 0; left: 0;\n position: absolute;\n width: 100%; height: ${({ blade }) => blade.height}px;\n background-color: ${({ color }) => color};\n border-radius: 4px;\n animation: blinkAnim linear ${({ duration }) => duration}s infinite;\n }\n\n &:nth-child(${({ i }) => (i + 1)}) {\n transform: translate(-50%, -50%) rotate(${({ blade, i }) => (360 / blade.count) * i}deg);\n &:before { animation-delay: -${({ i, blade, duration }) => (duration / blade.count) * (blade.count - i)}s; }\n }\n`;\n\nconst SpinnerContainer = styled.div`\n width: ${({ size }) => size}px; height: ${({ size }) => size}px;\n position: relative;\n`;\n\nexport const Spinner = ({\n size,\n blade,\n duration,\n color\n}) => (\n \n {[...Array(blade.count)].map((_, i) => (\n \n ))}\n \n);\n\nSpinner.propTypes = {\n size: number,\n blade: shape({\n count: number,\n width: number,\n height: number,\n radius: number\n }),\n duration: number,\n color: string\n};\n\nSpinner.defaultProps = {\n size: 28,\n blade: {\n count: 14,\n width: 3,\n height: 6,\n radius: 4\n },\n duration: 1,\n color: '#31a44a'\n};\n","import React, { useEffect, useState } from 'react';\nimport {\n bool, func, arrayOf, shape, string\n} from 'prop-types';\nimport { Spinner } from '@jotforminc/loading';\nimport { TwoButtonPopup as Modal } from '@jotforminc/two-button-popup';\nimport { toast } from 'react-toastify';\nimport { translationRenderer } from '@jotforminc/translation';\n\nimport keyboardJS from '../../vendor/keyboard';\nimport { cancelSignDocument } from '../../api';\nimport SVG from '../../components/SVG';\nimport { enhancedProps } from '../../constants/proptypes';\n\nconst CancelModal = ({\n isVisible,\n handleVisibilityChange,\n document,\n onCancel,\n t\n}) => {\n const [reason, setReason] = useState('');\n const [loading, setLoading] = useState(false);\n\n const onClose = () => {\n handleVisibilityChange(false);\n };\n\n const cancelDocument = () => {\n setLoading(true);\n cancelSignDocument(document.id, reason)\n .then(() => {\n onCancel();\n toast.success(t.SIGN_CANCEL_SUCCESS, {\n type: toast.TYPE.SUCCESS,\n position: toast.POSITION.TOP_RIGHT,\n className: 'success'\n });\n onClose();\n })\n .catch(() => {\n setLoading(false);\n });\n };\n\n useEffect(() => {\n keyboardJS.bind('escape', onClose);\n return () => keyboardJS.unbind('escape', onClose);\n }, []);\n\n if (isVisible) {\n return (\n \n {loading && }\n {t.SIGN_CANCEL_BUTTON_TEXT}\n \n )}\n onSave={cancelDocument}\n onClose={onClose}\n showClose={false}\n saveButtonDisabled={loading || reason.trim() === ''}\n >\n
    \n \n
    \n

    {t.SIGN_CANCEL_TITLE}

    \n

    \n {translationRenderer(\n 'This action [1[cannot be undone]]. All parties will receive an email with your reason for canceling.'\n )({\n renderer1: text => ({text})\n })}\n

    \n
    \n setReason(e.target.value)}\n />\n
    \n \n );\n }\n\n return null;\n};\n\nCancelModal.propTypes = {\n isVisible: bool,\n handleVisibilityChange: func,\n document: shape({\n id: string,\n participants: arrayOf(shape({}))\n }),\n onCancel: func.isRequired,\n ...enhancedProps\n};\nCancelModal.defaultProps = {\n isVisible: false,\n handleVisibilityChange: () => {},\n document: {\n id: '',\n participants: []\n }\n};\n\nexport default CancelModal;\n","import React, { useEffect, useState } from 'react';\nimport {\n bool, func, arrayOf, shape, string\n} from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { TwoButtonPopup as Modal } from '@jotforminc/two-button-popup';\n\nimport keyboardJS from '../../vendor/keyboard';\nimport { sendSignReminderEmail } from '../../api';\nimport SVG from '../../components/SVG';\n\nconst ReminderModal = ({\n isVisible,\n handleVisibilityChange,\n document,\n onSendSuccess,\n filteredUsers\n}) => {\n const [disableSaveButton, setDisableSaveButton] = useState(false);\n const participants = filteredUsers\n .map(p => `${p.name} (${p.email})`).join(', ');\n\n const onClose = () => {\n handleVisibilityChange(false);\n };\n\n const sendReminder = () => {\n setDisableSaveButton(true);\n sendSignReminderEmail(document.id).then(message => {\n if (message === 'success') {\n onSendSuccess();\n onClose();\n }\n }).finally(() => {\n setDisableSaveButton(false);\n });\n };\n\n useEffect(() => {\n keyboardJS.bind('escape', onClose);\n return () => keyboardJS.unbind('escape', onClose);\n }, []);\n\n if (isVisible) {\n return (\n }\n modalContainer={global.document.querySelector('#modal-container')}\n saveText={t('SEND')}\n onSave={sendReminder}\n onClose={onClose}\n saveButtonDisabled={disableSaveButton}\n >\n
    \n \n

    \n {t('You are about to send')}\n
    \n {participants}\n
    \n {t('a reminder email. Are you sure to proceed?')}\n

    \n
    \n \n );\n }\n\n return null;\n};\n\nReminderModal.propTypes = {\n isVisible: bool,\n handleVisibilityChange: func,\n document: shape({\n id: string,\n participants: arrayOf(shape({}))\n }),\n onSendSuccess: func,\n filteredUsers: arrayOf(shape({})).isRequired\n};\nReminderModal.defaultProps = {\n isVisible: false,\n handleVisibilityChange: () => {},\n document: {\n id: '',\n participants: []\n },\n onSendSuccess: () => {}\n};\n\nexport default ReminderModal;\n","import React, {\n useEffect, useState, useRef, useCallback, forwardRef\n} from 'react';\nimport { useSelector, connect } from 'react-redux';\nimport {\n string, shape, arrayOf, node, oneOfType, bool, func\n} from 'prop-types';\nimport moment from 'moment';\nimport { Tooltip, Dropdown as UIKitDropdown } from '@jotforminc/uikit';\nimport { useHistory } from 'react-router-dom';\n\nimport { Button } from '@jotforminc/sign-info-panel';\nimport SVG from '../../components/SVG';\nimport CancelModal from './CancelModal';\nimport ReminderModal from './ReminderModal';\nimport { downloadFile, updateLocationParams } from '../../utils';\nimport { enhancedProps } from '../../constants/proptypes';\nimport { userRoleSelector } from '../../selectors';\nimport { setActiveTab } from '../../actions';\n\nexport const filterUsersToRemind = (document, currentDate) => (\n ((document && document.participants) || [])\n .filter(\n p => p.status === 'SENT'\n && p.type !== 'cc'\n && p.fields.length > 0\n && (p.lastReminded ? moment(p.lastReminded).diff(currentDate, 'days') < 0 : true)\n )\n);\n\nconst ReminderButtonWithTooltip = ({\n children,\n reminderEmailDisabled,\n onClick,\n reminderEmailDisabledText\n}) => {\n const buttonRef = useRef();\n\n return (\n \n \n \n {children}\n \n )}\n disabled={reminderEmailDisabled}\n className=\"send\"\n style={{ ...(reminderEmailDisabled ? { pointerEvents: 'none' } : {}) }}\n />\n {reminderEmailDisabled && (\n \n {reminderEmailDisabledText}\n \n )}\n \n );\n};\n\nReminderButtonWithTooltip.propTypes = {\n children: oneOfType([\n arrayOf(node),\n node\n ]).isRequired,\n reminderEmailDisabled: bool.isRequired,\n onClick: func.isRequired,\n reminderEmailDisabledText: string.isRequired\n};\n\nconst popoverProps = {\n usePortal: true,\n popoverOptions: {\n placement: 'bottom-start',\n modifiers: [\n { name: 'offset', options: { offset: [0, 12] } },\n { name: 'computeStyles', options: { gpuAcceleration: false } }\n ]\n },\n className: 'jfSign-download-sealed-popover'\n};\n\nconst SignDownloadButton = ({ document, t }) => {\n const sealedFileWithoutAudit = document?.sealedFileWithoutAudit;\n const {\n SIGN_SIGNED_DOCUMENT, SIGN_SIGNED_DOCUMENT_WITH_AUDIT, SIGN_DOWNLOAD, DOWNLOAD\n } = t;\n\n if (document.sealedFile.length === 0) {\n return null;\n }\n\n return sealedFileWithoutAudit ? (\n (\n \n \n {DOWNLOAD}\n \n ))}\n OptionRenderer={({\n option: { value = '', text = '', iconName = '' }\n }) => (\n downloadFile(value)}\n className=\"jfSign-button-download-sealed\"\n >\n \n {text}\n \n )}\n popoverProps={popoverProps}\n />\n ) : (\n downloadFile(document.sealedFile)}\n content={(\n <>\n \n {SIGN_DOWNLOAD}\n \n )}\n />\n );\n};\n\nSignDownloadButton.propTypes = {\n document: shape({\n id: string,\n status: string,\n sealedFile: string,\n auditTrailFile: string\n }),\n ...enhancedProps\n};\nSignDownloadButton.defaultProps = {\n document: {\n id: '',\n status: '',\n sealedFile: '',\n auditTrailFile: ''\n }\n};\n\nconst SignHeader = ({\n document,\n onSetActiveTab,\n t\n}) => {\n const userRole = useSelector(userRoleSelector);\n const userIsOwner = userRole && userRole === 'owner';\n const filteredUsers = filterUsersToRemind(document, new Date());\n const history = useHistory();\n\n const [showDecline, setShowDecline] = useState(false);\n const [showReminder, setShowReminder] = useState(false);\n const [reminderEmailDisabled, setReminderEmailDisabled] = useState(false);\n\n useEffect(() => {\n setReminderEmailDisabled(!(filteredUsers.length > 0 && userIsOwner));\n }, [document]);\n\n const handleTabChange = tabID => {\n const newLocationParams = {\n tab: tabID, sid: '', editMode: false, filterText: null, filterObject: null\n };\n history.push(updateLocationParams(newLocationParams));\n };\n\n const onCancel = useCallback(() => {\n handleTabChange('signCanceled');\n onSetActiveTab('signCanceled');\n });\n\n return (\n
    \n {document.status === 'IN_PROGRESS' && (\n <>\n setShowDecline(!showDecline)}\n content={(\n <>\n \n {t.SIGN_CANCEL_DOC}\n \n )}\n className=\"decline\"\n disabled={!userIsOwner}\n />\n \n setShowReminder(!showReminder)}\n reminderEmailDisabledText={\n userIsOwner\n ? t.SIGN_REMINDER_ALREADY_SENT\n : t.SIGN_TEAMS_NO_PERMISSION_FOR_REMINDER\n }\n >\n {t.SIGN_SEND_REMINDER}\n \n \n )}\n setReminderEmailDisabled(true)}\n filteredUsers={filteredUsers}\n />\n \n
    \n );\n};\n\nSignHeader.propTypes = {\n document: shape({\n id: string,\n status: string,\n sealedFile: string\n }),\n onSetActiveTab: func.isRequired,\n ...enhancedProps\n};\nSignHeader.defaultProps = {\n document: {\n id: '',\n status: '',\n sealedFile: ''\n }\n};\n\nconst mapDispatchToProps = {\n onSetActiveTab: setActiveTab\n};\n\nexport default connect(null, mapDispatchToProps)(SignHeader);\n","/* eslint-disable complexity */\nimport React from 'react';\nimport { connect } from 'react-redux';\nimport { useFeatures } from '@paralleldrive/react-feature-toggles';\nimport {\n bool, string, node, func\n} from 'prop-types';\n\nimport { WorkflowButton } from '@jotforminc/workflow-components';\n\nimport classNames from 'classnames';\nimport t from '../../constants/texts';\nimport {\n liteModeSelector, reverseActiveSubmissionIndexSelector,\n activeSubmissionSelector, headerFieldSelector, subheaderFieldSelector, activeTabIDSelector,\n formTitleSelector,\n isAllSentBoxSelector,\n isPwaSelector,\n isPreviousOrdersSelector,\n hideSubmissionHeaderSelector\n} from '../../selectors';\nimport SubmissionDate from '../../components/SubmissionDate';\nimport SubmissionToolbar from '../SubmissionToolbar';\nimport { submissionPropType, YES_NO_PROPTYPE } from '../../constants/proptypes';\nimport { withUIDispatcher } from '../../hocs/UserInterfaceManager';\nimport { LEFT_PANEL_CLASS } from '../../constants';\nimport SVG from '../../components/SVG';\nimport Feature from '../../components/Feature';\nimport { focusTaskSection } from '../../utils';\nimport SignHeader from '../SubmissionSign/Header';\n\nexport const SubmissionViewHeaderComponent = ({\n submission,\n liteMode,\n submissionDateFormat,\n tags,\n toggleClass,\n activeTab,\n hideSubmissionHeader\n}) => {\n const features = useFeatures();\n const isNewDesign = features.includes('isNewDesign');\n const isThread = features.includes('submissionThread');\n const isDraft = submission.status === 'ENABLED';\n\n const showDraftTitle = isDraft && activeTab === 'sentbox';\n const haveHeader = hideSubmissionHeader !== 'Yes';\n\n const workflow = isNewDesign && isThread && activeTab !== 'sentbox' ? : null;\n\n return (\n
    \n
    \n
    \n
    \n
    \n {showDraftTitle &&
    {t.DRAFT}
    }\n {workflow}\n
    \n
    \n
    \n {!liteMode && (\n
    \n toggleClass(LEFT_PANEL_CLASS)}\n >\n \n
    \n \n {!liteMode && !isNewDesign && (\n
    \n {t.SUBMISSION_DATE}\n
    \n )}\n
    \n {false && }\n {submission?.id && }\n
    \n
    \n )}\n />\n \n )}\n />\n
    \n )}\n \n \n );\n};\n\nSubmissionViewHeaderComponent.propTypes = {\n submission: submissionPropType.isRequired,\n liteMode: bool.isRequired,\n submissionDateFormat: string.isRequired,\n activeTab: string.isRequired,\n toggleClass: func.isRequired,\n tags: node,\n hideSubmissionHeader: YES_NO_PROPTYPE.isRequired\n};\n\nSubmissionViewHeaderComponent.defaultProps = {\n tags: null\n};\n\nconst mapStateToProps = state => {\n return {\n isPwa: isPwaSelector(state),\n liteMode: liteModeSelector(state),\n submissionIndex: reverseActiveSubmissionIndexSelector(state),\n submission: activeSubmissionSelector(state),\n headerField: headerFieldSelector(state),\n subheaderField: subheaderFieldSelector(state),\n activeTab: activeTabIDSelector(state),\n formTitle: formTitleSelector(state),\n isAllSentbox: isAllSentBoxSelector(state),\n isPreviousOrders: isPreviousOrdersSelector(state),\n hideSubmissionHeader: hideSubmissionHeaderSelector(state)\n };\n};\n\nexport default withUIDispatcher(connect(mapStateToProps)(SubmissionViewHeaderComponent));\n","import React, { Component, Suspense } from 'react';\nimport { node, func } from 'prop-types';\nimport { safeLazy } from '@jotforminc/safe-lazy-import';\nimport { Permissions } from '@jotforminc/permissions';\nimport { toast } from 'react-toastify';\nimport { withFeatures } from '@paralleldrive/react-feature-toggles';\n\nimport SubmissionView from '../../containers/SubmissionView';\n\nimport Feature from '../../components/Feature';\n\nimport { classNames, hasTags } from '../../utils';\nimport { answersPropType, enhancedProps } from '../../constants/proptypes';\nimport SubmissionViewHeader from '../../containers/SubmissionViewHeader';\nimport { MOBILE_MAX_WIDTH } from '../../constants';\n\nconst SubmissionSign = safeLazy(() => import(/* webpackChunkName: \"Sign\" */ '../../containers/SubmissionSign'));\n\nconst mailVisibleClass = 'jfInbox--mailVisible';\nclass SubmissionComponent extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n currentMargin: null\n };\n this.handleResize = this.handleResize.bind(this);\n this.marginGuideElement = null;\n }\n\n componentDidMount() {\n window.addEventListener('resize', this.handleResize);\n this.handleResize();\n }\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.randleResize);\n }\n\n handleResize() {\n if (!this.marginGuideElement) return;\n const { offsetWidth } = this.marginGuideElement;\n this.setState({\n currentMargin: offsetWidth < 60 ? offsetWidth : null\n });\n }\n\n onCancelStartOverError = () => {\n toast.error('There is an error on the process. Please try again later.', {\n position: toast.POSITION.TOP_RIGHT,\n className: 'error'\n });\n };\n\n setMailVisibility = visible => {\n const { addClass, removeClass } = this.props;\n if (visible) return addClass(mailVisibleClass);\n\n removeClass(mailVisibleClass);\n };\n\n showMail = taskID => {\n const { onSetMessage } = this.props;\n onSetMessage({\n type: 'Reply', useApi: false, taskID: taskID, requestMore: true, title: 'requestMoreInfo'\n });\n };\n\n render() {\n const {\n answers,\n tags,\n t,\n addClass\n } = this.props;\n\n const {\n currentMargin\n } = this.state;\n const userRole = Permissions?.value?.role;\n const isMobile = window.innerWidth <= MOBILE_MAX_WIDTH;\n\n return (\n <>\n
    \n
    \n \n
    \n {isMobile && (\n
    \n \n
    \n )}\n \n \n
    \n )}\n />\n Loading}>\n \n \n )}\n />\n
    \n
    \n \n \n \n );\n }\n}\n\nSubmissionComponent.propTypes = {\n answers: answersPropType.isRequired,\n tags: node,\n addClass: func.isRequired,\n removeClass: func.isRequired,\n ...enhancedProps\n};\n\nSubmissionComponent.defaultProps = {\n tags: null\n};\n\nexport default withFeatures(SubmissionComponent);\n","import React, { Component } from 'react';\nimport { node, func } from 'prop-types';\nimport debounce from 'lodash/debounce';\nimport { withUIDispatcher } from '../../hocs/UserInterfaceManager';\n\nimport {\n MOBILE_MAX_WIDTH,\n SUBMISSION_CONTAINER_SCROLL_CLASS,\n SUBMISSION_CONTAINER_CLASS,\n HEADER_SCROLL_POINTS\n} from '../../constants';\n\nexport class SubmissionContainerComponent extends Component {\n constructor(props) {\n super(props);\n\n this.submissionContainerRef = null;\n this.handleScroll = debounce(this.handleScroll).bind(this);\n this.handleWindowResize = debounce(this.handleWindowResize).bind(this);\n }\n\n componentDidMount() {\n global.window.addEventListener('resize', this.handleWindowResize);\n\n if (this.submissionContainerRef) {\n this.submissionContainerRef.addEventListener('scroll', this.handleScroll);\n }\n }\n\n componentWillUnmount() {\n global.window.removeEventListener('resize', this.handleWindowResize);\n\n if (this.submissionContainerRef) {\n this.submissionContainerRef.removeEventListener('scroll', this.handleScroll);\n }\n }\n\n handleWindowResize() {\n const { innerWidth } = global.window;\n const { removeClass } = this.props;\n\n HEADER_SCROLL_POINTS.forEach(({ suffix, resizeRemove }) => {\n if (innerWidth > MOBILE_MAX_WIDTH && resizeRemove) {\n removeClass(`${SUBMISSION_CONTAINER_SCROLL_CLASS}--${suffix}`);\n }\n });\n }\n\n handleScroll(event) {\n const { target: { scrollTop } } = event;\n const { addClass, removeClass } = this.props;\n\n HEADER_SCROLL_POINTS.forEach(({ min, max, suffix }) => {\n if (scrollTop > max) {\n addClass(`${SUBMISSION_CONTAINER_SCROLL_CLASS}--${suffix}`);\n }\n\n if (scrollTop < min) {\n removeClass(`${SUBMISSION_CONTAINER_SCROLL_CLASS}--${suffix}`);\n }\n });\n }\n\n render() {\n const {\n children\n } = this.props;\n\n return (\n
    { this.submissionContainerRef = r; }} className={SUBMISSION_CONTAINER_CLASS}>\n {children}\n
    \n );\n }\n}\n\nSubmissionContainerComponent.propTypes = {\n children: node,\n addClass: func,\n removeClass: func\n};\n\nSubmissionContainerComponent.defaultProps = {\n children: null,\n addClass: f => f,\n removeClass: f => f\n};\n\nexport default withUIDispatcher(SubmissionContainerComponent);\n","import {\n func, node, shape, string\n} from 'prop-types';\nimport React, {\n forwardRef, useRef, useState, useEffect\n} from 'react';\nimport classNames from 'classnames';\nimport { formatBytes, capitalizeFirstLetter } from '@jotforminc/utils';\nimport {\n IconXmark,\n IconArrowsFromCenter,\n IconArrowsToCenter,\n IconLineHorizontal\n} from '@jotforminc/svg-icons';\nimport { Button } from '@jotforminc/magnet';\nimport { requestLayer } from '../../api/requestLayer';\nimport NoteEditor from '../NoteEditor';\nimport SVG from '../SVG';\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\nimport { isEmptyNote } from '../../utils';\n\nconst Comment = forwardRef(({\n onSave,\n editorTitle,\n t,\n onClose, activeTab, formID, className,\n setIsOpened,\n placeholder,\n uploadRules: {\n sizePerFile,\n formattedSizePerFile,\n numberPerUpload\n }\n}, ref) => {\n const editorRef = useRef();\n const [editorSize, setEditorSize] = useState({\n size: 'regular',\n isMinimized: false\n });\n const [noteContent, setNoteContent] = useState(undefined);\n const [attachments, setAttachments] = useState([]);\n const [error, setError] = useState('');\n const [loading, setLoading] = useState(false);\n\n const saveNoteHandler = async () => {\n await editorRef.current?.save();\n onSave();\n setIsOpened('closed');\n setTimeout(() => {\n onClose();\n }, 250);\n WatchmanRecorder.recordEvent('Comment', capitalizeFirstLetter(activeTab));\n };\n\n const onCloseHandler = () => {\n WatchmanRecorder.recordEvent('Closed', 'Mail&Comment Modal on All tabs');\n // eslint-disable-next-line no-unused-expressions\n editorRef.current?.deleteContentFromEditor();\n setIsOpened('closed');\n setTimeout(() => {\n onClose();\n }, 250);\n };\n\n const handleFiles = files => {\n [...files].forEach((file, i) => {\n const reader = new global.FileReader();\n reader.addEventListener('load', result => {\n const newFile = {\n key: `${file.name}-${i}`,\n src: result,\n size: formatBytes(file.size),\n name: file.name,\n raw: file,\n sizeError: file.size > sizePerFile\n };\n setAttachments(prevAtt => [...prevAtt, newFile]);\n });\n reader.readAsDataURL(file);\n });\n };\n\n const handleDrop = e => {\n e.preventDefault();\n e.stopPropagation();\n const files = e.target.files || e.dataTransfer.files;\n handleFiles([...files]);\n };\n\n // TODO WILL BE RECONFIGURED\n const moveProgressBar = (percent, index) => {\n const elem = document.querySelector(`#progressBar-${index}`);\n if (!elem) return;\n if (elem.style?.display === 'none') {\n elem.style.display = 'block';\n }\n const bar = elem.querySelector('.bar');\n const { width } = bar.style;\n if (width !== '100%' && percent !== 100) {\n bar.style.width = `${percent}%`;\n } else {\n elem.style.display = 'none';\n }\n };\n\n const uploadFiles = async (raw, index) => {\n const fd = new global.FormData();\n fd.append('file[]', raw, raw.name);\n\n try {\n const { data: { message, success } } = await requestLayer.post(\n // requests that have same payload are blocked by requestLayer thus index is used to make requests unique\n `form/${formID}/projectFiles?fileIndex=${index}`,\n fd,\n {\n onUploadProgress: progressEvent => {\n const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);\n moveProgressBar(percentCompleted, index);\n },\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n }\n );\n\n if (success) {\n return true;\n }\n setError(message);\n } catch (err) {\n setError(err);\n }\n };\n\n const prepareFiles = async () => {\n if (error === '' && !loading) {\n setLoading(true);\n try {\n let uploadCount = 0;\n attachments.forEach(async ({ raw }, i) => {\n const isUploaded = await uploadFiles(raw, i);\n\n if (isUploaded) {\n uploadCount++;\n }\n if (uploadCount === attachments.length) {\n saveNoteHandler();\n setLoading(false);\n }\n });\n } catch (err) {\n setError(err);\n }\n }\n };\n\n const validateUploadFiles = () => {\n const isSizePerFileExceeded = attachments.some(({ raw }) => raw.size > sizePerFile);\n const isNumberPerUploadExceeded = attachments.length > numberPerUpload;\n\n if (isSizePerFileExceeded) {\n setError(`File size cannot be larger than ${formattedSizePerFile}.`);\n } else if (isNumberPerUploadExceeded) {\n setError(`You can only upload ${numberPerUpload} files.`);\n } else {\n setError('');\n }\n };\n\n useEffect(() => {\n validateUploadFiles();\n }, [attachments]);\n\n const hasContent = !isEmptyNote(noteContent);\n const buttonSendText = activeTab === 'sentbox' ? t.SEND : t.ADD_A_NOTE;\n\n const rendered = (\n
    \n
    \n
    \n
    f} onClick={() => setEditorSize('regular')}>\n \n \n \n {editorTitle}\n
    \n
    \n f}\n onClick={() => setEditorSize(prevState => ({\n ...prevState,\n isMinimized: !editorSize.isMinimized\n }))}\n variant='ghost'\n size='small'\n startIcon={IconLineHorizontal}\n colorStyle='pages'\n />\n f}\n className='bg-opacity-0 border-opacity-0'\n onClick={() => setEditorSize({\n size: editorSize.size === 'isBig' && !editorSize.isMinimized ? 'regular' : 'isBig',\n isMinimized: false\n })}\n variant='ghost'\n startIcon={editorSize.size === 'isBig' ? IconArrowsToCenter : IconArrowsFromCenter}\n size='small'\n colorStyle='pages'\n />\n f}\n className='bg-opacity-0 border-opacity-0'\n startIcon={IconXmark}\n variant='ghost'\n size='medium'\n colorStyle='pages'\n />\n
    \n
    \n
    \n \n \n
    \n {attachments.length > 0 && (\n
    \n {\n attachments.map(({\n key, name, size, src, sizeError\n }, i) => (\n \n \n
    \n {name}\n
    \n
    \n (\n {size}\n )\n
    \n
    \n {sizeError ? (\n \n {`File size cannot be larger than ${formattedSizePerFile}.`}\n
    \n ) : (\n \n \n
    \n )}\n !loading && setAttachments(attachments.filter(file => file.key !== key))}\n role=\"button\"\n aria-label={t.REMOVE_ATTACHMENTS}\n tabIndex=\"-1\"\n >\n \n \n \n ))\n }\n {\n attachments.length > numberPerUpload && (\n
    \n {\n `You can only upload ${numberPerUpload} files.`\n }\n
    \n )\n }\n \n )}\n
    \n
    \n
    \n \n
    \n
    \n {\n if (attachments.length > 0) {\n prepareFiles();\n } else {\n saveNoteHandler();\n }\n }}\n variant=\"filled\"\n fullWidth\n colorStyle='primary'\n >\n {!loading ? buttonSendText : t.UPLOADING_FILES}\n \n
    \n
    \n
    \n \n \n \n );\n\n return rendered;\n});\n\nComment.propTypes = {\n onSave: func.isRequired,\n editorTitle: node.isRequired,\n t: shape({}).isRequired,\n onClose: func,\n activeTab: string,\n className: string,\n setIsOpened: func,\n formID: string.isRequired,\n placeholder: string,\n uploadRules: shape({})\n};\n\nComment.defaultProps = {\n activeTab: '',\n className: '',\n setIsOpened: null,\n placeholder: '',\n uploadRules: {\n sizePerFile: 5000000, // 5MB per file\n formattedSizePerFile: '5 MB',\n numberPerUpload: 3\n },\n onClose: f => f\n};\n\nexport default Comment;\n","import React, { useState, useEffect } from 'react';\nimport { string, func, bool } from 'prop-types';\nimport { TwoButtonPopup } from '@jotforminc/two-button-popup';\nimport { usePropState } from '@jotforminc/hooks';\nimport { Checkbox } from '@jotforminc/magnet';\nimport keyboardJS from '../../vendor/keyboard';\n\nimport SVG from '../SVG';\nimport Submission from '../Submission';\nimport NoAnswer from '../NoAnswer';\n\nimport { classNames, getSubmissionDateLanguage, getSubmissionDateFormat } from '../../utils';\n\nimport {\n questionsPropType,\n submissionPropType,\n questionOrdersPropType,\n userPropType,\n translatedProps,\n formPropType\n} from '../../constants/proptypes';\nimport { withWatchMan } from '../../utils/WatchmanRecorder';\nimport FeatureComponent from '../Feature';\n\nconst PrintSettings = ({\n user,\n form,\n defaultLayout,\n defaultSpacing,\n defaultThread,\n saveText,\n showRememberChoice,\n onSave,\n onClose,\n containerSelector,\n questions,\n questionOrders,\n submission,\n hideHeaderAndText,\n hideEmptyFields,\n t\n}) => {\n const { title, paymentStrings, products } = form;\n const container = document.querySelector(containerSelector);\n const [rememberPrintSettings, setRememberPrintSettings] = useState(false);\n const [printLayoutPreference, setPrintLayoutPreference] = usePropState(defaultLayout);\n const [printSpacingPreference, setPrintSpacingPreference] = usePropState(defaultSpacing);\n const [printThreadPreference, setPrintThreadPreference] = usePropState(defaultThread);\n\n const questionList = questionOrders; // .slice(0, 10);\n const submissionDateLanguage = getSubmissionDateLanguage(user, form);\n const submissionDateFormat = getSubmissionDateFormat(form);\n\n const togglePrintSettingsRemember = () => setRememberPrintSettings(!rememberPrintSettings);\n const onSettingsSave = () => {\n onSave({\n layout: printLayoutPreference, spacing: printSpacingPreference, thread: printThreadPreference, save: rememberPrintSettings\n });\n onClose();\n };\n const onSettingsClose = () => {\n onClose();\n };\n\n function handleClose(e) {\n if (e.stopPropagation) e.stopPropagation();\n if (e.stopImmediatePropagation) e.stopImmediatePropagation();\n onClose(e);\n }\n\n useEffect(() => {\n keyboardJS.bind('escape', handleClose);\n return () => keyboardJS.unbind('escape', handleClose);\n }, []);\n\n const threadChecked = printThreadPreference === 'Yes';\n\n return (\n \n
    \n \n
    \n
    \n
    {t.PRINT_SETTINGS}
    \n
    \n
    ${title}`) }} />\n
    \n
    \n
    \n )}\n footerContent={(\n
    \n {showRememberChoice && (\n \n )}\n
    \n )}\n onClose={onSettingsClose}\n modalContainer={container}\n saveText={saveText || t.PRINT.toUpperCase()}\n onSave={onSettingsSave}\n showClose={false}\n >\n
    \n
    {t.LAYOUT.toUpperCase()}
    \n
    \n
    \n {`${t.SIDE_BY_SIDE}: `}\n setPrintLayoutPreference('row'))}\n onKeyUp={null}\n >\n qid !== 'created_at')}\n hideHeaderAndText={hideHeaderAndText}\n hideEmptyFields={hideEmptyFields}\n products={products}\n paymentStrings={paymentStrings}\n fallbackContent={\n \n }\n locale={submissionDateLanguage}\n dateFormat={submissionDateFormat}\n />\n
    \n
    \n
    \n {` ${t.TOP_ALIGNED}: `}\n setPrintLayoutPreference('column'))}\n onKeyUp={null}\n >\n qid !== 'created_at')}\n hideHeaderAndText={hideHeaderAndText}\n hideEmptyFields={hideEmptyFields}\n products={products}\n paymentStrings={paymentStrings}\n fallbackContent={\n \n }\n locale={submissionDateLanguage}\n dateFormat={submissionDateFormat}\n />\n
    \n
    \n \n \n
    \n
    {t.LINE_SPACING.toUpperCase()}
    \n
    \n
    \n setPrintSpacingPreference('high'))}\n onKeyUp={null}\n >\n
    \n \n
    {t.COMPACT}
    \n
    \n
    \n
    \n
    \n setPrintSpacingPreference('medium'))}\n onKeyUp={null}\n >\n
    \n \n
    {t.MEDIUM}
    \n
    \n
    \n
    \n
    \n setPrintSpacingPreference('low'))}\n onKeyUp={null}\n >\n
    \n \n
    {t.WIDE}
    \n
    \n
    \n \n \n \n \n
    {t.CONTENT.toUpperCase()}
    \n setPrintThreadPreference(e.target.checked ? 'Yes' : 'No'))}\n />\n \n )}\n />\n \n );\n};\n\nPrintSettings.propTypes = {\n user: userPropType.isRequired,\n questions: questionsPropType.isRequired,\n questionOrders: questionOrdersPropType.isRequired,\n submission: submissionPropType.isRequired,\n hideHeaderAndText: bool,\n hideEmptyFields: bool,\n containerSelector: string,\n form: formPropType.isRequired,\n defaultLayout: string,\n defaultSpacing: string,\n saveText: string,\n showRememberChoice: bool,\n onSave: func,\n onClose: func,\n ...translatedProps\n};\n\nPrintSettings.defaultProps = {\n containerSelector: '#modal-container',\n defaultLayout: 'row',\n defaultSpacing: 'high',\n saveText: '',\n showRememberChoice: true,\n hideHeaderAndText: true,\n hideEmptyFields: false,\n onSave: f => f,\n onClose: f => f\n};\n\nexport default PrintSettings;\n","import React, { useState, useEffect } from 'react';\nimport { string, func, bool } from 'prop-types';\nimport { ButtonField as Button } from '@jotforminc/button-field';\n\nimport keyboardJS from '../../vendor/keyboard';\n\nimport SVG from '../SVG';\nimport PrintSettings from '../PrintSettings';\n\nimport {\n submissionPropType, questionsPropType, questionOrdersPropType, userPropType, translatedProps, formPropType\n} from '../../constants/proptypes';\nimport { withWatchMan } from '../../utils/WatchmanRecorder';\n\nconst PrintButton = ({\n user,\n form,\n spacing,\n layout,\n thread,\n onPrint,\n containerSelector,\n questions,\n questionOrders,\n submission,\n disabled,\n enablePrintKey,\n hideHeaderAndText,\n hideEmptyFields,\n t,\n eventTarget\n}) => {\n const [printDialogVisibility, setPrintDialogVisibility] = useState(false);\n\n const onPrintDialogClose = () => setPrintDialogVisibility(false);\n\n const onPrintDocument = (props = {\n layout, spacing, thread, save: false\n }) => {\n onPrintDialogClose();\n onPrint(props);\n };\n\n const onPrintClick = withWatchMan('Print', eventTarget, () => {\n if (!spacing || !layout || !thread) {\n return setPrintDialogVisibility(true);\n }\n\n onPrintDocument();\n });\n\n useEffect(() => {\n if (enablePrintKey) {\n keyboardJS.bind(['command + p', 'ctrl + p'], e => {\n e.preventDefault();\n onPrintClick();\n });\n\n return () => keyboardJS.unbind(['command + p', 'ctrl + p'], onPrintClick);\n }\n }, [enablePrintKey]);\n\n return (\n <>\n }\n onClick={onPrintClick}\n disabled={disabled}\n >\n {t.PRINT}\n \n {printDialogVisibility && (\n \n )}\n \n );\n};\n\nPrintButton.propTypes = {\n user: userPropType.isRequired,\n submission: submissionPropType.isRequired,\n questions: questionsPropType.isRequired,\n questionOrders: questionOrdersPropType.isRequired,\n onPrint: func.isRequired,\n form: formPropType.isRequired,\n spacing: string,\n layout: string,\n thread: string,\n disabled: string,\n containerSelector: string,\n enablePrintKey: bool,\n hideHeaderAndText: bool,\n hideEmptyFields: bool,\n ...translatedProps\n};\n\nPrintButton.defaultProps = {\n disabled: '',\n spacing: undefined,\n thread: undefined,\n layout: undefined,\n enablePrintKey: false,\n containerSelector: '#modal-container',\n hideHeaderAndText: true,\n hideEmptyFields: false\n};\n\nexport default PrintButton;\n","import React from 'react';\nimport { func } from 'prop-types';\nimport { ButtonField as Button } from '@jotforminc/button-field';\n\nimport SVG from '../SVG';\nimport { translatedProps } from '../../constants/proptypes';\nimport { classNames } from '../../utils';\n\nconst SearchButton = ({\n className,\n onClick\n}) => {\n return (\n }\n onClick={onClick}\n />\n );\n};\n\nSearchButton.propTypes = {\n onClick: func.isRequired,\n ...translatedProps\n};\n\nSearchButton.defaultProps = {};\n\nexport default SearchButton;\n","/* eslint-disable max-lines */\nimport React, {\n useState, useRef, useEffect, useMemo\n} from 'react';\nimport {\n func, bool, string, arrayOf\n} from 'prop-types';\nimport { connect } from 'react-redux';\nimport Tethered from 'react-tether';\nimport { useFeatures } from '@paralleldrive/react-feature-toggles';\nimport { usePermissions, useRole } from '@jotforminc/permissions';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport { handleCustomNavigation } from '@jotforminc/utils';\nimport { withRouter } from 'react-router-dom';\nimport { createPortal } from 'react-dom';\nimport Mail from '../../components/Mail';\nimport Comment from '../../components/Comment';\nimport SVG from '../../components/SVG';\nimport Feature from '../../components/Feature';\nimport PrintButton from '../../components/PrintButton';\nimport DownloadButton from '../../components/DownloadButton';\nimport DeleteButton from '../../components/DeleteButton';\nimport SubmissionShareButton from '../../components/SubmissionShareButton';\nimport ReadButton from '../../components/ReadButton';\nimport FavoriteButton from '../../components/FavoriteButton';\nimport EditButton from '../../components/EditButton';\nimport ReplyButton from '../../components/ReplyButton';\nimport ForwardButton from '../../components/ForwardButton';\nimport SearchButton from '../../components/SearchButton';\nimport PDFEditorButton from '../../components/PDFEditorButton';\nimport RequestAccessButton from '../../components/RequestAccessButton';\n\nimport {\n HEADER_TEXT_QUESTIONS,\n LEFT_PANEL_CLASS\n} from '../../constants';\n\nimport {\n formPropType,\n userPropType,\n questionsPropType,\n submissionPropType,\n NUMBER_OR_STRING_PROPTYPE,\n enhancedProps\n} from '../../constants/proptypes';\n\nimport {\n formSelector,\n userSelector,\n userTypeSelector,\n emailQidSelector,\n fullNameQidSelector,\n questionsSelector,\n questionOrdersSelector,\n activeSubmissionSelector,\n liteModeSelector,\n unreadSubmissionCountSelector,\n filterResultCountSelector,\n filteredActiveSubmissionIndexSelector,\n filterTextSelector,\n filterObjectSelector,\n hideEmptyFieldsSelector,\n hideNonInputFieldsSelector,\n submissionDateFormatSelector,\n activeTabIDSelector,\n editSubmissionPreference,\n selectedSubmissionIDsSelector,\n allSubmissionsSelectedSelector,\n submissionsSelector,\n headerFieldSelector,\n subheaderFieldSelector,\n isFormFillerAllowedToContactSelector,\n isSettingsPanelOpenSelector,\n getRecaptchaSiteSelector\n} from '../../selectors';\n\nimport {\n updateForm,\n setEditMode,\n prevSubmission,\n nextSubmission,\n updateFormSync,\n setSubmissionNew,\n setSubmissionFlag,\n setFilterText,\n preparePrint,\n printComplete,\n updateBulkSubmission,\n prepareMultipleDownload,\n deleteBulkSubmission,\n renewSubmission,\n deleteSubmission,\n setMessage,\n setSettings\n} from '../../actions';\n\nimport { classNames, updateLocationParams } from '../../utils';\nimport { useClickOutsideState } from '../../hooks';\nimport WatchmanRecorder, { withWatchMan } from '../../utils/WatchmanRecorder';\nimport { withInboxEnhancer } from '../../hocs/InboxEnhancer';\nimport EncryptionButton from '../../components/EncryptionButton';\nimport PurgeButton from '../../components/PurgeButton';\nimport RestoreButton from '../../components/RestoreButton';\nimport DownloadAllButton from '../DownloadAll';\nimport SubmissionHeader from '../../components/SubmissionHeader';\n\nimport { requestEditAccess as requestAccess } from '../../api';\nimport { getPrimaryAndSecondaryAnswer } from '../../utils/Submissions';\n\n// WE NEED TO TEAR APART THIS MONSTER FILE.\nexport const ToolbarComponent = ({ // eslint-disable-line\n user,\n userType,\n form,\n activeTab,\n allowEdit,\n liteMode,\n isSheet,\n questions,\n emailQid,\n toggleClass,\n fullNameQid,\n questionOrders,\n submission,\n submissionCount,\n activeSubmissionIndex,\n onPrevSubmission,\n onNextSubmission,\n onPurgeSubmission,\n onRestoreSubmission,\n onEdit,\n onSetSubmissionNew,\n enableCloseButton,\n disablePrintButton,\n enableEncryptionButton,\n containerSelector,\n isFormFillerAllowedToContact,\n onClose,\n onUpdateForm,\n hideEmptyFields,\n hideHeaderAndText,\n filterObject,\n initiatePrint,\n completePrint,\n selectedFolder,\n onSetSubmissionFlag,\n onSubmissionDelete,\n submissionDateFormat,\n initiateMultipleDownload,\n handleMessageComponent,\n onMoveToTrash,\n headerField,\n onRenewSubmission,\n subHeaderField,\n renewList,\n t,\n onSetMessage,\n setSettingsPanel,\n recaptchaSite\n}) => {\n const isUnread = submission.new === '1' || submission.new === '2';\n const isFavorite = submission.flag === '1';\n const isFirstSubmission = activeSubmissionIndex === 0;\n const isLastSubmission = activeSubmissionIndex === submissionCount - 1;\n const isSubmissionSelected = activeSubmissionIndex !== -1;\n const isEncryptedForm = form.isEncrypted === 'Yes';\n const features = useFeatures();\n const isNewMessage = features.includes('isNewMessage');\n const moreButtonRef = useRef();\n const downloadButtonRef = useRef();\n const pdfButtonRef = useRef();\n const mailRef = useRef();\n const commentEditorRef = useRef();\n\n const isMySubmissions = selectedFolder === 'mySubmissions';\n const inboxAvailable = global.window.JFComponents && global.window.JFComponents.navigateInbox;\n\n const [isReplyVisible, setReplyVisibility] = useState(false);\n const [isForwardVisible, setForwardVisibility] = useState(false);\n const [editRequestStep, setEditRequestStep] = useState('');\n const [deleteRequestStep, setDeleteRequestStep] = useState('');\n const [isMailReply, setMailReply] = useState(false);\n const [editorSize, setEditorSize] = useState('regular');\n const [isCommentVisible, setIsCommentVisible] = useState('closed');\n const [isOverflowMenuVisible, setOverflowMenuVisibility] = useClickOutsideState(false, [moreButtonRef, downloadButtonRef, pdfButtonRef]);\n const [isOpened, setIsOpened] = useState('closed');\n const onOverflowMenuToggle = () => setOverflowMenuVisibility(!isOverflowMenuVisible);\n const onMailVisibilityChange = (mailVisibility = false) => {\n setReplyVisibility(mailVisibility);\n setForwardVisibility(mailVisibility);\n };\n const onPDFEditor = () => {\n handleCustomNavigation(`/pdf-editor/${form.id}?preview=true&submission=${submission.id}&from=jingle&createDoc=1`, 'jfPDFDesigner');\n };\n useEffect(() => {\n if (isReplyVisible || isForwardVisible) {\n setIsOpened('opened');\n }\n }, [isReplyVisible, isForwardVisible]);\n const onReply = () => {\n if (isNewMessage) {\n onSetMessage({\n type: 'Reply', useApi: true, requestMore: false, title: 'reply', container: '#jingle-submission', isLiteInbox: true\n });\n return;\n }\n setMailReply(true);\n setReplyVisibility(true);\n\n if (mailRef.current) {\n if (mailRef.current.state.isMessageMinimized) mailRef.current.setState({ isMessageMinimized: false });\n }\n };\n const onForward = () => {\n if (isNewMessage) {\n onSetMessage({\n type: 'Forward', useApi: true, requestMore: false, title: 'forward', container: '#jingle-submission', isLiteInbox: true\n });\n return;\n }\n setMailReply(false);\n setForwardVisibility(true);\n\n if (mailRef.current) {\n if (mailRef.current.state.isMessageMinimized) mailRef.current.setState({ isMessageMinimized: false });\n }\n };\n\n const onOpenInInbox = e => {\n if (global.window.JFComponents && global.window.JFComponents.navigateInbox) {\n global.window.JFComponents.navigateInbox(e.nativeEvent, `${form.id}/${submission.id}`, null, true);\n }\n };\n\n const onPrintComplete = () => {\n completePrint();\n global.window.removeEventListener('mousemove', onPrintComplete);\n };\n\n const onPrintClick = ({\n layout, spacing, thread, save\n }) => {\n WatchmanRecorder.recordEvent('onPrintClick', 'toolbar'); // TODO: can we handle these in ActionTracker?\n\n if (save) {\n onUpdateForm(form.id, {\n submissionPrintLayoutPreference: layout,\n submissionPrintSpacingPreference: spacing,\n submissionPrintThreadPreference: thread\n });\n }\n\n initiatePrint(layout, spacing, thread);\n global.window.print();\n global.window.addEventListener('mousemove', onPrintComplete);\n };\n\n const onToggleSettingsPanel = () => {\n setSettingsPanel({\n isOpened: false, activeTab: 'general'\n });\n };\n\n const onToggleSearchPanel = () => {\n toggleClass(LEFT_PANEL_CLASS);\n };\n\n const getSubmissionTranslatedStrings = () => {\n if (submissionCount <= 0) { return t.NO_SUBMISSIONS; }\n const isFiltered = Object.keys(filterObject || {}).length;\n\n const headerText = isMySubmissions ? t.CURRENT_SUBMISSION_OF_TOTAL : t.ACTIVE_SUBMISSION_OF_TOTAL;\n\n return isFiltered\n ? t.FILTERED_SUBMISSIONS.replace('{count}', submissionCount)\n : headerText.replace(/ /g, '\\u00A0').replace('{activeSubmission}', `${activeSubmissionIndex + 1}`).replace('{totalSubmissions}', `${submissionCount}`);\n };\n\n const permissions = usePermissions();\n\n const safeQuestions = user.isHIPAA !== '1' ? questions : Object.keys(questions).reduce((acc, qid) => {\n if (!questions[qid].protected || questions[qid].protected !== 'Yes') {\n acc[qid] = questions[qid];\n }\n return acc;\n }, {});\n\n const shouldShowForward = permissions?.forward\n && !!(Object.keys(safeQuestions).filter(k => {\n if (!safeQuestions[k]) return false;\n\n if (\n ['created_at', 'ip', 'id', 'tags'].indexOf(k) > -1\n || HEADER_TEXT_QUESTIONS.indexOf(safeQuestions[k].type) > -1\n ) {\n return false;\n }\n return true;\n }).length);\n const hasEmail = submission && submission.answers && Object.keys(submission.answers).filter(answerKey => {\n const answerObj = submission.answers[answerKey];\n return answerObj && answerObj.type === 'control_email' && answerObj.answer;\n }).length > 0;\n const shouldShowFavorite = (activeTab !== 'trash' && !liteMode) || isSheet;\n const shouldShowReply = isSheet && activeTab !== 'sentbox' && shouldShowForward;\n const isReplyDisabled = (!isSheet && emailQid.length > 0 && !isForwardVisible) || (isSheet && !hasEmail);\n\n const role = useRole();\n\n const isFormUser = userType === 'formuser';\n const isUser = userType === 'user';\n const { pdfTemplates } = form;\n const containerDom = global.document.querySelector('#popover-container .jfInbox--isCompact');\n const checkShouldShowEdit = () => {\n if (submission.isSignSubmission) return false;\n\n return (role !== 'readOnly') && (activeTab !== 'sentbox' || allowEdit);\n };\n const checkShouldShowRequestEdit = () => {\n if (submission.isSignSubmission) return false;\n\n return (role === 'assignee' || role === 'readOnly') && !permissions?.editSubmissions;\n };\n const shouldShowEdit = checkShouldShowEdit();\n const shouldShowRequestEdit = checkShouldShowRequestEdit();\n const shouldShowSettings = !liteMode && (activeTab === 'inbox' || activeTab === 'sentbox') && permissions.settings;\n\n const isAllowedToComment = useMemo(() => {\n if (liteMode) {\n return (isFormFillerAllowedToContact && permissions?.editNotes);\n }\n return permissions?.editNotes;\n }, [role, isFormFillerAllowedToContact, liteMode]);\n\n const onCommentMinimize = () => {\n if (editorSize === 'isMinimized') {\n setEditorSize('regular');\n return;\n }\n setEditorSize('isMinimized');\n };\n\n const onCommentMaximize = () => {\n if (editorSize === 'isBig') {\n setEditorSize('regular');\n return;\n }\n setEditorSize('isBig');\n };\n\n const onSendRequestEditAccess = async message => {\n setEditRequestStep('loading');\n const isDisabled = editRequestStep === 'done' || !permissions?.requestEdit;\n if (['readOnly', 'assignee'].indexOf(role) > -1 && !isDisabled) {\n const isReadOnly = role === 'readOnly';\n const data = await requestAccess(form.id,\n {\n message,\n accessType: isReadOnly ? 'supporter' : 'submitAndEdit',\n preventToast: true\n },\n isReadOnly ? 'inbox' : 'form');\n\n if (data === 'success') {\n setEditRequestStep('done');\n } else {\n setEditRequestStep('error');\n }\n } else {\n setEditRequestStep('error');\n }\n };\n\n const onSendRequestDeleteAccess = async message => {\n setDeleteRequestStep('loading');\n\n try {\n const data = await requestAccess(form.id,\n {\n message,\n action: 'DELETE',\n submission_id: submission.id,\n preventToast: true\n },\n 'inbox');\n\n if (data === 'success') {\n setDeleteRequestStep('done');\n onRenewSubmission(submission.id, false);\n }\n } catch {\n setDeleteRequestStep('error');\n } finally {\n setTimeout(() => {\n setDeleteRequestStep('');\n }, 1500);\n }\n };\n\n // eslint-disable-next-line\n let [headerTitle, headerSubtitle] = getPrimaryAndSecondaryAnswer({\n submission,\n primary: { field: headerField },\n secondary: { field: subHeaderField },\n submissionIndex: activeSubmissionIndex || 1,\n t\n });\n\n if (activeTab === 'sentbox') {\n if (submission?.form?.title && window.location.pathname.indexOf('/sentbox/all') > -1) {\n headerTitle = submission.form.title;\n } else {\n headerTitle = form.title;\n }\n }\n\n const messageContainer = (\n
    \n { (isReplyVisible || isForwardVisible) && (\n \n )}\n
    \n );\n\n const commentContainer = (\n setIsCommentVisible('closed')}\n onClose={setIsCommentVisible}\n onMinimize={onCommentMinimize}\n onMaximize={onCommentMaximize}\n editorSize={editorSize}\n activeTab={activeTab}\n formID={form?.id}\n t={t}\n tabIndex=\"0\"\n />\n );\n\n return (\n <>\n {submission.answers && containerDom && (\n createPortal(messageContainer, containerDom)\n )}\n {\n isCommentVisible === 'opened' && containerDom && (\n createPortal(\n commentContainer,\n containerDom\n )\n )\n }\n \n
    \n }\n className={classNames('forPreviousSubmission', (isFirstSubmission || !isSubmissionSelected) && 'isDisabled')}\n />\n }\n disabled={isLastSubmission ? 'disabled' : ''}\n />\n
    \n
    \n { isMySubmissions && submissionCount > 0 && (\n
    \n {submission?.token && (\n
    \n }\n onClick={() => handleCustomNavigation(`${form.url}?session=${submission?.session_id}&stoken=${submission?.token}`, '_blank', true)}\n >\n {t.CONTINUE_TO_EDIT}\n \n
    \n )}\n {isAllowedToComment && (\n \n
    \n }\n onClick={() => setIsCommentVisible('opened')}\n tabIndex=\"0\"\n >\n {t.SEND_MESSAGE}\n \n
    \n \n )}\n />\n )}\n {!submission?.token && (\n
    \n }\n onClick={() => handleCustomNavigation(form.url, '_blank', true)}\n tabIndex=\"0\"\n >\n {t.FILL_AGAIN}\n \n
    \n )}\n \n }\n onClick={onOverflowMenuToggle}\n disabled={isSubmissionSelected ? '' : 'disabled'}\n />\n
    \n {\n submission?.token ? (\n { onSubmissionDelete(submission.id); renewList(); }}\n dialogHeader={t.DISCARD_DRAFT_SUBMISSION}\n dialogTitle={t.ARE_YOU_SURE_PERMANENTLY_DISCARD_PENDING_SUBMISSION}\n dialogSubtitle={[t.CURRENT_INCOMPLETE_SUBMISSION_WILL_BE_DELETED_PERMANENTLY, ` ${t.THIS_ACTION_CANNOT_BE_UNDONE}`]}\n />\n )\n : (\n <>\n {\n permissions?.editSubmissions && allowEdit && (\n \n )\n }\n {shouldShowRequestEdit && (\n \n )}\n />\n )}\n {user.isHIPAA !== '1' && (\n \n )}\n {!disablePrintButton && (\n \n )}\n {permissions?.editNotes && isAllowedToComment && (\n }\n onClick={() => setIsCommentVisible('opened')}\n >\n {t.SEND_MESSAGE}\n \n )}\n />\n )}\n {role === 'assignee' && submission.isSignSubmission\n && (\n \n

    {t.DELETE_REQUEST_WILL_BE_SENT_TO_OWNER}

    \n
    \n )}\n titleText={t.REQUEST_DELETE_FOR_SUBMISSION}\n icon=\"iconDelete\"\n disableTooltip\n className=\"forDelete\"\n />\n )}\n />\n )}\n \n )\n}\n\n
    \n \n
    \n )}\n {enableCloseButton && (\n }\n onClick={withWatchMan('LiteInbox-closed', 'Lite Inbox', onClose)}\n />\n )}\n \n
    \n
    \n \n
    \n
    \n \n {liteMode && (\n <>\n {(activeTab !== 'trash') && (\n isMySubmissions ? null\n : (\n <>\n {!disablePrintButton && (\n \n )}\n\n \n \n }\n onClick={onOverflowMenuToggle}\n disabled={isSubmissionSelected ? '' : 'disabled'}\n >\n {t.MORE}\n \n
    \n {!disablePrintButton && (\n \n )}\n {user.isHIPAA !== '1' && (\n \n )}\n {!liteMode && (\n \n )}\n {shouldShowFavorite && (\n \n )}\n {shouldShowEdit && (\n \n )}\n {shouldShowReply && (\n onSetMessage({\n type: 'Reply', useApi: true, title: 'reply', requestMore: false\n }))\n ) || (\n handleMessageComponent !== null ? () => handleMessageComponent('reply') : onReply\n )}\n disabled={isReplyDisabled}\n t={t}\n />\n )}\n {shouldShowForward && (\n handleMessageComponent('forward') : onForward}\n disabled={!isReplyVisible ? '' : 'disabled'}\n t={t}\n />\n )}\n {inboxAvailable && liteMode && (\n }\n onClick={withWatchMan('OpeninInbox', 'Lite Inbox', onOpenInInbox)}\n >\n {t.OPEN_IN_JOTFORM_INBOX}\n \n )}\n {isUser && (\n \n )}\n \n )}\n />\n {enableEncryptionButton && }\n {permissions.trash && (\n \n )}\n
    \n \n \n )\n )}\n \n )}\n {activeTab === 'trash' && (\n <>\n \n \n \n )}\n {!liteMode && (activeTab === 'inbox') && (\n <>\n \n \n )}\n {shouldShowSettings && (\n }\n onClick={onToggleSettingsPanel}\n />\n )}\n
    \n
    \n \n );\n};\n\nconst mapStateToProps = stateProps => ({\n user: userSelector(stateProps),\n userType: userTypeSelector(stateProps),\n form: formSelector(stateProps),\n activeTab: activeTabIDSelector(stateProps),\n allowEdit: editSubmissionPreference(stateProps),\n liteMode: liteModeSelector(stateProps),\n emailQid: emailQidSelector(stateProps),\n fullNameQid: fullNameQidSelector(stateProps),\n questions: questionsSelector(stateProps),\n questionOrders: questionOrdersSelector(stateProps),\n submission: activeSubmissionSelector(stateProps),\n submissionCount: filterResultCountSelector(stateProps),\n hideEmptyFields: hideEmptyFieldsSelector(stateProps),\n hideHeaderAndText: hideNonInputFieldsSelector(stateProps),\n unreadSubmissionCount: unreadSubmissionCountSelector(stateProps),\n activeSubmissionIndex: filteredActiveSubmissionIndexSelector(stateProps),\n selectedSubmissionIDs: selectedSubmissionIDsSelector(stateProps),\n isAllSubmissionsSelected: allSubmissionsSelectedSelector(stateProps),\n isFormFillerAllowedToContact: isFormFillerAllowedToContactSelector(stateProps),\n filterText: filterTextSelector(stateProps),\n filterObject: filterObjectSelector(stateProps),\n submissionDateFormat: submissionDateFormatSelector(stateProps),\n submissions: submissionsSelector(stateProps),\n headerField: headerFieldSelector(stateProps),\n subHeaderField: subheaderFieldSelector(stateProps),\n isSettingsPanelOpen: isSettingsPanelOpenSelector(stateProps),\n recaptchaSite: getRecaptchaSiteSelector(stateProps)\n});\n\nconst mapDispatchToProps = {\n onPrevSubmission: prevSubmission,\n onNextSubmission: nextSubmission,\n onDeleteBulkSubmission: deleteBulkSubmission,\n onFormUpdateSync: updateFormSync,\n setEditMode,\n onSetSubmissionNew: setSubmissionNew,\n onUpdateForm: updateForm,\n updateFilterText: setFilterText,\n initiatePrint: preparePrint,\n completePrint: printComplete,\n setSubmissionFlag,\n updateBulkSubmission,\n initiateMultipleDownload: prepareMultipleDownload,\n onRenewSubmission: renewSubmission,\n onSubmissionDelete: deleteSubmission,\n onSetMessage: setMessage,\n setSettingsPanel: setSettings\n};\n\nconst mergeProps = (stateProps, dispatchProps, componentProps) => {\n const {\n submission: { id: sid },\n isAllSubmissionsSelected,\n selectedSubmissionIDs,\n form: { id: formID }\n } = stateProps;\n\n const isMultipleSubmissionSelected = isAllSubmissionsSelected || selectedSubmissionIDs.length > 0;\n const bulkUpdateArray = (isAllSubmissionsSelected || isMultipleSubmissionSelected) ? selectedSubmissionIDs : [sid];\n\n return {\n ...componentProps,\n ...stateProps,\n ...dispatchProps,\n onEdit: () => {\n const location = updateLocationParams({ editMode: true, sid, formID }).replace(/^\\/myforms\\//, '');\n\n if (stateProps.liteMode && componentProps.selectedFolder === 'mySubmissions') {\n return handleCustomNavigation(`/sentbox${location}`, '_blank');\n }\n\n if (stateProps.liteMode) {\n return handleCustomNavigation(`/inbox${location}`, '_blank');\n }\n\n componentProps.history.push(location);\n },\n onMoveToTrash: () => {\n dispatchProps.updateBulkSubmission([sid], { prop: 'status', value: 'DELETED' });\n componentProps.updateListItem(formID, { count: `${stateProps.submissionCount - 1}` });\n },\n onSetSubmissionFlag: flag => {\n dispatchProps.setSubmissionFlag(sid, flag);\n },\n onUpdateBulkSubmission: data => {\n dispatchProps.updateBulkSubmission(sid, data);\n },\n onPurgeSubmission: () => {\n dispatchProps.onDeleteBulkSubmission(bulkUpdateArray);\n },\n onRestoreSubmission: () => {\n dispatchProps.updateBulkSubmission(bulkUpdateArray, { prop: 'status', value: 'ACTIVE' });\n }\n };\n};\n\nToolbarComponent.propTypes = {\n user: userPropType.isRequired,\n form: formPropType.isRequired,\n submission: submissionPropType.isRequired,\n questions: questionsPropType.isRequired,\n submissionCount: NUMBER_OR_STRING_PROPTYPE.isRequired,\n allowEdit: bool.isRequired,\n activeSubmissionIndex: NUMBER_OR_STRING_PROPTYPE.isRequired,\n onPrevSubmission: func.isRequired,\n onNextSubmission: func.isRequired,\n onSetSubmissionNew: func.isRequired,\n onSetSubmissionFlag: func.isRequired,\n onEdit: func,\n emailQid: arrayOf(string),\n fullNameQid: NUMBER_OR_STRING_PROPTYPE,\n containerSelector: string,\n liteMode: bool,\n hideEmptyFields: bool,\n hideHeaderAndText: bool,\n enableCloseButton: bool,\n isSheet: bool,\n selectedFolder: string,\n enableEncryptionButton: bool,\n disablePrintButton: bool,\n onClose: func,\n onUpdateForm: func,\n initiatePrint: func.isRequired,\n submissionDateFormat: string.isRequired,\n handleMessageComponent: func,\n renewList: func,\n recaptchaSite: string,\n ...enhancedProps\n};\n\nToolbarComponent.defaultProps = {\n fullNameQid: null,\n emailQid: [''],\n liteMode: false,\n hideEmptyFields: false,\n hideHeaderAndText: false,\n isSheet: false,\n selectedFolder: '',\n enableCloseButton: false,\n disablePrintButton: false,\n enableEncryptionButton: false,\n onClose: f => f,\n containerSelector: '#modal-container',\n onUpdateForm: f => f,\n onEdit: f => f,\n handleMessageComponent: null,\n renewList: f => f,\n recaptchaSite: ''\n};\n\nconst enhance = withInboxEnhancer('toolbar', connect(mapStateToProps, mapDispatchToProps, mergeProps));\n\nexport default withRouter(enhance(ToolbarComponent));\n","import React, {\n createContext, useMemo, useContext\n} from 'react';\nimport useSwr from 'swr';\nimport { shape, node, arrayOf } from 'prop-types';\nimport { useFeatures } from '@paralleldrive/react-feature-toggles';\nimport { safeJSONParse } from '@jotforminc/utils';\nimport { gpt3Completion } from '../api';\nimport { answersPropType } from '../constants/proptypes';\n\nexport const TagSuggestionsContext = createContext();\n\nconst shouldPrime = ({ type }) => type === 'control_textarea' || type === 'control_rating' || type === 'control_checkbox' || type === 'control_radio';\n\nconst getFormData = subAnswers => Object.entries(\n Object.values(subAnswers)\n .filter(shouldPrime)\n .reduce((acc, answer) => {\n if (answer.name === 'tags') return acc;\n\n const value = answer.prettyFormat || answer.answer;\n\n if (!value) return acc;\n\n return {\n ...acc,\n [answer.name]: value\n };\n }, {})\n).map(([key, val]) => `${key.trim()}=${val.trim()}`).join(',');\n\nconst getTags = subAnswers => {\n const tagField = Object.values(subAnswers).find(({ name }) => (name === 'tags')) || false;\n\n if (!tagField) return false;\n\n if (!tagField?.answer?.length) return false;\n\n const optionsArray = Object.values(safeJSONParse(tagField.options_array));\n\n const tagAnswer = (typeof tagField.answer === 'string' ? [tagField.answer] : tagField.answer);\n\n const selectedTags = tagAnswer.map(selectedTag => (\n optionsArray.find(({ key }) => `{${key}}` === selectedTag)\n )).map(opt => opt?.value).filter(l => !!l);\n\n if (!selectedTags?.length) return false;\n\n return selectedTags;\n};\n\nconst generateTags = async ({ primes, answers: submissionAnwers, existingTags = '' }) => {\n const newData = getFormData(submissionAnwers);\n if (!newData) return false;\n\n const primeData = Object.values(primes).slice(-20).join('\\n\\n');\n const prompt = `${primeData}\\n\\nForm>${newData}\\nTags>${existingTags?.length > 0 ? existingTags : ''}`.trim();\n\n return gpt3Completion({\n prompt,\n temprature: '0.21',\n stop: '\\n\\n',\n top_p: '0.42',\n max_tokens: '40',\n engine: 'davinci',\n frequency_penalty: '1'\n }).then(tags => (\n tags.split(',')\n .map(tag => tag.trim())\n .filter(t => t)\n ));\n};\n\nconst TagSuggestionsProvider = ({\n submissions, children, answers\n}) => {\n const features = useFeatures();\n const shouldSuggestTags = features.includes('suggestTags');\n\n const predefinedPrimes = useMemo(\n () => {\n if (!shouldSuggestTags) return false;\n\n return submissions?.reduce((acc, sub) => {\n if (!sub) return acc;\n\n const formStr = getFormData(sub.answers);\n const tagStr = getTags(sub.answers);\n\n if (!formStr || !tagStr) return acc;\n\n const str = `Form>${formStr}\\nTags>${tagStr}`;\n\n return {\n ...acc,\n [sub.id]: str\n };\n }, {});\n },\n [submissions]\n );\n\n const tags = useMemo(() => getTags(answers) || [], [answers]);\n\n const swrContext = useSwr([predefinedPrimes, answers], () => {\n if (!shouldSuggestTags) return;\n\n return generateTags({\n primes: predefinedPrimes, answers, existingTags: tags\n });\n });\n\n return {children || null};\n};\n\nTagSuggestionsProvider.propTypes = {\n submissions: arrayOf(shape({})),\n children: node,\n answers: answersPropType\n};\n\nTagSuggestionsProvider.defaultProps = {\n submissions: [],\n children: undefined,\n answers: {}\n};\n\nexport const useTagSuggestions = () => useContext(TagSuggestionsContext);\n\nexport default TagSuggestionsProvider;\n","import { func } from 'prop-types';\nimport memoize from 'lodash/memoize';\nimport React, {\n Component,\n useEffect,\n useState,\n createRef,\n useMemo\n} from 'react';\nimport { OptionItem } from '@jotforminc/answer-fields';\nimport { capitalizeFirstLetter } from '@jotforminc/utils';\nimport styled from 'styled-components';\nimport { darken } from 'polished';\nimport { withFeatures } from '@paralleldrive/react-feature-toggles';\nimport { withRouter } from 'react-router-dom';\nimport { t as translate } from '@jotforminc/translation';\nimport { useMeasure } from '../../hooks';\nimport Feature from '../Feature';\nimport SVG from '../SVG';\n\n// TODO: migrate to new translation structure\nimport {\n submissionWidgetPropType,\n submissionPropType,\n translatedProps\n} from '../../constants/proptypes';\n\nimport {\n classNames,\n isOptionsArrayContain,\n getNextAvailableTagKey,\n getNextAvailableTagColor,\n updateLocationParams\n} from '../../utils';\nimport { useTagSuggestions } from '../../contexts/TagSuggestions';\nimport { TAG_COLOR_LIST } from '../../constants';\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\n\nconst memoizedGetNextColor = memoize(getNextAvailableTagColor);\nconst memoizedOptionsArray = memoize(optionsArray => Object.values(optionsArray));\nconst memoizedTagAnswers = memoize(({ answers }, { qid }) => (answers[qid] && answers[qid].answer) || []);\n\n/* eslint-disable react/prop-types */\n\nexport const DotFlashing = styled.div`\n position: relative;\n width: ${props => props.size}px;\n height: ${props => props.size}px;\n margin-left: ${props => props.size * 1.5}px;\n border-radius: 50%;\n background-color: ${props => props.color};\n color: ${props => props.color};\n animation: dotFlashing 1s infinite linear alternate;\n animation-delay: .5s;\n\n &:before, &:after {\n content: \"\";\n display: inline-block;\n position: absolute;\n top: 0;\n }\n\n &:before {\n left: -${props => props.size * 1.5}px;\n width: ${props => props.size}px;\n height: ${props => props.size}px;\n border-radius: 5px;\n background-color: ${props => props.color};\n color: ${props => props.color};\n animation: dotFlashing 1s infinite alternate;\n animation-delay: 0s;\n }\n\n &:after {\n left: ${props => props.size * 1.5}px;\n width: ${props => props.size}px;\n height: ${props => props.size}px;\n border-radius: 5px;\n background-color: ${props => props.color};\n color: ${props => props.color};\n animation: dotFlashing 1s infinite alternate;\n animation-delay: 1s;\n }\n\n @keyframes dotFlashing {\n 0% {\n background-color: ${props => props.color};\n }\n 50%,\n 100% {\n background-color: #ebe6ff;\n }\n }\n`;\n\nDotFlashing.defaultProps = {\n size: 6,\n color: '#4573E3'\n};\n\nconst CustomTag = styled.div`\n &,\n &.jfTag-multiselect {\n cursor: pointer;\n border-width: 1px;\n border-style: dashed;\n border-radius: 4px;\n margin-left: 0;\n margin-right: 4px;\n border-color: ${props => props.color};\n padding-right: 16px;\n }\n\n &:hover {\n background-color: ${props => props.color};\n }\n\n svg {\n fill: ${props => darken(0.2, props.color)};\n height: 8px;\n width: 8px;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n right: 4px;\n margin-left: 4px;\n }\n`;\n\nconst Tags = ({\n optionsArray, t, tagAnswers, renderInputComponent, assignNewTag\n}) => {\n const { data: generatedTags, isValidating: waiting } = useTagSuggestions();\n const [tagList, setTagList] = useState(generatedTags);\n useEffect(() => {\n if (generatedTags) {\n const filteredTags = generatedTags.filter(value => {\n const existingTag = isOptionsArrayContain(optionsArray, value);\n return existingTag ? tagAnswers.indexOf(`{${existingTag.key}}`) < 0 : true;\n });\n\n setTagList(filteredTags);\n }\n }, [generatedTags, optionsArray, tagAnswers]);\n\n const onTagSelected = (e, tag) => {\n assignNewTag(tag);\n };\n\n return (\n <>\n
    \n \n \n
    \n )}\n />\n
    \n \n
    \n \n {waiting ? : null}\n {!waiting && tagList?.length > 0 ? (\n
    \n {/*
    */}\n {/*
    */}\n
    \n
    \n
    \n {tagList.map(tag => (\n onTagSelected(e, tag)}\n onKeyDown={e => e}\n className=\"react-autosuggest__suggestion-item jfTag-multiselect isOption\"\n color={TAG_COLOR_LIST[Math.floor(Math.random() * TAG_COLOR_LIST.length)].color}\n >\n {tag}\n \n \n ))}\n
    \n
    \n
    \n
    \n )\n : null}\n \n );\n};\n/* eslint-enable react/prop-types */\n\nclass SubmissionTags extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n optionsArray: []\n };\n\n this.onTagClick = this.onTagClick.bind(this);\n this.onTagDelete = this.onTagDelete.bind(this);\n this.onTagChange = this.onTagChange.bind(this);\n this.assignNewTag = this.assignNewTag.bind(this);\n this.renderInputComponent = this.renderInputComponent.bind(this);\n this.toggleSubmissionTagOption = this.toggleSubmissionTagOption.bind(this);\n this.filterTagQuestion = this.filterTagQuestion.bind(this);\n }\n\n onTagClick = e => {\n const { key: clickedKey } = e.target.dataset;\n const { tagQuestion: { options_array: optionsArray } } = this.props;\n const clickedOption = Object.values(optionsArray).find(({ key }) => key === clickedKey);\n this.filterByTag(clickedOption);\n };\n\n onTagDeleteClick = (e, tagValue) => {\n e.stopPropagation();\n e.preventDefault();\n const { tagQuestion: { options_array: optionsArray } } = this.props;\n const clickedOption = Object.values(optionsArray).find(({ key }) => key === tagValue);\n this.toggleSubmissionTagOption(clickedOption);\n };\n\n onTagDelete(tag) {\n const {\n onUpdateTag,\n tagQuestion: { options_array: optionsArray },\n activeTab\n } = this.props;\n\n // Only added isDeleted property to the deleted tag.\n onUpdateTag({\n options_array: { ...optionsArray, [tag.key]: { ...tag, isDeleted: true } }\n });\n\n this.setState({\n optionsArray: { ...optionsArray, [tag.key]: { ...tag, isDeleted: true } }\n });\n\n WatchmanRecorder.recordEvent('Tag-SettingsDeleted', capitalizeFirstLetter(activeTab));\n }\n\n onTagChange(tag) {\n const {\n onUpdateTag,\n tagQuestion: { options_array: optionsArray },\n activeTab\n } = this.props;\n\n const oldTag = optionsArray[tag.key];\n const isColorChanged = oldTag.color !== tag.color;\n const action = isColorChanged ? 'Tag-SettingsColorChanged' : 'Tag-SettingsTextUpdated';\n\n WatchmanRecorder.recordEvent(action, capitalizeFirstLetter(activeTab));\n\n onUpdateTag({ options_array: { ...optionsArray, [tag.key]: tag } });\n }\n\n get nextAvailableColor() {\n const { tagQuestion } = this.props;\n return memoizedGetNextColor(tagQuestion.options_array);\n }\n\n get tagAnswers() {\n const { submission, tagQuestion } = this.props;\n const tagAnswers = memoizedTagAnswers(submission, tagQuestion);\n return Array.isArray(tagAnswers) ? tagAnswers : Object.values(tagAnswers);\n }\n\n get optionsArray() {\n return memoizedOptionsArray(this.filterTagQuestion().options_array);\n }\n\n filterByTag = tag => {\n const {\n history, tagQuestion, filterObject: oldFilterObject, filterText, activeTab\n } = this.props;\n\n const filterObject = { ...oldFilterObject, [`q${tagQuestion.qid}:matches`]: tag.key };\n\n WatchmanRecorder.recordEvent('FilterbyTag', capitalizeFirstLetter(activeTab));\n\n history.push(updateLocationParams({ filterObject, filterText }));\n };\n\n assignNewTag(value) {\n const {\n tagQuestion: { options_array: tags }\n } = this.props;\n\n if (value) {\n // If tag exist we will toggle it; otherwise add as new one\n const existingTag = isOptionsArrayContain(tags, value);\n\n // Create tag if does not exist\n if (!existingTag) {\n return this.createNewTag(value);\n }\n\n // Toggle if exist\n return this.toggleSubmissionTagOption(existingTag);\n }\n }\n\n toggleSubmissionTagOption({ key }) {\n const { onAssignTag } = this.props;\n const tagKey = `{${key}}`;\n const existingTag = this.tagAnswers.indexOf(tagKey) > -1;\n const updatedTag = existingTag ? this.tagAnswers.filter(val => val !== tagKey) : this.tagAnswers.concat(tagKey);\n\n onAssignTag(updatedTag.length === 0 ? [''] : updatedTag);\n }\n\n createNewTag(value) {\n const {\n onUpdateTag,\n tagQuestion: { options_array: tags },\n activeTab\n } = this.props;\n\n const tag = Object.values(tags).find(item => item.value === value);\n\n const newTag = {\n [getNextAvailableTagKey(tags)]: {\n key: getNextAvailableTagKey(tags),\n color: this.nextAvailableColor,\n value,\n isDeleted: false\n }\n };\n\n const newTags = tag ? { ...tags, [tag.key]: { ...tag, isDeleted: false } } : { ...tags, ...newTag };\n\n WatchmanRecorder.recordEvent('Tag-NewCreated', capitalizeFirstLetter(activeTab));\n\n onUpdateTag({ options_array: newTags });\n\n this.setState({\n optionsArray: newTags\n });\n }\n\n createTag({ value, color }) {\n return (\n \n {value}\n \n );\n }\n\n filterTagQuestion() {\n const { tagQuestion, tagQuestion: { options_array: optionsArr } } = this.props;\n\n const { optionsArray } = this.state;\n\n const targetArr = optionsArray && Object.values(optionsArray).length > 0 ? Object.values(optionsArray) : Object.values(optionsArr || {});\n\n const newObj = targetArr\n .filter(item => item && (item.isDeleted === 'false' || !item.isDeleted))\n .reduce((payload, item) => {\n const obj = payload;\n obj[item.key] = item;\n\n return obj;\n }, {});\n\n return { ...tagQuestion, options_array: newObj };\n }\n\n renderInputComponent(inputProps) {\n const {\n submission,\n tagQuestion,\n activeTab,\n t,\n InnerButton\n } = this.props;\n const tags = submission?.answers[tagQuestion?.qid];\n const isDeleteTagAllowed = activeTab !== 'sentbox';\n const [isMoreVisible, setMoreVisible] = useState(false);\n const [isMoreTagsShown, setMoreTagsShown] = useState(false);\n const options = Object.values(tagQuestion?.options_array || {});\n const tagAnswers = useMemo(() => {\n if (Array.isArray(tags?.answer)) return tags.answer;\n return Object.values(tags?.answer || {});\n }, [tags]);\n const [tagWrapperRef, size] = useMeasure();\n const tagsRef = useMemo(() => {\n if (!tagAnswers) return [];\n return tagAnswers?.map(() => createRef());\n }, [tagAnswers]);\n\n useEffect(() => {\n if (!size || tagsRef.length <= 0 || tagAnswers.length <= 0) {\n setMoreVisible(false);\n return;\n }\n const isMore = tagsRef.some((tag, index) => {\n if (!tag.current) return false;\n if (tag.current.getBoundingClientRect().top > size.top + size.height) {\n setMoreVisible(tagsRef.length - index);\n return true;\n }\n return false;\n });\n if (!isMore) setMoreVisible(false);\n }, [tagsRef, size]);\n\n return (\n
    \n
    \n \n {InnerButton}\n {tagAnswers && tagWrapperRef.current && tagAnswers.map((answer, index) => {\n const answerKey = answer.replace(/{|}/mg, '');\n const opt = options.find(o => o.key === answerKey);\n if (!opt) return null;\n if (typeof opt.isDeleted === 'boolean' && opt.isDeleted) return null;\n if (opt.isDeleted === 'true') return null;\n\n return (\n \n {opt.value}\n {isDeleteTagAllowed && (\n this.onTagDeleteClick(e, opt.key)}\n data-key={opt.key}\n aria-label={translate(`Remove ${opt.value}`)}\n >\n \n \n )}\n
    \n );\n })}\n {isMoreVisible && (\n
    setMoreTagsShown(!isMoreTagsShown)} className={`tagsCount hideOnPrint ${isMoreTagsShown ? 'isMoreTagsShown' : ''}`}>\n {!isMoreTagsShown && isMoreVisible}\n {' '}\n {isMoreTagsShown ? t.LESS : t.MORE}\n \n
    \n )}\n
    \n \n \n )}\n />\n \n );\n }\n\n render() {\n const { t, onSaveDummyQuestions } = this.props;\n return (\n
    \n \n
    \n );\n }\n}\n\nSubmissionTags.propTypes = {\n onUpdateTag: func.isRequired,\n onAssignTag: func.isRequired,\n tagQuestion: submissionWidgetPropType.isRequired,\n submission: submissionPropType.isRequired,\n ...translatedProps\n};\n\nexport default withFeatures(withRouter(SubmissionTags));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { getAccountTypeName, getAvailablePlansForUser, decideActiveCampaign } from '@jotforminc/utils';\nimport { PricingTableSkeleton } from '@jotforminc/pricing-table';\n\nimport { actionTracker } from '../../utils';\nimport { BSG_UTM, ENTERPRISE_UTM } from '../../constants';\n\nconst LazyPricingTable = React.lazy(/* webpackChunkName: \"LazyPricingTable\" */ () => import('./PricingTableLazy'));\n\nconst PricingTableRenderer = ({\n user, plans, plansLoading, selectedLimitType, hideAllLimits, dispatchedFrom, ...rest\n}) => {\n const accountTypeName = getAccountTypeName(user);\n const availablePlansForUser = getAvailablePlansForUser(accountTypeName);\n const activeCampaign = decideActiveCampaign(user);\n\n const handlePlanBoxClick = plan => {\n const accountType = accountTypeName === 'FREE' ? 'STARTER' : accountTypeName;\n\n actionTracker({\n username: user?.username,\n action: `${plan?.name}-${activeCampaign ? `${activeCampaign}-CAMPAIGN-` : ''}clicked`,\n target: dispatchedFrom\n });\n\n let redirectURL = `/pricing/${plan?.name ? plan?.name.toLowerCase() : ''}${BSG_UTM(accountType, dispatchedFrom, selectedLimitType)}&plan=${plan?.prettyName}`;\n\n const { campaign = {} } = user;\n const { type: campaignType = '' } = campaign;\n if (campaignType === 'NONPROFIT') redirectURL = `/nonprofit/pricing${BSG_UTM(accountType, dispatchedFrom)}`;\n if (campaignType === 'EDUCATION') redirectURL = `/education/pricing${BSG_UTM(accountType, dispatchedFrom)}${plan?.name ? `&plan=${plan?.name}` : ''}`;\n\n window.open(redirectURL, '_blank');\n };\n\n const handleEnterprisePlanBoxClick = () => {\n actionTracker({\n username: user?.username,\n action: 'ENTERPRISE-clicked',\n target: dispatchedFrom\n });\n };\n\n if (plansLoading) {\n return ;\n }\n\n return (\n }>\n handlePlanBoxClick(plan)}\n source='billing'\n theme='mini'\n hideNoBranding={true}\n hidePeriodSwitch={true}\n {...rest}\n />\n \n );\n};\n\nPricingTableRenderer.propTypes = {\n user: PropTypes.object,\n plans: PropTypes.object,\n plansLoading: PropTypes.bool,\n selectedLimitType: PropTypes.string,\n hideAllLimits: PropTypes.bool,\n dispatchedFrom: PropTypes.string\n};\n\nPricingTableRenderer.defaultProps = {\n user: {},\n plans: {},\n plansLoading: false,\n selectedLimitType: '',\n hideAllLimits: true,\n dispatchedFrom: ''\n};\n\nexport default PricingTableRenderer;\n","import React from 'react';\nimport { object, string } from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { PricingTableRenderer } from '@jotforminc/limit-dialog';\n\nconst SummerSaleContent = ({ user, systemPlans, utmCampaign }) => {\n return (\n
    \n
    \n
    \n {t('SUMMER SALE')}\n
    \n 50%') }}\n />\n
    \n {t('ON ANNUAL PLANS')}\n
    \n
    \n
    \n Starfish\n
    \n
    \n Plant\n
    \n
    \n Background Img\n
    \n
    \n \n
    \n
    \n );\n};\n\nexport default SummerSaleContent;\n\nSummerSaleContent.propTypes = {\n user: object,\n utmCampaign: string,\n systemPlans: object\n};\n\nSummerSaleContent.defaultProps = {\n user: {},\n utmCampaign: '',\n systemPlans: {}\n};\n","import React from 'react';\nimport { object, string } from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { PricingTableRenderer } from '@jotforminc/limit-dialog';\n\nconst BlackFridayContent = ({ user, systemPlans, utmCampaign }) => {\n return (\n
    \n
    \n
    {t('Limited time offer!')}
    \n
    {t('Black Friday')}
    \n
    {t('Save 50%')}
    \n
    {t('annual plans')}
    \n
    \n
    \n \n
    \n
    \n );\n};\n\nexport default BlackFridayContent;\n\nBlackFridayContent.propTypes = {\n user: object,\n utmCampaign: string,\n systemPlans: object\n};\n\nBlackFridayContent.defaultProps = {\n user: {},\n utmCampaign: '',\n systemPlans: {}\n};\n","import React from 'react';\nimport { object, string } from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { PricingTableRenderer } from '@jotforminc/limit-dialog';\n\nconst EoyContent = ({ user, systemPlans, utmCampaign }) => {\n return (\n
    \n
    \n
    \n
    \n
    \n {t('END OF YEAR SALE')}\n
    \n
    \n {t('SAVE 50%')}\n
    \n
    \n {t('ON ANNUAL PLANS')}\n
    \n
    \n {t('Offer does not apply to Jotform Enterprise')}\n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n );\n};\n\nexport default EoyContent;\n\nEoyContent.propTypes = {\n user: object,\n utmCampaign: string,\n systemPlans: object\n};\n\nEoyContent.defaultProps = {\n user: {},\n utmCampaign: '',\n systemPlans: {}\n};\n","import React from 'react';\nimport { object, string } from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { PricingTableRenderer } from '@jotforminc/limit-dialog';\n\nconst SpringSaleContent = ({ user, systemPlans, utmCampaign }) => {\n return (\n
    \n
    \n
    \n \n
    \n
    \n {t('SUMMER SALE')}\n
    \n 50%') }}\n />\n
    \n {t('ON ANNUAL PLANS')}\n
    \n
    \n {t('Offer does not apply to Jotform Enterprise')}\n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n );\n};\n\nexport default SpringSaleContent;\n\nSpringSaleContent.propTypes = {\n user: object,\n utmCampaign: string,\n systemPlans: object\n};\n\nSpringSaleContent.defaultProps = {\n user: {},\n utmCampaign: '',\n systemPlans: {}\n};\n","/* eslint-disable max-len */\nimport React, { useMemo } from 'react';\nimport { object } from 'prop-types';\n\nimport { t } from '@jotforminc/translation';\n\nconst SilverOneContent = ({\n user = {}\n}) => {\n const { account_type: { currency = 'USD' } = {} } = user;\n\n const oneDollarText = useMemo(() => {\n switch (currency) {\n case 'GBP':\n return '£1';\n case 'EUR':\n return '€1';\n default:\n return '$1';\n }\n }, []);\n\n const currencyImage = useMemo(() => {\n switch (currency) {\n case 'GBP':\n return 'pound';\n case 'EUR':\n return 'euro';\n default:\n return 'dollar';\n }\n }, [currency]);\n\n return (\n
    \n
    \n
    \n
    \n {t('LIMITED TIME OFFER')}\n
    \n
    \n
    \n
    \n {t('Silver Plan')}\n
    \n
    \n {t('Only {oneCurrencyUnit}').replace('{oneCurrencyUnit}', oneDollarText)}\n
    \n
    \n {t('FOR A YEAR*')}\n
    \n
    \n {t('Get more than double your limits by upgrading to a Silver plan.')}\n
    \n
    \n \n
    \n \"Coin\"\n
    \n
    \n

    \n *\n {t('Offer does not apply to Jotform Enterprise. The {oneCurrencyUnit} offer is a one-time offer for Bronze users upgrading to a Silver plan. Plans will switch to Silver for the remainder of the existing Bronze billing cycle and be charged at the price of an annual Silver plan at the end of the billing cycle. Cannot be combined with other offers.').replace('{oneCurrencyUnit}', oneDollarText)}\n

    \n
    \n
    \n
    \n );\n};\n\nSilverOneContent.propTypes = {\n user: object.isRequired\n};\n\nexport default SilverOneContent;\n","import './styles.scss';\n\nimport { object } from 'prop-types';\nimport { connect } from 'react-redux';\nimport React, { useEffect } from 'react';\n\nimport { withInboxEnhancer } from '../../../hocs/InboxEnhancer';\nimport { systemPlansSelector } from '../../../selectors';\nimport { actionTrackingHandler } from '../../../utils';\nimport SummerSaleContent from './contents/SummerSaleContent';\nimport BlackFridayContent from './contents/BlackFridayContent';\nimport EoyContent from './contents/EoyContent';\nimport SpringSaleContent from './contents/SpringSaleContent';\nimport SilverOneContent from './contents/SilverOneContent';\nimport './contents/style.scss';\n\nconst CampaignSubmissionContent = ({ user, systemPlans }) => {\n const { campaign, username } = user;\n const {\n type: campaignName,\n utm_campaign: utmCampaign = '',\n assetsVersion = ''\n } = (campaign || {});\n\n const actor = username || '__inbox_campaign__';\n const target = 'campaignInboxSubmissionContent';\n\n if (Object.keys(user).length === 0 || Object.keys(systemPlans).length === 0) {\n return null;\n }\n\n useEffect(() => {\n actionTrackingHandler(utmCampaign, { actor, target, action: 'seen' });\n }, []);\n\n let Content = null;\n\n const enableSpringSaleAsset = (campaignName === 'REGULARFIFTYDISCOUNT' && assetsVersion === 'v2') ? 'REGULARFIFTYDISCOUNT' : false;\n const _campaignName = enableSpringSaleAsset || campaignName;\n\n switch (_campaignName) {\n case 'SUMMER':\n Content = SummerSaleContent;\n break;\n case 'BLACKFRIDAY':\n Content = BlackFridayContent;\n break;\n case 'EOY':\n Content = EoyContent;\n break;\n case 'REGULARFIFTYDISCOUNT':\n Content = SpringSaleContent;\n break;\n case 'ONEDOLLARSILVER':\n Content = SilverOneContent;\n break;\n default:\n break;\n }\n const className = `jfInbox-campaign-content ${utmCampaign}${enableSpringSaleAsset ? ' spring2024' : ''}`;\n return (\n
    \n \n
    \n );\n};\n\nCampaignSubmissionContent.propTypes = {\n user: object,\n systemPlans: object\n};\n\nCampaignSubmissionContent.defaultProps = {\n user: {},\n systemPlans: {}\n};\n\nconst mapStateToProps = stateProps => ({\n systemPlans: systemPlansSelector(stateProps)\n});\n\nconst enhance = withInboxEnhancer('CampaignSubmissionContent', connect(mapStateToProps, null));\n\nexport default enhance(CampaignSubmissionContent);\n","import React, { Component } from 'react';\nimport {\n func, string, arrayOf, bool\n} from 'prop-types';\nimport { connect } from 'react-redux';\nimport { withFeatures } from '@paralleldrive/react-feature-toggles';\nimport { InboxLoader } from '@jotforminc/apploaders';\n\nimport Form from '../Form';\nimport SubmissionLayout from '../../layout/Submission';\nimport SubmissionContainer from '../SubmissionContainer';\nimport Toolbar from '../Toolbar';\nimport SubmissionTags from '../../components/SubmissionTags';\nimport { hasTags, getQueryParameter } from '../../utils';\n\nimport {\n answersPropType,\n submissionWidgetPropType,\n enhancedProps,\n submissionPropType\n} from '../../constants/proptypes';\n\nimport { withInboxEnhancer } from '../../hocs/InboxEnhancer';\n\nimport {\n userSelector,\n formIDSelector,\n activeSubmissionSelector,\n tagQuestionSelector,\n questionsSelector,\n submissionsSelector,\n liteModeSelector,\n userTimezoneSelector,\n activeTabIDSelector,\n filterObjectSelector,\n filterTextSelector,\n encryptionStatusSelector,\n activeSubmissionIDSelector,\n isEncryptedSelector,\n campaignActiveSelector,\n campaignSubmissionContentVisibleSelector,\n formSelector\n} from '../../selectors';\n\nimport {\n updateTag, assignTag, addDummyQuestions, setMessage\n} from '../../actions';\nimport TagSuggestionsProvider from '../../contexts/TagSuggestions';\nimport CommentProvider from '../../contexts/Comment';\nimport CampaignSubmissionContent from '../../components/CampaignComponents/CampaignSubmissionContent';\n\nexport class ContentPanel extends Component {\n constructor(props) {\n super(props);\n\n this.onSaveDummyQuestionsFunc = this.onSaveDummyQuestionsFunc.bind(this);\n }\n\n onSaveDummyQuestionsFunc() {\n const { formID, onSaveDummyQuestions, questions } = this.props;\n\n return onSaveDummyQuestions(formID, questions);\n }\n\n render() {\n const {\n user,\n answers,\n toolbarProps,\n submission,\n tagQuestion,\n onAssignTag,\n onUpdateTag,\n addClass,\n removeClass,\n submissions,\n liteMode,\n features,\n userTimeZone,\n t,\n activeTab,\n filterObject,\n filterText,\n encryptionStatus,\n activeSubmissionID,\n onSetMessage,\n isEncrypted,\n campaignActive,\n campaignSubmissionContentVisible\n } = this.props;\n\n if (campaignSubmissionContentVisible && campaignActive) {\n return ;\n }\n\n return (\n
    \n {(liteMode && getQueryParameter('download') !== '1') || !features?.includes('isNewDesign') ? (\n
    \n \n
    \n ) : null }\n \n \n {isEncrypted && encryptionStatus?.[activeSubmissionID] === 'decrypting' ? (\n
    \n \n
    \n ) : (\n \n \n )}\n activeTab={activeTab}\n t={t}\n onSetMessage={onSetMessage}\n isEncrypted={isEncrypted}\n />\n \n )}\n
    \n
    \n
    \n
    \n
    \n
    \n );\n }\n}\n\nContentPanel.propTypes = {\n formID: string,\n answers: answersPropType,\n onAssignTag: func,\n onUpdateTag: func,\n onSaveDummyQuestions: func,\n submission: submissionPropType.isRequired,\n submissions: arrayOf(submissionPropType),\n tagQuestion: submissionWidgetPropType.isRequired,\n campaignActive: bool,\n ...enhancedProps\n};\n\nContentPanel.defaultProps = {\n formID: '',\n answers: {},\n onAssignTag: f => f,\n onUpdateTag: f => f,\n onSaveDummyQuestions: f => f,\n submissions: [],\n campaignActive: false\n};\n\nconst mapStateToProps = stateProps => ({\n user: userSelector(stateProps),\n form: formSelector(stateProps),\n submission: activeSubmissionSelector(stateProps),\n tagQuestion: tagQuestionSelector(stateProps),\n formID: formIDSelector(stateProps),\n questions: questionsSelector(stateProps),\n submissions: submissionsSelector(stateProps),\n liteMode: liteModeSelector(stateProps),\n userTimeZone: userTimezoneSelector(stateProps),\n activeTab: activeTabIDSelector(stateProps),\n filterObject: filterObjectSelector(stateProps),\n filterText: filterTextSelector(stateProps),\n encryptionStatus: encryptionStatusSelector(stateProps),\n activeSubmissionID: activeSubmissionIDSelector(stateProps),\n isEncrypted: isEncryptedSelector(stateProps),\n campaignSubmissionContentVisible: campaignSubmissionContentVisibleSelector(stateProps),\n campaignActive: campaignActiveSelector(stateProps)\n});\n\nconst mapDispatchToProps = {\n onUpdateTag: updateTag,\n onAssignTag: assignTag,\n onSaveDummyQuestions: (formID, questions) => addDummyQuestions(formID, questions),\n onSetMessage: setMessage\n};\n\nconst enhance = withInboxEnhancer('contentPanel', connect(mapStateToProps, mapDispatchToProps));\n\nexport default enhance(withFeatures(ContentPanel));\n","import React, { Component } from 'react';\nimport {\n bool, func, shape, string\n} from 'prop-types';\nimport { withRouter } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport { withPermissions } from '@jotforminc/permissions';\nimport { classNames, updateLocationParams } from '../../utils';\nimport { withInboxEnhancer } from '../../hocs/InboxEnhancer';\nimport SVG from '../../components/SVG';\nimport t from '../../constants/texts';\n\nimport {\n formSelector,\n activeTabIDSelector,\n tabsSelector,\n tabCountSelector,\n isFormOwnerSelector,\n userSelector\n} from '../../selectors';\n\nimport {\n NAVIGATION_PANEL_CLASS\n} from '../../constants';\n\nimport {\n historyPropType\n} from '../../constants/proptypes';\nimport { setSettings } from '../../actions';\n\nexport class InboxNavigationComponent extends Component {\n constructor(props) {\n super(props);\n\n this.toggleNavigationMenu = this.toggleNavigationMenu.bind(this);\n this.hideNavigationMenu = this.hideNavigationMenu.bind(this);\n this.openSettingsPanel = this.openSettingsPanel.bind(this);\n this.handleTabChange = this.handleTabChange.bind(this);\n this.isActiveTab = this.isActiveTab.bind(this);\n this.isSaveAndContinueEnabled = this.isSaveAndContinueEnabled.bind(this);\n\n const { activeTab } = props;\n this.state = {\n activeTab\n };\n }\n\n handleTabChange(tabID) {\n const { history, tabs } = this.props;\n const tab = tabs.tabs[tabID];\n const { filterText = null, filterObject = null } = tab || {};\n const newLocationParams = {\n tab: tabID, sid: '', editMode: false, filterText, filterObject\n };\n history.push(updateLocationParams(newLocationParams));\n }\n\n // eslint-disable-next-line complexity\n get renderNavigation() {\n const {\n tabs: { tabs },\n permissions,\n isFormOwner,\n activeTab,\n user\n } = this.props;\n const conversationsTabPermission = isFormOwner && user?.AIAgentBetaAccepted === '1';\n\n const signTabList = [\n {\n id: 'signAllDocuments',\n name: 'All Documents',\n type: 'signAllDocuments',\n className: 'isSignItem allDocuments',\n icon: ,\n isShown: permissions.signAllDocument\n },\n {\n id: 'signWaitingMySignature',\n name: 'Waiting for My Signature',\n type: 'signWaitingMySignature',\n className: 'isSignItem waitingDocuments',\n icon: ,\n isShown: permissions.signWaitingMySignature,\n count: tabs && tabs.signWaitingMySignature && tabs.signWaitingMySignature.count\n },\n {\n id: 'signWaitingOthers',\n name: 'Waiting for Others',\n type: 'signWaitingOthers',\n className: 'isSignItem waitingOthersDocuments',\n icon: ,\n isShown: permissions.signWaitingOthers,\n count: tabs && tabs.signWaitingOthers && tabs.signWaitingOthers.count\n },\n {\n id: 'signCompleted',\n name: 'Completed',\n type: 'signCompleted',\n className: 'isSignItem completedDocuments',\n icon: ,\n isShown: permissions.signCompleted\n },\n {\n id: 'signCanceled',\n name: 'Canceled',\n type: 'signCanceled',\n className: 'isSignItem canceledDocuments',\n icon: ,\n isShown: permissions.signCanceled\n },\n {\n id: 'signDeclined',\n name: 'Declined',\n type: 'signDeclined',\n className: 'isSignItem declinedDocuments',\n icon: ,\n isShown: permissions.signDeclined\n }\n ];\n\n const tabList = [\n {\n id: 'inbox',\n name: t.INBOX,\n count: tabs && tabs.inbox && tabs.inbox.count,\n type: 'inbox',\n className: 'forInbox',\n icon: ,\n isShown: permissions.inbox\n },\n {\n id: 'sentbox',\n name: t.SENTBOX,\n type: 'sentbox',\n className: 'forSentbox',\n icon: ,\n isShown: permissions.sentbox\n },\n {\n id: 'incompleteSubmissions',\n name: t.INCOMPLETE_SUBMISSIONS,\n type: 'incompleteSubmissions',\n className: 'forIncomplete',\n icon: ,\n isShown: isFormOwner && this.isSaveAndContinueEnabled()\n },\n {\n id: 'pendingApprovals',\n name: t.PENDING_APPROVALS,\n count: tabs && tabs.pendingApprovals && tabs.pendingApprovals.count,\n type: 'pendingApprovals',\n className: 'forPendingApprovals',\n icon: ,\n isShown: permissions.pendingApprovals\n },\n {\n id: 'completed',\n name: t.COMPLETED,\n count: tabs && tabs.completed && tabs.completed.count,\n type: 'completed',\n className: 'forCompleted',\n icon: ,\n isShown: permissions.completed\n },\n {\n id: 'conversations',\n name: t.AI_CONVERSATIONS,\n count: tabs && tabs.conversations && tabs.conversations.count,\n type: 'conversations',\n className: 'forAiConversations',\n icon: ,\n isShown: conversationsTabPermission\n },\n {\n id: 'archive',\n name: t.ARCHIVE,\n count: tabs && tabs.archive && tabs.archive.count,\n type: 'archive',\n className: 'forArchive',\n icon: ,\n isShown: permissions.archive\n },\n {\n id: 'trash',\n name: t.TRASH,\n type: 'trash',\n className: 'forTrash',\n icon: ,\n isShown: permissions.trash\n },\n ...signTabList\n ];\n\n let isActiveTabShown = true;\n\n const extendedTabList = [\n ...tabList,\n ...Object.values(tabs || {}).filter(tab => tab.type === 'additionalTab').map(tab => ({\n ...tab,\n isShown: true,\n icon: ,\n count: null\n }))\n ].filter(f => {\n if (!f.isShown && f.id === activeTab) isActiveTabShown = false; // or in different function?\n return f.isShown;\n }).sort((a, b) => {\n if (b.id === 'archive' || b.id === 'trash') {\n return -1;\n }\n\n return 1;\n });\n\n // if the current active tab is not shown, navigate to the first possible tab\n if (Object.keys(permissions).length > 0 && !isActiveTabShown && extendedTabList.length > 0) this.toggleNavigationMenu(extendedTabList[0].id);\n\n return extendedTabList.map(tabItem => {\n if (!tabItem.isShown) { return null; }\n\n const {\n id, name, className, icon, count\n } = tabItem;\n\n return (\n { this.toggleNavigationMenu(id); }}\n onKeyUp={null}\n >\n {icon &&
    {icon}
    }\n
    {name}
    \n {!!count &&
    {count}
    }\n
    \n );\n });\n }\n\n setActiveTab(activeTab) {\n this.setState({ activeTab });\n }\n\n isSaveAndContinueEnabled() {\n const { form } = this.props;\n if (Array.isArray(form?.autoFill)) {\n const url = new URL(window.location.href);\n if (url.searchParams.get('useIncomplete') && form?.isHIPAA !== '1') {\n return form?.autoFill[0]?.menu === 'default';\n }\n return false;\n }\n return false;\n }\n\n isActiveTab(tab) {\n const { activeTab } = this.state;\n return tab === activeTab;\n }\n\n openSettingsPanel() {\n const { setSettingsPanel } = this.props;\n setSettingsPanel({\n isOpened: true\n });\n }\n\n hideNavigationMenu() {\n const { removeClass } = this.props;\n removeClass(NAVIGATION_PANEL_CLASS);\n }\n\n toggleNavigationMenu(tabID) {\n const { toggleClass } = this.props;\n toggleClass(NAVIGATION_PANEL_CLASS);\n\n this.setActiveTab(tabID);\n this.handleTabChange(tabID);\n }\n\n render() {\n const { activeTab } = this.props;\n\n return (\n
    \n
    \n
    \n
    \n
    INBOX
    \n
    \n {this.renderNavigation}\n
    \n
    \n {activeTab === 'inbox' && (\n
    \n }\n onClick={this.openSettingsPanel}\n >\n {t.SETTINGS}\n \n
    \n )}\n
    \n
    \n );\n }\n}\n\nInboxNavigationComponent.propTypes = {\n toggleClass: func.isRequired,\n setSettingsPanel: func.isRequired,\n removeClass: func.isRequired,\n history: historyPropType,\n tabs: shape({\n inbox: shape({}),\n sentbox: shape({}),\n drafts: shape({})\n }).isRequired,\n permissions: shape({}).isRequired,\n activeTab: string.isRequired,\n isFormOwner: bool,\n form: shape({}),\n user: shape({}).isRequired\n};\n\nInboxNavigationComponent.defaultProps = {\n history: {\n push: f => f\n },\n isFormOwner: false,\n form: {}\n};\n\nconst mapStateToProps = stateProps => ({\n form: formSelector(stateProps),\n activeTab: activeTabIDSelector(stateProps),\n tabs: tabsSelector(stateProps),\n tabsCount: tabCountSelector(stateProps),\n isFormOwner: isFormOwnerSelector(stateProps),\n user: userSelector(stateProps)\n});\nconst mapDispatchToProps = {\n setSettingsPanel: setSettings\n};\n\nconst enhance = withInboxEnhancer('inboxNavigation', connect(mapStateToProps, mapDispatchToProps));\n\nexport default withPermissions(withRouter(enhance(InboxNavigationComponent)));\n","import React from 'react';\nimport { useBreakpoints } from '../../hooks';\n\nexport const withBreakpoints = (propName, breakPoints, WrappedComponent) => props => {\n const bp = useBreakpoints(breakPoints);\n\n return (\n \n );\n};\n","import React, { Component } from 'react';\nimport { bool, string } from 'prop-types';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash/debounce';\nimport { withFeatures } from '@paralleldrive/react-feature-toggles';\nimport classNames from 'classnames';\nimport { Flex } from '@jotforminc/magnet';\nimport { handleCustomNavigation } from '@jotforminc/utils';\nimport { IconLoading } from '@jotforminc/svg-icons';\n\nimport SearchPanel from '../SearchPanel';\nimport SettingsPanel from '../SettingsPanel';\nimport ContentPanelComponent from '../ContentPanel';\nimport InboxNavigation from '../InboxNavigation';\nimport EmptyConversation from '../../assets/img/empty_conversation.png';\nimport EmptyWave from '../../assets/img/empty_waves.png';\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\n\nimport { withInboxEnhancer } from '../../hocs/InboxEnhancer';\nimport { withBreakpoints } from '../../hocs/Breakpoints';\n\nimport {\n LEFT_PANEL_CLASS,\n MOBILE_MAX_WIDTH\n} from '../../constants';\n\nimport {\n isEncryptedSelector,\n answersSelector,\n submissionSpacingPreferenceSelector,\n submissionLayoutPreferenceSelector,\n userSelector,\n isSettingsPanelOpenSelector,\n getIsAIHistoryViewVisible,\n activeTabIDSelector,\n filteredSubmissionsSelector,\n getAiAgents,\n getAiAgentCreatingStatus\n} from '../../selectors';\n\nimport {\n answersPropType,\n enhancedProps,\n userPropType\n} from '../../constants/proptypes';\nimport { initFeedback } from '../../utils';\nimport { createAIAgent } from '../../actions';\n\nexport class Inbox extends Component {\n constructor(props) {\n super(props);\n\n this.onOverlayClick = this.onOverlayClick.bind(this);\n this.onClickFeedBackButton = this.onClickFeedBackButton.bind(this);\n this.handleClickCreateAgent = this.handleClickCreateAgent.bind(this);\n this.updateFeedbackButton = debounce(this.updateFeedbackButton, 2500).bind(this);\n }\n\n componentDidMount() {\n this.updateFeedbackButton();\n this.handleMobileState();\n }\n\n componentDidUpdate({\n submissionSpacingPreference: submissionSpacingPreferencePrev,\n submissionLayoutPreference: submissionLayoutPreferencePrev,\n user: userPrev,\n activeFormID: activeFormIDPrev\n }) {\n const {\n submissionSpacingPreference: submissionSpacingPreferenceCurrent,\n submissionLayoutPreference: submissionLayoutPreferenceCurrent,\n user: userCurrent,\n addClass,\n removeClass,\n activeFormID: activeFormIDCurrent\n } = this.props;\n\n if (submissionSpacingPreferencePrev !== submissionSpacingPreferenceCurrent) {\n removeClass(`jfInbox--spacing-${submissionSpacingPreferencePrev}`);\n addClass(`jfInbox--spacing-${submissionSpacingPreferenceCurrent}`);\n }\n\n if (submissionLayoutPreferencePrev !== submissionLayoutPreferenceCurrent) {\n removeClass(`jfInbox--align-${submissionLayoutPreferencePrev}`);\n addClass(`jfInbox--align-${submissionLayoutPreferenceCurrent}`);\n }\n\n if (userPrev !== userCurrent || activeFormIDPrev !== activeFormIDCurrent) {\n this.updateFeedbackButton();\n }\n }\n\n componentWillUnmount() {\n if (this.feedbackButton) {\n const { layoutElements: { floatingButton } } = this.feedbackButton;\n floatingButton.removeEventListener('click', this.onClickFeedBackButton);\n }\n }\n\n handleMobileState() {\n const { addClass } = this.props;\n const { outerWidth } = global.window;\n\n if (outerWidth <= MOBILE_MAX_WIDTH) {\n addClass(LEFT_PANEL_CLASS);\n }\n }\n\n onOverlayClick() {\n const { removeClass } = this.props;\n removeClass(LEFT_PANEL_CLASS);\n }\n\n onClickFeedBackButton() {}\n\n updateFeedbackButton() {\n const {\n user = {},\n activeFormID,\n features\n } = this.props;\n\n if (!features?.includes('isNewDesign')) return; // only opened for new design\n\n initFeedback({ user, formID: activeFormID }, feedback => {\n if (feedback) {\n global.document.body.classList.add('jfInbox--feedbackEnabled');\n }\n });\n }\n\n handleClickLearnMore() {\n WatchmanRecorder.recordEvent('learn-more-clicked', 'inbox-ai-transcript');\n handleCustomNavigation('/ai-agents', '_blank');\n }\n\n handleClickCreateAgent() {\n const { createAIAgentAction } = this.props;\n WatchmanRecorder.recordEvent('create-agent-clicked', 'inbox-ai-transcript');\n createAIAgentAction();\n }\n\n render() {\n const {\n isEncrypted,\n answers,\n t,\n isSettingsPanelOpen,\n isAIHistoryViewVisible,\n activeTab,\n aiAgents,\n agentStatus\n } = this.props;\n\n const isHistoryViewVisibleInInbox = activeTab === 'inbox' && isAIHistoryViewVisible;\n\n const isHistoryViewVisibleInConversations = activeTab === 'conversations';\n\n const isHistoryViewVisible = isHistoryViewVisibleInInbox || isHistoryViewVisibleInConversations;\n\n const isSubmissionVisibleInConversationsTab = isAIHistoryViewVisible && activeTab === 'conversations';\n const isAnyAgentCreated = Object.keys(aiAgents ?? {})?.length > 0;\n // eslint-disable-next-line max-len\n const aiButtonClasses = 'relative text-sm font-medium top-4 -mt-0.5 radius h-10 radius h-10 inline-flex items-center justify-center duration-300';\n\n return (\n <>\n \n {isHistoryViewVisibleInConversations && !isAnyAgentCreated\n ? (\n \n \n \"empty\n \n TURN FORMS INTO\n \n {' '}\n AI-POWERED\n CONVERSATIONS\n \n \n
    \n \n \n \n {agentStatus === 'CREATING' ? (\n <>\n \n Creating\n \n ) : 'Create Agent'}\n \n \n Learn More\n \n \n
    \n
    \n
    AI Form Agents turn your forms into dynamic, interactive conversations.
    \n
    These smart agents can format and structure responses to match your form’s layout,
    \n
    \n answer user questions\n , and\n provide clear, organized insights-making\n
    \n
    your processes more efficient than ever.
    \n
    \n
    \n \n )\n : (\n <>\n
    \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n \n {isSettingsPanelOpen && }\n
    \n \n )}\n
    \n \n );\n }\n}\n\nInbox.propTypes = {\n isEncrypted: bool,\n answers: answersPropType.isRequired,\n submissionSpacingPreference: string.isRequired,\n submissionLayoutPreference: string.isRequired,\n user: userPropType.isRequired,\n activeTab: string.isRequired,\n ...enhancedProps\n};\n\nInbox.defaultProps = {\n isEncrypted: false\n};\n\nconst mapStateToProps = stateProps => ({\n isEncrypted: isEncryptedSelector(stateProps),\n answers: answersSelector(stateProps),\n submissionSpacingPreference: submissionSpacingPreferenceSelector(stateProps),\n submissionLayoutPreference: submissionLayoutPreferenceSelector(stateProps),\n user: userSelector(stateProps),\n isSettingsPanelOpen: isSettingsPanelOpenSelector(stateProps),\n isAIHistoryViewVisible: getIsAIHistoryViewVisible(stateProps),\n activeTab: activeTabIDSelector(stateProps),\n filteredSubmissions: filteredSubmissionsSelector(stateProps),\n aiAgents: getAiAgents(stateProps),\n agentStatus: getAiAgentCreatingStatus(stateProps)\n});\n\nconst mapDispatchToProps = {\n createAIAgentAction: createAIAgent\n};\n\nconst enhance = withInboxEnhancer('regularInbox', connect(mapStateToProps, mapDispatchToProps));\n\nexport default enhance(\n withBreakpoints(\n 'threadLayout',\n {\n narrow: 0,\n normal: 1024\n },\n withFeatures(Inbox)\n )\n);\n","import { t } from '@jotforminc/translation';\n\nexport const getShortMonthName = month => {\n const monthNames = [\n t('January'), t('February'), t('March'), t('April'), t('May'), t('June'), t('July'), t('August'), t('September'), t('October'), t('November'), t('December')\n ];\n return monthNames[month - 1].substring(0, 3);\n};\n\nexport const getIconType = (productType, type, isNewBranding, paymentProps) => {\n let iconType = '';\n\n if (productType === 'Table') {\n return 'isSheet';\n }\n\n if (type === 'CARD') {\n iconType += 'isCard ';\n }\n\n if (isNewBranding) {\n iconType += 'isNewBranding ';\n }\n\n if (paymentProps) {\n iconType += 'isPaymentForm ';\n }\n\n return iconType;\n};\n","import Styled from 'styled-components';\n\n/* eslint max-len: \"off\" */\nconst FormItemWrapper = Styled.div`\ndisplay: flex;\nalign-items: center;\nposition: relative;\ncursor: pointer;\ntransition:\n background-color 0.15s ease,\n border 0.15s ease,\n transform 10ms linear;\ntext-decoration: none;\nborder-radius: .25em;\nfont-family: \"Circular\", \"Circular Std\", \"Circular Std Bold\", \"Work Sans SemiBold\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n\npadding: ${p => p.theme.itemPadding};\nline-height: ${p => p.theme.lineHeight};\nbackground: ${p => p.theme.itemBg};\nborder: 1px solid ${p => p.theme.itemBorder};\n\n&:hover:not(.isDisabled) {\n background-color: ${p => p.theme.itemBgFocus};\n\n .itemActions {\n display: block;\n }\n}\n\n[aria-selected=\"true\"] & {\n border-color: ${p => p.theme.itemBorderSelected};\n background-color: ${p => p.theme.itemBgSelected};\n\n &:hover:not(.isDisabled) {\n background-color: ${p => p.theme.itemBgSelectedHover};\n }\n}\n\n&:focus {\n outline: 0;\n}\n\n.itemContent {\n text-align: left;\n flex-grow: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.itemTitle {\n margin: 0;\n padding: 0;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n display: block;\n\n font-weight: ${p => p.theme.titleFontWeight};\n font-size: ${p => p.theme.titleFontSize};\n color: ${p => p.theme.titleColor};\n\n @media screen and (max-width: 600px) {\n white-space: normal;\n }\n}\n\n.itemDesc {\n margin: 0;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n\n font-weight: ${p => p.theme.detailsFontWeight};\n font-size: ${p => p.theme.detailsFontSize};\n color: ${p => p.theme.detailsColor};\n\n span {\n color: #D93434;\n font-weight: 500;\n }\n}\n\n&.isDisabled {\n cursor: default;\n background-color: #FAFAFB;\n border-color: #EBECF3;\n\n &:hover .itemDisabled {\n opacity: 1;\n }\n\n .itemInfo, .itemContent {\n opacity: .5;\n }\n}\n\n.itemDisabled {\n font-size: 13px;\n padding: 11px;\n color: #fff;\n position: absolute;\n top: 50%;\n right: 16px;\n background-color: #23283A;\n border-radius: 3px;\n transform: translateY(-50%);\n opacity: 0;\n pointer-events: none;\n transition: .3s;\n}\n\n.itemInfo {\n &-formType {\n width: 38px;\n height: 32px;\n background-position: center;\n background-repeat: no-repeat;\n background-size: contain;\n background-image: url(\"data:image/svg+xml,%3Csvg width='26' height='32' viewBox='0 0 26 32' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0.533333' y='0.533333' width='24.9333' height='30.9333' rx='3.73333' fill='white' stroke='%23B1C3E9' stroke-width='1.06667'/%3E%3Cpath d='M5 10.6908C5 9.75699 5.78756 9 6.75906 9H19.6589C20.6304 9 21.4179 9.75699 21.4179 10.6908V10.6908C21.4179 11.6246 20.6304 12.3816 19.6589 12.3816H6.75906C5.78756 12.3816 5 11.6246 5 10.6908V10.6908Z' fill='%230099FF'/%3E%3Cpath d='M5 16.3265C5 15.3927 5.78756 14.6357 6.75906 14.6357H19.6589C20.6304 14.6357 21.4179 15.3927 21.4179 16.3265V16.3265C21.4179 17.2603 20.6304 18.0173 19.6589 18.0173H6.75906C5.78756 18.0173 5 17.2603 5 16.3265V16.3265Z' fill='%23FF6100'/%3E%3Cpath d='M5 21.9625C5 21.0287 5.78756 20.2717 6.75906 20.2717H19.6589C20.6304 20.2717 21.4179 21.0287 21.4179 21.9625V21.9625C21.4179 22.8963 20.6304 23.6532 19.6589 23.6532H6.75906C5.78756 23.6532 5 22.8963 5 21.9625V21.9625Z' fill='%23FFB629'/%3E%3C/svg%3E%0A\");\n\n &.isCard {\n background-image: url(\"data:image/svg+xml,%3Csvg width='38' height='22' viewBox='0 0 38 22' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0.5' y='3.5' width='20' height='15' rx='3.5' fill='white' stroke='%23B1C3E9'/%3E%3Crect x='17.5' y='3.5' width='20' height='15' rx='3.5' fill='white' stroke='%23B1C3E9'/%3E%3Crect x='3' y='10' width='13' height='3' rx='1.5' fill='%230099FF'/%3E%3Crect x='22' y='10' width='13' height='3' rx='1.5' fill='%23FFB629'/%3E%3Crect x='7.5' y='0.5' width='23' height='21' rx='3.5' fill='white' stroke='%23B1C3E9'/%3E%3Cpath d='M11.364 8.32266C11.364 7.44722 12.0737 6.73754 12.9491 6.73754H24.5733C25.4487 6.73754 26.1584 7.44722 26.1584 8.32266V8.32266C26.1584 9.19809 25.4487 9.90777 24.5733 9.90777H12.9491C12.0737 9.90777 11.364 9.19809 11.364 8.32266V8.32266Z' fill='%23FF6100'/%3E%3Cpath d='M11.364 13.6063C11.364 12.7309 12.0737 12.0212 12.9491 12.0212H24.5733C25.4487 12.0212 26.1584 12.7309 26.1584 13.6063V13.6063C26.1584 14.4818 25.4487 15.1915 24.5733 15.1915H12.9491C12.0737 15.1915 11.364 14.4818 11.364 13.6063V13.6063Z' fill='%23FF6100'/%3E%3C/svg%3E%0A\");\n }\n\n &.isSheet {\n background-image: url(\"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0.5' y='0.5' width='31' height='31' rx='2.5' fill='white' stroke='%23DADEF3'/%3E%3Crect x='3.5' y='5.5' width='7' height='5' rx='1' fill='%230099FF'/%3E%3Crect x='3.5' y='12.5' width='7' height='7' rx='1' fill='%230099FF'/%3E%3Crect x='3.5' y='21.5' width='7' height='7' rx='1' fill='%230099FF'/%3E%3Crect x='12.5' y='5.5' width='7' height='5' rx='1' fill='%23FF6100'/%3E%3Crect x='12.5' y='12.5' width='7' height='7' rx='1' fill='%23FF6100'/%3E%3Crect x='12.5' y='21.5' width='7' height='7' rx='1' fill='%23FF6100'/%3E%3Crect x='21.5' y='5.5' width='7' height='5' rx='1' fill='%23FFB629'/%3E%3Crect x='21.5' y='12.5' width='7' height='7' rx='1' fill='%23FFB629'/%3E%3Crect x='21.5' y='21.5' width='7' height='7' rx='1' fill='%23FFB629'/%3E%3C/svg%3E%0A\");\n }\n\n &.isPaymentForm {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24'%3E%3Cpath fill='%230A1551' d='M20.487 17.1c-1.013-.382-1.356-.611-1.356-.916 0-.352.322-.547.907-.547.369 0 .712.05 1.051.157a.765.765 0 0 0 .97-.543l.014-.042a.817.817 0 0 0-.585-.997 4.919 4.919 0 0 0-.988-.152v-.352a.71.71 0 0 0-1.416 0v.45c-1.259.283-2.03 1.127-2.03 2.229 0 1.378 1.195 1.954 2.234 2.306.852.288 1.182.547 1.182.924 0 .386-.381.62-1.025.62-.433 0-.874-.081-1.315-.238a.746.746 0 0 0-.975.517l-.025.093a.837.837 0 0 0 .555 1.005c.407.131.87.216 1.319.246v.432a.71.71 0 0 0 1.415 0v-.53c1.298-.263 2.129-1.161 2.129-2.314.017-1.132-.607-1.836-2.06-2.349Z'/%3E%3Cpath fill='%23fff' fill-rule='evenodd' d='M6 1h12a3 3 0 0 1 3 3v8.303a2.568 2.568 0 0 0-3.545 1.199c-1.074.64-1.855 1.739-1.855 3.208 0 .761.219 1.404.556 1.927-.187.258-.326.55-.408.863l-.02.075-.004.014a2.67 2.67 0 0 0 1.84 3.229c.041.062.084.123.13.182H6a3 3 0 0 1-3-3V4a3 3 0 0 1 3-3Z' clip-rule='evenodd'/%3E%3Cpath fill='%23C8CEED' fill-rule='evenodd' d='M6 1a3 3 0 0 0-3 3v16a3 3 0 0 0 3 3h11.693a2.574 2.574 0 0 1-.128-.182A2.646 2.646 0 0 1 16.289 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v8.008c.36.03.698.133 1 .295V4a3 3 0 0 0-3-3H6Z' clip-rule='evenodd'/%3E%3Cpath fill='%23FFB629' fill-rule='evenodd' d='M16.171 14.72H7.64a1.14 1.14 0 0 0 0 2.28h7.97a3.879 3.879 0 0 1-.01-.29c0-.77.213-1.437.571-1.99Z' clip-rule='evenodd'/%3E%3Cpath fill='%2309F' d='M6.5 8.14C6.5 7.51 7.01 7 7.64 7h8.72a1.14 1.14 0 0 1 0 2.28H7.64c-.63 0-1.14-.51-1.14-1.14Z'/%3E%3Cpath fill='%23FF6100' d='M6.5 12c0-.63.51-1.14 1.14-1.14h8.72a1.14 1.14 0 0 1 0 2.28H7.64c-.63 0-1.14-.51-1.14-1.14Z'/%3E%3C/svg%3E\");\n }\n\n &.isCard.isPaymentForm {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' class='w-32 h-32'%3E%3Cpath fill='%23fff' fill-rule='evenodd' d='M4 16h1.17A3.001 3.001 0 0 0 8 18h7.332A3.946 3.946 0 0 1 15 16.387c0-1.69.928-2.952 2.215-3.662A2.71 2.71 0 0 1 22 12.219V10a2 2 0 0 0-2-2h-1.17A3.001 3.001 0 0 0 16 6H8a3.001 3.001 0 0 0-2.83 2H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2Z' clip-rule='evenodd'/%3E%3Cpath fill='%2309F' d='M4 12a.9.9 0 0 1 .9-.9H5v1.8h-.1A.9.9 0 0 1 4 12Z'/%3E%3Cpath fill='%23C8CEED' fill-rule='evenodd' d='M8 7h8a2 2 0 0 1 2 2v2.632a2.702 2.702 0 0 1 1-.53V9h1a1 1 0 0 1 1 1v1.312c.405.213.749.527 1 .907V10a2 2 0 0 0-2-2h-1.17A3.001 3.001 0 0 0 16 6H8a3.001 3.001 0 0 0-2.83 2H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h1.17A3.001 3.001 0 0 0 8 18h7.332a3.846 3.846 0 0 1-.288-1H8a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2ZM4 9h1v6H4a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1Z' clip-rule='evenodd'/%3E%3Cpath fill='%23FF6100' fill-rule='evenodd' d='M7.5 10a1 1 0 0 1 1-1h7a1 1 0 1 1 0 2h-7a1 1 0 0 1-1-1Zm0 4a1 1 0 0 1 1-1h7c.322 0 .61.153.792.39A4.01 4.01 0 0 0 15.23 15H8.5a1 1 0 0 1-1-1Z' clip-rule='evenodd'/%3E%3Cpath fill='%230A1551' d='M20.487 17.1c-1.013-.382-1.356-.611-1.356-.916 0-.352.322-.547.907-.547.369 0 .712.05 1.051.157a.765.765 0 0 0 .97-.543l.014-.042a.817.817 0 0 0-.585-.997 4.919 4.919 0 0 0-.988-.152v-.352a.71.71 0 0 0-1.416 0v.45c-1.259.283-2.03 1.127-2.03 2.229 0 1.378 1.195 1.954 2.234 2.306.852.288 1.182.547 1.182.924 0 .386-.381.62-1.025.62-.433 0-.874-.081-1.315-.238a.746.746 0 0 0-.975.517l-.025.093a.837.837 0 0 0 .555 1.005c.407.131.87.216 1.319.246v.432a.71.71 0 0 0 1.415 0v-.53c1.298-.263 2.129-1.161 2.129-2.314.017-1.132-.607-1.836-2.06-2.349Z'/%3E%3C/svg%3E\");\n }\n }\n}\n`;\n\nexport default FormItemWrapper;\n","import { string, shape } from 'prop-types';\n\nexport const formProperties = shape({\n id: string,\n title: string,\n count: string,\n new: string,\n updated_at: string,\n created_at: string\n});\n","import React from 'react';\nimport { bool, string } from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport '@jotforminc/jotform.css';\nimport classNames from 'classnames';\nimport { IconGridDotsVertical, IconStarFilled, IconArrowUpRightFromSquareSm } from '@jotforminc/svg-icons';\nimport { Checkbox, Indicator, Link } from '@jotforminc/magnet';\nimport { getIconType, getShortMonthName } from '../../../utils/utils';\n\nimport FormItemWrapper from './styled';\n\nimport { formProperties } from '../helpers/propTypes';\n\n// eslint-disable-next-line complexity\nconst FormItem = ({\n isSelected,\n isMultiSelect,\n isDraggable,\n isEditable,\n showFavorite,\n showFormId,\n submissionsKeyword,\n showPreview,\n option: {\n title,\n count: submissionCount,\n new: newSubmissionCount,\n updated_at: updatedAt,\n created_at: createdAt,\n id: formID,\n isFavorite,\n type,\n isSelectionDisabled,\n disableClass = 'itemDisabled',\n disableReason = 'This form is disabled.',\n draftCount,\n submission_date: submissionDate,\n paymentProps = null\n },\n isNewBranding,\n productType\n}) => {\n const hasDraft = draftCount && draftCount > 0;\n\n const getReadableDate = dateString => {\n if (!dateString) {\n console.error('Date string is not defined.');\n return '';\n }\n const splittedDateString = dateString.split(' ')[0].split('-');\n const month = parseInt(splittedDateString[1], 10);\n const monthName = month > 12 || month < 1 ? null : getShortMonthName(month);\n if (!monthName) {\n return '';\n }\n return `${monthName} ${splittedDateString[2]}, ${splittedDateString[0]}`;\n };\n\n let lastActionDate;\n if (draftCount !== undefined) {\n lastActionDate = submissionDate;\n } else {\n lastActionDate = updatedAt || createdAt;\n }\n\n const readableLastActionDate = getReadableDate(lastActionDate);\n\n let lastActionDateText;\n if (hasDraft && submissionCount < 1) {\n lastActionDateText = 'Draft saved on {date}.';\n } else if (draftCount !== undefined) {\n lastActionDateText = 'Last submission on {date}.';\n } else {\n lastActionDateText = 'Modified on {date}.';\n }\n\n const draftCountText = `${draftCount} ${t(`Draft${draftCount > 1 ? 's. ' : '. '}`)}`;\n return (\n \n
    \n {isMultiSelect && }\n {showFavorite && ()}\n
    \n {!!(newSubmissionCount !== '0' && newSubmissionCount) && (\n \n {newSubmissionCount}\n \n )}\n
    \n
    \n
    \n

    \n {title}\n

    \n

    \n {hasDraft ? {draftCountText} : null}\n {`${showFormId ? `${formID}. ` : ''}`}\n {submissionCount === undefined || (hasDraft && submissionCount < 1) ? '' : `${submissionCount} ${t(submissionsKeyword)}. `}\n {readableLastActionDate !== '' ? (`${t(lastActionDateText).replace('{date}', readableLastActionDate)}`) : <>}\n

    \n
    \n {showPreview && (\n \n {t('View')}\n \n \n )}\n {isEditable && (\n
    \n {\n e.stopPropagation();\n }}\n >\n Edit Form\n \n
    \n )}\n {isDraggable && (\n
    \n \n
    \n )}\n
    \n {disableReason}\n
    \n \n );\n};\n\nFormItem.propTypes = {\n isMultiSelect: bool,\n isSelected: bool.isRequired,\n option: formProperties.isRequired,\n isDraggable: bool,\n isEditable: bool,\n showFavorite: bool,\n showPreview: bool,\n showFormId: bool,\n submissionsKeyword: string,\n isNewBranding: bool,\n productType: string\n};\n\nFormItem.defaultProps = {\n isMultiSelect: true,\n isDraggable: false,\n isEditable: false,\n showFavorite: false,\n showPreview: false,\n showFormId: false,\n isNewBranding: false,\n submissionsKeyword: 'Submissions',\n productType: ''\n};\n\nexport default FormItem;\n","import Styled, { css } from 'styled-components';\n\nexport const ScPortalOption = Styled.div`\n transition: border 0.15s ease, box-shadow 0.15s ease, transform 10ms linear;\n text-decoration: none;\n border-radius: .25em;\n padding: 9px;\n line-height: ${p => p.theme.lineHeight};\n background: ${p => p.theme.itemBg};\n border: 1px solid ${p => p.theme.itemBorder};\n width: 100%;\n\n\n ${({ isBranding21 }) => (isBranding21 ? css`\n [aria-selected=\"true\"] &, [aria-selected=\"true\"] &:focus, [aria-selected=\"true\"] &:hover {\n border-color: #0099FF;\n background-color: #EDF8FF;\n }\n ` : css`\n [aria-selected=\"true\"] &, [aria-selected=\"true\"] &:focus {\n border-color: #4573E3;\n background-color: #DBE4FA;\n box-shadow: 0 0 0 1px #4573E3 inset;\n }\n `)};\n\n &:hover {\n cursor: pointer;\n border-color: ${({ isBranding21 }) => (isBranding21 ? '#C8CEED' : '#4573E3')};\n background-color: ${({ isBranding21 }) => (isBranding21 ? '#F3F3FE' : '#DBE4FA')};\n ${({ isBranding21 }) => (isBranding21 ? '' : css`box-shadow: 0 0 0 1px #4573E3 inset;`)};\n .itemActions {\n display: block;\n }\n }\n\n &:focus {\n outline: 0;\n border-color: ${p => p.theme.itemBorder};\n background-color: ${p => p.theme.itemBgFocus};\n box-shadow: 0 0 0 1px ${p => p.theme.itemBorder} inset;\n }\n\n\n ${p => (p.isDisabled ? `\n background-color: #FAFAFB;\n border-color: #EBECF3;\n box-shadow: unset;\n cursor: default;\n `\n : '')}\n\n`;\n","const gray = '#C8CEED';\nconst darkGray = '#6F76A7';\nconst lightGray = '#F3F3FE';\nconst blue = '#0099FF';\nconst darkBlue = '#0A1551';\nconst lightestBlue = '#EDF8FF';\nconst lightBlue = '#DBF1FF';\n\nexport const theme = {\n fontSize: '16px',\n\n itemBg: '#fff',\n itemBgFocus: lightGray,\n itemBgSelected: lightestBlue,\n itemBgSelectedHover: lightBlue,\n itemBorder: gray,\n itemBorderSelected: blue,\n lineHeight: `${21 / 16}em`,\n itemPadding: `${15 / 16}em`,\n\n // title\n titleColor: darkBlue,\n titleFontSize: `${17 / 16}em`,\n titleFontWeight: '500',\n\n // details\n detailsColor: darkGray,\n detailsFontSize: `${14 / 16}em`,\n detailsFontWeight: '300',\n\n // checkbox\n chBorder: gray,\n chSelected: blue,\n // eslint-disable-next-line max-len\n chIcon: \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='10' viewBox='0 0 11 10'%3E%3Cpath fill='none' fill-rule='evenodd' stroke='%23FFF' stroke-linecap='round' stroke-width='2' d='M4 8.025L6.994 10.951 12.905 4.5' transform='translate%28-3 -3%29'/%3E%3C/svg%3E%0A\",\n // eslint-disable-next-line max-len\n chPartialIcon: \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='3' viewBox='0 0 10 3'%3E%3Cpath fill='none' fill-rule='evenodd' stroke='%23FFF' stroke-linecap='round' stroke-width='2' d='M4 8.5L11.937 8.5' transform='translate%28-3 -7%29'/%3E%3C/svg%3E\"\n};\n","import React, { useCallback } from 'react';\nimport { IconCartShoppingFilled } from '@jotforminc/svg-icons';\nimport Styled from 'styled-components';\nimport { shape } from 'prop-types';\nimport PortalItem from './PortalItem';\nimport { ScPortalOption } from './scPortalOption';\nimport { theme as defaultPortalOptionTheme } from '../../FormPicker/helpers/defaultTheme';\nimport { portalDescriptionCommonStyle, portalTitleCommonStyle } from './PortalItemDefaults/commonCss';\n\nconst StyledTitleContainerRenderer = Styled.div`\n && {\n display: flex;\n align-items: center;\n gap: 8px;\n\n svg {\n width: 16px;\n height: 16px;\n }\n }\n`;\n\nconst StyledTitleRenderer = Styled.h2`\n && {\n ${portalTitleCommonStyle}\n font-weight: ${p => p.titleFontWeight};\n color: ${p => p.titleColor};\n font-size: 16px;\n line-height: 20px;\n }\n`;\n\nconst StyledDescriptionRenderer = Styled.p`\n && {\n ${portalDescriptionCommonStyle}\n color: ${p => p.detailsColor};\n font-size: 14px;\n line-height: 18px;\n }\n`;\n\nconst PortalOption = ({ option, theme }) => {\n const isBranding21 = true;\n const { isDisabled = false } = option;\n\n const TitleRenderer = useCallback(({ title, isStoreApp }) => {\n const { titleFontWeight, titleFontSize, titleColor } = theme;\n return (\n \n \n {title}\n \n {isStoreApp && }\n \n );\n }, [theme]);\n\n const DescriptionRenderer = useCallback(({ children }) => {\n const { detailsColor, detailsFontSize } = theme;\n return (\n \n {children}\n \n );\n }, [theme]);\n\n return (\n \n \n \n );\n};\n\nPortalOption.propTypes = {\n option: shape({}),\n theme: shape({})\n};\nPortalOption.defaultProps = {\n option: {},\n theme: defaultPortalOptionTheme\n};\n\nexport default PortalOption;\n","import React from 'react';\nimport Styled from 'styled-components';\nimport { bool, func, number } from 'prop-types';\n\nconst ScCh = Styled.div`\n position: relative;\n flex-shrink: 0;\n width: 18px;\n height: 18px;\n margin-right: 8px;\n border-radius: 4px;\n border: 1px solid ${p => p.theme.chBorder};\n background-color: #fff;\n\n &:after {\n content: \"\";\n display: block;\n background: url(\"${p => p.theme.chIcon}\") no-repeat center;\n }\n\n input[type=checkbox], &:after {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0; left: 0;\n margin: 0;\n padding: 0;\n }\n\n input[type=checkbox] { opacity: 0; }\n\n [aria-selected=\"true\"] & {\n border: 0;\n background-color: ${p => p.theme.chSelected};\n\n &:after { transform: scale(1) rotate(0); }\n }\n\n [aria-selected=\"partial\"] & {\n border: 0;\n background-color: ${p => p.theme.chSelected};\n\n &:after { background: url(\"${p => p.theme.chPartialIcon}\") no-repeat center; transform: scale(1) rotate(0); }\n }\n`;\n\nexport const CheckBox = ({ isSelected, onChange, id }) => (\n \n \n \n);\n\nCheckBox.propTypes = {\n isSelected: bool,\n id: number,\n onChange: func\n};\n\nCheckBox.defaultProps = {\n isSelected: false,\n id: 5,\n onChange: e => e.preventDefault()\n};\n","/* eslint-disable max-len */\nimport React from 'react';\nimport {\n bool, string, shape, number\n} from 'prop-types';\nimport Styled from 'styled-components';\nimport { t } from '@jotforminc/translation';\nimport { IconGridDotsVertical } from '@jotforminc/svg-icons';\n\nimport { getShortMonthName } from '../../../../utils/utils';\nimport FormItemWrapper from '../../../FormPicker/FormItem/styled';\nimport { CheckBox } from '../../../FormPicker/CheckBox';\n\nconst ScIconWrapper = Styled.div`\n position: relative;\n margin-right: 18px;\n z-index: 1;\n\n html[dir=\"rtl\"] & {\n margin-right: 0;\n margin-left: .4em;\n }\n`;\n\nconst ScSheetIcon = Styled.div`\n background-position: center;\n background-repeat: no-repeat;\n position: relative;\n width: 25px;\n height: 25px;\n ${p => (\n p.isApp ? (\n `\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 27 27'%3E%3Cpath fill='%230D953B' fill-rule='evenodd' d='M.00132017 23.2035C.00147173 24.6197.386264 24.9996 1.79633 24.9996 5.95863 25.0001 6.51815 25 8.2127 25c.88263-.0001 2.0732-.0001 4.2412-.0001H13v-1.7856h-2.9351c-.24973 0-.45221-.2025-.45221-.4522v-4.8702c0-.2497.20248-.4522.45221-.4522H13v-2.0524h-2.9351c-.24973 0-.45221-.2025-.45221-.4522v-4.8702c0-.24972.20248-.45219.45221-.45219h4.8702c.2497 0 .4522.20247.4522.45219V13h2.0524v-2.9351c0-.24972.2025-.45219.4522-.45219h4.8702c.2497 0 .4522.20247.4522.45219V13H25v-.504c0-2.1838-.0006-4.36759-.0018-10.71799-.0003-1.345989-.424-1.77520719-1.7646-1.77551016C16.8781.00083328 14.6893 0 12.5004 0 10.3116 0 8.12278.00083328 1.76729.00249984.407617.00280281.00132711.41581.00117711 1.76755.00042008 8.11796.00000194 10.3017 1e-8 12.4855c-.00000194 2.1838.00041234 4.3676.00132016 10.718Zm7.10673983.0108H2.23793c-.24976 0-.45224-.2025-.45224-.4522v-4.8702c0-.2497.20248-.4522.45224-.4522h4.87013c.24976 0 .45223.2025.45223.4522v4.8702c0 .2497-.20247.4522-.45223.4522Zm0-7.827H2.23793c-.24976 0-.45224-.2025-.45224-.4522v-4.8702c0-.24972.20248-.45219.45224-.45219h4.87013c.24976 0 .45223.20247.45223.45219v4.8702c0 .2497-.20247.4522-.45223.4522Zm7.82704-7.827h-4.8702c-.24973 0-.45221-.12228-.45221-.27312V4.34587c0-.15084.20248-.27312.45221-.27312h4.8702c.2497 0 .4522.12228.4522.27312v2.94131c0 .15084-.2025.27312-.4522.27312Zm7.8125 0h-4.8702c-.2497 0-.4522-.12228-.4522-.27312V4.34587c0-.15084.2025-.27312.4522-.27312h4.8702c.2497 0 .4522.12228.4522.27312v2.94131c0 .15084-.2025.27312-.4522.27312Zm-15.63954 0H2.23793c-.24976 0-.45224-.12228-.45224-.27312V4.34587c0-.15084.20248-.27312.45224-.27312h4.87013c.24976 0 .45223.12228.45223.27312v2.94131c0 .15084-.20247.27312-.45223.27312Z' clip-rule='evenodd'/%3E%3Cpath fill='%238D4ECC' fill-rule='evenodd' d='M16.5 15c-.8284 0-1.5.6716-1.5 1.5v9c0 .8284.6716 1.5 1.5 1.5h9c.8284 0 1.5-.6716 1.5-1.5v-9c0-.8284-.6716-1.5-1.5-1.5h-9Zm.3278 1.5c-.1808 0-.3273.1466-.3273.3273v3.2735c0 .1808.1465.3273.3273.3273h3.2734c.1808 0 .3274-.1465.3274-.3273v-3.2735c0-.1807-.1466-.3273-.3274-.3273h-3.2734Zm4.727.3273c0-.1807.1466-.3273.3273-.3273h3.2735c.1808 0 .3273.1466.3273.3273v3.2735c0 .1808-.1465.3273-.3273.3273h-3.2735c-.1807 0-.3273-.1465-.3273-.3273v-3.2735Zm1.9445 4.857c-.1821 0-.3298.1477-.3298.3299v1.0418h-1.0419c-.1821 0-.3299.1478-.3299.3299 0 .1821.1478.3299.3299.3299h1.0419v1.0418c0 .1822.1477.3299.3298.3299.1822 0 .3299-.1477.3299-.3299v-1.0418h1.0418c.1822 0 .3299-.1478.3299-.3299 0-.1821-.1477-.3299-.3299-.3299h-1.0418v-1.0418c0-.1822-.1477-.3299-.3299-.3299Zm-6.9984.1959c0-.1808.1465-.3274.3273-.3274h3.2734c.1808 0 .3274.1466.3274.3274v3.2734c0 .1808-.1466.3273-.3274.3273h-3.2734c-.1808 0-.3273-.1465-.3273-.3273v-3.2734Z' clip-rule='evenodd'/%3E%3C/svg%3E\");\n `\n ) : (\n `\n background-image: url(\"data:image/svg+xml,%3Csvg width='25' height='25' viewBox='0 0 25 25' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.796 25c-1.41 0-1.795-.38-1.795-1.797V1.768C.001.416.408.003 1.767.002 14.478 0 10.523 0 23.234.002c1.34 0 1.764.43 1.764 1.776.003 12.7.002 8.735 0 21.436 0 1.4-.397 1.785-1.811 1.786H1.796Zm20.966-1.786c.25 0 .452-.202.452-.452v-4.87a.452.452 0 0 0-.452-.452h-4.87a.452.452 0 0 0-.452.452v4.87c0 .25.202.452.452.452h4.87Zm-12.697 0h4.87c.25 0 .452-.202.452-.452v-4.87a.452.452 0 0 0-.452-.452h-4.87a.452.452 0 0 0-.452.452v4.87c0 .25.202.452.452.452Zm-7.827 0h4.87c.25 0 .452-.202.452-.452v-4.87a.452.452 0 0 0-.452-.452h-4.87a.452.452 0 0 0-.452.452v4.87c0 .25.202.452.452.452Zm15.654-7.827h4.87c.25 0 .452-.202.452-.452v-4.87a.452.452 0 0 0-.452-.452h-4.87a.452.452 0 0 0-.452.452v4.87c0 .25.202.452.452.452Zm-7.827 0h4.87c.25 0 .452-.202.452-.452v-4.87a.452.452 0 0 0-.452-.452h-4.87a.452.452 0 0 0-.452.452v4.87c0 .25.202.452.452.452Zm-7.827 0h4.87c.25 0 .452-.202.452-.452v-4.87a.452.452 0 0 0-.452-.452h-4.87a.452.452 0 0 0-.452.452v4.87c0 .25.202.452.452.452Zm7.827-7.827h4.87c.25 0 .452-.122.452-.273V4.346c0-.151-.202-.273-.452-.273h-4.87c-.25 0-.452.122-.452.273v2.941c0 .151.202.273.452.273Zm7.812 0h4.87c.25 0 .453-.122.453-.273V4.346c0-.151-.203-.273-.452-.273h-4.87c-.25 0-.453.122-.453.273v2.941c0 .151.203.273.452.273Zm-15.64 0h4.871c.25 0 .452-.122.452-.273V4.346c0-.151-.202-.273-.452-.273h-4.87c-.25 0-.452.122-.452.273v2.941c0 .151.202.273.452.273Z' fill='%230D953B'/%3E%3C/svg%3E\");\n `\n )\n )}\n\n ${p => (\n p['data-count'] > 0 ? (\n `&:before {\n content: attr(data-count);\n background: #D93434;\n color: #fff;\n border-radius: 16px;\n position: absolute;\n top: 0;\n right: 0;\n font-weight: 700;\n transform: translate(50%, -50%);\n font-size: 12px;\n padding: 1.5px 3.675px;\n line-height: 1;\n }\n `\n ) : ''\n )}\n`;\n\nconst SheetItem = ({\n option: {\n count,\n form_id: formId,\n name,\n unread,\n status,\n created_at: createdAt,\n updated_at: updatedAt,\n resourceType\n },\n isSelected,\n isMultiSelect,\n submissionsKeyword,\n showFormId,\n isDraggable\n}) => {\n const lastEditDate = (updatedAt ? updatedAt.split(' ')[0] : createdAt.split(' ')[0]).split('-');\n const updatedAtReadable = `${getShortMonthName(parseInt(lastEditDate[1], 10))} ${lastEditDate[2]}, ${lastEditDate[0]}`;\n\n return (\n \n {isMultiSelect && }\n
    \n \n \n \n
    \n
    \n

    \n {name}\n

    \n

    \n {`${showFormId ? `${formId}. ` : ''}${count} ${submissionsKeyword}. ${t('Modified on')} ${updatedAtReadable}.`}\n

    \n
    \n {isDraggable && (\n
    \n \n
    \n )}\n {status !== 'ENABLED' && (\n
    \n {t('This table is disabled.')}\n
    \n )}\n
    \n );\n};\n\nconst sheetItemProperties = shape({\n count: number,\n form_id: string,\n name: string,\n unread: number,\n status: string,\n created_at: string,\n updated_at: string,\n resourceType: string\n});\n\nSheetItem.propTypes = {\n option: sheetItemProperties.isRequired,\n isMultiSelect: bool,\n isSelected: bool.isRequired,\n submissionsKeyword: string,\n showFormId: bool,\n isDraggable: bool\n};\n\nSheetItem.defaultProps = {\n isMultiSelect: true,\n submissionsKeyword: 'Submissions',\n showFormId: false,\n isDraggable: false\n};\n\nexport default SheetItem;\n","/* eslint-disable max-len */\nimport React from 'react';\nimport {\n bool, string, shape, number\n} from 'prop-types';\nimport Styled from 'styled-components';\nimport { t } from '@jotforminc/translation';\nimport { IconGridDotsVertical } from '@jotforminc/svg-icons';\n\nimport { getShortMonthName } from '../../../../utils/utils';\nimport FormItemWrapper from '../../../FormPicker/FormItem/styled';\nimport { CheckBox } from '../../../FormPicker/CheckBox';\n\nconst ScIconWrapper = Styled.div`\n position: relative;\n margin-right: 18px;\n z-index: 1;\n\n html[dir=\"rtl\"] & {\n margin-right: 0;\n margin-left: .4em;\n }\n`;\n\nconst ScReportIcon = Styled.div`\n width: 26px;\n height: 32px;\n background-position: center;\n background-repeat: no-repeat;\n background-image : url(\"data:image/svg+xml,${p => {\n switch (p.type) {\n case 'excel':\n return \"%0A%3Csvg width='19px' height='18px' viewBox='0 0 19 18' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cg id='Page-1' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Different-Types-of-Reports-Copy-2' transform='translate(-366.000000, -291.000000)' fill-rule='nonzero'%3E%3Cg id='excel-copy' transform='translate(366.000000, 291.000000)'%3E%3Cpath d='M18.40625,15.4750176 L10.09375,15.4750176 C9.766,15.4750176 9.5,15.2090176 9.5,14.8812676 C9.5,14.5535176 9.5,3.33401758 9.5,3.00626758 C9.5,2.67851758 9.766,2.41251758 10.09375,2.41251758 L18.40625,2.41251758 C18.734,2.41251758 19,2.67851758 19,3.00626758 L19,14.8812676 C19,15.2090176 18.734,15.4750176 18.40625,15.4750176 Z' id='Path' fill='%23ECEFF1'%3E%3C/path%3E%3Cg id='Group' transform='translate(9.500000, 4.787109)' fill='%23159C66'%3E%3Cpath d='M2.96875,1.1879082 L0.59375,1.1879082 C0.266,1.1879082 0,0.921908203 0,0.594158203 C0,0.266408203 0.266,0.000408203125 0.59375,0.000408203125 L2.96875,0.000408203125 C3.2965,0.000408203125 3.5625,0.266408203 3.5625,0.594158203 C3.5625,0.921908203 3.2965,1.1879082 2.96875,1.1879082 Z' id='Path'%3E%3C/path%3E%3Cpath d='M2.96875,3.5629082 L0.59375,3.5629082 C0.266,3.5629082 0,3.2969082 0,2.9691582 C0,2.6414082 0.266,2.3754082 0.59375,2.3754082 L2.96875,2.3754082 C3.2965,2.3754082 3.5625,2.6414082 3.5625,2.9691582 C3.5625,3.2969082 3.2965,3.5629082 2.96875,3.5629082 Z' id='Path'%3E%3C/path%3E%3Cpath d='M2.96875,5.9379082 L0.59375,5.9379082 C0.266,5.9379082 0,5.6719082 0,5.3441582 C0,5.0164082 0.266,4.7504082 0.59375,4.7504082 L2.96875,4.7504082 C3.2965,4.7504082 3.5625,5.0164082 3.5625,5.3441582 C3.5625,5.6719082 3.2965,5.9379082 2.96875,5.9379082 Z' id='Path'%3E%3C/path%3E%3Cpath d='M2.96875,8.3129082 L0.59375,8.3129082 C0.266,8.3129082 0,8.0469082 0,7.7191582 C0,7.3914082 0.266,7.1254082 0.59375,7.1254082 L2.96875,7.1254082 C3.2965,7.1254082 3.5625,7.3914082 3.5625,7.7191582 C3.5625,8.0469082 3.2965,8.3129082 2.96875,8.3129082 Z' id='Path'%3E%3C/path%3E%3Cpath d='M6.53125,1.1879082 L5.34375,1.1879082 C5.016,1.1879082 4.75,0.921908203 4.75,0.594158203 C4.75,0.266408203 5.016,0.000408203125 5.34375,0.000408203125 L6.53125,0.000408203125 C6.859,0.000408203125 7.125,0.266408203 7.125,0.594158203 C7.125,0.921908203 6.859,1.1879082 6.53125,1.1879082 Z' id='Path'%3E%3C/path%3E%3Cpath d='M6.53125,3.5629082 L5.34375,3.5629082 C5.016,3.5629082 4.75,3.2969082 4.75,2.9691582 C4.75,2.6414082 5.016,2.3754082 5.34375,2.3754082 L6.53125,2.3754082 C6.859,2.3754082 7.125,2.6414082 7.125,2.9691582 C7.125,3.2969082 6.859,3.5629082 6.53125,3.5629082 Z' id='Path'%3E%3C/path%3E%3Cpath d='M6.53125,5.9379082 L5.34375,5.9379082 C5.016,5.9379082 4.75,5.6719082 4.75,5.3441582 C4.75,5.0164082 5.016,4.7504082 5.34375,4.7504082 L6.53125,4.7504082 C6.859,4.7504082 7.125,5.0164082 7.125,5.3441582 C7.125,5.6719082 6.859,5.9379082 6.53125,5.9379082 Z' id='Path'%3E%3C/path%3E%3Cpath d='M6.53125,8.3129082 L5.34375,8.3129082 C5.016,8.3129082 4.75,8.0469082 4.75,7.7191582 C4.75,7.3914082 5.016,7.1254082 5.34375,7.1254082 L6.53125,7.1254082 C6.859,7.1254082 7.125,7.3914082 7.125,7.7191582 C7.125,8.0469082 6.859,8.3129082 6.53125,8.3129082 Z' id='Path'%3E%3C/path%3E%3C/g%3E%3Cpath d='M10.4725625,0.174080078 C10.3371875,0.0612675781 10.1555,0.0125800781 9.9845,0.0482050781 L0.4845,1.82945508 C0.2030625,1.88170508 0,2.12633008 0,2.41251758 L0,15.4750176 C0,15.7600176 0.2030625,16.0058301 0.4845,16.0580801 L9.9845,17.8393301 C10.020125,17.8464551 10.0569375,17.8500176 10.09375,17.8500176 C10.2315,17.8500176 10.3656875,17.8025176 10.4725625,17.7134551 C10.609125,17.6006426 10.6875,17.4320176 10.6875,17.2562676 L10.6875,0.631267578 C10.6875,0.454330078 10.609125,0.286892578 10.4725625,0.174080078 Z' id='Path' fill='%2321A872'%3E%3C/path%3E%3Cpath d='M8.16525,10.9280801 L6.2878125,8.78226758 L8.186625,6.34076758 C8.3885,6.08189258 8.341,5.70901758 8.0833125,5.50714258 C7.825625,5.30526758 7.45275,5.35276758 7.2496875,5.61045508 L5.491,7.87145508 L4.009,6.17808008 C3.7916875,5.92870508 3.4164375,5.90614258 3.1718125,6.12226758 C2.9248125,6.33839258 2.899875,6.71364258 3.116,6.95945508 L4.7488125,8.82620508 L3.0934375,10.9542051 C2.8915625,11.2130801 2.9390625,11.5859551 3.19675,11.7878301 C3.306,11.8721426 3.4354375,11.9125176 3.5625,11.9125176 C3.7394375,11.9125176 3.914,11.8341426 4.0315625,11.6833301 L5.545625,9.73583008 L7.27225,11.7082676 C7.3898125,11.8436426 7.5536875,11.9125176 7.71875,11.9125176 C7.8576875,11.9125176 7.996625,11.8638301 8.1094375,11.7652676 C8.3564375,11.5491426 8.381375,11.1738926 8.16525,10.9280801 Z' id='Path' fill='%23FAFAFA'%3E%3C/path%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\";\n case 'csv':\n return \"%3Csvg width='19' height='16' viewBox='0 0 19 16' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect fill='%23ECEFF1' width='19' height='16' rx='1'/%3E%3Cpath d='M18 0H1a1 1 0 00-1 1v7.55h19V1a1 1 0 00-1-1z' fill='%23159C66' fill-rule='nonzero'/%3E%3Cpath d='M5.523 6.75c1.324 0 2.002-.878 2.182-1.603l-.858-.26c-.127.44-.519.965-1.324.965-.758 0-1.463-.552-1.463-1.556 0-1.07.745-1.576 1.45-1.576.818 0 1.184.499 1.297.95l.864-.272c-.186-.765-.858-1.563-2.161-1.563-1.263 0-2.4.958-2.4 2.46C3.11 5.8 4.206 6.75 5.522 6.75zm4.482 0c1.098 0 1.703-.732 1.703-1.457 0-.665-.459-1.223-1.317-1.39l-.658-.126c-.346-.066-.512-.272-.512-.532 0-.312.292-.598.738-.598.598 0 .811.405.858.665l.824-.253c-.106-.532-.545-1.224-1.689-1.224-.89 0-1.642.639-1.642 1.477 0 .711.485 1.197 1.237 1.35l.658.133c.366.073.572.286.572.558 0 .333-.273.579-.765.579-.665 0-.99-.42-1.03-.885l-.852.226c.073.672.625 1.477 1.875 1.477zm4.695-.1l1.75-4.715h-.972l-1.23 3.505-1.23-3.505h-1.004l1.742 4.715h.944z' fill='%23FFF' fill-rule='nonzero'/%3E%3Crect fill='%23CCD0DA' x='6.65' y='11.4' width='5.7' height='1' rx='.4'/%3E%3Crect fill='%23CCD0DA' x='6.65' y='9.5' width='5.7' height='1' rx='.4'/%3E%3Crect fill='%23CCD0DA' x='6.65' y='13.3' width='5.7' height='1' rx='.4'/%3E%3Crect fill='%23CCD0DA' x='.95' y='11.4' width='4.75' height='1' rx='.4'/%3E%3Crect fill='%23CCD0DA' x='.95' y='9.5' width='4.75' height='1' rx='.4'/%3E%3Crect fill='%23CCD0DA' x='.95' y='13.3' width='4.75' height='1' rx='.4'/%3E%3Crect fill='%23CCD0DA' x='13.3' y='11.4' width='4.75' height='1' rx='.4'/%3E%3Crect fill='%23CCD0DA' x='13.3' y='9.5' width='4.75' height='1' rx='.4'/%3E%3Crect fill='%23CCD0DA' x='13.3' y='13.3' width='4.75' height='1' rx='.4'/%3E%3C/g%3E%3C/svg%3E\";\n case 'rss':\n return \"%0A%3Csvg width='17px' height='17px' viewBox='0 0 17 17' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cg id='Page-1' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Different-Types-of-Reports-Copy-3' transform='translate(-367.000000, -379.000000)'%3E%3Cg id='Group-8' transform='translate(314.000000, 369.000000)'%3E%3Cg id='rss' transform='translate(53.000000, 10.000000)'%3E%3Crect id='Rectangle' fill='%23EC7838' x='0' y='0' width='17' height='17' rx='1.5'%3E%3C/rect%3E%3Cg id='Group' transform='translate(1.671875, 2.000000)' fill='%23E6EEFF' fill-rule='nonzero'%3E%3Cpath d='M3.72864636,11.1546699 C3.72864636,10.6405195 3.52123437,10.1760586 3.1852832,9.84007031 C2.84933203,9.50411914 2.38483398,9.29670715 1.87068359,9.29670715 C0.845277344,9.2937832 0.009796875,10.1293008 0.0127577377,11.1546328 C0.0127577377,11.6687832 0.220207031,12.133207 0.556158203,12.4691582 C0.892109375,12.8051094 1.35657031,13.012522 1.87068359,13.012522 C2.89605273,13.0155566 3.73157031,12.1800391 3.72864636,11.1546699 Z' id='Path'%3E%3C/path%3E%3Cpath d='M11.7855293,12.3933066 C11.1019375,12.3933066 10.5469297,11.8382617 10.5468926,11.1546699 C10.5498242,8.7621543 9.57414453,6.59455859 8.00245117,5.02290234 C6.43075781,3.45124609 4.26319922,2.4755293 1.87068359,2.47846094 C1.18712891,2.47846094 0.632046875,1.92341602 0.632046875,1.23982422 C0.632046875,0.556269531 1.1870918,0.00122460937 1.87064648,0.00122460937 C4.94679102,0.00415625 7.73659961,1.25151367 9.75516406,3.27011523 C11.7737285,5.2887168 13.021123,8.0785625 13.0240547,11.1546328 C13.0240547,11.8382617 12.4691211,12.3933066 11.7855293,12.3933066 Z' id='Path'%3E%3C/path%3E%3Cpath d='M6.828125,12.3962383 C6.14457031,12.3962383 5.58659375,11.8382988 5.58659375,11.154707 C5.58659375,10.1322324 5.17178516,9.20327344 4.49695117,8.52847656 C3.82508594,7.85661133 2.89608984,7.44176563 1.8707207,7.43883398 C1.18712891,7.43883398 0.629189453,6.88085742 0.629189453,6.19730273 C0.629189453,5.51374805 1.18712891,4.95577148 1.8707207,4.95577148 C3.57968164,4.95870313 5.12792188,5.65394727 6.24970117,6.77572656 C7.37148047,7.89750586 8.06672461,9.4457832 8.06965625,11.154707 C8.06965625,11.8382988 7.51167969,12.3962383 6.828125,12.3962383 Z' id='Path'%3E%3C/path%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\";\n case 'table':\n return \"%3Csvg width='19' height='16' viewBox='0 0 19 16' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect fill='%23ECEFF1' width='19' height='16' rx='1'/%3E%3Cpath d='M18 0H1a1 1 0 00-1 1v4h19V1a1 1 0 00-1-1z' fill='%23504B66' fill-rule='nonzero'/%3E%3Ccircle fill='%23F75B5B' fill-rule='nonzero' cx='2.5' cy='2.5' r='1.5'/%3E%3Ccircle fill='%23F2C273' fill-rule='nonzero' cx='6.5' cy='2.5' r='1.5'/%3E%3Ccircle fill='%2371D18F' fill-rule='nonzero' cx='10.5' cy='2.5' r='1.5'/%3E%3Crect fill='%23CCD0DA' x='6' y='7' width='12' height='2' rx='.4'/%3E%3Crect fill='%23CCD0DA' x='6' y='10' width='12' height='2' rx='.4'/%3E%3Crect fill='%23CCD0DA' x='6' y='13' width='12' height='2' rx='.4'/%3E%3Crect fill='%2397A0AF' x='1' y='7' width='5' height='2' rx='.4'/%3E%3Crect fill='%2397A0AF' x='1' y='10' width='5' height='2' rx='.4'/%3E%3Crect fill='%2397A0AF' x='1' y='13' width='5' height='2' rx='.4'/%3E%3C/g%3E%3C/svg%3E\";\n case 'grid':\n return \"%3Csvg width='19' height='16' viewBox='0 0 19 16' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect fill='%23ECEFF1' width='19' height='16' rx='1'/%3E%3Cpath d='M18 0H1a1 1 0 00-1 1v7.55h19V1a1 1 0 00-1-1z' fill='%2334C7EC' fill-rule='nonzero'/%3E%3Cpath d='M3.538 7.3c.768 0 1.27-.345 1.5-.69l.064.582h.803V4.546H3.366v.86h1.607c-.058.359-.423.99-1.363.99-.853 0-1.606-.595-1.606-1.743 0-1.205.832-1.728 1.599-1.728.825 0 1.248.523 1.377.975l.946-.337C5.676 2.782 4.936 2 3.603 2 2.226 2 1 3.011 1 4.653 1 6.295 2.169 7.3 3.538 7.3zm4.36-.108V5.234h.517l.996 1.958h1.105l-1.09-2.08c.667-.193 1.082-.731 1.082-1.441 0-.882-.63-1.563-1.62-1.563H6.902v5.084h.996zm.803-2.811h-.803V2.968h.803c.502 0 .796.28.796.71 0 .416-.294.703-.796.703zm3.686 2.81V2.109h-1.004v5.084h1.004zm2.976 0c1.449 0 2.517-.932 2.517-2.538 0-1.606-1.061-2.545-2.51-2.545H13.55v5.084h1.814zm-.036-.917h-.789V3.025h.796c.832 0 1.52.524 1.52 1.628 0 1.104-.695 1.62-1.527 1.62z' fill='%23FFF' fill-rule='nonzero'/%3E%3Crect fill='%23CCD0DA' x='6.65' y='11.4' width='11.5' height='1' rx='.4'/%3E%3Crect fill='%23CCD0DA' x='6.65' y='9.5' width='11.5' height='1' rx='.4'/%3E%3Crect fill='%23CCD0DA' x='6.65' y='13.3' width='11.5' height='1' rx='.4'/%3E%3Crect fill='%239ADDEE' x='.95' y='11.4' width='4.75' height='1' rx='.4'/%3E%3Crect fill='%239ADDEE' x='.95' y='9.5' width='4.75' height='1' rx='.4'/%3E%3Crect fill='%239ADDEE' x='.95' y='13.3' width='4.75' height='1' rx='.4'/%3E%3C/g%3E%3C/svg%3E\";\n case 'calendar':\n case 'cal':\n return \"%3Csvg width='19px' height='16px' viewBox='0 0 19 16' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect fill='%23ECEFF1' width='19' height='16' rx='1'/%3E%3Crect fill='%239ADDEE' x='0.5' y='4.5' width='3' height='2' rx='0.4'/%3E%3Crect fill='%23A4D9A8' x='10.5' y='8.5' width='3' height='2' rx='0.4'/%3E%3Crect fill='%23FFEA9C' x='5.5' y='12.5' width='3' height='2' rx='0.4'/%3E%3Cpath stroke='%23CCD0DA' stroke-width='0.5' stroke-linecap='square' d='M4.5.5v15M9.5.5v15M14.5.5v15'/%3E%3Cpath d='M18 0H1a1 1 0 00-1 1v3h19V1a1 1 0 00-1-1z' fill='%23FBAB31' fill-rule='nonzero'/%3E%3Cpath stroke='%23CCD0DA' stroke-width='0.5' stroke-linecap='square' d='M.5 7.5h18M.5 11.5h18'/%3E%3C/g%3E%3C/svg%3E\";\n case 'visual':\n case 'reports':\n default:\n return \"%3Csvg width='26' height='32' viewBox='0 0 26 32' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.5 3.125C.5 1.685 1.695.5 3.192.5h19.616C24.305.5 25.5 1.685 25.5 3.125v25.75c0 1.44-1.195 2.625-2.692 2.625H3.192C1.695 31.5.5 30.315.5 28.875V3.125Z' fill='%23fff' stroke='%23B1C3E9'/%3E%3Cpath d='M5 8.125C5 7.504 5.448 7 6 7h2c.552 0 1 .504 1 1.125V25H5V8.125Z' fill='%2309F'/%3E%3Cpath d='M11 13.13c0-.624.448-1.13 1-1.13h2c.552 0 1 .506 1 1.13V25h-4V13.13Z' fill='%23FF6100'/%3E%3Cpath d='M17 9.097C17 8.49 17.448 8 18 8h2c.552 0 1 .491 1 1.097V25h-4V9.097Z' fill='%23FFB629'/%3E%3C/svg%3E\";\n }\n }}\");`;\n\nconst ReportsItem = ({\n option: {\n form_count: formCount,\n form_id: formId,\n title,\n status,\n created_at: createdAt,\n updated_at: updatedAt,\n list_type: listType\n },\n isSelected,\n isMultiSelect,\n submissionsKeyword,\n showFormId,\n isDraggable\n}) => {\n const lastEditDate = (updatedAt ? updatedAt.split(' ')[0] : createdAt.split(' ')[0]).split('-');\n const updatedAtReadable = `${getShortMonthName(parseInt(lastEditDate[1], 10))} ${lastEditDate[2]}, ${lastEditDate[0]}`;\n\n return (\n \n {isMultiSelect && }\n
    \n \n \n \n
    \n
    \n

    \n {title}\n

    \n

    \n {`${showFormId ? `${formId}. ` : ''}${formCount} ${submissionsKeyword}. ${t('Modified on')} ${updatedAtReadable}.`}\n

    \n
    \n {isDraggable && (\n
    \n \n
    \n )}\n {status !== 'ENABLED' && (\n
    \n {t('This report is disabled.')}\n
    \n )}\n
    \n );\n};\n\nconst reportsItemProperties = shape({\n form_count: number,\n form_id: string,\n title: string,\n status: string,\n created_at: string,\n updated_at: string,\n list_type: string\n});\n\nReportsItem.propTypes = {\n option: reportsItemProperties.isRequired,\n isMultiSelect: bool,\n isSelected: bool.isRequired,\n submissionsKeyword: string,\n showFormId: bool,\n isDraggable: bool\n};\n\nReportsItem.defaultProps = {\n isMultiSelect: true,\n submissionsKeyword: 'Form',\n showFormId: false,\n isDraggable: false\n};\n\nexport default ReportsItem;\n","/* eslint-disable max-len */\nimport React from 'react';\nimport {\n bool, string, shape\n} from 'prop-types';\nimport Styled from 'styled-components';\nimport { t } from '@jotforminc/translation';\nimport { IconGridDotsVertical, IconProductApprovalsColor } from '@jotforminc/svg-icons';\nimport { getShortMonthName } from '../../../../utils/utils';\nimport FormItemWrapper from '../../../FormPicker/FormItem/styled';\nimport { CheckBox } from '../../../FormPicker/CheckBox';\n\nconst ScIconWrapper = Styled.div`\n position: relative;\n margin-right: 12px;\n z-index: 1;\n\n html[dir=\"rtl\"] & {\n margin-right: 0;\n margin-left: .2em;\n }\n\n svg {\n width: 36px;\n height: 36px;\n }\n`;\n\nconst ApprovalItem = ({\n option: {\n form_id: formId,\n title,\n status,\n last_activity: lastActivity,\n created_at: createdAt\n },\n isSelected,\n isMultiSelect,\n showFormId,\n isDraggable\n}) => {\n const lastActivityDate = (lastActivity ? lastActivity.split(' ')[0] : createdAt.split(' ')[0]).split('-');\n const lastActivityReadable = `${getShortMonthName(parseInt(lastActivityDate[1], 10))} ${lastActivityDate[2]}, ${lastActivityDate[0]}`;\n\n return (\n \n {isMultiSelect && }\n
    \n \n \n \n
    \n
    \n

    \n {title}\n

    \n

    \n {`${showFormId ? `${formId}. ` : ''} ${t('Last activity on')} ${lastActivityReadable}.`}\n

    \n
    \n {isDraggable && (\n
    \n \n
    \n )}\n {status !== 'ENABLED' && (\n
    \n {t('This approval is disabled.')}\n
    \n )}\n
    \n );\n};\n\nconst approvalItemProperties = shape({\n form_id: string,\n title: string,\n status: string,\n last_activity: string,\n created_at: string\n});\n\nApprovalItem.propTypes = {\n option: approvalItemProperties.isRequired,\n isMultiSelect: bool,\n isSelected: bool.isRequired,\n showFormId: bool,\n isDraggable: bool\n};\n\nApprovalItem.defaultProps = {\n isMultiSelect: true,\n showFormId: false,\n isDraggable: false\n};\n\nexport default ApprovalItem;\n","import Styled from 'styled-components';\n\nexport const ScIconWrapper = Styled.div`\n position: relative;\n margin-left: 4px;\n margin-right: 10px;\n display: flex;\n align-items: center;\n\n html[dir=\"rtl\"] & {\n margin-right: 0;\n margin-left: .2em;\n }\n\n svg {\n width: 36px;\n height: 36px;\n }\n`;\n","import React from 'react';\nimport {\n bool, string, shape, number\n} from 'prop-types';\nimport { translationRenderer } from '@jotforminc/translation';\nimport { IconProductSignColorBorder } from '@jotforminc/svg-icons';\n\nimport Styled from 'styled-components';\nimport { getShortMonthName } from '../../../../utils/utils';\nimport FormItemWrapper from '../../../FormPicker/FormItem/styled';\nimport { CheckBox } from '../../../FormPicker/CheckBox';\nimport { ScIconWrapper } from './styles';\n\nconst ScSignItemWrapper = Styled(FormItemWrapper)`\n .itemDesc {\n position: relative;\n }\n\n &.isDisabled {\n &:hover {\n .errorText {\n display: block;\n }\n }\n }\n\n .errorText {\n display: none;\n position: absolute;\n left: 93px;\n bottom: 4px;\n font-size: 13px;\n line-height: normal;\n padding: 8px;\n text-transform: lowercase;\n border-radius: 4px;\n color: #fff;\n font-weight: 400;\n background-color: #0A1551;\n font-family: \"Circular\";\n\n &:first-letter { text-transform: uppercase; }\n\n .link {\n color: #0099FF;\n cursor: pointer;\n }\n }\n`;\n\nconst DescriptionText = ({ totalCount, updatedAtReadable }) => {\n // eslint-disable-next-line no-nested-ternary\n const firstPart = (totalCount > 0)\n ? totalCount > 1\n ? translationRenderer('[1[{totalCount}]] Sign Documents')({ renderer1: () => totalCount })\n : translationRenderer('[1[{oneCount}]] Sign Document')({ renderer1: () => 1 })\n : '';\n const secondPart = translationRenderer('Updated on [1[{updatedAtReadable}]]')({\n renderer1: () => updatedAtReadable\n });\n\n return (\n <>\n {firstPart}\n { totalCount > 0 ? '. ' : '' }\n {secondPart}\n \n );\n};\n\nDescriptionText.propTypes = {\n totalCount: number.isRequired,\n updatedAtReadable: string.isRequired\n};\n\nconst SignItem = ({\n option,\n isSelected,\n isMultiSelect\n}) => {\n const {\n totalCount,\n title,\n creationTime: createdAt,\n modificationTime: updatedAt,\n errorText,\n disabled\n } = option;\n\n const lastEditDate = (updatedAt ? updatedAt.split(' ')[0] : createdAt.split(' ')[0]).split('-');\n const updatedAtReadable = `${lastEditDate[2]} ${getShortMonthName(parseInt(lastEditDate[1], 10))} ${lastEditDate[0]}`;\n\n const className = disabled ? 'isDisabled' : '';\n\n return (\n \n {isMultiSelect && }\n
    \n \n \n \n
    \n
    \n

    \n {title}\n

    \n

    \n \n

    \n
    \n
    {errorText}
    \n
    \n );\n};\n\nconst reportsItemProperties = shape({\n form_count: number,\n form_id: string,\n title: string,\n status: string,\n created_at: string,\n updated_at: string,\n list_type: string\n});\n\nSignItem.propTypes = {\n option: reportsItemProperties.isRequired,\n isMultiSelect: bool,\n isSelected: bool.isRequired,\n disabled: bool,\n errorText: string\n};\n\nSignItem.defaultProps = {\n isMultiSelect: true,\n disabled: false,\n errorText: ''\n};\n\nexport default SignItem;\n","import React from 'react';\nimport { bool, shape } from 'prop-types';\nimport FormItemWrapper from '../../../FormPicker/FormItem/styled';\nimport { CheckBox } from '../../../FormPicker/CheckBox';\n\nconst OperationItem = ({\n option: {\n name\n },\n isSelected,\n isMultiSelect\n}) => {\n return (\n \n {isMultiSelect && }\n
    \n

    \n {name}\n

    \n
    \n
    \n );\n};\n\nOperationItem.propTypes = {\n option: shape().isRequired,\n isSelected: bool.isRequired,\n isMultiSelect: bool\n};\n\nOperationItem.defaultProps = {\n isMultiSelect: true\n};\n\nexport default OperationItem;\n","/* eslint-disable max-len */\nimport React from 'react';\nimport {\n bool, string, shape, number\n} from 'prop-types';\nimport Styled from 'styled-components';\nimport { t } from '@jotforminc/translation';\nimport { IconGridDotsVertical } from '@jotforminc/svg-icons';\n\nimport { getShortMonthName } from '../../../../utils/utils';\nimport FormItemWrapper from '../../../FormPicker/FormItem/styled';\nimport { CheckBox } from '../../../FormPicker/CheckBox';\n\nconst ScIconWrapper = Styled.div`\n position: relative;\n margin-right: 18px;\n z-index: 1;\n\n html[dir=\"rtl\"] & {\n margin-right: 0;\n margin-left: .4em;\n }\n`;\n\nconst ScBoardIcon = Styled.div`\n background-position: center;\n background-repeat: no-repeat;\n position: relative;\n width: 32px;\n height: 32px;\n background-image: url(\"data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='32px' height='32px' viewBox='0 0 32 32' version='1.1'%3e%3cg id='surface1'%3e%3cpath style='fill-rule:nonzero;fill:rgb(100%25,100%25,100%25);fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(89.019608%25,89.803922%25,96.078431%25);stroke-opacity:1;stroke-miterlimit:4;' d='M 4.75 2.002075 L 27.25 2.002075 C 29.046875 2.002075 30.5 3.456298 30.5 5.2489 L 30.5 27.75109 C 30.5 29.543692 29.046875 30.997915 27.25 30.997915 L 4.75 30.997915 C 2.953125 30.997915 1.5 29.543692 1.5 27.75109 L 1.5 5.2489 C 1.5 3.456298 2.953125 2.002075 4.75 2.002075 Z M 4.75 2.002075 ' transform='matrix(1,0,0,0.969697,0,0)'/%3e%3cpath style=' stroke:none;fill-rule:nonzero;fill:rgb(100%25,71.372549%25,16.078431%25);fill-opacity:1;' d='M 17.125 13.273438 C 17.125 12.96875 17.375 12.726562 17.691406 12.726562 L 24.441406 12.726562 C 24.75 12.726562 25 12.96875 25 13.273438 L 25 23.636719 C 25 24.238281 24.496094 24.726562 23.875 24.726562 L 18.25 24.726562 C 17.628906 24.726562 17.125 24.238281 17.125 23.636719 Z M 17.125 13.273438 '/%3e%3cpath style=' stroke:none;fill-rule:nonzero;fill:rgb(100%25,71.372549%25,16.078431%25);fill-opacity:1;' d='M 7 13.273438 C 7 12.96875 7.25 12.726562 7.558594 12.726562 L 14.316406 12.726562 C 14.625 12.726562 14.875 12.96875 14.875 13.273438 L 14.875 19.273438 C 14.875 19.875 14.371094 20.363281 13.75 20.363281 L 8.125 20.363281 C 7.503906 20.363281 7 19.875 7 19.273438 Z M 7 13.273438 '/%3e%3cpath style=' stroke:none;fill-rule:nonzero;fill:rgb(100%25,38.039216%25,0%25);fill-opacity:1;' d='M 7 8.363281 C 7 7.761719 7.503906 7.273438 8.125 7.273438 L 13.75 7.273438 C 14.371094 7.273438 14.875 7.761719 14.875 8.363281 L 14.875 10 C 14.875 10.300781 14.625 10.546875 14.316406 10.546875 L 7.558594 10.546875 C 7.25 10.546875 7 10.300781 7 10 Z M 7 8.363281 '/%3e%3cpath style=' stroke:none;fill-rule:nonzero;fill:rgb(0%25,60%25,100%25);fill-opacity:1;' d='M 17.125 8.363281 C 17.125 7.761719 17.628906 7.273438 18.25 7.273438 L 23.875 7.273438 C 24.496094 7.273438 25 7.761719 25 8.363281 L 25 10 C 25 10.300781 24.75 10.546875 24.441406 10.546875 L 17.691406 10.546875 C 17.375 10.546875 17.125 10.300781 17.125 10 Z M 17.125 8.363281 '/%3e%3c/g%3e%3c/svg%3e\");\n ${p => (\n p['data-count'] > 0 ? (\n `&:before {\n content: attr(data-count);\n background: #D93434;\n color: #fff;\n border-radius: 16px;\n position: absolute;\n top: 0;\n right: 0;\n font-weight: 700;\n transform: translate(50%, -50%);\n font-size: 12px;\n padding: 1.5px 3.675px;\n line-height: 1;\n }\n `\n ) : ''\n )}\n`;\n\nconst BoardItem = ({\n option: {\n count,\n form_id: formId,\n name,\n unread,\n status,\n created_at: createdAt,\n updated_at: updatedAt\n },\n isSelected,\n isMultiSelect,\n submissionsKeyword,\n showFormId,\n isDraggable\n}) => {\n const lastEditDate = (updatedAt ? updatedAt.split(' ')[0] : createdAt.split(' ')[0]).split('-');\n const updatedAtReadable = `${getShortMonthName(parseInt(lastEditDate[1], 10))} ${lastEditDate[2]}, ${lastEditDate[0]}`;\n\n return (\n \n {isMultiSelect && }\n
    \n \n \n \n
    \n
    \n

    \n {name}\n

    \n

    \n {`${showFormId ? `${formId}. ` : ''}${count} ${submissionsKeyword}. ${t('Last updated on')} ${updatedAtReadable}.`}\n

    \n
    \n {isDraggable && (\n
    \n \n
    \n )}\n {status !== 'ENABLED' && (\n
    \n {t('This board is disabled.')}\n
    \n )}\n
    \n );\n};\n\nconst boardItemProperties = shape({\n count: number,\n form_id: string,\n name: string,\n unread: number,\n status: string,\n created_at: string,\n updated_at: string\n});\n\nBoardItem.propTypes = {\n option: boardItemProperties.isRequired,\n isMultiSelect: bool,\n isSelected: bool.isRequired,\n submissionsKeyword: string,\n showFormId: bool,\n isDraggable: bool\n};\n\nBoardItem.defaultProps = {\n isMultiSelect: true,\n submissionsKeyword: 'submissions',\n showFormId: false,\n isDraggable: false\n};\n\nexport default BoardItem;\n","import FormItem from '../FormPicker/FormItem';\nimport PortalOption from '../PortalPicker/defaults/PortalOption';\nimport SheetItem from './items/Sheet';\nimport ReportsItem from './items/Reports';\nimport ApprovalItem from './items/Approval';\nimport SignItem from './items/Sign';\nimport OperationItem from './items/Operation';\nimport BoardItem from './items/Board';\n\nimport NoFormsFoundIcon from '../../assets/svg/resourcePickerIcons/noFormsFoundIcon.svg';\nimport NoAppsFoundIcon from '../../assets/svg/resourcePickerIcons/noAppsFoundIcon.svg';\nimport NoSheetsFoundIcon from '../../assets/svg/resourcePickerIcons/noTablesFoundIcon.svg';\nimport NoReportsFoundIcon from '../../assets/svg/resourcePickerIcons/noReportsFoundIcon.svg';\nimport NoApprovalsFoundIcon from '../../assets/svg/resourcePickerIcons/noApprovalsFoundIcon.svg';\nimport NoSignDocumentsFoundIcon from '../../assets/svg/resourcePickerIcons/noSignDocumentsFoundIcon.svg';\nimport NoBoardsFoundIcon from '../../assets/svg/resourcePickerIcons/noBoardsFoundIcon.svg';\n\nimport NoFormsIcon from '../../assets/svg/resourcePickerIcons/noFormsIcon.svg';\nimport NoAppsIcon from '../../assets/svg/resourcePickerIcons/noAppsIcon.svg';\nimport NoTablesIcon from '../../assets/svg/resourcePickerIcons/noTablesIcon.svg';\nimport NoReportsIcon from '../../assets/svg/resourcePickerIcons/noReportsIcon.svg';\nimport NoApprovalsIcon from '../../assets/svg/resourcePickerIcons/noApprovalsIcon.svg';\nimport NoSignDocumentsIcon from '../../assets/svg/resourcePickerIcons/noSignDocumentsIcon.svg';\nimport NoBoardsIcon from '../../assets/svg/resourcePickerIcons/noBoardsIcon.svg';\n\nexport const RESOURCE_TYPES = {\n FORM: 'form',\n APP: 'app',\n SHEET: 'sheet',\n REPORT: 'report',\n APPROVAL: 'approval',\n SIGN: 'sign',\n SIGN_INBOX: 'signInbox',\n OPERATION: 'operation',\n BOARD: 'board'\n};\n\nexport const resourceConfigs = {\n [RESOURCE_TYPES.FORM]: {\n ItemComponent: FormItem,\n searchPlaceholder: 'Search in your forms',\n emptyListPlaceholderTitle: 'YOU DON\\'T HAVE ANY FORMS YET.',\n emptyListPlaceholderIcon: NoFormsIcon,\n emptyListPlaceholderDescription: 'Your forms will appear here.',\n emptyListPlaceholderResourceType: 'form',\n headerTitle: 'Select a form',\n notFoundIcon: NoFormsFoundIcon,\n defaultFuseOptions: { threshold: 0.5 }\n },\n [RESOURCE_TYPES.APP]: {\n ItemComponent: PortalOption,\n searchPlaceholder: 'Search in your apps',\n emptyListPlaceholderTitle: 'YOU DON\\'T HAVE ANY APPS YET.',\n emptyListPlaceholderIcon: NoAppsIcon,\n emptyListPlaceholderDescription: 'Your apps will appear here.',\n emptyListPlaceholderResourceType: 'portal',\n headerTitle: 'Select an app',\n notFoundIcon: NoAppsFoundIcon\n },\n [RESOURCE_TYPES.SHEET]: {\n ItemComponent: SheetItem,\n searchPlaceholder: 'Search in your tables',\n emptyListPlaceholderTitle: 'YOU DON\\'T HAVE ANY TABLES YET.',\n emptyListPlaceholderIcon: NoTablesIcon,\n emptyListPlaceholderDescription: 'Your tables will appear here.',\n emptyListPlaceholderResourceType: 'table',\n headerTitle: 'Select a table',\n notFoundIcon: NoSheetsFoundIcon\n },\n [RESOURCE_TYPES.REPORT]: {\n ItemComponent: ReportsItem,\n searchPlaceholder: 'Search in your reports',\n emptyListPlaceholderTitle: 'YOU DON\\'T HAVE ANY REPORTS YET.',\n emptyListPlaceholderIcon: NoReportsIcon,\n emptyListPlaceholderDescription: 'Your reports will appear here.',\n emptyListPlaceholderResourceType: 'report',\n headerTitle: 'Select a report',\n notFoundIcon: NoReportsFoundIcon\n },\n [RESOURCE_TYPES.SIGN]: {\n ItemComponent: SignItem,\n searchPlaceholder: 'Search in sign documents',\n emptyListPlaceholderTitle: 'YOU DON\\'T HAVE ANY SIGN DOCUMENTS YET.',\n emptyListPlaceholderIcon: NoSignDocumentsIcon,\n emptyListPlaceholderDescription: 'Your sign documents will appear here.',\n emptyListPlaceholderResourceType: 'sign',\n headerTitle: 'Select a sign document',\n notFoundIcon: NoSignDocumentsFoundIcon\n },\n [RESOURCE_TYPES.SIGN_INBOX]: {\n ItemComponent: SignItem,\n searchPlaceholder: 'Search in sign documents',\n emptyListPlaceholderTitle: 'YOU DON\\'T HAVE ANY SIGN DOCUMENTS YET.',\n emptyListPlaceholderIcon: NoSignDocumentsIcon,\n emptyListPlaceholderDescription: 'Your sign documents will appear here.',\n emptyListPlaceholderResourceType: 'sign',\n headerTitle: 'Select a sign document',\n notFoundIcon: NoSignDocumentsFoundIcon\n },\n [RESOURCE_TYPES.APPROVAL]: {\n ItemComponent: ApprovalItem,\n searchPlaceholder: 'Search in your approvals',\n emptyListPlaceholderTitle: 'YOU DON\\'T HAVE ANY APPROVALS YET.',\n emptyListPlaceholderIcon: NoApprovalsIcon,\n emptyListPlaceholderDescription: 'Your approvals will appear here.',\n emptyListPlaceholderResourceType: 'approval',\n headerTitle: 'Select an approval',\n notFoundIcon: NoApprovalsFoundIcon\n },\n [RESOURCE_TYPES.OPERATION]: {\n ItemComponent: OperationItem,\n searchPlaceholder: 'Search in your operations',\n emptyListPlaceholderTitle: 'YOU DON\\'T HAVE ANY OPERATIONS YET.',\n emptyListPlaceholderIcon: NoFormsIcon,\n emptyListPlaceholderDescription: 'Your operations will appear here.',\n emptyListPlaceholderResourceType: 'form',\n headerTitle: 'Select an operation',\n notFoundIcon: NoFormsFoundIcon\n },\n [RESOURCE_TYPES.BOARD]: {\n ItemComponent: BoardItem,\n searchPlaceholder: 'Search in your boards',\n emptyListPlaceholderTitle: 'YOU DON\\'T HAVE ANY BOARDS YET.',\n emptyListPlaceholderIcon: NoBoardsIcon,\n emptyListPlaceholderDescription: 'Your boards will appear here.',\n emptyListPlaceholderResourceType: 'board',\n headerTitle: 'Select board',\n notFoundIcon: NoBoardsFoundIcon\n }\n};\n","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAppMyTeams = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 26 32\"\n}, props), /*#__PURE__*/React.createElement(\"g\", {\n id: \"Layer_2\",\n \"data-name\": \"Layer 2\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Layer_1-2\",\n \"data-name\": \"Layer 1\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 26,\n height: 32,\n rx: 4,\n style: {\n fill: \"#18235c\"\n }\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.7,21.35a3.65,3.65,0,1,1-3.65-3.65,3.64,3.64,0,0,1,3.65,3.65\",\n style: {\n fill: \"#fff\"\n }\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.49,15.3h3.14a2.08,2.08,0,0,0,2.07-2.09V10.09A2.08,2.08,0,0,0,19.61,8H16.49a2.08,2.08,0,0,0-2.09,2.09v3.14a2.08,2.08,0,0,0,2.09,2.07Z\",\n style: {\n fill: \"#09f\"\n }\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.21,17.7H7.09A2.08,2.08,0,0,0,5,19.79v3.14A2.08,2.08,0,0,0,7.09,25h3.14a2.08,2.08,0,0,0,2.07-2.09V19.79a2.08,2.08,0,0,0-2.09-2.09Z\",\n style: {\n fill: \"#ffb629\"\n }\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.26,8.24a.43.43,0,0,1,.77,0l3.21,6.42a.43.43,0,0,1-.38.63H5.44a.43.43,0,0,1-.39-.63Z\",\n style: {\n fill: \"#ff6100\"\n }\n}))));\nexport default SvgIconAppMyTeams;","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconAppMyWorkspace = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 26 32\"\n}, props), /*#__PURE__*/React.createElement(\"g\", {\n id: \"Layer_2\",\n \"data-name\": \"Layer 2\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Layer_1-2\",\n \"data-name\": \"Layer 1\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 26,\n height: 32,\n rx: 4,\n style: {\n fill: \"#18235c\"\n }\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.7,21.35a3.65,3.65,0,1,1-3.65-3.65,3.64,3.64,0,0,1,3.65,3.65\",\n style: {\n fill: \"#fff\"\n }\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.49,15.3h3.14a2.08,2.08,0,0,0,2.07-2.09V10.09A2.08,2.08,0,0,0,19.61,8H16.49a2.08,2.08,0,0,0-2.09,2.09v3.14a2.08,2.08,0,0,0,2.09,2.07Z\",\n style: {\n fill: \"#09f\"\n }\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.21,17.7H7.09A2.08,2.08,0,0,0,5,19.79v3.14A2.08,2.08,0,0,0,7.09,25h3.14a2.08,2.08,0,0,0,2.07-2.09V19.79a2.08,2.08,0,0,0-2.09-2.09Z\",\n style: {\n fill: \"#ffb629\"\n }\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.26,8.24a.43.43,0,0,1,.77,0l3.21,6.42a.43.43,0,0,1-.38.63H5.44a.43.43,0,0,1-.39-.63Z\",\n style: {\n fill: \"#ff6100\"\n }\n}))));\nexport default SvgIconAppMyWorkspace;","import {\n IconProductApprovalsColor, IconProductApprovalsMono, IconProductAppsColor, IconProductAppsMono, IconProductFormAnalyticsColor,\n IconProductFormAnalyticsMono, IconProductFormBuilderColor, IconProductFormBuilderMagnifyingGlassColor,\n IconProductFormBuilderMagnifyingGlassMono, IconProductFormBuilderMono, IconProductInboxColor, IconProductInboxMono,\n IconProductPdfEditorColor, IconProductPdfEditorMono, IconProductReportBuilderColor, IconProductReportBuilderFilled,\n IconProductSignColor,\n IconProductSignMono,\n IconProductTablesColor, IconProductTablesMono, IconProductTeamsColor, IconProductTeamsMono,\n IconProductPagesMono, IconProductPagesColor\n} from '@jotforminc/svg-icons';\n\nimport MyContactsDefault from '../../assets/svg/appIcons/contacts_default.svg';\nimport MyContactsSelected from '../../assets/svg/appIcons/contacts_selected.svg';\nimport BoardsDefault from '../../assets/svg/appIcons/boards_default.svg';\nimport BoardsSelected from '../../assets/svg/appIcons/boards_selected.svg';\nimport AgentsDefault from '../../assets/svg/iconAppAiAgentBuilder2.svg';\nimport AgentsSelected from '../../assets/svg/iconAppAiAgentBuilder1.svg';\nimport IconConversations1 from '../../assets/svg/iconConversationsv1.svg';\nimport IconConversations2 from '../../assets/svg/iconConversationsv2.svg';\n\nexport default {\n viewForm: {\n Default: IconProductFormBuilderMagnifyingGlassMono,\n Selected: IconProductFormBuilderMagnifyingGlassColor\n },\n formBuilder: {\n Default: IconProductFormBuilderMono,\n Selected: IconProductFormBuilderColor\n },\n pdfEditor: {\n Default: IconProductPdfEditorMono,\n Selected: IconProductPdfEditorColor\n },\n tables: {\n Default: IconProductTablesMono,\n Selected: IconProductTablesColor\n },\n inbox: {\n Default: IconProductInboxMono,\n Selected: IconProductInboxColor\n },\n approvals: {\n Default: IconProductApprovalsMono,\n Selected: IconProductApprovalsColor\n },\n reports: {\n Default: IconProductReportBuilderFilled,\n Selected: IconProductReportBuilderColor\n },\n sign: {\n Default: IconProductSignMono,\n Selected: IconProductSignColor\n },\n portal: {\n Default: IconProductAppsMono,\n Selected: IconProductAppsColor\n },\n formAnalytics: {\n Default: IconProductFormAnalyticsMono,\n Selected: IconProductFormAnalyticsColor\n },\n myTeams: {\n Default: IconProductTeamsMono,\n Selected: IconProductTeamsColor\n },\n myWorkspace: {\n Default: IconProductTeamsMono,\n Selected: IconProductTeamsColor\n },\n myContacts: {\n Default: MyContactsDefault,\n Selected: MyContactsSelected\n },\n boards: {\n Default: BoardsDefault,\n Selected: BoardsSelected\n },\n signInbox: {\n Default: IconProductInboxMono,\n Selected: IconProductInboxColor\n },\n pages: {\n Default: IconProductPagesMono,\n Selected: IconProductPagesColor\n },\n myAgents: {\n Default: AgentsDefault,\n Selected: AgentsSelected\n },\n conversations: {\n Default: IconConversations1,\n Selected: IconConversations2\n }\n};\n","import { RequestLayer, Interceptors } from '@jotforminc/request-layer';\n\nconst layer = new RequestLayer('/API', {\n interceptorConfig: {\n teamID: global.teamID,\n customResponseInterceptors: [Interceptors.requestManagerResponseNormalizer]\n }\n});\n\nexport const getUnpaidInvoices = () => layer.get('enterprise/invoice/getUnpaidInvoices');\n\nexport const fetchNavigationResources = (from, id, to) => layer.get(`navigate/${from}/${id}/${to}`);\n\nexport const fetchTeamProps = teamID => layer.get(`team/${teamID}/properties`, { headers: { 'jf-team-id': teamID } });\n","export const Texts = {\n SIGN_UP_NOW: 'Sign Up Now!',\n CREATE_MY_ACCOUNT: 'CREATE MY ACCOUNT',\n HELLO_TEXT: 'Hello,',\n LOG_OUT: 'Log out',\n MY_FORMS: 'My Forms',\n PROFILE: 'Profile'\n};\n\nexport const appList = [\n 'viewForm',\n 'formBuilder',\n 'pdfEditor',\n 'tables',\n 'inbox',\n 'formAnalytics',\n 'reports',\n 'sign',\n 'approvals',\n 'portal',\n 'boards',\n 'conversations',\n 'aiAgentBuilder',\n 'signInbox'\n];\n","import { isEnterprise } from '@jotforminc/enterprise-utils';\nimport { fetchNavigationResources } from './api';\nimport { appList } from '../constants';\n\nconst visibilityConditions = {\n pdfEditor: {\n key: 'pdf_designer_group',\n group: ['1', '2', '3', '5', '10'],\n adminCheck: true,\n keyExistCheck: true,\n ifKeyNotExist: true,\n replaceWith: 'oldPdfEditor'\n },\n sign: {\n key: '',\n group: [],\n adminCheck: false,\n visibilityChecker: (user, sourceApp) => {\n return user.allowSign && ['sign', 'inbox', 'portal', 'workflow'].includes(sourceApp);\n }\n },\n signInbox: {\n key: '',\n group: [],\n adminCheck: false,\n visibilityChecker: (user, sourceApp) => {\n return user.allowSign && ['portal'].includes(sourceApp);\n }\n },\n portal: {\n key: '',\n group: [],\n adminCheck: false, // this is handled at backend in user.allowMyApps prop\n visibilityChecker: user => user.allowMyApps\n },\n boards: {\n key: '',\n group: [],\n adminCheck: false,\n visibilityChecker: user => user.allowBoards\n },\n aiAgentBuilder: {\n key: '',\n group: [],\n adminCheck: false,\n visibilityChecker: (user, form) => form?.isAIAgentCreated && !(user?.formCopilotNewSignUp || user?.formCopilotExistingUsers)\n },\n conversations: {\n key: '',\n group: [],\n adminCheck: false,\n visibilityChecker: () => false\n }\n};\n\nconst visibilityCheck = (user, app, sourceAppName, form) => {\n const appDetail = visibilityConditions[app];\n if (appDetail) {\n if (appDetail.adminCheck && user.account_type && user.account_type.name === 'ADMIN' && !isEnterprise()) {\n return true;\n }\n if (appDetail.keyExistCheck && !user[appDetail.key]) {\n return appDetail.ifKeyNotExist;\n }\n if (appDetail.group.indexOf(user[appDetail.key]) > -1) {\n return true;\n }\n\n if (appDetail.visibilityChecker && (typeof appDetail.visibilityChecker) === 'function') {\n if (sourceAppName === 'formBuilder' && app === 'aiAgentBuilder') {\n return appDetail.visibilityChecker(user, form);\n }\n return appDetail.visibilityChecker(user, sourceAppName);\n }\n return false;\n }\n return true;\n};\n\nconst getAppList = (user, list, sourceAppName, form) => list.reduce((newApps, app) => {\n if (user.allowedProductsInTeam && !user.allowedProductsInTeam.includes(app)) {\n return newApps;\n }\n\n if (!visibilityCheck(user, app, sourceAppName, form)) {\n if (visibilityConditions[app] && visibilityConditions[app].replaceWith) {\n newApps.push(visibilityConditions[app].replaceWith);\n }\n } else if (sourceAppName === 'portal' && app === 'tables') {\n newApps.push('appTables');\n } else {\n newApps.push(app);\n }\n\n if (sourceAppName === 'boards') { // TODO: review visibleList config for boards again\n return ['boards'];\n }\n\n if (sourceAppName === 'conversations') {\n return ['conversations', 'aiAgentBuilder'];\n }\n\n return newApps;\n}, []);\n\nexport const getUserAppList = (user, sourceAppName = '', form) => {\n if (window.JOTFORM_ENV === 'ENTERPRISE') {\n if (user && user.isDataOnlyUser === '1') {\n return [];\n }\n const enterpriseConf = window.enterpriseConfigs || window.CUSTOMIZED_CONFIGS;\n const visibleApps = enterpriseConf && (enterpriseConf.visibleNavigationApps || enterpriseConf.VISIBLE_NAVIGATION_APPS);\n let newAppList = appList;\n if (visibleApps) {\n newAppList = appList.filter(app => visibleApps.indexOf(app) > -1);\n }\n return getAppList(user, newAppList, sourceAppName, form);\n }\n\n return getAppList(user, appList, sourceAppName, form);\n};\nexport const getToggleContext = context => `is${context.charAt(0).toUpperCase()}${context.slice(1)}Opened`;\nexport const getToggleHandler = context => `${context}ToggleHandler`;\nexport const getToggleDisabled = context => `${context}ToggleDisabled`;\nexport const getNavigationResources = async (from, id, to) => {\n const { type, result } = await fetchNavigationResources(from, id, to);\n return { type, result: Object.values(result) };\n};\n\nexport const getDefaultLogoSrc = () => {\n const hostname = global?.location?.hostname || '';\n if (hostname === 'www.jform.co.kr') return 'https://cdn.jotfor.ms/assets/img/logo2021/ko-KR/jform-logo.svg';\n return 'https://cdn.jotfor.ms/assets/img/logo2021/jotform-logo.svg';\n};\n\nexport const isPlural = c => c > 1 || c === 0;\n\nexport const isShowTeamBadge = (user, isTeamMember, teamBadgeID) => {\n const canShowTeamBadge = !isEnterprise() ? isTeamMember : (user && user.userType !== 'formuser' && user.account_type?.name !== 'GUEST');\n return canShowTeamBadge && !!teamBadgeID;\n};\n\nexport const hasTeamAvatarInfo = team => {\n const {\n name, teamAvatarURL, teamAvatarIcon, teamAvatarEmojiId, teamAvatarIconSvgRef\n } = team || {};\n\n return name && !!(teamAvatarURL || teamAvatarIcon || teamAvatarEmojiId || teamAvatarIconSvgRef);\n};\n","import React from 'react';\nimport {\n arrayOf, node, oneOfType, string, bool\n} from 'prop-types';\nimport classNames from 'classnames';\nimport { t } from '@jotforminc/translation';\nimport '@jotforminc/jotform.css';\n\nfunction EmptyListBase({\n icon,\n title,\n description,\n isTitleUppercase\n}) {\n return (\n
    \n {icon}\n
    {t(title)}
    \n
    {t(description)}
    \n
    \n );\n}\n\nEmptyListBase.propTypes = {\n icon: oneOfType([arrayOf(node), node]),\n title: string,\n description: string,\n isTitleUppercase: bool\n};\n\nEmptyListBase.defaultProps = {\n icon: null,\n title: null,\n description: null,\n isTitleUppercase: true\n};\n\nexport default EmptyListBase;\n","import React from 'react';\nimport {\n arrayOf, node, oneOfType, string, bool\n} from 'prop-types';\n\nimport EmptyListBase from './EmptyListBase';\n\nimport NoFormsIcon from '../assets/svg/noFormsIcon.svg';\nimport NoAppsIcon from '../assets/svg/noAppsIcon.svg';\nimport NoTablesIcon from '../assets/svg/noTablesIcon.svg';\nimport NoReportsIcon from '../assets/svg/noReportsIcon.svg';\nimport NoApprovalsIcon from '../assets/svg/noApprovalsIcon.svg';\nimport NoSignDocumentsIcon from '../assets/svg/noSignDocumentsIcon.svg';\nimport NoTeamFormsIcon from '../assets/svg/noTeamFormsIcon.svg';\nimport NoDocumentIcon from '../assets/svg/noDocumentIcon.svg';\n\nexport const resourceData = {\n form: {\n title: 'You don\\'t have any forms yet.',\n description: 'Your forms will appear here.',\n icon: \n },\n portal: {\n title: 'You don\\'t have any apps yet.',\n description: '',\n icon: \n },\n table: {\n title: 'You don\\'t have any tables yet.',\n description: '',\n icon: \n },\n report: {\n title: 'You don\\'t have any reports yet.',\n description: '',\n icon: \n },\n approval: {\n title: 'You don\\'t have any approvals yet.',\n description: '',\n icon: \n },\n sign: {\n title: 'You don\\'t have any signs in the app yet.',\n description: '',\n icon: \n },\n pdf: {\n title: 'You don\\'t have any documents yet.',\n description: 'Your documents will appear here.',\n icon: \n },\n teamform: {\n title: 'This team doesn\\'t have any forms yet',\n description: 'Team forms will appear here.',\n icon: \n }\n};\n\nfunction EmptyList({\n icon,\n title,\n description,\n resourceType,\n isTitleUppercase\n}) {\n const defaults = (resourceType && resourceData[resourceType]) ? resourceData[resourceType] : resourceData.form;\n const uppercase = isTitleUppercase !== null ? isTitleUppercase : true;\n\n return (\n \n );\n}\n\nEmptyList.propTypes = {\n icon: oneOfType([arrayOf(node), node]),\n title: string,\n description: string,\n resourceType: string,\n isTitleUppercase: bool\n};\n\nEmptyList.defaultProps = {\n icon: null,\n title: null,\n description: null,\n resourceType: 'form',\n isTitleUppercase: null\n};\n\nexport default EmptyList;\n","import React from 'react';\nimport {\n arrayOf, node, oneOfType, string, bool\n} from 'prop-types';\nimport { IconMagnifyingGlass } from '@jotforminc/svg-icons';\n\nimport EmptyListBase from './EmptyListBase';\n\nimport NoFormsFoundIcon from '../assets/svg/noFormsFoundIcon.svg';\nimport NoAppsFoundIcon from '../assets/svg/noAppsFoundIcon.svg';\nimport NoTablessFoundIcon from '../assets/svg/noTablesFoundIcon.svg';\nimport NoReportsFoundIcon from '../assets/svg/noReportsFoundIcon.svg';\nimport NoApprovalsFoundIcon from '../assets/svg/noApprovalsFoundIcon.svg';\nimport NoSignDocumentsFoundIcon from '../assets/svg/noSignDocumentsFoundIcon.svg';\n\nexport const resourceData = {\n item: {\n title: 'No results found.',\n description: 'We couldn\\'t find any matching items.',\n icon: (\n
    \n \n
    \n )\n },\n form: {\n title: 'No results found.',\n description: 'We couldn\\'t find any matching items.',\n icon: \n },\n portal: {\n title: 'No results found.',\n description: 'We couldn\\'t find any matching items.',\n icon: \n },\n table: {\n title: 'No results found.',\n description: 'We couldn\\'t find any matching items.',\n icon: \n },\n report: {\n title: 'No results found.',\n description: 'We couldn\\'t find any matching items.',\n icon: \n },\n approval: {\n title: 'No results found.',\n description: 'We couldn\\'t find any matching items.',\n icon: \n },\n sign: {\n title: 'No results found.',\n description: 'We couldn\\'t find any matching items.',\n icon: \n }\n};\n\nfunction NotFoundList({\n icon,\n title,\n description,\n resourceType,\n isTitleUppercase\n}) {\n const defaults = (resourceType && resourceData[resourceType]) ? resourceData[resourceType] : resourceData.form;\n const uppercase = isTitleUppercase !== null ? isTitleUppercase : false;\n\n return (\n \n );\n}\n\nNotFoundList.propTypes = {\n icon: oneOfType([arrayOf(node), node]),\n title: string,\n description: string,\n resourceType: string,\n isTitleUppercase: bool\n};\n\nNotFoundList.defaultProps = {\n icon: null,\n title: null,\n description: null,\n resourceType: 'form',\n isTitleUppercase: null\n};\n\nexport default NotFoundList;\n","import { rgba } from 'polished';\n\nconst thatLaci = '#2c3345';\nconst thatGreen = '#54b45c';\nconst thatGray = '#d8dae9';\n\nexport const theme = {\n fontSize: '16px',\n\n itemBg: '#f7f7f8',\n itemBgFocus: rgba(thatGray, 0.3),\n itemBgSelected: rgba(thatGreen, 0.15),\n itemBorder: thatGray,\n itemBorderSelected: thatGreen,\n itemBorderHover: thatGreen,\n lineHeight: `${21 / 16}em`,\n itemPadding: `${15 / 16}em`,\n\n // title\n titleColor: thatLaci,\n titleFontSize: `${18 / 16}em`,\n titleFontWeight: '700',\n\n // details\n detailsColor: '#8d8eaa',\n detailsFontSize: `${14 / 16}em`,\n\n // checkbox\n chBorder: thatGray,\n chSelected: thatGreen,\n // eslint-disable-next-line max-len\n chIcon: \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='10' viewBox='0 0 11 10'%3E%3Cpath fill='none' fill-rule='evenodd' stroke='%23FFF' stroke-linecap='round' stroke-width='2' d='M4 8.025L6.994 10.951 12.905 4.5' transform='translate%28-3 -3%29'/%3E%3C/svg%3E%0A\"\n};\n","/* eslint-disable max-len */\nimport Styled from 'styled-components';\n\nexport const ScControlBar = Styled.div`\n margin-bottom: 1em;\n margin-top: 28px;\n\n &, .cb-actions, .cb-body {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .cb-toggle {\n padding: 0 .5em 0 .75em;\n display: flex;\n align-items: center;\n cursor: pointer;\n user-select: none;\n }\n .cb-actions, .cb-body { flex: 1 1 auto; }\n .cb-actions { padding-right: .5em; }\n .cb-searchCont:only-child { flex: 0 0 100%; }\n .cb-searchCont { flex: 0 0 44%; }\n .cb-searchCont input[type=\"search\"] {\n width: 100%;\n display: block;\n padding: .5em .75em .5em 1.75rem;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='%238D8EAA' fill-rule='evenodd' stroke='%238D8EAA' d='M1.875 6.688c0-2.654 2.159-4.813 4.813-4.813 2.652 0 4.812 2.159 4.812 4.813 0 2.652-2.16 4.812-4.813 4.812-2.653 0-4.812-2.16-4.812-4.813m12.996 7.566l-3.869-3.87c.853-.995 1.373-2.285 1.373-3.695C12.375 3.551 9.823 1 6.687 1 3.553 1 1 3.552 1 6.688c0 3.135 2.552 5.687 5.688 5.687 1.41 0 2.7-.52 3.696-1.373l3.869 3.87c.08.079.189.128.31.128.241 0 .437-.196.437-.438 0-.12-.049-.23-.129-.31'/%3E%3C/svg%3E%0A\");\n background-repeat: no-repeat;\n background-position: 0.5rem center;\n font-size: 14px;\n font-weight: 500;\n border: 1px solid #bcbcc8;\n border-radius: 3px;\n height: 47.25px;\n }\n\n .cb-status {\n display: flex;\n align-items: center;\n border: 1px solid #0078E8;\n color: #0078E8;\n border-radius: 15px;\n user-select: none;\n\n span { padding-left: .5em; font-size: .875em; }\n button { background: transparent; border: 0; padding: 4px; box-shadow: none; cursor: pointer; color: #0078E8 }\n svg { width: 20px; height: 20px; display: block; }\n }\n\n @media screen and (max-width: 768px) {\n flex-wrap: wrap;\n\n .cb-searchCont { flex: 0 0 100%; order: -1; margin-bottom: .75em; }\n .cb-searchCont:only-child { margin-bottom: 0; }\n .cb-actions { padding-right: 0; }\n }\n`;\n","import React from 'react';\nimport Styled from 'styled-components';\nimport { bool, func, number } from 'prop-types';\n\nconst ScCh = Styled.div`\n position: relative;\n flex-shrink: 0;\n width: 18px;\n height: 18px;\n margin-right: 8px;\n border-radius: 4px;\n border: 1px solid ${p => p.theme.chBorder};\n background-color: #fff;\n\n &:after {\n content: \"\";\n display: block;\n background: url(\"${p => p.theme.chIcon}\") no-repeat center;\n }\n\n input[type=checkbox], &:after {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0; left: 0;\n margin: 0;\n padding: 0;\n }\n\n input[type=checkbox] { opacity: 0; }\n\n [aria-selected=\"true\"] & {\n border: 0;\n background-color: ${p => p.theme.chSelected};\n\n &:after { transform: scale(1) rotate(0); }\n }\n\n [aria-selected=\"partial\"] & {\n border: 0;\n background-color: ${p => p.theme.chSelected};\n\n &:after { background: url(\"${p => p.theme.chPartialIcon}\") no-repeat center; transform: scale(1) rotate(0); }\n }\n`;\n\nexport const CheckBox = ({ isSelected, onChange, id }) => (\n \n \n \n);\n\nCheckBox.propTypes = {\n isSelected: bool,\n id: number,\n onChange: func\n};\n\nCheckBox.defaultProps = {\n isSelected: false,\n id: 5,\n onChange: e => e.preventDefault()\n};\n","import React, { useState } from 'react';\nimport { string, func, bool } from 'prop-types';\nimport { Hooks } from '@jotforminc/uikit';\nimport classNames from 'classnames';\n\nfunction SearchInput({\n placeholder,\n value: defaultValue,\n onChange,\n autoFocus,\n className,\n isNewBranding\n}) {\n const [value, setValue] = useState(defaultValue);\n\n const handleInputChange = e => setValue(e.target.value);\n\n Hooks.useEffectIgnoreFirst(() => onChange(value), [value]);\n\n return (\n \n );\n}\n\nSearchInput.propTypes = {\n placeholder: string,\n value: string,\n onChange: func,\n autoFocus: bool,\n className: string,\n isNewBranding: bool\n};\n\nSearchInput.defaultProps = {\n placeholder: 'Search',\n value: '',\n onChange: f => f,\n autoFocus: false,\n className: null,\n isNewBranding: false\n};\n\nexport default SearchInput;\n","import Fuse from 'fuse.js';\n\nexport const debounce = (fn, timeout = 300) => {\n let timer;\n return (...args) => {\n clearTimeout(timer);\n timer = setTimeout(() => { fn.apply(this, args); }, timeout);\n };\n};\n\nconst baseFuseOptions = {};\nconst baseKeys = ['name', 'email'];\nexport const fuseSearch = (list, searchTerm, keys = baseKeys, fuseOptions = baseFuseOptions) => {\n const fuse = new Fuse(list, {\n shouldSort: true,\n threshold: 0.4,\n location: 0,\n distance: 100,\n maxPatternLength: 32,\n minMatchCharLength: 1,\n ...fuseOptions,\n keys\n });\n\n return !searchTerm ? list : fuse.search(searchTerm).map(fuseResult => ({ ...fuseResult.item }));\n};\n","import React from 'react';\nimport { Dropdown as UIKitDropdown } from '@jotforminc/uikit';\nimport Styled from 'styled-components';\n\nconst DropdownWr = Styled.div`\n font-size: 1em;\n color: #2c3345;\n line-height: 1;\n display: flex;\n\n button {\n font-family: ${p => p.theme.fontFamily};\n border: 1px solid #d8dae9;\n border-radius: ${p => p.theme.buttonRadius};\n background: transparent;\n padding: .75em 1em;\n color: currentColor;\n ${p => p.theme.defaultTransition}\n\n &:focus { border-color: #81829e; outline: 0; }\n }\n\n ul {\n background: #fff;\n border: 1px solid #d8dae9;\n border-radius: ${p => p.theme.buttonRadius};\n box-shadow: 0 0 9px 0 rgba(0, 0, 0, 0.16);\n padding: .5em 0;\n }\n\n li { cursor: pointer; ${p => p.theme.defaultTransition} }\n li > * { padding: .5em 1em; }\n li + li { border-top: 1px solid #eaebf2; }\n\n li[data-selected=\"true\"],\n li:hover { background-color: #f1f1f1; }\n`;\n\nexport const Dropdown = props => {\n return ;\n};\n","import { t } from '@jotforminc/translation';\nimport React, { useState } from 'react';\nimport { func, string } from 'prop-types';\nimport { classNames } from '@jotforminc/utils';\nimport { IconCaretDownBars, IconCheck } from '@jotforminc/svg-icons';\nimport { Dropdown } from './Dropdown';\n\nconst SortMenu = ({ sortOnClient, selectedFolder }) => {\n const [isOptionsVisible, setOptionsVisible] = useState(false);\n const [order, setOrder] = useState(null);\n\n const getCookie = name => {\n return decodeURIComponent(document.cookie.replace(\n // eslint-disable-next-line no-useless-escape\n new RegExp(`(?:(?:^|.*;)\\\\s*${encodeURIComponent(name).replace(/[\\-\\.\\+\\*]/g, '\\\\$&')}\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$`), '$1'\n )) || 'created_at';\n };\n\n const getCommonSortingOptions = () => ([\n { text: 'Title [a-z]', value: 'title_az' },\n { text: 'Title [z-a]', value: 'title_za' },\n { text: 'Creation Date', value: 'created_at' },\n { text: 'Last Edit', value: 'updated_at' },\n { text: 'Submission Count', value: 'count' },\n { text: 'Unread', value: 'new' },\n { text: 'Last Submission', value: 'last_submission' }\n ]);\n\n const sortingOptionList = getCommonSortingOptions();\n const defaultOption = order || (sortingOptionList || []).find(({ value }) => getCookie(`${selectedFolder}Sorting`) === value);\n const defaultOptionValue = defaultOption?.value || order;\n\n const handleOptionsVisible = tmpIsOptionsVisible => {\n if (isOptionsVisible === tmpIsOptionsVisible) {\n return;\n }\n setOptionsVisible(tmpIsOptionsVisible);\n };\n\n const renderSortOption = val => {\n const { option: { text }, isSelected } = val;\n return (\n <>\n {text}\n {isSelected && }\n \n );\n };\n\n const handleSortingSelect = value => {\n setOrder(value);\n sortOnClient(value);\n };\n\n return (\n
    \n \n ({ ...opt, text: t(opt.text) }))}\n onOptionSelect={({ value, key }) => handleSortingSelect(value, key)}\n OptionRenderer={renderSortOption}\n popoverProps={{\n className: 'listings-popover-modal',\n popoverOptions: {\n placement: 'bottom-end'\n }\n }}\n onOptionsVisibilityChanged={handleOptionsVisible}\n placeholder={t('Please select')}\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n OptionContainerRenderer={props =>
  • }\n optionsAutoFocus={true}\n />\n
  • \n );\n};\n\nSortMenu.propTypes = {\n sortOnClient: func,\n selectedFolder: string\n};\n\nSortMenu.defaultProps = {\n sortOnClient: f => f,\n selectedFolder: 'allForms'\n};\n\nexport default SortMenu;\n","import { t } from '@jotforminc/translation';\nimport React, { useState } from 'react';\nimport { func } from 'prop-types';\nimport { classNames } from '@jotforminc/utils';\nimport {\n IconFormFilled,\n IconProductPaymentFormFilled,\n IconAngleDown,\n IconCheck\n} from '@jotforminc/svg-icons';\nimport { Dropdown } from './Dropdown';\n\nconst FilterForm = ({ filterOnClient }) => {\n const [isOptionsVisible, setOptionsVisible] = useState(false);\n const [filterValue, setFilterValue] = useState('all');\n\n const getCommonFilterValues = () => ([\n {\n text: 'All Forms',\n value: 'all',\n isDefault: true,\n Icon: IconFormFilled\n },\n {\n text: 'Payment Forms',\n value: 'payment',\n Icon: IconProductPaymentFormFilled\n }\n ]);\n\n const handleOptionsVisible = tmpIsOptionsVisible => {\n if (isOptionsVisible === tmpIsOptionsVisible) {\n return;\n }\n setOptionsVisible(tmpIsOptionsVisible);\n };\n\n const renderFilterOption = val => {\n const { option: { text, Icon }, isSelected } = val;\n return (\n <>\n \n {text}\n {isSelected && }\n \n );\n };\n\n const handleFilter = value => {\n setFilterValue(value);\n filterOnClient(value);\n };\n\n return (\n
    \n \n ({ ...opt, text: t(opt.text) }))}\n onOptionSelect={({ value, key }) => handleFilter(value, key)}\n OptionRenderer={renderFilterOption}\n popoverProps={{\n className: 'listings-popover-modal',\n popoverOptions: {\n placement: 'bottom-end'\n }\n }}\n onOptionsVisibilityChanged={handleOptionsVisible}\n placeholder={t('Please select')}\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n OptionContainerRenderer={props =>
  • }\n optionsAutoFocus={true}\n />\n \n
  • \n );\n};\n\nFilterForm.propTypes = {\n filterOnClient: func\n};\n\nFilterForm.defaultProps = {\n filterOnClient: f => f\n};\n\nexport default FilterForm;\n","import React from 'react';\nimport {\n bool, func, number, string\n} from 'prop-types';\nimport { useFeatures } from '@paralleldrive/react-feature-toggles';\n\nimport { Feature, FeatureToggles } from '@jotforminc/feature-toggle';\nimport { createObjectWithKeys } from '@jotforminc/utils';\nimport { Button } from '@jotforminc/common-button';\nimport { IconXmarkSm } from '@jotforminc/svg-icons';\nimport { propTypes } from '@jotforminc/constants';\nimport { translationRenderer, t } from '@jotforminc/translation';\n\nimport { ScControlBar } from './scControlBar';\nimport { CheckBox } from './CheckBox';\nimport SearchInput from './SearchInput';\nimport { debounce } from '../utils';\nimport SortMenu from './SortMenu';\nimport FilterForm from './FilterForm';\n\nfunction ControlBar({\n isVisible,\n isAllSelected,\n onSelectAll,\n selectedItemCount,\n clearSelection,\n searchPlaceholder,\n searchTerm,\n onSearchTermChange,\n bulkActions,\n isMultiSelect,\n otherItems,\n showSelectAll,\n showSelectedItemCount,\n autoFocus,\n isNewBranding,\n sortOnClient,\n filterOnClient\n}) {\n if (!isVisible) return null;\n const checkboxID = Math.random(); // Better way?\n let selectAllStatus = 'false';\n\n // const selectAllStatus = isAllSelected ? 'true' : (selectedItemCount > 0 ? 'partial' : 'false'); nested ternary bad\n switch (true) {\n case isAllSelected:\n selectAllStatus = 'true';\n break;\n case selectedItemCount > 0:\n selectAllStatus = 'partial';\n break;\n default:\n break;\n }\n\n const shouldShowSelectAll = showSelectAll && isMultiSelect;\n const shouldShowCount = selectedItemCount && showSelectedItemCount;\n const shouldShowOthers = otherItems && otherItems?.length > 0;\n const shouldShowBody = shouldShowSelectAll || shouldShowCount || shouldShowOthers;\n\n return (\n \n \n \n {shouldShowSelectAll && (\n \n \n {t('Select all')}\n \n )}\n {shouldShowCount ? (\n
    \n
    \n \n {translationRenderer('[1[{selectedItemCount}]] selected')({\n renderer1: () => <>{selectedItemCount}\n })}\n \n \n
    \n {bulkActions}
    } />\n \n ) : null}\n {shouldShowOthers ? (\n
    \n {otherItems.map((e, index) => (e.key ? e : ({ ...e, key: index })))}\n
    \n ) : null}\n \n ) : null}\n />\n <>\n \n \n \n )}\n />\n \n \n \n )}\n />\n \n \n \n )}\n />\n \n
    \n \n );\n}\n\nControlBar.propTypes = {\n isVisible: bool,\n isAllSelected: bool,\n isMultiSelect: bool,\n onSelectAll: func,\n selectedItemCount: number,\n clearSelection: func,\n searchPlaceholder: string,\n searchTerm: string,\n onSearchTermChange: func,\n bulkActions: propTypes.renderable,\n otherItems: propTypes.renderable,\n showSelectAll: bool,\n showSelectedItemCount: bool,\n autoFocus: bool,\n isNewBranding: bool,\n sortOnClient: func,\n filterOnClient: func\n};\n\nControlBar.defaultProps = {\n isVisible: true,\n isAllSelected: false,\n isMultiSelect: true,\n onSelectAll: f => f,\n selectedItemCount: 0,\n clearSelection: f => f,\n searchPlaceholder: '',\n searchTerm: '',\n onSearchTermChange: f => f,\n bulkActions: null,\n otherItems: [],\n showSelectAll: true,\n showSelectedItemCount: true,\n autoFocus: false,\n isNewBranding: false,\n sortOnClient: f => f,\n filterOnClient: f => f\n};\n\nexport default ControlBar;\n","import React from 'react';\nimport './FormLoadingSkeleton.scss';\n\nexport const FormLoadingSkeleton = () => {\n return (\n
    \n \n
    \n );\n};\n","import { Hooks } from '@jotforminc/uikit';\nimport { useCallback, useEffect, useState } from 'react';\n\nconst INFINITE_LOADING_FETCH_LIMIT = 50;\n\nexport const useInfiniteFormLoading = ({\n fetchInfiniteFormsCallback, searchTerm, setItems\n}) => {\n const [offset, setOffset] = useState(-1);\n const [hasMore, setHasMore] = useState(true);\n const [loading, setLoading] = useState(true);\n\n const handleInfiniteLoading = async () => {\n if (!hasMore) {\n return;\n }\n\n try {\n setLoading(true);\n const res = await fetchInfiniteFormsCallback({ offset: offset < 0 ? 0 : offset * 50, limit: INFINITE_LOADING_FETCH_LIMIT, filter: { fullText: searchTerm } });\n setItems(prev => ([...new Set([...prev, ...res])]));\n setLoading(false);\n if (res?.length < INFINITE_LOADING_FETCH_LIMIT) {\n setHasMore(false);\n }\n } catch {\n // error handling\n }\n };\n\n const onIntersection = useCallback(([{ isIntersecting }]) => {\n if (isIntersecting) {\n setOffset(prev => prev + 1);\n }\n }, [setOffset]);\n\n useEffect(() => {\n const intersectionElement = document.querySelector('.infinite-loading-intersection');\n let observer;\n\n if (global.IntersectionObserver) {\n observer = new global.IntersectionObserver(onIntersection, { threshold: 0.0 });\n\n if (intersectionElement) observer.observe(intersectionElement);\n }\n\n return () => {\n if (observer) {\n observer.disconnect();\n }\n };\n }, []);\n\n Hooks.useEffectIgnoreFirst(() => {\n handleInfiniteLoading();\n }, [offset]);\n\n return {\n loading, hasMore, setHasMore, setOffset\n };\n};\n","import React, {\n useEffect, useState, useRef, useMemo, forwardRef, useImperativeHandle\n} from 'react';\nimport {\n arrayOf, bool, func, objectOf, oneOfType, shape, string\n} from 'prop-types';\nimport Styled, { ThemeProvider } from 'styled-components';\nimport { SortableContainer, SortableElement } from 'react-sortable-hoc';\nimport isEqual from 'lodash/isEqual';\nimport orderByFn from 'lodash/orderBy';\nimport { propTypes } from '@jotforminc/constants';\n\nimport { SelectionGroup as UIKitSelectionGroup, Hooks } from '@jotforminc/uikit';\nimport { EmptyList, NotFoundList } from '@jotforminc/empty-list';\nimport { Feature, FeatureToggles } from '@jotforminc/feature-toggle';\nimport { arrayMove } from '@jotforminc/utils';\nimport { theme as defaultTheme } from './helpers/defaultTheme';\n\nimport ControlBar from './ControlBar';\nimport { fuseSearch } from './utils'; // Don't import this from utils/data it increases dependency size\nimport { FormLoadingSkeleton } from './FormLoadingSkeleton';\nimport { useInfiniteFormLoading } from './hooks';\n\nconst SelectionGroup = Styled(forwardRef((props, ref) => ))`\n .itemCheckbox { display: ${p => (p.isMultiSelect ? 'block' : 'none')} }\n`;\n\nconst DefaultDataProvider = ({ allItems, searchKeys, fuseOptions }) => ({\n onSearch: async searchTerm => fuseSearch(allItems, searchTerm, searchKeys, fuseOptions)\n});\n\nconst SmartList = forwardRef(({\n features,\n isMultiSelect,\n items: allItems,\n defaultValue,\n onSelectionChange,\n DataProvider,\n showEmptyListPlaceholder,\n emptyListPlaceholder: EmptyListPlaceholder,\n showNotFoundListPlaceholder,\n notFoundListPlaceholder: NotFoundListPlaceholder,\n ListWrapper,\n ItemComponent,\n ItemContainer,\n ContainerRenderer,\n searchKeys,\n searchPlaceholder,\n bulkActions,\n t,\n formID,\n theme,\n isSortable,\n SortableProps,\n isItemEditable,\n otherControlBarItems,\n listTitle,\n listDescription,\n showFavorite,\n showSelectAll,\n showSelectedItemCount,\n showFormId,\n isNewBranding,\n submissionsKeyword,\n fuseOptions,\n customItemsList,\n disabledHoverText,\n disableDefaultDocument,\n ControlBarRenderer,\n preservedItems,\n productType,\n showPreview,\n isFormPickerInfiniteLoadingEnabled,\n fetchInfiniteFormsCallback,\n onClearList\n}, ref) => {\n const selectionGroupRef = useRef();\n\n const [searchTerm, setSearchTerm] = useState('');\n const [items, setItems] = useState(allItems);\n const preparedDefultValue = Array.isArray(defaultValue) ? defaultValue : [defaultValue];\n const [selectedItems, setSelectedItems] = useState(preparedDefultValue);\n const hasAnyItem = isFormPickerInfiniteLoadingEnabled ? items.length > 0 : allItems.length > 0;\n const hasItemsToShow = items.length > 0;\n const selectedItemCount = Array.isArray(selectedItems) ? selectedItems.filter(Boolean).length : 0;\n const isAllSelected = hasAnyItem && (selectedItemCount === allItems.length);\n const [filterCriteria, setFilterCriteria] = useState(null);\n const [filterItems, setFilterItem] = useState([]);\n\n const {\n loading, hasMore, setHasMore, setOffset\n } = isFormPickerInfiniteLoadingEnabled ? useInfiniteFormLoading({\n fetchInfiniteFormsCallback, searchTerm, setItems\n }) : {\n loading: false, hasMore: false, setHasMore: f => f, setOffset: f => f\n };\n\n Hooks.useEffectIgnoreFirst(() => {\n if (!isFormPickerInfiniteLoadingEnabled) setItems(allItems);\n }, [allItems]);\n\n const { onSearch } = DataProvider({ allItems, searchKeys, fuseOptions });\n const { onSearch: onSearchWithFilterCriteria } = DataProvider({ allItems: filterItems, searchKeys, fuseOptions });\n\n Hooks.useEffectIgnoreFirst(() => {\n if (filterCriteria) {\n onSearchWithFilterCriteria(searchTerm).then(setItems);\n } else {\n onSearch(searchTerm).then(setItems);\n }\n }, [searchTerm, filterCriteria]);\n\n const options = useMemo(() => (items?.length > 0 ? items.map(({ id, ...props }) => ({ id, value: id, ...props })) : []), [items]);\n const preservedItemOptions = useMemo(() => options?.map(opt => opt.value)?.filter(id => preservedItems.includes(id)) || [], [options, preservedItems]);\n // useMemo(() => props => , [ItemComponent, isMultiSelect]);\n const ItemComponentWrapped = useMemo(() => props => (\n \n ), [ItemComponent, isMultiSelect, isItemEditable, isSortable, showFavorite, showFormId, submissionsKeyword, isNewBranding, productType]);\n const clearSelection = () => {\n setSelectedItems(preservedItems);\n const { setSelectedOptionList } = selectionGroupRef.current || {};\n // eslint-disable-next-line no-unused-expressions\n setSelectedOptionList?.(preservedItemOptions);\n };\n\n const handleAllSelectionChanged = () => {\n if (!isAllSelected) {\n const optionValueList = options.map(opt => opt.value);\n setSelectedItems(optionValueList);\n // eslint-disable-next-line no-irregular-whitespace\n const { setSelectedOptionList } = isSortable ? (selectionGroupRef.current.refs?.wrappedInstance || {}) : selectionGroupRef.current;\n // eslint-disable-next-line no-unused-expressions\n setSelectedOptionList?.(optionValueList);\n } else {\n clearSelection();\n }\n };\n\n const onItemSelection = itemList => {\n setSelectedItems(itemList);\n };\n\n Hooks.useEffectIgnoreFirst(() => {\n if (!isEqual(selectedItems, preparedDefultValue) && selectedItems) {\n onSelectionChange(selectedItems);\n } else if (isMultiSelect && selectedItemCount === 0 && onClearList) {\n onClearList();\n }\n }, [selectedItems]);\n\n useEffect(() => {\n setSelectedItems(defaultValue);\n }, [defaultValue]);\n\n useImperativeHandle(ref, () => ({\n selectedItems: selectedItems\n }));\n\n const onSearchTermChange = val => {\n setSearchTerm(val);\n setItems([]);\n setHasMore(true);\n setOffset(prev => {\n if (!val) return -1;\n if (prev === -1) return 0;\n return -1;\n });\n };\n\n const WrappedSelectionGroup = isSortable ? SortableContainer(SelectionGroup, { withRef: true }) : SelectionGroup;\n\n const getSortableOptions = () => {\n if (!isSortable || !SortableProps) return {};\n const DefaultSortableElement = SortableElement(props =>
  • );\n const {\n SortableElement: SortableElementAsProp = DefaultSortableElement,\n SortableElementProps = {},\n onSortEnd: onSortEndCallback,\n lockAxis = 'y',\n transitionDuration = 150,\n pressDelay,\n distance,\n helperContainer = () => selectionGroupRef?.current?.container || document.body\n } = SortableProps;\n\n return {\n OptionContainerRenderer: SortableElementAsProp,\n OptionContainerRendererProps: option => {\n const index = option.index ? option.index : options.findIndex(opt => opt.id === option.id);\n return { index, ...SortableElementProps };\n },\n onSortEnd: ({ oldIndex, newIndex }) => {\n const orderedItems = arrayMove(items, oldIndex, newIndex).map((item, index) => ({ ...item, index }));\n if (onSortEndCallback) onSortEndCallback({ oldIndex, newIndex }, orderedItems);\n },\n lockAxis,\n transitionDuration,\n pressDelay,\n distance,\n helperContainer\n };\n };\n\n const sortOnClient = sortCriteria => {\n switch (sortCriteria) {\n case 'title_az':\n setItems(orderByFn(items, ['title'], 'asc'));\n break;\n case 'title_za':\n setItems(orderByFn(items, ['title'], 'desc'));\n break;\n case 'last_submission':\n setItems(orderByFn(items, [i => new Date(i[sortCriteria])], 'desc'));\n break;\n case 'count':\n case 'new':\n setItems(orderByFn(items, i => parseInt(i[sortCriteria], 10), 'desc'));\n break;\n default: {\n setItems(orderByFn(items, [sortCriteria], 'desc'));\n break;\n }\n }\n };\n\n const filterOnClient = filterValue => {\n switch (filterValue) {\n case 'payment':\n const paymentItems = allItems.filter(item => item?.paymentProps);\n setItems(paymentItems);\n setFilterCriteria(filterValue);\n setFilterItem(paymentItems);\n break;\n default:\n setItems(allItems);\n setFilterCriteria(null);\n setFilterItem([]);\n break;\n }\n };\n\n const handleNotFound = () => {\n if (!hasItemsToShow && showNotFoundListPlaceholder && searchTerm) {\n if (typeof NotFoundListPlaceholder === 'function') {\n return ;\n }\n return NotFoundListPlaceholder;\n }\n if (!filterItems.length > 0 && !hasItemsToShow && showNotFoundListPlaceholder && hasAnyItem) {\n if (typeof NotFoundListPlaceholder === 'function') {\n return ;\n }\n return NotFoundListPlaceholder;\n }\n };\n\n return (\n \n \n \n
    \n

    {t(listTitle)}

    \n

    {t(listDescription)}

    \n
    \n \n )}\n />\n \n {!hasAnyItem && !searchTerm && showEmptyListPlaceholder && !loading && (typeof EmptyListPlaceholder === 'function' ? : EmptyListPlaceholder)}\n {hasItemsToShow && (\n \n {customItemsList.map(({ CustomItemComponent, props }) => {\n return ;\n })}\n \n \n )}\n
    \n {isFormPickerInfiniteLoadingEnabled && hasMore ? (\n <>{[...Array(40)].map(() => )}\n ) : null}\n
    \n {!loading && handleNotFound()}\n
    \n \n );\n});\n\nconst itemType = shape({ id: string.isRequired });\nSmartList.propTypes = {\n features: objectOf(bool),\n isMultiSelect: bool,\n items: arrayOf(itemType),\n defaultValue: oneOfType([arrayOf(string), string]),\n onSelectionChange: func,\n DataProvider: func,\n showEmptyListPlaceholder: bool,\n emptyListPlaceholder: propTypes.renderable,\n showNotFoundListPlaceholder: bool,\n notFoundListPlaceholder: propTypes.renderable,\n ListWrapper: propTypes.renderable,\n ItemComponent: propTypes.renderable,\n ItemContainer: propTypes.renderable,\n ContainerRenderer: propTypes.renderable,\n searchKeys: arrayOf(string),\n searchPlaceholder: string,\n bulkActions: propTypes.renderable,\n t: func,\n formID: string,\n theme: shape({}),\n isSortable: bool,\n SortableProps: shape({}),\n isItemEditable: bool,\n otherControlBarItems: propTypes.renderable,\n listTitle: string,\n listDescription: string,\n showFavorite: bool,\n showSelectAll: bool,\n showSelectedItemCount: bool,\n showFormId: bool,\n submissionsKeyword: string,\n isNewBranding: bool,\n fuseOptions: shape({}),\n customItemsList: arrayOf(shape({\n CustomItemComponent: propTypes.renderable,\n props: shape({})\n })),\n ignoreDefaultValueCheck: bool,\n disabledHoverText: string,\n disableDefaultDocument: bool,\n ControlBarRenderer: propTypes.renderable,\n /** Retains these items on unselect all, and does not count towards option count. */\n preservedItems: arrayOf(string),\n productType: string,\n showPreview: bool,\n isFormPickerInfiniteLoadingEnabled: bool,\n fetchInfiniteFormsCallback: func,\n onClearList: func\n};\n\nSmartList.defaultProps = {\n features: {},\n isMultiSelect: true,\n items: [],\n defaultValue: [],\n onSelectionChange: f => f,\n DataProvider: DefaultDataProvider,\n showEmptyListPlaceholder: true,\n emptyListPlaceholder: () => , // eslint-disable-line react/prop-types\n showNotFoundListPlaceholder: true,\n notFoundListPlaceholder: () => ,\n ListWrapper: ({ children }) =>
      {children}
    , // eslint-disable-line react/prop-types\n ItemComponent: null,\n ItemContainer: props =>
  • ,\n ContainerRenderer: forwardRef(({ children }, ref) => ( // eslint-disable-line react/prop-types\n \n {children}\n \n )),\n searchKeys: [],\n searchPlaceholder: '',\n bulkActions: null,\n t: f => f,\n formID: null,\n theme: defaultTheme,\n isSortable: false,\n SortableProps: {},\n isItemEditable: false,\n otherControlBarItems: [],\n listTitle: 'Go to another form',\n listDescription: 'You\\'ve done great on this form. Time to focus on another one? Let\\'s go then!',\n showFavorite: false,\n showSelectAll: true,\n showSelectedItemCount: true,\n showFormId: false,\n submissionsKeyword: 'Submissions',\n isNewBranding: false,\n fuseOptions: null,\n customItemsList: [],\n ignoreDefaultValueCheck: false,\n disabledHoverText: null,\n disableDefaultDocument: false,\n ControlBarRenderer: ControlBar,\n preservedItems: [],\n productType: '',\n showPreview: false,\n isFormPickerInfiniteLoadingEnabled: false,\n fetchInfiniteFormsCallback: f => f,\n onClearList: f => f\n};\n\nexport default SmartList;\n","import Styled from 'styled-components';\n\nconst FormListWrapper = Styled.div`\n font-size: ${p => p.theme.fontSize};\n font-family: system-ui;\n width: 100%;\n\n * { box-sizing: border-box; }\n\n ul { padding: 0; }\n li { list-style: none; }\n li + li { margin-top: 1em; }\n`;\n\nexport default FormListWrapper;\n","import React from 'react';\nimport { bool, node, func } from 'prop-types';\nimport { IconXmark } from '@jotforminc/svg-icons';\nimport { t } from '@jotforminc/translation';\nimport '../../styles/_jfHeaderFormList.scss';\nimport { useKeyboardEvent } from '../../utils/hooks';\n\nconst ConditionalModal = ({\n isModal,\n isModalOpen,\n isClosable,\n onClose,\n children\n}) => {\n useKeyboardEvent(['Escape'], () => isModalOpen && onClose());\n\n return (isModal ? (\n
    \n
    \n {children}\n
    \n {isClosable && (\n \n
    \n \n
    \n \n )}\n
    \n ) : children);\n};\n\nConditionalModal.propTypes = {\n isModal: bool,\n isModalOpen: bool,\n isClosable: bool,\n onClose: func,\n children: node.isRequired\n};\n\nConditionalModal.defaultProps = {\n isModal: false,\n isModalOpen: false,\n isClosable: true,\n onClose: f => f\n};\n\nexport default ConditionalModal;\n","import React, { useMemo } from 'react';\nimport {\n shape, string, func, arrayOf, oneOf, oneOfType, bool\n} from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { propTypes } from '@jotforminc/constants';\n\nimport { EmptyList, NotFoundList } from '@jotforminc/empty-list';\nimport { SmartList } from '@jotforminc/smart-list';\nimport FormListWrapper from '../FormPicker/FormList';\nimport { resourceConfigs } from './constants';\nimport { theme as defaultTheme } from '../FormPicker/helpers/defaultTheme';\nimport ConditionalModal from '../FormPicker/ConditionalModal';\nimport '../../styles/jfResourcePicker.scss';\n\nexport const getResourcePickerMappings = resourceType => {\n const { [resourceType]: config } = resourceConfigs;\n return {\n emptyListPlaceholderTitle: config?.emptyListPlaceholderTitle || '',\n emptyListPlaceholderIcon: config?.emptyListPlaceholderIcon || (() => null),\n emptyListPlaceholderDescription: config?.emptyListPlaceholderDescription || '',\n searchPlaceholder: config?.searchPlaceholder || '',\n ItemComponent: config?.ItemComponent || (() => null),\n fuseOptions: config?.defaultFuseOptions || {},\n notFoundIcon: config?.notFoundIcon || (() => null),\n notFoundTitle: 'No results found.',\n notFoundDescription: 'We couldn\\'t find any matching items.'\n };\n};\n\nconst ResourcePicker = ({\n theme,\n resourceType,\n resources,\n selectedResources,\n ItemComponent: PropItemComponent,\n onSelectionChange,\n DataProvider,\n searchPlaceholder: propSearchPlaceholder,\n emptyListPlaceholder: PropEmptyListPlaceholder,\n notFoundListPlaceholder: PropNotFoundListPlaceholder,\n searchKeys,\n isMultiSelect,\n showSelectAll,\n defaultItemIsOnTop,\n isModal,\n isModalOpen,\n isClosable,\n onClose,\n multipleManage,\n showHeader,\n isEditable,\n fuseOptions: PropFuseOptions,\n customItemsList,\n productType,\n sortMenu,\n filterForm,\n ...rest\n}) => {\n const items = useMemo(() => {\n if (!defaultItemIsOnTop || typeof selectedResources !== 'string') return resources;\n return [...resources].sort((first, second) => {\n // Sort propItems such that default item will be on top\n if (first?.id === selectedResources) return -1;\n if (second?.id === selectedResources) return 1;\n return 0;\n });\n }, [defaultItemIsOnTop, resources]);\n\n const config = useMemo(() => getResourcePickerMappings(resourceType), [resourceType]);\n const ItemComponent = useMemo(() => PropItemComponent || config.ItemComponent, [PropItemComponent, config]);\n const searchPlaceholder = useMemo(() => t(propSearchPlaceholder || config.searchPlaceholder), [propSearchPlaceholder, config]);\n const fuseOptions = useMemo(() => PropFuseOptions || config.fuseOptions, [PropFuseOptions, config]);\n\n const EmptyListPlaceholder = useMemo(() => {\n if (PropEmptyListPlaceholder) {\n return PropEmptyListPlaceholder;\n }\n const { emptyListPlaceholderResourceType: resource, emptyListPlaceholderTitle: title, emptyListPlaceholderDescription: description } = config;\n return (\n \n );\n }, [PropEmptyListPlaceholder, config]);\n\n const NotFoundListPlaceholder = useMemo(() => {\n if (PropNotFoundListPlaceholder) {\n return PropNotFoundListPlaceholder;\n }\n const { emptyListPlaceholderResourceType: resource, notFoundTitle: title, notFoundDescription: description } = config;\n return (\n \n );\n }, [PropNotFoundListPlaceholder, config]);\n\n return (\n \n
    \n \n
    \n \n );\n};\n\nResourcePicker.propTypes = {\n resourceType: oneOf(Object.keys(resourceConfigs)).isRequired,\n resources: arrayOf(shape({})),\n ItemComponent: propTypes.renderable,\n bulkActions: propTypes.renderable,\n onSelectionChange: func,\n DataProvider: func,\n searchPlaceholder: string,\n emptyListPlaceholder: propTypes.renderable,\n notFoundListPlaceholder: propTypes.renderable,\n theme: shape({}),\n selectedResources: oneOfType([arrayOf(string), string]),\n searchKeys: arrayOf(string),\n isMultiSelect: bool,\n showSelectAll: bool,\n defaultItemIsOnTop: bool,\n multipleManage: bool,\n showHeader: bool,\n isSortable: bool,\n SortableProps: shape({}),\n isModal: bool,\n isModalOpen: bool,\n isClosable: bool,\n onClose: func,\n isEditable: bool,\n otherControlBarItems: propTypes.renderable,\n showFavorite: bool,\n showFormId: bool,\n submissionsKeyword: string,\n fuseOptions: shape({}),\n customItemsList: arrayOf(shape({\n CustomItemComponent: propTypes.renderable,\n props: shape({})\n })),\n ControlBarRenderer: propTypes.renderable,\n productType: string,\n sortMenu: bool,\n filterForm: bool\n};\n\nResourcePicker.defaultProps = {\n resources: [],\n ItemComponent: null,\n bulkActions: null,\n onSelectionChange: f => f,\n DataProvider: undefined,\n searchPlaceholder: undefined,\n emptyListPlaceholder: null,\n notFoundListPlaceholder: null,\n theme: defaultTheme,\n selectedResources: [],\n searchKeys: ['title', 'name', 'id'],\n isMultiSelect: false,\n showSelectAll: false,\n defaultItemIsOnTop: true,\n multipleManage: true,\n showHeader: false,\n isSortable: false,\n SortableProps: {},\n isModal: false,\n isModalOpen: false,\n isClosable: true,\n onClose: f => f,\n isEditable: false,\n otherControlBarItems: [],\n showFavorite: false,\n showFormId: false,\n submissionsKeyword: 'Submissions',\n fuseOptions: null,\n customItemsList: [],\n ControlBarRenderer: undefined,\n productType: '',\n sortMenu: false,\n filterForm: false\n};\n\nexport default ResourcePicker;\n","class ActivityLogger {\n constructor() {\n if (!ActivityLogger.instance) {\n this.logger = null;\n this.username = null;\n this.middlewares = [];\n this.app = null;\n ActivityLogger.instance = this;\n }\n\n return ActivityLogger.instance;\n }\n\n setLogger(logger) {\n this.logger = logger;\n return this;\n }\n\n getLogger() {\n return this.logger;\n }\n\n setMiddleware(middleware) {\n if (Array.isArray(middleware)) {\n this.middlewares = [...this.middlewares, ...middleware];\n } else {\n this.middlewares.push(middleware);\n }\n return this;\n }\n\n runMiddlewares() {\n const middleWareStatus = this.middlewares.reduce((result, middleware) => {\n result.push(!!middleware);\n return result;\n }, []);\n return !(middleWareStatus.indexOf(false) > -1);\n }\n\n setUsername(username) {\n this.username = username;\n return this;\n }\n\n setApp(app) {\n this.app = app;\n return this;\n }\n\n getUsername() {\n return this.username;\n }\n\n getApp() {\n return this.app;\n }\n\n log({ username, action, target }) {\n if (this.runMiddlewares() && this.getLogger() && this.getUsername() && this.getApp()) {\n this.logger.tick({ actor: username || this.username, action: `${action}_${this.getApp()}`, target });\n return true;\n }\n return false;\n }\n}\n\nconst logger = new ActivityLogger();\n\nexport default logger;\n","/**\n * Check whether some DOM node is our Component's node.\n */\nexport function isNodeFound(current, componentNode, ignoreClass) {\n if (current === componentNode) {\n return true;\n }\n // SVG elements do not technically reside in the rendered DOM, so\n // they do not have classList directly, but they offer a link to their\n // corresponding element, which can have classList. This extra check is for\n // that case.\n // See: http://www.w3.org/TR/SVG11/struct.html#InterfaceSVGUseElement\n // Discussion: https://github.com/Pomax/react-onclickoutside/pull/17\n const element = current.correspondingElement || current;\n\n if (!element || !element.className || typeof element.className !== 'string') {\n return false;\n }\n\n return element.className.split(' ').indexOf(ignoreClass) > -1;\n}\n\n/**\n * Try to find our node in a hierarchy of nodes, returning the document\n * node as highest node if our node is not found in the path up.\n */\nexport function findHighest(current, componentNode, ignoreClass) {\n if (current === componentNode) {\n return true;\n }\n\n // If source=local then this event came from 'somewhere'\n // inside and should be ignored. We could handle this with\n // a layered approach, too, but that requires going back to\n // thinking in terms of Dom node nesting, running counter\n // to React's 'you shouldn't care about the DOM' philosophy.\n while (current.parentNode) {\n if (isNodeFound(current, componentNode, ignoreClass)) {\n return true;\n }\n // eslint-disable-next-line no-param-reassign\n current = current.parentNode;\n }\n return current;\n}\n\n/**\n * Check if the browser scrollbar was clicked\n */\nexport function clickedScrollbar(evt) {\n return document.documentElement.clientWidth <= evt.clientX || document.documentElement.clientHeight <= evt.clientY;\n}\n","// ideally will get replaced with external dep\n// when rafrex/detect-passive-events#4 and rafrex/detect-passive-events#5 get merged in\nexport const testPassiveEventSupport = () => {\n if (typeof window === 'undefined' || typeof window.addEventListener !== 'function') {\n return;\n }\n\n let passive = false;\n\n const options = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line getter-return\n get() {\n passive = true;\n }\n });\n\n const noop = () => {};\n\n window.addEventListener('testPassiveEventSupport', noop, options);\n window.removeEventListener('testPassiveEventSupport', noop, options);\n\n return passive;\n};\n","/* eslint-disable no-param-reassign */\nfunction autoInc(seed = 0) {\n return () => ++seed;\n}\n\nexport default autoInc();\n","/* eslint-disable react/prop-types, react/react-in-jsx-scope */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { getDomainURL } from '@jotforminc/request-layer';\n\nimport { handleCustomNavigation } from '@jotforminc/utils';\nimport { Utils } from '@jotforminc/uikit';\n\nimport onClickOutsideHOC from './HOCs/OnClickOutside';\nimport { Texts } from '../constants';\nimport '../styles/formUserAccountBox.scss';\n\nclass FormUserAccountBox extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isTooltipOpen: false\n };\n }\n\n componentDidMount() {\n const { isTooltipOpen } = this.state;\n const { onTooltipToggle } = this.props;\n onTooltipToggle(isTooltipOpen);\n }\n\n componentDidUpdate(_, prevState) {\n const { isTooltipOpen } = this.state;\n const { onTooltipToggle } = this.props;\n if (isTooltipOpen !== prevState.isTooltipOpen) onTooltipToggle(isTooltipOpen);\n }\n\n handleAvatarBoxClick = () => {\n const { overrideAvatarBoxClick } = this.props;\n if (overrideAvatarBoxClick && overrideAvatarBoxClick instanceof Function) {\n overrideAvatarBoxClick();\n } else {\n const { isTooltipOpen } = this.state;\n this.setState({\n isTooltipOpen: !isTooltipOpen\n });\n }\n };\n\n handleClickOutside() {\n const { isTooltipOpen } = this.state;\n if (isTooltipOpen) {\n this.setState({ isTooltipOpen: false });\n }\n }\n\n get avatarUrl() {\n const { avatarUrl } = this.props;\n return avatarUrl;\n }\n\n render() {\n const {\n name, email, onUserLogout, userType, allowMyForms, isPreview,\n linkTarget, additionalLinks\n } = this.props;\n const { isTooltipOpen } = this.state;\n return (\n
    \n (Utils.isPressedKeyEnter(e) && this.handleAvatarBoxClick(e))}\n onClick={this.handleAvatarBoxClick}\n style={{ backgroundImage: `url(\"${this.avatarUrl}\")` }}\n />\n \n
    \n {t(Texts.HELLO_TEXT)}\n {' '}\n {name || email}\n
    \n {!additionalLinks?.append && additionalLinks?.links?.map(({ text, url, LinkRenderer }) => (\n
    \n \n
    \n ))}\n {allowMyForms && (\n
    \n {\n e.preventDefault();\n handleCustomNavigation(userType === 'USER' ? `${getDomainURL()}/myforms` : `${getDomainURL()}/listings`, linkTarget, true);\n }}\n className=\"fab-link\"\n name=\"See my forms\"\n >\n {t(Texts.MY_FORMS)}\n \n
    \n )}\n
    \n {\n e.preventDefault();\n handleCustomNavigation(`${getDomainURL()}/myaccount`, linkTarget, true);\n }}\n className=\"fab-link\"\n name=\"See my profile\"\n >\n {t(Texts.PROFILE)}\n \n
    \n {additionalLinks?.append && additionalLinks?.links?.map(({ text, url, LinkRenderer }) => (\n
    \n \n
    \n ))}\n
    \n (Utils.isPressedKeyEnter(e) && onUserLogout(e))}\n onClick={onUserLogout}\n >\n {t(Texts.LOG_OUT)}\n
    \n
    \n \n \n );\n }\n}\n\nFormUserAccountBox.propTypes = {\n onUserLogout: PropTypes.func.isRequired,\n allowMyForms: PropTypes.bool,\n userType: PropTypes.string,\n avatarUrl: PropTypes.string,\n isPreview: PropTypes.bool,\n overrideAvatarBoxClick: PropTypes.func,\n linkTarget: PropTypes.string,\n onTooltipToggle: PropTypes.func,\n additionalLinks: PropTypes.shape({\n links: PropTypes.arrayOf(PropTypes.shape({\n text: PropTypes.string,\n url: PropTypes.string,\n LinkRenderer: PropTypes.elementType\n })),\n append: PropTypes.bool\n })\n};\n\nFormUserAccountBox.defaultProps = {\n userType: 'FORM_USER',\n allowMyForms: false,\n avatarUrl: 'JOTFORM_ENV' in window && window.JOTFORM_ENV === 'ENTERPRISE' ? 'https://cdn.jotfor.ms/images/enterprise_empty_avatar.png' : 'https://cdn.jotfor.ms/assets/img/v4/avatar/Podo-Guest.png',\n isPreview: false,\n overrideAvatarBoxClick: null,\n linkTarget: '_self',\n onTooltipToggle: f => f,\n additionalLinks: {\n append: false,\n links: []\n }\n};\n\nexport default onClickOutsideHOC(FormUserAccountBox);\n","import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\n\nclass Content extends PureComponent {\n handleClickOutside() {\n const { isAccountBoxOpened, toggleAccountBox } = this.props;\n if (isAccountBoxOpened) { toggleAccountBox(); }\n }\n\n render() {\n const {\n isAccountBoxOpened, user, renderBoxContent, isTestVariant\n } = this.props;\n return (\n isAccountBoxOpened\n && user?.account_type\n && (\n
    \n
    \n {renderBoxContent()}\n
    \n
    \n )\n );\n }\n}\n\nContent.propTypes = {\n headerColors: PropTypes.shape({}),\n isAccountBoxOpened: PropTypes.bool,\n renderBoxContent: PropTypes.func,\n toggleAccountBox: PropTypes.func,\n user: PropTypes.shape({\n account_type: PropTypes.shape({\n name: PropTypes.string\n })\n }).isRequired,\n isTestVariant: PropTypes.bool\n // viewMode: PropTypes.string\n};\n\nContent.defaultProps = {\n headerColors: {},\n renderBoxContent: () => {},\n isAccountBoxOpened: false,\n toggleAccountBox: () => {},\n isTestVariant: false\n // viewMode: '',\n};\n\nexport default Content;\n","/* eslint-disable complexity */\nimport React, { Component } from 'react';\nimport PropTypes, { oneOfType, string } from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { LoginFlow } from '@jotforminc/login-flow';\nimport { getAPIURL } from '@jotforminc/request-layer';\nimport { Button } from '@jotforminc/magnet';\nimport { Loading } from '@jotforminc/loading';\nimport { Texts, ACCOUNT_BOX_VIEW_MODE } from '../constants';\nimport onClickOutside from './HOCs/OnClickOutside';\nimport { AccountBoxStandalone } from './AccountBoxStandalone';\nimport Content from './Content';\nimport '../styles/_jfAccountBox.scss';\n\nclass AccountBox extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n viewMode: this.handleViewMode(),\n user: props.user || {}\n };\n this.accountBoxContentRef = React.createRef();\n }\n\n static getDerivedStateFromProps(nextProps, prevState) {\n const updates = {};\n const { user = {} } = prevState;\n const { user: nextUser = {} } = nextProps;\n\n // update user and viewMode based on username change\n if (nextUser?.username !== user?.username) {\n updates.user = nextUser;\n updates.viewMode = (\n nextUser.account_type\n && nextUser.account_type.name !== 'GUEST'\n )\n ? ACCOUNT_BOX_VIEW_MODE.ACCOUNT_SETTINGS\n : ACCOUNT_BOX_VIEW_MODE.LOGIN_FLOW;\n }\n\n return updates;\n }\n\n isGuest = user => user?.accountType === 'GUEST' || user?.accountType?.name === 'GUEST' || user?.account_type === 'GUEST' || user?.account_type?.name === 'GUEST';\n\n handleLoginSuccess = response => {\n const { onLoginSuccess, toggleAccountBox, isAccountBoxOpened } = this.props;\n if (isAccountBoxOpened) {\n toggleAccountBox();\n }\n this.changeViewMode(ACCOUNT_BOX_VIEW_MODE.ACCOUNT_SETTINGS);\n onLoginSuccess(response);\n };\n\n handleViewMode = () => {\n const { currentMode, user } = this.props;\n if (currentMode) {\n return ACCOUNT_BOX_VIEW_MODE[currentMode];\n }\n return !this.isGuest(user) ? ACCOUNT_BOX_VIEW_MODE.ACCOUNT_SETTINGS : ACCOUNT_BOX_VIEW_MODE.LOGIN_FLOW;\n };\n\n handleClickOutside() {\n const { isAccountBoxOpened, toggleAccountBox } = this.props;\n if (isAccountBoxOpened) { toggleAccountBox(); }\n }\n\n changeViewMode = viewMode => {\n this.setState({ viewMode });\n };\n\n renderBoxContent = () => {\n const { viewMode } = this.state;\n const {\n user, isEnterprise, appName, handleSwitchToOld, mostOverdueInvoice, isAccountBoxOpened, toggleAccountBox, onLoginSuccess, actionLogger, showUserLimitList,\n logoutURLParameter, loginPredefinedEmail, signupPredefinedEmail, initialScreen, forceRegularUser, verificationHash, shouldCallNavigate, showAdminConsole,\n showAdminConsolePromotion, showSettings, navigateToMyAccountOnHeaderClick, isUpgradeOptionVisible, settingsDontUseRootPath,\n logAbTestAction, ssoLoginOptions, hideSignUp, initiator\n } = this.props;\n\n switch (viewMode) {\n case ACCOUNT_BOX_VIEW_MODE.LOGIN_FLOW:\n return (\n }}\n forceUser={forceRegularUser} // this should be true because this feature is not for form users.\n initiator={initiator}\n apiURL={getAPIURL()}\n onLoginSuccess={onLoginSuccess}\n includeConfirm={true}\n mode=''\n greetingMessage={Texts.SIGN_UP_NOW}\n showLogoOnSignupOptions={false}\n signupButtonText={Texts.CREATE_MY_ACCOUNT}\n appName={appName}\n actionLogger={actionLogger}\n loginPredefinedEmail={loginPredefinedEmail}\n signupPredefinedEmail={signupPredefinedEmail}\n initialScreen={initialScreen}\n verificationHash={verificationHash}\n shouldCallNavigate={shouldCallNavigate}\n showSocialTermsStepAsModal={true}\n onGoogleLoginClick={() => logAbTestAction({ action: 'click', target: `${appName}-loginFlow-googleButton` })}\n onFBLoginClick={() => logAbTestAction({ action: 'click', target: `${appName}-loginFlow-facebookButton` })}\n onMicrosoftLoginClick={() => logAbTestAction({ action: 'click', target: `${appName}-loginFlow-microsoftButton` })}\n onAppleLoginClick={() => logAbTestAction({ action: 'click', target: `${appName}-loginFlow-appleButton` })}\n onSalesforceLoginClick={() => logAbTestAction({ action: 'click', target: `${appName}-loginFlow-salesforceButton` })}\n ssoLoginOptions={ssoLoginOptions}\n ssoNormalLoginEnabled={!!ssoLoginOptions}\n hideSignUp={hideSignUp}\n />\n );\n default:\n return (\n \n );\n }\n };\n\n render() {\n const {\n user,\n headerColors,\n isAccountBoxOpened,\n toggleAccountBox,\n isEnterprise,\n isPreview,\n useChildren,\n children,\n appName,\n isTestVariant,\n logAbTestAction,\n isAbTestLoading\n } = this.props;\n const { avatarUrl, campaign: { type: userCampaign = null } = {} } = user;\n\n const { viewMode } = this.state;\n const campaignAvailable = userCampaign === ('BLACKFRIDAY' || userCampaign === 'EOY') && false;\n let utmCampaignType;\n switch (userCampaign) {\n case 'BLACKFRIDAY':\n utmCampaignType = 'bf2022';\n break;\n case 'EOY':\n utmCampaignType = 'eoy2022';\n break;\n default:\n utmCampaignType = '';\n break;\n }\n\n const isShortText = window.innerWidth < 640;\n const signupButtonText = t(isShortText ? 'Sign Up' : 'Sign Up for Free');\n const showSignupButton = !isAbTestLoading && isTestVariant && this.isGuest(user);\n\n return (\n <>\n \n
    \n {/* A/B Test: productHeaderSignupButtonII */}\n {isAbTestLoading && (\n \n \n
    \n )}\n {showSignupButton && (\n {\n toggleAccountBox();\n logAbTestAction({ action: 'click', target: `${appName}-signUpButton` });\n }}\n colorStyle=\"forms\"\n size=\"small\"\n >\n {t(signupButtonText)}\n \n )}\n {!showSignupButton && (\n <>\n {\n toggleAccountBox();\n logAbTestAction({ action: 'click', target: `${appName}-accountBox-avatar` });\n }}\n />\n {campaignAvailable && ['reports', 'tables', 'inbox'].includes(appName)\n && (\n \n SAVE 50%\n \n )}\n \n )}\n \n \n {\n useChildren\n ? children\n : (\n \n )\n }\n \n\n );\n }\n}\n\nAccountBox.propTypes = {\n currentMode: PropTypes.string,\n onLoginSuccess: PropTypes.func.isRequired,\n headerColors: PropTypes.shape({\n primary: PropTypes.string\n }),\n mostOverdueInvoice: PropTypes.shape({}),\n isAccountBoxOpened: PropTypes.bool,\n isEnterprise: PropTypes.bool,\n toggleAccountBox: PropTypes.func,\n appName: PropTypes.string,\n handleSwitchToOld: PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.bool\n ]),\n user: PropTypes.shape({\n account_type: oneOfType([PropTypes.shape({\n name: PropTypes.string\n }), string]),\n avatarUrl: PropTypes.string,\n username: PropTypes.string,\n campaign: PropTypes.object\n }),\n showUserLimitList: PropTypes.bool,\n logoutURLParameter: PropTypes.string,\n isPreview: PropTypes.bool,\n actionLogger: PropTypes.func,\n children: PropTypes.elementType,\n useChildren: PropTypes.bool,\n loginPredefinedEmail: PropTypes.string,\n signupPredefinedEmail: PropTypes.string,\n initialScreen: string,\n forceRegularUser: PropTypes.bool,\n initiator: PropTypes.string,\n verificationHash: string,\n shouldCallNavigate: PropTypes.bool,\n showAdminConsole: PropTypes.bool,\n showAdminConsolePromotion: PropTypes.bool,\n showSettings: PropTypes.bool,\n navigateToMyAccountOnHeaderClick: PropTypes.bool,\n isUpgradeOptionVisible: PropTypes.bool,\n settingsDontUseRootPath: PropTypes.bool,\n isTestVariant: PropTypes.bool,\n isAbTestLoading: PropTypes.bool,\n logAbTestAction: PropTypes.func,\n ssoLoginOptions: PropTypes.array,\n hideSignUp: PropTypes.bool\n};\n\nAccountBox.defaultProps = {\n user: {\n account_type: { name: 'GUEST' },\n avatarUrl: '',\n username: 'guest_apiDemo',\n campaign: { type: null }\n },\n currentMode: '',\n headerColors: {},\n mostOverdueInvoice: {},\n isAccountBoxOpened: false,\n isEnterprise: false,\n appName: '',\n handleSwitchToOld: false,\n toggleAccountBox: () => {},\n showUserLimitList: true,\n logoutURLParameter: '',\n isPreview: false,\n actionLogger: null,\n children: null,\n useChildren: false,\n loginPredefinedEmail: '',\n signupPredefinedEmail: '',\n initialScreen: 'signupOptions',\n forceRegularUser: true,\n initiator: '',\n verificationHash: '',\n shouldCallNavigate: true,\n showAdminConsole: false,\n showAdminConsolePromotion: undefined,\n showSettings: undefined,\n navigateToMyAccountOnHeaderClick: undefined,\n isUpgradeOptionVisible: undefined,\n settingsDontUseRootPath: false,\n isTestVariant: false,\n isAbTestLoading: false,\n logAbTestAction: f => f,\n ssoLoginOptions: [],\n hideSignUp: false\n};\n\nexport default onClickOutside(AccountBox);\n","/* eslint-disable react/default-props-match-prop-types */\nimport React, { FunctionComponent } from 'react';\nimport { Tooltip } from '@jotforminc/tooltip';\nimport { translationRenderer } from '@jotforminc/translation';\nimport { ImageWithWrapper } from '../Image/ImageWithWrapper';\nimport { TeamBadgeProps, TeamImageProps } from './types';\n\nimport '../../styles/TeamBadge.scss';\n\nexport const TeamImage: FunctionComponent = ({\n teamProperties = {},\n customClass = 'smallWrapper',\n emojiSize = 11\n}) => {\n return (\n \n );\n};\n\nTeamImage.defaultProps = {\n teamProperties: {}\n};\n\nexport const TeamBadge: FunctionComponent = ({\n showTeamBadge, teamProperties, productType, wrapperClass, tooltipText, tooltipAttach, children\n}) => {\n if (!showTeamBadge || !teamProperties?.name) return <>{children};\n\n return (\n
    \n \n \n \n {tooltipText || translationRenderer(`This ${productType} belongs to [1[teamName]] team`)({\n renderer1: () => teamProperties?.name as string\n })}\n \n \n {children}\n
    \n );\n};\n","import Styled from 'styled-components';\n\nexport const ScRB = Styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n overflow-y: auto;\n\n .content {\n width: 90%;\n max-width: 500px;\n padding-bottom: 40px;\n text-align: center;\n font-size: 1em;\n color: #0A1551;\n font-weight: 700;\n margin: auto;\n\n > svg {\n display: unset;\n margin-bottom: 8px;\n }\n }\n\n .content.wider { max-width: 540px; }\n\n .assignToOrgSvg {\n width: 54vw;\n height: 36vh;\n max-width: 192px;\n max-height: 136px;\n }\n\n .title {\n font-size: 18px;\n line-height: 20px;\n color: #141E46;\n font-weight: 500;\n }\n\n .subtitle {\n font-size: 15px;\n line-height: 16px;\n color: #252F58;\n font-weight: 500;\n }\n\n p {\n font-size: 14px;\n line-height: 24px;\n color: #60658C;\n }\n\n p, .custom-content { font-weight: 300; margin: 12px 0; }\n\n .sec { color: #2c3345; margin: 1em 0 0; line-height: 1.5; }\n\n [data-value=\"sendNotificationEmail\"] { display: inline-flex; }\n\n .assigneeMsg {\n max-width: 426px;\n width: 100%;\n display: block;\n height: 90px;\n border-radius: 4px;\n border: solid 1px #d8dae9;\n margin: 1em auto 0;\n font-size: .875rem;\n padding: .375rem .5rem;\n transition: border-color .15s ease;\n\n ::placeholder { color: #8d8fa8; }\n :focus { outline: 0; border-color: #4c7af7; }\n }\n\n .dontshow {\n display: inline-flex;\n background-color: #ecf4ff;\n align-items: center;\n padding: 10px;\n margin-top: 38px;\n margin-bottom: 20px;\n \n &-input {\n opacity: 0;\n pointer-events: none;\n position: absolute;\n \n &:checked + .dontshow-checkbox:before {\n background-color: #54b45c;\n border-color: #54b45c;\n }\n \n &:checked + .dontshow-checkbox:after {\n opacity: 1;\n }\n \n &:focus {\n outline: 0;\n }\n }\n \n &-checkbox {\n width: 14px;\n height: 14px;\n background-color: #fff;\n border-radius: 2px;\n position: relative;\n \n &:before {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n border: 1px solid #CCD0DA;\n background-color: #fff;\n border-radius: 2px;\n top: 0;\n left: 0;\n transition: .3s;\n transform: translate(-1px, -1px);\n }\n \n &:after {\n content: \"\";\n display: block;\n width: 4px;\n height: 8px;\n border: solid #fff;\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n position: absolute;\n top: 1px;\n left: 4px;\n opacity: 1;\n transition: .3s;\n z-index: 2;\n }\n }\n \n &-text {\n font-weight: 400;\n font-size: 16px;\n margin-left: 8px;\n line-height: 1;\n color: #52587e;\n }\n }\n\n @media screen and (max-width: 480px) {\n font-size: 0.875em;\n\n p { margin: 1em 0 .75em; }\n } \n`;\n","import React, { forwardRef } from 'react';\nimport { elementType, node, oneOfType } from 'prop-types';\n\nimport { StyledModal as Modal } from '@jotforminc/styled-modal';\nimport { ScRB } from '../styles/ScRB';\n\nconst PickerModal = forwardRef(({\n children,\n footer,\n ...modalProps\n}, ref) => (\n \n \n {children}\n \n \n));\n\nPickerModal.propTypes = {\n children: oneOfType([elementType, node]),\n footer: oneOfType([elementType, node])\n};\n\nPickerModal.defaultProps = {\n children: null,\n footer: null\n};\n\nexport default PickerModal;\n","import Styled from 'styled-components';\nimport { PickerModal } from '@jotforminc/picker-modal';\n\nexport const ScPickerModal = Styled(PickerModal)`\n .header-content {\n margin: 20px 0;\n font-family: Circular,-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";\n\n .pm-t {\n margin: 0;\n font-size: 20px;\n font-weight: 500;\n letter-spacing: 0.15px;\n color: #141E46;\n }\n\n .pm-d {\n margin: 0.25em 0 0;\n font-size: 16px;\n letter-spacing: 0.12px;\n color: #60658C;\n }\n }\n\n .close-modal {\n margin-right: 24px;\n }\n\n .pm-b {\n max-width: 600px;\n width: 90%;\n min-height: 570px;\n\n [data-sc=\"smartList-controlBar\"] {\n .cb-body {\n display: none;\n }\n .cb-searchCont {\n flex: 0 0 100%;\n }\n }\n\n .emptyList {\n text-align: center;\n min-height: 60vh;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n }\n\n\n [data-sc='footer'] {\n background-color: rgba(239,239,246,.45);\n }\n\n .pm-f {\n display: flex;\n justify-content: space-between;\n\n button {\n font-weight: 500;\n font-family: Circular,-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";\n }\n\n .taste.isGray {\n padding: 8px 32px;\n }\n\n .taste.isGreen {\n background-color: #01BD6F;\n padding: 0px 32px;\n\n &:hover {\n background-color: #01d67e;\n }\n &[disabled] {\n opacity: 1;\n background-color: #78D6AF;\n }\n }\n }\n\n .js-ConfirmationModal {\n font-family: inherit;\n }\n\n &.autoHeight {\n .pm-b {\n min-height: auto;\n\n ul {\n overflow-y: auto;\n\n li:last-child {\n margin-bottom: 28px;\n }\n }\n }\n }\n\n @media screen and (min-width: 480px) {\n [data-sc=\"picker-body\"] {\n max-height: 60vh;\n }\n }\n`;\n","/* eslint-disable max-len */\nimport { Button } from '@jotforminc/uikit';\nimport styled from 'styled-components';\n\nexport const ScButton = styled(Button)`\n &.bare {\n font-size: .875em;\n color: #4573e3;\n text-decoration: none;\n background: transparent;\n cursor: pointer;\n box-shadow: none;\n padding: 0;\n border: 0;\n }\n\n &.taste {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: .5em .75em;\n border-radius: 4px;\n cursor: pointer;\n text-transform: uppercase;\n border: 0;\n font-size: 1em;\n line-height: 1.5;\n font-weight: 500;\n font-family: inherit;\n }\n\n &.panel {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 2px;\n cursor: pointer;\n text-transform: capitalize;\n border: 0;\n padding: 6px;\n margin: 0;\n font-size: 15px;\n font-family: Roboto,Circular,-apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";\n transition: .3s background-color ease;\n }\n\n &.panel.isGreen {\n background-color: #4BC073;\n color: #fff;\n\n &:hover {\n background-color: #65DA8D;\n }\n\n &:active {\n background-color: #32A75A;\n }\n }\n\n &.taste.isGreen {\n background-color: #54b45c;\n color: #fff;\n }\n\n\n &.taste.isPurple {\n background-color: #8563ce;\n color: #fff;\n }\n\n &.taste.isRed {\n background-color: #ff4947;\n color: #fff;\n }\n\n &.taste.isGray {\n background-color: #FAFAFC;\n border: 1px solid #ADB4D2;\n color: #A0A6C3;\n\n &:hover {\n background-color: #fff;\n color: #9EA7CE;\n border-color: #9EA7CE;\n }\n\n &[disabled] {\n color: #A0A6C3;\n border-color: #A0A6C3;\n background-color: #FAFAFC;\n }\n }\n\n &.taste.isBlue, &.panel.isBlue {\n background-color: #0099FF;\n color: #fff;\n transition: .3s background-color ease;\n\n &:hover {\n background-color: #33adff;\n }\n\n &:active {\n background-color: #007acc;\n }\n }\n\n &.taste.isLightGreen {\n background-color: #78BB07;\n color: #fff;\n\n &:hover {\n background-color: #4EB100;\n }\n\n &:active {\n background-color: #5FA200;\n }\n }\n\n &.taste.isSubGray {\n background-color: #e9e9f2;\n color: #898ba9;\n\n &:hover {\n background-color: #F2F2FE;\n }\n\n &:active {\n background-color: #DEDEEC;\n }\n\n &[disabled] {\n &:hover,&:active {\n background-color: #e9e9f2;\n }\n }\n }\n\n &.taste.isWhite {\n background-color: #fff;\n color: #8E4FCD;\n transition: .3s background-color ease;\n border: 1px solid #8E4FCD;\n\n svg path {\n fill: #8E4FCD;\n }\n\n &:hover {\n background-color: #7735BA;\n color: #fff;\n\n svg path { fill: #fff; }\n }\n\n &:active {\n background-color: #6722AC;\n color: #fff;\n\n svg path { fill: #fff; }\n }\n }\n\n\n &.taste.quickQR {\n border-radius: 4px;\n & > svg {\n & > path { fill: #fff }\n }\n\n @media screen and (max-width: 480px) {\n border-radius: 29px;\n }\n }\n\n &.taste.quickQR {\n margin: 0 20px;\n font-weight: 500;\n font-size: 14px;\n font-family: inherit;\n transition: .3s background-color ease;\n text-transform: none;\n\n & > svg { margin-right: 7px;}\n\n @media screen and (max-width: 480px) {\n padding: 11px;\n margin: 0;\n\n & > span { display: none; }\n & > svg {\n margin-right: 0;\n & > path { fill: #fff }\n }\n }\n }\n\n &.taste.quickQR {\n background-color: #0a1551;\n\n &:hover {\n background-color: #252d5b;\n }\n }\n\n &.taste.quickQR.isSelected {\n background-color: #091141;\n }\n\n &.taste.undoRedo {\n margin: 0 2px;\n padding: 12px 17px;\n font-size: 14px;\n font-family: inherit;\n transition: .3s background-color ease;\n text-transform: none;\n font-weight: 400;\n\n & > svg { margin-right: 11px;}\n & > span { color: #23283A; line-height: 16px; }\n\n @media screen and (max-width: 768px) {\n padding: 12px 10px;\n & > span { display: none; }\n & > svg { margin-right: 0; }\n }\n\n @media screen and (max-width: 480px) {\n padding: 12px 10px;\n & > span { display: none; }\n & > svg { margin-right: 0; }\n }\n\n &[disabled] {\n & > svg > path { fill: #979797;}\n & > span { color: #898BA9; }\n }\n }\n\n &[disabled] { opacity: .6; cursor: initial; }\n\n\n &.outline {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: .5em 1em;\n border-radius: 2px;\n cursor: pointer;\n background: transparent;\n border: 1px solid currentColor;\n font-size: .875em;\n line-height: 1rem;\n font-weight: 500;\n }\n\n &.outline.isRed {\n color: #ff4947;\n }\n\n &.outline.removeForms { padding: .625em; }\n &.outline.removeForms span { margin-left: .25rem; }\n\n &.goBack {\n font-size: .875em;\n line-height: 1;\n color: #90a4ae;\n padding: 0 1em 1em 0;\n\n & > * { vertical-align: middle; }\n svg { width: 18px; margin-right: 5px; }\n }\n\n /*\n &.forRevoke {\n font-size: .875em;\n color: #f9535c;\n margin: 0 .5rem 0 auto;\n padding: .5em 1em .5em 1.5rem;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='15' viewBox='0 0 11 15'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23F9535C'%3E%3Cpath d='M8.834 3.252v9.037c0 .834-.58 1.445-1.375 1.446-1.757.002-3.514.002-5.271 0-.795-.001-1.374-.612-1.374-1.447V3.252h8.02zM2.828 5.345v6.292h1.137c.166 0 .187 0 .19-.138V5.548c0-.037.01-.079-.003-.108-.018-.037-.056-.09-.085-.09-.41-.007-.82-.005-1.239-.005zm3.99 0H5.686c-.192 0-.193 0-.193.202v6.08H6.82V5.345zM0 2.414V.819h.184C.992.82 1.8.823 2.607.814c.08 0 .177-.05.238-.112.178-.187.339-.396.515-.585.05-.054.13-.097.198-.097.843-.007 1.687-.007 2.53 0 .067 0 .148.043.198.097.177.19.337.399.515.585.061.063.158.112.238.112.803.009 1.605.005 2.408.005h.195v1.595H0z' transform='translate(-3 -1) translate(3.542 1.417)'/%3E%3C/g%3E%3Cpath d='M0 0L17 0 17 17 0 17z' transform='translate(-3 -1)'/%3E%3C/g%3E%3C/svg%3E%0A\");\n background-repeat: no-repeat;\n background-size: 11px 15px;\n background-position: 8px 7px;\n }\n */\n\n @media screen and (max-width: 480px) {\n &.outline.removeForms span { display: none; }\n &.cb-addForm {\n margin-left: 0.5em;\n span { display: none; }\n svg { margin-right: 0 !important; }\n }\n }\n`;\n","import React, {\n forwardRef, useState, useMemo, useCallback, useImperativeHandle, useRef\n} from 'react';\nimport {\n func, oneOf, shape, string\n} from 'prop-types';\nimport { Hooks } from '@jotforminc/uikit';\nimport { t } from '@jotforminc/translation';\n\nimport { ResourcePicker, resourceConfigs } from '@jotforminc/resource-picker';\nimport { ScPickerModal } from './ScPickerModal';\nimport { ScButton } from './ScButton';\n\nconst ResourcePickerModal = forwardRef(({\n resourceType,\n defaultValue = '',\n onResourceSelectionChange = f => f,\n onResourceSelectionComplete = f => f,\n onCreateNewResource = null,\n headerDescription = '',\n footerCreateNew = t('Create New'),\n footerCancel = t('Cancel'),\n footerDone = t('Done'),\n // eslint-disable-next-line\n classNames = '',\n pickerProps = {},\n ...rest\n}, ref) => {\n const [selectedResource, setSelectedResource] = useState('');\n const [resources, setResources] = useState([]);\n const pickerRef = useRef();\n\n useImperativeHandle(ref, () => ({\n ...pickerRef.current,\n showPicker: content => {\n setSelectedResource('');\n setResources(content);\n pickerRef.current.show();\n }\n }));\n\n const onChange = useCallback(resourceID => {\n if (resourceID !== selectedResource && resourceID !== '') {\n setSelectedResource(resourceID);\n }\n }, [selectedResource]);\n\n const hidePicker = useCallback(() => {\n pickerRef.current.hide();\n }, []);\n\n const handleCreateNew = useCallback(() => {\n onCreateNewResource();\n hidePicker();\n }, []);\n\n const isDoneButtonActive = useMemo(() => !selectedResource, [selectedResource]);\n\n const onDoneClick = useCallback(() => {\n if (selectedResource) {\n onResourceSelectionComplete(selectedResource);\n }\n hidePicker();\n }, [selectedResource, resources]);\n\n const Footer = useMemo(() => (\n
    \n {onCreateNewResource && typeof onCreateNewResource === 'function' ? (\n \n {footerCreateNew}\n \n ) : (\n \n {footerCancel}\n \n )}\n {resources.length !== 0 && (\n \n {footerDone}\n \n )}\n
    \n ), [isDoneButtonActive, resources]);\n\n const Header = useMemo(() => (\n <>\n
    {t(resourceConfigs[resourceType].headerTitle || '')}
    \n

    {headerDescription}

    \n \n ), []);\n\n Hooks.useEffectIgnoreFirst(() => {\n onResourceSelectionChange(selectedResource);\n }, [selectedResource]);\n\n return (\n \n \n \n );\n});\n\nResourcePickerModal.propTypes = {\n resourceType: oneOf(Object.keys(resourceConfigs)).isRequired,\n defaultValue: string,\n onResourceSelectionChange: func,\n onResourceSelectionComplete: func,\n onCreateNewResource: func,\n headerDescription: string,\n footerCreateNew: string,\n footerCancel: string,\n footerDone: string,\n classNames: string,\n pickerProps: shape({})\n};\n\nexport default ResourcePickerModal;\n","// It's app picker navigation item badge\n// DUE TO DIFFERENT DESIGN RULES, IT WAS CREATED AS A CUSTOM COMPONENT OTHER THAN THE MAGNET BADGE.\n\nimport { Flex } from '@jotforminc/magnet';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nconst NavigationItemBadge = ({ text = '', selected = false, colorStyle = '' }) => {\n const badgeClasses = classNames('absolute w-auto h-full min-h-4 max-h-4 text-xxs line-height-xxs font-medium px-1.5', {\n 'bg-blue-500 color-white': !selected && colorStyle !== 'success',\n 'bg-navy-75 color-navy-700': selected && colorStyle !== 'success',\n 'bg-green-500 color-white': colorStyle === 'success'\n });\n return (\n \n {text}\n \n );\n};\n\nNavigationItemBadge.propTypes = {\n text: PropTypes.string,\n selected: PropTypes.bool,\n colorStyle: PropTypes.string\n};\n\nexport default NavigationItemBadge;\n","/* eslint-disable complexity */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { t } from '@jotforminc/translation';\nimport { Loading } from '@jotforminc/loading';\nimport { handleCustomNavigation } from '@jotforminc/utils';\n\nimport { ActivityLogger } from '@jotforminc/activity-logger';\nimport qs from 'querystring';\nimport { appToResourceType, defaultNavigationItem } from './navigationConstants';\nimport ResourcePickerModal from './ResourcePickerModal';\nimport { getNavigationResources } from '../../utils/utils';\nimport NavigationItemBadge from './NavigationItemBadge';\n\nconst shouldHide = ({\n summary, app, appConfig, currentAppName\n}) => {\n if (currentAppName === app || !appConfig.hideIfEmpty) return false;\n\n const { count = 0, notification = 0 } = summary;\n\n return !(count || notification);\n};\n\nclass NavigationItem extends React.PureComponent {\n constructor(props) {\n super(props);\n this.getConfig = this.getConfig.bind(this);\n this.onClick = this.onClick.bind(this);\n this.redirectToCreate = this.redirectToCreate.bind(this);\n this.redirect = this.redirect.bind(this);\n this.resourcePickerModalRef = React.createRef();\n }\n\n onClick(e) {\n const {\n logDiscoverabilityActions = f => f,\n disabled = false\n } = this.props;\n e.preventDefault();\n\n if (disabled) return;\n const appConfig = this.getConfig();\n const appTitle = appConfig?.title?.replace(/ +/g, '');\n\n // discoverabilityTracking\n logDiscoverabilityActions({\n action: 'click',\n target: `.appItem${appTitle}`\n });\n\n this.newNavigation();\n }\n\n getConfig() {\n const {\n app = '',\n currentAppName = '',\n appConfig = null,\n branding21 = false\n } = this.props;\n const config = appConfig || defaultNavigationItem(app, branding21);\n if (['approvals', 'portal'].includes(currentAppName) && app === 'sign') {\n config.target = '_blank';\n }\n return config;\n }\n\n getHref(id, oldNavigation) {\n const { appLink } = this.getConfig();\n return typeof appLink === 'function' ? appLink(id, oldNavigation) : appLink;\n }\n\n getCreateLink(formIDs) {\n const { createLink } = this.getConfig();\n if (typeof createLink !== 'function') {\n return false;\n }\n return createLink(formIDs);\n }\n\n redirectToCreate(formIDs) {\n const {\n currentAppName = '',\n activeFormID = '',\n formIDs: propFormIDs = []\n } = this.props;\n let createLink;\n if (formIDs) {\n createLink = this.getCreateLink(formIDs);\n } else if (currentAppName === 'tables') {\n // If formIDs is undefined, it means that create new button is clicked.\n // Create app with all forms in the sheet\n createLink = this.getCreateLink(propFormIDs);\n } else {\n // Create an app with the current form\n createLink = this.getCreateLink(activeFormID);\n }\n\n if (createLink) {\n this.redirectClick(createLink);\n }\n }\n\n async newNavigation() {\n const {\n currentAppName = '',\n appID = '',\n activeFormID = '',\n app = '',\n setLoading = f => f,\n toggleNavigation = f => f,\n forms = []\n } = this.props;\n if (currentAppName === app) {\n return; // Don't do anything if same product is clicked\n }\n const toProduct = app === 'appTables' ? 'tables' : app;\n const currentProductID = appID || activeFormID;\n\n if (currentAppName === 'portal' && toProduct === 'tables') { // Tables will automatically handle appTable case\n this.redirect(currentProductID);\n return;\n }\n\n if (currentAppName === 'AIAgentBuilder' && app === 'conversations') {\n this.redirect();\n return;\n }\n\n if (currentAppName === 'AIAgentBuilder' && forms.length) {\n if (forms.length === 1) {\n this.redirect(forms[0]?.id);\n } else {\n if (typeof toggleNavigation === 'function') {\n toggleNavigation();\n }\n this.resourcePickerModalRef?.current?.showPicker(forms, toProduct);\n }\n return;\n }\n\n setLoading(true);\n if (!currentProductID) {\n this.redirect(activeFormID, true);\n return;\n }\n try {\n const { type, result } = await getNavigationResources(currentAppName, currentProductID, toProduct);\n switch (type) {\n case 'SheetFormsList':\n // It means that there is no form connected to an app.\n // Create new app with all the forms in the sheet in this case.\n this.redirectToCreate(result);\n break;\n case 'NoPortal':\n ActivityLogger.setLogger(window?.JotFormActions('formBuilderLauncher'))\n .log({\n action: 'click',\n target: `CreateApp - ${activeFormID}`\n });\n this.redirectToCreate(activeFormID);\n break;\n case 'EmptyPortal':\n this.resourcePickerModalRef?.current?.showPicker([], toProduct);\n break;\n default:\n if (result.length === 1) {\n this.redirect(result[0]?.id);\n } else {\n if (typeof toggleNavigation === 'function') {\n toggleNavigation();\n }\n this.resourcePickerModalRef?.current?.showPicker(result, toProduct);\n }\n }\n } catch (error) {\n // For navigations whose endpoints are not ready, stick with old behavior\n this.redirect(activeFormID, true);\n }\n setLoading(false);\n }\n\n redirect(id = '', oldNavigation) {\n const {\n app = '', user: { accountType, username, name } = {}, agentID = '', currentAppName\n } = this.props;\n\n const isGuestUser = accountType === 'GUEST';\n const isGuestUserClickedViewForm = (app === 'viewForm' && isGuestUser);\n if (!isGuestUserClickedViewForm) {\n const res = ActivityLogger.log({\n action: 'appChanged',\n target: `${app}|${id}`\n });\n\n if (!res && window?.JotFormActions) {\n const { tick } = window.JotFormActions('productPickerNavigationActions');\n tick?.({\n actor: username || name,\n action: 'appChanged',\n target: `${app}${id ? `|${id}` : ''}`\n });\n }\n\n const href = this.getHref(app === 'aiAgentBuilder' && currentAppName !== 'conversations' ? agentID : id, oldNavigation);\n this.redirectClick(href, app);\n }\n }\n\n redirectClick(href, app) {\n const { target = '_self' } = this.getConfig();\n const {\n redirectionParameters = {},\n currentAppName = '',\n createForm = f => f,\n setLoading = f => f,\n agentID = ''\n } = this.props;\n const parameters = qs.stringify(redirectionParameters);\n setTimeout(() => {\n if (app === 'viewForm') {\n handleCustomNavigation(`${href}${parameters ? `?${parameters}` : ''}`, '_blank', true);\n } else if (currentAppName === 'tables' && app === 'formBuilder') {\n createForm('edit', true);\n } else if ((app === 'formBuilder' || app === 'inbox' || app === 'conversations') && window?.location?.pathname.includes('agent/build')) {\n setLoading(true);\n if (app === 'conversations') {\n handleCustomNavigation(`/conversations/withAgent/${agentID}${parameters ? `?${parameters}` : ''}`, target, true);\n } else {\n handleCustomNavigation(`${href}${app === 'inbox' ? '/conversations' : ''}${parameters ? `?${parameters}` : ''}`, target, true);\n }\n } else {\n handleCustomNavigation(`${href}${parameters ? `?${parameters}` : ''}`, target);\n }\n }, 250);\n }\n\n render() {\n const {\n title = '',\n explanation = '',\n app = '',\n currentAppName = '',\n summary = { notification: 0 },\n hideIfEmpty = false,\n branding21 = false,\n newBadge = false,\n loading = false,\n disabled = false\n } = this.props;\n\n const { notification = 0 } = summary;\n\n const appConfig = this.getConfig();\n\n if (hideIfEmpty && shouldHide({\n summary, currentAppName, app, appConfig\n })) {\n return null;\n }\n\n const isSelected = app === currentAppName;\n const AppIcon = isSelected ? appConfig?.icons?.Selected : appConfig?.icons?.Default;\n const selectedColor = (branding21 && appConfig.appColor) ? appConfig.appColor : appConfig.secondaryColor;\n // if current app is related to boards or agents\n const showBetaBadge = ['boards', 'myboards', 'conversations', 'myagents', 'aiagentbuilder'].includes(app.toLowerCase()) || false;\n const showNewBadge = app === 'myTasks' && window?.isWorkflowReleased;\n const footerCreateNewText = app === 'boards' ? t('Create New Board') : t('Create New');\n const footerDoneText = app === 'boards' ? t('Open') : t('Done');\n\n return (\n
  • \n \n \n {branding21 && AppIcon ? : appConfig.icon}\n \n\n {explanation ? (\n \n \n {t(title)}\n \n \n {t(explanation)}\n \n \n )\n : (\n \n {t(title)}\n \n )}\n {/* beta tag for Boards in app picker */}\n {showNewBadge ? () : null}\n {showBetaBadge ? () : null}\n {loading && (\n \n \n \n )}\n \n \n
  • \n );\n }\n}\n\nNavigationItem.propTypes = {\n app: PropTypes.string,\n appConfig: PropTypes.shape({}),\n currentAppName: PropTypes.string,\n title: PropTypes.string,\n explanation: PropTypes.string,\n forms: PropTypes.arrayOf(PropTypes.shape({})),\n formIDs: PropTypes.instanceOf(Array),\n appID: PropTypes.string,\n activeFormID: PropTypes.string,\n agentID: PropTypes.string,\n summary: PropTypes.shape({\n notification: PropTypes.number\n }),\n user: PropTypes.shape({\n accountType: PropTypes.string,\n username: PropTypes.string,\n name: PropTypes.string\n }).isRequired,\n hideIfEmpty: PropTypes.bool,\n branding21: PropTypes.bool,\n setLoading: PropTypes.func,\n loading: PropTypes.bool,\n disabled: PropTypes.bool,\n logDiscoverabilityActions: PropTypes.func,\n toggleNavigation: PropTypes.func,\n newBadge: PropTypes.bool,\n redirectionParameters: PropTypes.shape({}),\n createForm: PropTypes.func\n};\n\nexport default NavigationItem;\n","/* eslint-disable camelcase */\nimport React, { ReactNode, FunctionComponent } from 'react';\nimport styled from 'styled-components';\nimport { Tooltip } from '@jotforminc/tooltip';\nimport { t } from '@jotforminc/translation';\nimport { canCreateTeam } from '../../utils';\n\ntype Props = {\n user: {\n isDataOnlyUser: string,\n account_type?: any,\n accountType?: any\n },\n children?: ReactNode\n isTeamCreationDisabled?: boolean,\n tooltipProps?: { attach: string, align: string }\n};\n\nconst TooltipContainer = styled.div`\n .jfTooltipNew-hoverTarget {\n position: relative;\n }\n .jfTooltipNew-body {\n width: 200px\n }\n button {\n opacity: .5;\n }\n`;\n\nexport const CreateTeamButton: FunctionComponent = ({\n user,\n tooltipProps,\n isTeamCreationDisabled = false,\n children = 'Create Team',\n ...buttonProps\n}: Props) => {\n const disableMessage = user?.isDataOnlyUser === '1' ? \"You don't have permission to create team\" : '';\n if (!canCreateTeam(isTeamCreationDisabled, user?.accountType || user?.account_type)) return null;\n\n return !disableMessage ? (\n \n {children}\n \n ) : (\n \n
    \n \n {children}\n \n \n {t(disableMessage)}\n \n
    \n
    \n );\n};\n","import React from 'react';\nimport {\n arrayOf, shape, string, func, bool\n} from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { ImageWithWrapper, CreateTeamButton } from '@jotforminc/enterprise-components';\nimport { handleCustomNavigation } from '@jotforminc/utils';\nimport classNames from 'classnames';\nimport { isPlural } from '../../utils/index';\n\nimport IconNoTeam from '../../assets/svg/teamselection-noteam.svg';\nimport '../../styles/_jfAppPickerTeamSelection.scss';\n\nconst TeamSection = ({\n user,\n teams = [],\n openCreateTeamModal = () => {},\n currentTeamID = '',\n isTeamPage = false,\n isTeamCreationDisabled = false,\n isTeamBrowsingDisabled = false\n}) => {\n return (\n
    \n

    \n {t('MY TEAMS')}\n

    \n
    \n {teams.length\n ? teams.slice(0, 3).map(team => (\n {\n e.preventDefault();\n handleCustomNavigation(`/myteams/${team?.slug || team?.id}`, '_self');\n }}\n className={classNames({ selected: isTeamPage && currentTeamID === team?.id })}\n >\n \n
    \n
    {team?.name || ''}
    \n
    \n {team?.memberCount}\n  \n {isPlural(team?.memberCount) ? t('members') : t('member')}\n
    \n
    \n \n )) : (\n
    \n
    \n \n
    \n

    {`${t(\"You don't have any teams yet. Create your first team and start collaborating with your colleagues.\")}`}

    \n
    \n )}\n
    \n {!isTeamBrowsingDisabled && !!teams.length && (\n \n )}\n
    \n \n {`+ ${t('CREATE A TEAM')}`}\n \n
    \n
    \n );\n};\n\nTeamSection.propTypes = {\n teams: arrayOf(shape({})),\n isTeamCreationDisabled: bool,\n isTeamBrowsingDisabled: bool,\n openCreateTeamModal: func,\n currentTeamID: string,\n isTeamPage: bool,\n user: shape({\n username: string,\n account_type: shape({\n name: string\n })\n }).isRequired\n};\n\nexport default TeamSection;\n","import React, { useState } from 'react';\nimport {\n shape, string, func, bool, arrayOf\n} from 'prop-types';\nimport qs from 'querystring';\nimport { t } from '@jotforminc/translation';\nimport { handleCustomNavigation } from '@jotforminc/utils';\nimport { canCreateTeam } from '@jotforminc/enterprise-components';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\nimport { IconChevronRight } from '@jotforminc/svg-icons';\nimport { ActivityLogger } from '@jotforminc/activity-logger';\n\nimport classNames from 'classnames';\nimport {\n appConfigPropsTypes, getDefaultNavItems\n} from './navigationConstants';\nimport NavigationItem from './NavigationItem';\nimport TeamSection from './TeamSection';\n\nconst hasNewBadge = () => {\n return false;\n};\n\n// eslint-disable-next-line complexity\nconst Navigation = ({\n form = {},\n forms = [],\n appID = '',\n appList = [],\n formIDs = [],\n summary = {},\n hideIfEmpty = false,\n showBackToMyForms = true,\n visibleNavigationApps = [],\n backToMyFormsLink = '/myforms',\n backToMyFormsText = 'Go Back to My Forms',\n onMyformsClick = f => f,\n logDiscoverabilityActions = f => f,\n toggleNavigation = f => f,\n isAppPickerSideModeActive = false,\n teamID = '',\n teams = [],\n openCreateTeamModal = () => {},\n showTeamSection = false,\n isTeamPage = false,\n isInListings = false,\n isTeamCreationDisabled = false,\n isTeamBrowsingDisabled = false,\n createForm = f => f,\n user,\n appConfig,\n appName: currentAppName,\n agentID = ''\n}) => {\n const [loading, setLoading] = useState(false);\n const [loadingApp, setLoadingApp] = useState('');\n\n const isNotFormOwner = form?.owner && user?.username && form.owner !== user.username;\n const appConfigs = { ...getDefaultNavItems(true), [currentAppName]: appConfig };\n const apps = appList.indexOf(currentAppName) !== -1 || currentAppName === 'myTeams' ? appList : [...appList, currentAppName];\n const hideBackButton = window.JOTFORM_ENV === 'ENTERPRISE' && visibleNavigationApps.length > 0 && visibleNavigationApps.indexOf('toMyForms') === -1;\n const userAccountType = user?.accountType || user?.account_type;\n const hideTeamSection = teams.length === 0 && !canCreateTeam(isTeamCreationDisabled, userAccountType);\n const isJotformAdmin = !isEnterprise() && (userAccountType === 'ADMIN' || userAccountType?.name === 'ADMIN');\n const isTeamSectionVisible = showTeamSection && !hideTeamSection;\n const isHideBetaEnabled = user?.hideBetaBadges === '1';\n const noRedirectedApps = ['myTeams', 'myWorkspace'];\n const preventWorkspaceRedirect = !isEnterprise() && user && !!user.allowMixedListing && !isJotformAdmin;\n\n if (!teamID && isNotFormOwner && currentAppName !== 'portal') {\n // For now, don't show app builder on navigation for subusers\n const portalIndex = apps.indexOf('portal');\n if (portalIndex !== -1) {\n apps.splice(portalIndex, 1);\n }\n }\n\n if (isHideBetaEnabled) {\n const myPagesIndex = apps.indexOf('myPages');\n if (myPagesIndex !== -1) {\n apps.splice(myPagesIndex, 1);\n }\n }\n\n const setLoadingState = app => state => {\n setLoading(state);\n setLoadingApp(state ? app : '');\n };\n\n const handleBackToMyFormsClick = e => {\n ActivityLogger.setLogger(window?.JotFormActions?.('productPickerNavigationActions'))\n .log({\n action: 'click',\n target: backToMyFormsText?.replace(/ +/g, '')\n });\n\n const parameters = qs.stringify({ ...(preventWorkspaceRedirect ? { preventWorkspaceRedirect: true } : {}) });\n e.preventDefault();\n if (onMyformsClick) {\n onMyformsClick({ queryParams: parameters });\n } else {\n const hasParameter = backToMyFormsLink && backToMyFormsLink.indexOf('?') > -1 ? '&' : '?';\n if (backToMyFormsLink.includes('myagents') || window.location.pathname.includes('/agent/build')) {\n handleCustomNavigation(`${backToMyFormsLink}${parameters ? `${hasParameter}${parameters}` : ''}`, '_blank', true);\n } else {\n handleCustomNavigation(`${backToMyFormsLink}${parameters ? `${hasParameter}${parameters}` : ''}`, '_blank');\n }\n }\n\n logDiscoverabilityActions({\n action: 'click',\n target: 'goBackToMyForms'\n });\n };\n\n return (\n \n
      \n {apps.map(app => {\n return (\n \n );\n })}\n { !hideBackButton && showBackToMyForms && (\n \n {t(backToMyFormsText)}\n
      \n \n
      \n \n ) }\n
    \n {isTeamSectionVisible\n && (\n \n )}\n \n );\n};\n\nNavigation.propTypes = {\n form: shape({\n id: string,\n owner: string\n }),\n forms: arrayOf(shape({})),\n user: shape({\n username: string,\n account_type: shape({\n name: string\n })\n }).isRequired,\n appID: string,\n hideIfEmpty: bool,\n summary: shape({}),\n showBackToMyForms: bool,\n backToMyFormsLink: string,\n backToMyFormsText: string,\n formIDs: arrayOf(string),\n appName: string.isRequired,\n appList: arrayOf(string),\n visibleNavigationApps: arrayOf(string),\n appConfig: appConfigPropsTypes.isRequired,\n onMyformsClick: func,\n logDiscoverabilityActions: func,\n toggleNavigation: func,\n isAppPickerSideModeActive: bool,\n teamID: string,\n teams: arrayOf(shape({})),\n openCreateTeamModal: func,\n showTeamSection: bool,\n isTeamPage: bool,\n isInListings: bool,\n isTeamCreationDisabled: bool,\n isTeamBrowsingDisabled: bool,\n createForm: func,\n agentID: string\n};\n\nexport default Navigation;\n","import { cva } from 'class-variance-authority';\nimport { primary } from '../../tokens/colors';\nimport { CVAType } from '../../types/system.types';\nimport { BadgeProps } from './badge.types';\nimport { COLOR_STYLE_VALUES, PRODUCT_NAME_VALUES } from '../../constants/common.values';\n\n// CVA Types\ntype BadgeCVAType = CVAType & { hasIcon?: boolean, hasChildren?: boolean }>;\ntype BadgeIconCVAType = CVAType>\ntype BadgeTextCVAType = CVAType>\n\n// Classes\nexport const badgeCVA = cva(\n 'magnet-badge inline-flex items-center font-medium gap-1', {\n variants: {\n size: {\n small: 'h-4 text-xxs',\n medium: 'h-5 text-xs',\n large: 'h-6 text-sm'\n },\n colorStyle: {},\n variant: {},\n rounded: {\n true: 'radius-full',\n false: 'radius'\n },\n truncate: {\n true: 'max-w-full'\n },\n hasChildren: {},\n hasIcon: {}\n },\n compoundVariants: [\n {\n hasIcon: true,\n hasChildren: false,\n class: 'justify-center'\n },\n {\n hasIcon: true,\n hasChildren: false,\n size: 'small',\n class: 'min-w-4'\n },\n {\n hasIcon: true,\n hasChildren: false,\n size: 'medium',\n class: 'min-w-5'\n },\n {\n hasIcon: true,\n hasChildren: false,\n size: 'large',\n class: 'min-w-6'\n },\n {\n hasChildren: true,\n size: 'small',\n class: 'px-1.5'\n },\n {\n hasChildren: true,\n size: 'medium',\n class: 'px-2'\n },\n {\n hasChildren: true,\n size: 'large',\n class: 'px-2.5'\n },\n {\n hasIcon: true,\n hasChildren: true,\n size: 'small',\n class: 'min-w-10'\n },\n {\n hasIcon: true,\n hasChildren: true,\n size: 'medium',\n class: 'min-w-12'\n },\n {\n hasIcon: true,\n hasChildren: true,\n size: 'large',\n class: 'min-w-14'\n },\n {\n colorStyle: ['warning', ...COLOR_STYLE_VALUES],\n variant: 'filled',\n class: 'color-white'\n },\n {\n colorStyle: [...PRODUCT_NAME_VALUES],\n class: 'color-white'\n },\n {\n colorStyle: ['neutral', 'warning', ...COLOR_STYLE_VALUES],\n variant: 'subtle',\n class: 'color-black bg-opacity-20'\n },\n {\n colorStyle: 'primary',\n variant: 'filled',\n class: primary.accent.default.bg.base\n },\n {\n colorStyle: 'primary',\n variant: 'subtle',\n class: primary.accent.dark.bg.base\n },\n {\n colorStyle: 'success',\n variant: 'filled',\n class: primary.success.default.bg.base\n },\n {\n colorStyle: 'success',\n variant: 'subtle',\n class: primary.success.dark.bg.base\n },\n {\n colorStyle: 'error',\n variant: 'filled',\n class: primary.error.default.bg.base\n },\n {\n colorStyle: 'error',\n variant: 'subtle',\n class: primary.error.default.bg.base\n },\n {\n colorStyle: 'warning',\n class: 'bg-yellow-600'\n },\n {\n colorStyle: 'neutral',\n variant: 'filled',\n class: [primary.background.lightest.base, primary.text.darkest.base]\n },\n {\n colorStyle: 'neutral',\n variant: 'subtle',\n class: primary.background.dark.base\n },\n {\n colorStyle: 'analytics',\n class: 'bg-analytics-default'\n },\n {\n colorStyle: 'approvals',\n class: 'bg-approvals-default'\n },\n {\n colorStyle: 'apps',\n class: 'bg-apps-default'\n },\n {\n colorStyle: 'forms',\n class: 'bg-forms-default'\n },\n {\n colorStyle: 'inbox',\n class: 'bg-inbox-default'\n },\n {\n colorStyle: 'pages',\n class: 'bg-pages-default'\n },\n {\n colorStyle: 'pdf',\n class: 'bg-pdf-default'\n },\n {\n colorStyle: 'reports',\n class: 'bg-reports-default'\n },\n {\n colorStyle: 'sign',\n class: 'bg-sign-default'\n },\n {\n colorStyle: 'tables',\n class: 'bg-tables-default'\n },\n {\n colorStyle: 'teams',\n class: 'bg-teams-default'\n }\n ]\n }\n);\n\nexport const badgeIconCVA = cva('color-current shrink-0', {\n variants: {\n size: {\n small: 'w-2.5 h-2.5',\n medium: 'w-3.5 h-3.5',\n large: 'w-4 h-4'\n }\n }\n});\n\nexport const badgeTextCVA = cva('', {\n variants: {\n truncate: {\n true: 'min-w-0 truncate',\n false: 'whitespace-nowrap'\n }\n }\n});\n","import { ComponentPropsWithoutRef } from 'react';\nimport {\n ColorStyle, Icon, ProductName, Size\n} from '../../constants/common.types';\n\nexport type BadgeProps = ComponentPropsWithoutRef<'span'> & {\n size?: Size,\n colorStyle?: ProductName | ColorStyle | 'neutral' | 'warning',\n variant?: 'filled' | 'subtle',\n truncate?: boolean,\n rounded?: boolean,\n icon?: Icon\n}\n\nexport const badgeDefaultProps:Partial = {\n rounded: true,\n variant: 'filled',\n colorStyle: 'primary',\n size: 'medium',\n truncate: false\n};\n","import React from 'react';\nimport { cx } from 'class-variance-authority';\n\nimport '@jotforminc/jotform.css';\n\nimport { badgeCVA, badgeIconCVA, badgeTextCVA } from './badge.cva';\nimport { BadgeProps, badgeDefaultProps } from './badge.types';\n\nexport const Badge = (props: BadgeProps):JSX.Element => {\n const {\n className,\n children,\n colorStyle,\n rounded,\n size,\n truncate,\n variant,\n icon: BadgeIcon,\n ...rest\n } = props;\n\n const hasChildren = !!children;\n const hasIcon = !!BadgeIcon;\n\n const badgeClassName = cx(className, badgeCVA({\n colorStyle,\n rounded,\n size,\n variant,\n truncate,\n hasChildren,\n hasIcon\n }));\n\n return (\n \n {hasIcon && }\n {hasChildren && {children}}\n \n );\n};\n\nBadge.defaultProps = badgeDefaultProps;\n","import React, { PureComponent } from 'react';\nimport PropTypes, { bool } from 'prop-types';\nimport classNames from 'classnames';\nimport { t } from '@jotforminc/translation';\nimport { IconChevronDown, IconXmark } from '@jotforminc/svg-icons';\nimport { Badge } from '@jotforminc/magnet';\n\nclass NavigationTrigger extends PureComponent {\n render() {\n const {\n appTag = '',\n appTitle = '',\n appName = '',\n summary = {},\n toggleNavigation = () => {},\n logDiscoverabilityActions = f => f,\n isAppPickerTooltipActive = false,\n onAppPickerTooltipOverlayClicked = f => f,\n onAppPickerTooltipCloseIconClicked = f => f,\n onAppPickerTooltipRendered = f => f,\n darkMode = false,\n isNavigationOpened = false\n } = this.props;\n\n const notification = Object.values(summary).findIndex(s => (s?.notification || 0) > 0) > -1;\n\n if (isAppPickerTooltipActive) {\n onAppPickerTooltipRendered();\n }\n\n const appTitleName = appName === 'myTeams' ? appTitle : t(appTitle);\n\n const isBetaAsset = ['boards', 'myboards', 'conversations', 'myagents'].includes(appName?.toLowerCase()) || false;\n\n return (\n <>\n {\n toggleNavigation();\n\n // discoverabilityTracking\n if (appName === 'formBuilder' || appName === 'myForms') {\n logDiscoverabilityActions({\n action: 'click',\n target: '.appSelectorTrigger-button'\n });\n }\n }}\n aria-haspopup=\"true\"\n aria-expanded={isNavigationOpened}\n data-testid=\"appSelectorTrigger-button\"\n aria-label={`${t('Product Selector, Currently Selected')} ${appTitleName}`}\n >\n \n {appTitle}\n \n {isBetaAsset ? (\n \n {t('BETA')}\n \n ) : null}\n \n \n \n
    \n \n {isAppPickerTooltipActive\n && (\n
    \n \n \n \n
    {t(\"You've got responses! 🎉'\")}
    \n

    {t('Now click here to discover how you can make the most of your responses.')}

    \n
    \n )}\n\n {isAppPickerTooltipActive\n && (\n <>\n \n \n )}\n\n \n );\n }\n}\n\nNavigationTrigger.propTypes = {\n appTag: PropTypes.string,\n appTitle: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n appName: PropTypes.string,\n toggleNavigation: PropTypes.func,\n summary: PropTypes.shape({}),\n logDiscoverabilityActions: PropTypes.func,\n isAppPickerTooltipActive: bool,\n onAppPickerTooltipOverlayClicked: PropTypes.func,\n onAppPickerTooltipCloseIconClicked: PropTypes.func,\n onAppPickerTooltipRendered: PropTypes.func,\n darkMode: PropTypes.bool,\n isNavigationOpened: PropTypes.bool\n};\n\nexport default NavigationTrigger;\n","import React from 'react';\nimport PropTypes, { string, bool } from 'prop-types';\nimport { onClickOutsideHOC } from '@jotforminc/account-box';\nimport { ActionManager } from '@jotforminc/abtest-manager';\n\nimport { appConfigPropsTypes } from './navigationConstants';\nimport Navigation from '.';\nimport NavigationTrigger from './NavigationTrigger';\nimport '../../styles/_jfAppPicker.scss';\nimport '../../styles/_jfAppPickerSideMode.scss';\n\nclass NavigationWrapper extends React.PureComponent {\n constructor(props) {\n super(props);\n\n // discoverabilityTracking\n const { user = {} } = this.props;\n this.discoverabilityTracking = new ActionManager({ user, projectName: 'discoverabilityTracking', trackOnce: true });\n }\n\n handleClickOutside() {\n const { isNavigationOpened = false, toggleNavigation = f => f } = this.props;\n if (isNavigationOpened) { toggleNavigation(); }\n }\n\n render() {\n const {\n appList = [],\n appID = '',\n formIDs = [],\n appName = '',\n appTag = '',\n form = {},\n forms = [],\n isNavigationOpened = false,\n toggleNavigation = () => {},\n backToMyFormsText = 'Go Back to My Forms',\n backToMyFormsLink = '/myforms',\n onMyformsClick = null,\n showBackToMyForms = true,\n summary = {},\n visibleNavigationApps = [],\n title = '',\n hideIfEmpty = false,\n isAppPickerSideModeActive = false,\n isAppPickerTooltipActive = false,\n onAppPickerTooltipOverlayClicked = f => f,\n onAppPickerTooltipCloseIconClicked = f => f,\n onAppPickerTooltipRendered = f => f,\n darkMode = false,\n isInSsrHeader = false,\n teamID = '',\n teams = [],\n openCreateTeamModal = () => {},\n showTeamSection = false,\n isTeamPage = false,\n isInListings = false,\n isTeamCreationDisabled = false,\n isTeamBrowsingDisabled = false,\n createForm = f => f,\n appConfig = {},\n user,\n agentID = ''\n } = this.props;\n\n return (\n
    \n \n \n
    \n );\n }\n}\n\nNavigationWrapper.propTypes = {\n appConfig: appConfigPropsTypes.isRequired,\n appList: PropTypes.arrayOf(PropTypes.string),\n appID: PropTypes.string,\n formIDs: PropTypes.arrayOf(PropTypes.string),\n appName: PropTypes.string,\n appTag: PropTypes.string,\n showBackToMyForms: PropTypes.bool,\n form: PropTypes.shape({}),\n forms: PropTypes.arrayOf(PropTypes.shape({})),\n isNavigationOpened: PropTypes.bool,\n toggleNavigation: PropTypes.func,\n backToMyFormsText: string,\n backToMyFormsLink: string,\n onMyformsClick: PropTypes.func,\n summary: PropTypes.shape({}),\n visibleNavigationApps: PropTypes.arrayOf(PropTypes.string),\n title: string,\n user: PropTypes.shape({\n account_type: PropTypes.shape({\n name: PropTypes.string\n })\n }).isRequired,\n hideIfEmpty: bool,\n isAppPickerSideModeActive: bool,\n isAppPickerTooltipActive: bool,\n onAppPickerTooltipOverlayClicked: PropTypes.func,\n onAppPickerTooltipCloseIconClicked: PropTypes.func,\n onAppPickerTooltipRendered: PropTypes.func,\n darkMode: PropTypes.bool,\n isInSsrHeader: PropTypes.bool,\n teamID: PropTypes.string,\n teams: PropTypes.arrayOf(PropTypes.shape({})),\n openCreateTeamModal: PropTypes.func,\n showTeamSection: PropTypes.bool,\n isTeamPage: PropTypes.bool,\n isInListings: PropTypes.bool,\n isTeamCreationDisabled: PropTypes.bool,\n isTeamBrowsingDisabled: PropTypes.bool,\n createForm: PropTypes.func,\n agentID: PropTypes.string\n};\n\nexport default onClickOutsideHOC(NavigationWrapper);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { handleCustomNavigation } from '@jotforminc/utils';\nimport { ActivityLogger } from '@jotforminc/activity-logger';\nimport { getDefaultLogoSrc } from '../../utils';\n\nconst Logo = props => {\n const {\n alt = 'JotForm Logo',\n title = 'My Forms',\n className = 'jfLogo',\n href = '',\n background = '',\n src = getDefaultLogoSrc(),\n wrapperClassName = 'jNewHeader-logo iBlock',\n onClick = null,\n preventRedirection = false,\n ariaLabel = ''\n } = props;\n\n const handleClick = e => {\n e.preventDefault();\n if (window?.JotFormActions) {\n ActivityLogger.setLogger(window?.JotFormActions('header-actions'))\n .log({\n action: 'click',\n target: 'topLeftMainLogo'\n });\n }\n\n if (onClick) {\n onClick();\n } else {\n handleCustomNavigation(href, '_self');\n }\n };\n\n return (\n <>\n {preventRedirection\n ? (\n
    \n \n
    \n )\n : (\n \n \n \n )}\n \n );\n};\n\nLogo.propTypes = {\n alt: PropTypes.string,\n title: PropTypes.string,\n className: PropTypes.string,\n href: PropTypes.string,\n background: PropTypes.string,\n src: PropTypes.string,\n wrapperClassName: PropTypes.string,\n onClick: PropTypes.func,\n preventRedirection: PropTypes.bool,\n ariaLabel: PropTypes.string\n};\n\nexport default Logo;\n","import React, {\n useRef,\n useEffect,\n useState,\n memo\n} from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { selectAllText } from '@jotforminc/utils';\n\nconst passiveEvent = { passive: true };\n\nconst Editable = ({\n allowEmpty,\n applyKeyCodes,\n cancelKeyCodes,\n content,\n defaultClass,\n disabled,\n disabledClass,\n editClass,\n forceEdit,\n isSelected,\n onCancel,\n onChange,\n onDoubleClick,\n onEditBegin,\n placeholder,\n style,\n tagName\n}) => {\n const [isEditActive, setIsEditActive] = useState(false);\n const [isForceEdit, setIsForceEdit] = useState(false);\n const editableRef = useRef(null);\n\n const handleClickOutside = e => {\n const { target, target: { textContent: willTrimContent } } = e;\n const trimmedContent = willTrimContent.trim().replace(/(<([^>]+)>)/ig, '');\n\n if (!allowEmpty && !trimmedContent) {\n target.textContent = content;\n onCancel();\n } else {\n target.textContent = trimmedContent;\n onChange(target.textContent, e);\n }\n target.setAttribute('contenteditable', false);\n target.removeEventListener('blur', handleClickOutside, passiveEvent);\n\n setIsEditActive(false);\n setIsForceEdit(false);\n };\n\n useEffect(() => {\n if (!isEditActive && !isForceEdit) {\n editableRef.current.scrollLeft = 0; // Element was shifting to the right\n editableRef.current.removeEventListener('blur', handleClickOutside, passiveEvent);\n }\n }, [isEditActive, isForceEdit]);\n\n useEffect(() => {\n if (isForceEdit && editableRef.current !== null) {\n selectAllText({\n target: editableRef.current,\n shouldCollapse: true,\n focusBefore: true\n });\n }\n }, [isForceEdit]);\n\n useEffect(() => {\n setIsForceEdit(forceEdit);\n if (forceEdit && editableRef.current !== null && !isEditActive) {\n editableRef.current.addEventListener('blur', handleClickOutside, passiveEvent);\n }\n }, [forceEdit]);\n\n const handleDoubleClick = e => {\n const { target } = e;\n if (!disabled) {\n if (!isEditActive) target.addEventListener('blur', handleClickOutside, passiveEvent);\n setIsEditActive(true);\n target.setAttribute('contenteditable', true);\n onEditBegin(target);\n if (!isEditActive) {\n selectAllText({\n target,\n shouldCollapse: true\n });\n }\n }\n onDoubleClick();\n };\n\n const handleKeyUp = e => {\n const { keyCode, target } = e;\n const cancel = cancelKeyCodes.indexOf(keyCode) !== -1;\n const apply = applyKeyCodes.indexOf(keyCode) !== -1;\n if (target.textContent.length === 0 && (!cancel || !apply)) {\n selectAllText({\n target,\n shouldCollapse: true\n });\n }\n if (cancel) target.textContent = content;\n if (cancel || apply) target.blur();\n };\n\n const handleKeyDown = e => {\n e.stopPropagation();\n const { keyCode, shiftKey } = e;\n if (keyCode === 13 && !shiftKey) {\n e.preventDefault();\n }\n };\n\n const handleSingleClick = e => {\n if (isSelected) {\n handleDoubleClick(e);\n }\n };\n const currentContent = content && content.toString ? content.toString().replace(/(<([^>]+)>)/ig, '') : '';\n const CustomTag = tagName;\n\n return (\n \n {currentContent}\n \n );\n};\n\nEditable.defaultProps = {\n tagName: 'div',\n allowEmpty: false,\n applyKeyCodes: [13], // ENTER\n cancelKeyCodes: [27], // ESCAPE\n content: '',\n defaultClass: '',\n disabled: false,\n disabledClass: '',\n editClass: '',\n forceEdit: false,\n isSelected: false,\n onCancel: () => { },\n onChange: () => { },\n onDoubleClick: () => { },\n onEditBegin: () => { },\n placeholder: '',\n style: {}\n};\n\nEditable.propTypes = {\n allowEmpty: PropTypes.bool,\n applyKeyCodes: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.arrayOf(PropTypes.number)\n ]),\n cancelKeyCodes: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.arrayOf(PropTypes.number)\n ]),\n content: PropTypes.string,\n defaultClass: PropTypes.string,\n disabled: PropTypes.bool,\n disabledClass: PropTypes.string,\n editClass: PropTypes.string,\n forceEdit: PropTypes.bool,\n isSelected: PropTypes.bool,\n onCancel: PropTypes.func,\n onChange: PropTypes.func,\n onDoubleClick: PropTypes.func,\n onEditBegin: PropTypes.func,\n placeholder: PropTypes.string,\n style: PropTypes.shape({}),\n tagName: PropTypes.string\n};\n\nexport default memo(Editable);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { Editable } from '@jotforminc/editable';\nimport { IconChevronDown } from '@jotforminc/svg-icons';\n\nclass Title extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {\n isMenuOpened: false\n };\n this.wrapperRef = React.createRef();\n }\n\n toggleMenu = () => {\n this.setState(prevProps => ({ isMenuOpened: !prevProps.isMenuOpened }));\n };\n\n // handle click out side\n\n render() {\n const {\n className = '',\n isEditable = false,\n forceTitleRename = false,\n isIconVisible = true,\n onBlur = f => f,\n appMenuComponent: AppMenu = null,\n onTitleClick = () => {},\n toggleFormList = () => {},\n title = ''\n } = this.props;\n const { isMenuOpened } = this.state;\n const appMenuClass = title && isIconVisible ? ' hasApp' : '';\n const containerClass = `jNewHeader-title iBlock${className}${appMenuClass}`;\n\n return (\n <>\n {isEditable ? (\n \n ) : (\n \n {title}\n
    \n )}\n {title && isIconVisible && (AppMenu ? (\n <>\n
    \n \n \n
    \n {isMenuOpened\n && (\n \n )}\n \n \n ) : (\n \n \n \n ))}\n \n );\n }\n}\n\nTitle.propTypes = {\n className: PropTypes.string,\n isEditable: PropTypes.bool,\n forceTitleRename: PropTypes.bool,\n isIconVisible: PropTypes.bool,\n onBlur: PropTypes.func,\n onTitleClick: PropTypes.func,\n toggleFormList: PropTypes.func,\n appMenuComponent: PropTypes.func,\n title: PropTypes.string\n};\n\nexport default Title;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { IconArrowRotateRight } from '@jotforminc/svg-icons';\n\nconst SubTitle = props => {\n const {\n iconSvg = ,\n isIconVisible = true,\n onClick = () => {},\n onIconClick = () => {},\n title = ''\n } = props;\n\n return (\n \n { typeof title === 'function' ? title() : title }\n { isIconVisible\n && (\n \n {iconSvg}\n \n )}\n \n );\n};\n\nSubTitle.propTypes = {\n iconSvg: PropTypes.element,\n isIconVisible: PropTypes.bool,\n onClick: PropTypes.func,\n onIconClick: PropTypes.func,\n title: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.node])\n};\n\nexport default SubTitle;\n","/* eslint-disable max-len */\nimport React from 'react';\n\nexport const IconGovernment = ({ ...props }) => (\n \n \n \n);\n","/* eslint-disable react/prop-types */\nimport React from 'react';\nimport IconHipaa from '../../assets/svg/iconHipaa.svg';\nimport { IconGovernment } from './IconGovernment';\n\nexport const HeaderBadge = ({ badge }) => {\n if (typeof badge !== 'string') return null;\n switch (badge) {\n case 'hipaa': return (\n
    \n \n \n HIPAA\n
    \n Compliance\n
    \n
    \n );\n case 'government': {\n return (\n
    \n
    \n
    \n \n Government\n
    \n
    \n );\n }\n default: return null;\n }\n};\n","/* eslint-disable react/destructuring-assignment */\nimport React from 'react';\nimport {\n func,\n bool,\n string,\n node,\n shape,\n oneOfType,\n instanceOf,\n arrayOf,\n elementType,\n array\n} from 'prop-types';\nimport classnames from 'classnames';\nimport isObject from 'lodash/isObject';\nimport { truncate } from 'lodash/fp';\nimport { ResizeObserver as ResizeObserverPolyfill } from '@juggle/resize-observer';\nimport { EmptyList } from '@jotforminc/empty-list';\nimport { ResourcePicker, RESOURCE_TYPES } from '@jotforminc/resource-picker';\nimport { ActivityLogger } from '@jotforminc/activity-logger';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\nimport { AccountBox, FormUserAccountBox } from '@jotforminc/account-box';\nimport { t } from '@jotforminc/translation';\nimport { TeamBadge, isBillingTabActive } from '@jotforminc/enterprise-components';\nimport { propTypes } from '@jotforminc/constants';\nimport { handleCustomNavigation, readCookie } from '@jotforminc/utils';\nimport { ActionManager } from '@jotforminc/abtest-manager';\n\nimport NavigationWrapper from '../Navigation/NavigationWrapper';\nimport Logo from '../Logo';\nimport Title from '../Title';\nimport SubTitle from '../SubTitle';\nimport '../../styles/_jfHeader.scss';\nimport {\n appConfigPropsTypes,\n getDefaultNavItems\n} from '../Navigation/navigationConstants';\nimport {\n getToggleContext, getToggleDisabled, getToggleHandler, isShowTeamBadge, hasTeamAvatarInfo\n} from '../../utils';\nimport { fetchTeamProps, getUnpaidInvoices } from '../../utils/api';\nimport IconEmptyFormList from '../../assets/svg/emptyFormList.svg';\nimport { HeaderBadge } from './HeaderBadge';\n\nclass ProductHeader extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.toggleNavigation = this.toggleContext.bind(this, 'navigation');\n this.toggleFormList = this.toggleContext.bind(this, 'formList');\n this.toggleAccountBox = this.toggleContext.bind(this, 'accountBox');\n this.subTitleClick = this.subTitleClick.bind(this);\n this.isFieldVisible = this.isFieldVisible.bind(this);\n this.handleFormChange = this.handleFormChange.bind(this);\n this.renderTitle = this.renderTitle.bind(this);\n this.updateTeamBadgeVisibility = this.updateTeamBadgeVisibility.bind(this);\n this.skipToMainContent = this.skipToMainContent.bind(this);\n this.isAdmin = this.isAdmin.bind(this);\n this.getInvoices = this.getInvoices.bind(this);\n this.showAdminConsole = this.showAdminConsole.bind(this);\n\n // A/B Test: productHeaderSignupButtonII\n this.isGuest = this.isGuest.bind(this);\n this.distributeProductHeaderSignupButtonAbTest = this.distributeProductHeaderSignupButtonAbTest.bind(this);\n\n this.navigationTrigger = React.createRef();\n this.navigationWrapper = React.createRef();\n this.rightWrapper = React.createRef();\n this.titleAligner = React.createRef();\n\n const isProd = window.JOTFORM_ENV === 'PRODUCTION';\n\n const {\n appName = '', user = {}, teamProperties = null\n } = this.props;\n\n this.state = {\n isFormListOpened: false,\n isNavigationOpened: false,\n isAccountBoxOpened: false,\n leftSideWidth: 0,\n rightSideWidth: 0,\n team: teamProperties,\n showTeamBadge: false,\n isTestVariant: false,\n isAbTestLoading: isProd,\n logAbTestAction: f => f\n };\n\n if ('JotFormActions' in window) {\n if (user.username) {\n ActivityLogger.setLogger(window.JotFormActions('commonHeader'))\n .setMiddleware(window.location.href.indexOf('.jotform.pro') < 0)\n .setMiddleware(['ADMIN', 'SUPPORT', 'INTERN'].indexOf(user.account_type.name) < 0)\n .setApp(appName);\n }\n }\n }\n\n componentDidMount() {\n this.updateTeamBadgeVisibility();\n this.getInvoices();\n const ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill;\n this.resizeRightSideObserver = new ResizeObserver(entries => {\n const newWidth = entries[0].target.offsetWidth;\n this.setState(state => {\n if (state.rightSideWidth !== newWidth) {\n return { rightSideWidth: newWidth };\n }\n });\n });\n\n this.resizeLeftSideObserver = new ResizeObserver(entries => {\n const newWidth = entries[0].target.offsetWidth;\n this.setState(state => {\n if (state.leftSideWidth !== newWidth) {\n return { leftSideWidth: newWidth };\n }\n });\n });\n\n this.resizeRightSideObserver.observe(this.rightWrapper.current);\n if (this.navigationWrapper.current) {\n this.resizeLeftSideObserver.observe(this.navigationWrapper.current);\n }\n\n // A/B Test: productHeaderSignupButtonII\n this.distributeProductHeaderSignupButtonAbTest();\n }\n\n componentDidUpdate(prevProps) {\n const {\n user = {}, isTeamMember = false, teamBadgeID = ''\n } = this.props;\n const {\n user: prevUser, isTeamMember: prevIsTeamMember, teamBadgeID: prevTeamBadgeID\n } = prevProps;\n if ((prevUser && user && prevUser.userType !== user.userType)\n || prevIsTeamMember !== isTeamMember\n || prevTeamBadgeID !== teamBadgeID\n ) {\n this.updateTeamBadgeVisibility();\n\n // A/B Test: productHeaderSignupButtonII\n this.distributeProductHeaderSignupButtonAbTest();\n }\n if (user.username) {\n ActivityLogger.setUsername(user.username);\n }\n\n this.titleMaxWidthCalculator();\n }\n\n componentWillUnmount() {\n if (this.resizeRightSideObserver) {\n this.resizeRightSideObserver.disconnect();\n }\n if (this.resizeLeftSideObserver) {\n this.resizeLeftSideObserver.disconnect();\n }\n }\n\n get forms() {\n const { forms } = this.props;\n if (!forms) {\n return [];\n }\n\n return forms.filter(f => !f.properties || f.properties?.resourceType !== 'AGENT');\n }\n\n isGuest(user) {\n return user?.accountType === 'GUEST' || user?.accountType?.name === 'GUEST' || user?.account_type === 'GUEST' || user?.account_type?.name === 'GUEST';\n }\n\n // A/B Test: productHeaderSignupButtonII\n distributeProductHeaderSignupButtonAbTest() {\n const { user = {} } = this.props;\n\n try {\n const urlParams = new URLSearchParams(window.location.search);\n const hasUrlParam = urlParams.get('phsbii') === 'true';\n const variation = readCookie('phsb_variation');\n const isTestVariant = variation === '27331' || hasUrlParam;\n const isIncludedInAbTest = !!variation || hasUrlParam;\n const actionManager = new ActionManager({ user, projectName: 'productHeaderSignupButtonII', enableDebugMode: hasUrlParam });\n const logAbTestAction = isIncludedInAbTest && this.isGuest(user) ? actionManager.registerJotformAction : f => f;\n\n this.setState({ isTestVariant, logAbTestAction });\n } catch (e) {\n this.setState({ isTestVariant: false, logAbTestAction: f => f });\n } finally {\n this.setState({ isAbTestLoading: false });\n }\n }\n\n handleFormChange(formID) {\n const { linkHandler = f => f, form: { id } = {} } = this.props;\n if (id === formID || id === formID[0]) return;\n linkHandler(formID);\n this.setState({\n isFormListOpened: false\n });\n ActivityLogger.log({\n action: 'formChanged',\n target: formID\n });\n }\n\n get appConfig() {\n const { appConfig = null, appName = '' } = this.props;\n if (appConfig) return appConfig;\n return getDefaultNavItems(true)[appName];\n }\n\n get textTheme() {\n return 'isDark';\n }\n\n // Fetches invoices to be passed to the AccountBox component to display a warning for overdue invoices\n getInvoices = async () => {\n try {\n if (this.showAdminConsole() && await isBillingTabActive()) {\n const unpaidInvoices = await getUnpaidInvoices();\n\n this.setState(\n currState => ({\n ...currState,\n mostOverdueInvoice: Array.isArray(unpaidInvoices?.mostOverdueInvoice)\n ? unpaidInvoices?.mostOverdueInvoice[0] || {}\n : unpaidInvoices?.mostOverdueInvoice || {}\n })\n );\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Unable to get invoices', error);\n }\n };\n\n titleMaxWidthCalculator = () => {\n const { leftSideWidth, rightSideWidth } = this.state;\n if (!leftSideWidth || !rightSideWidth) return;\n\n const maxValue = Math.max(leftSideWidth, rightSideWidth);\n const totalValue = leftSideWidth + rightSideWidth;\n\n if (this.maxValue !== maxValue || window.innerWidth < 501) {\n if (window.innerWidth > 500) {\n this.titleAligner.current.style.maxWidth = `calc(100% - ${maxValue * 2 + 40}px)`;\n } else if (window.innerWidth < 501) {\n this.titleAligner.current.style.maxWidth = `calc(100% - ${totalValue + 20}px)`;\n }\n this.maxValue = maxValue;\n }\n };\n\n showAdminConsole() {\n const { hideAdminConsole = false } = this.props;\n\n return !hideAdminConsole && isEnterprise() && this.isAdmin();\n }\n\n isAdmin() {\n const { user = {} } = this.props;\n\n return isObject(user.account_type) ? user.account_type.name === 'ADMIN' : user.account_type === 'ADMIN';\n }\n\n updateTeamBadgeVisibility() {\n const {\n user = {}, isTeamMember = false, teamBadgeID = '', teamProperties = null\n } = this.props;\n const { team } = this.state;\n const showTeamBadge = isShowTeamBadge(user, isTeamMember, teamBadgeID);\n this.setState(currState => ({ ...currState, showTeamBadge }));\n if (showTeamBadge && !hasTeamAvatarInfo(team)) {\n if (hasTeamAvatarInfo(teamProperties)) {\n this.setState(currState => ({ ...currState, team: teamProperties }));\n } else {\n fetchTeamProps(teamBadgeID).then(resp => {\n if (resp?.name) {\n this.setState(currState => ({ ...currState, team: resp }));\n }\n });\n }\n }\n }\n\n toggleContext(_context) {\n const context = getToggleContext(_context);\n const handler = getToggleHandler(_context);\n const disable = getToggleDisabled(_context);\n\n if (this.props[disable] === true) return;\n\n this.setState(state => ({ [context]: !state[context] }), () => {\n ActivityLogger.log({\n action: context,\n target: this.state[context]\n });\n if (context === 'isFormListOpened' && !this.state[context]) {\n ActivityLogger.log({\n action: 'formListClosed'\n });\n }\n this.props[handler](this.state[context]);\n });\n }\n\n subTitleClick() {\n const { form = {} } = this.props;\n ActivityLogger.log({\n action: 'subTitleClicked',\n target: form.id\n });\n }\n\n logoutUser() {\n const { location: { origin } } = window;\n handleCustomNavigation(`${origin}/logout.php?backTo=${origin}`, '_self', true);\n }\n\n isFieldVisible(field) {\n if (!isEnterprise()) {\n return true;\n }\n\n const { enterpriseConfigs: { hideFields = [] } } = this.props;\n return hideFields.indexOf(field) === -1;\n }\n\n /**\n * Gain focus on the element with the id given in\n * mainContentLinkDestination prop, if an event is passed\n * prevent its default behaviour.\n */\n skipToMainContent(e) {\n const { mainContentLinkDestination = '' } = this.props;\n e.preventDefault();\n document.getElementById(mainContentLinkDestination.replace('#', ''))?.focus();\n }\n\n renderTitle() {\n const {\n form = {},\n onTitleBlur = f => f,\n onTitleClick = f => f,\n titleClassName = '',\n appMenuComponent = null,\n forceTitleRename = false,\n TitleRenderer = Title,\n title = ''\n } = this.props;\n const { components } = this.appConfig;\n\n return (\n \n );\n }\n\n // eslint-disable-next-line complexity\n render() {\n const {\n isNavigationOpened,\n isFormListOpened,\n isAccountBoxOpened\n } = this.state;\n\n const {\n handleSwitchToOld = false,\n navigationToggleDisabled = false,\n appList = [],\n appName = '',\n appTag = '',\n children = null,\n eventTypes,\n form = {},\n appID = '',\n formIDs = [],\n logoAction = null,\n onMyformsClick = null,\n subTitle = '',\n emptyFormListTitle = null,\n emptyFormListDescription = null,\n emptyFormListIcon = ,\n backToMyFormsText = 'Go Back to My Forms',\n backToMyFormsLink = '/myforms',\n formListSearchPlaceholder = 'Search in your forms',\n formListTitle = 'Go to another form',\n formListDescription = 'You\\'ve done great on this form. Time to focus on another one? Let\\'s go then!',\n submissionsKeyword = 'Submissions',\n user = {},\n enterpriseConfigs = {\n hideFields: [],\n preventLogoRedirection: false,\n visibleNavigationApps: []\n },\n customHeaderClass = null,\n logo = {},\n onLoginSuccess = () => window.location.reload(),\n navigationAppTitle = '',\n actionLogger = null,\n showAppNavigation = true,\n currentMode = undefined,\n forceUseRegularAccountBox = undefined,\n loginPredefinedEmail = '',\n signupPredefinedEmail = '',\n initialLoginScreen = 'signupOptions',\n forceRegularUser = true,\n initiator = '',\n verificationHash = '',\n shouldCallNavigate = true,\n showUserLimitList = true,\n LogoTitleRenderer = null,\n customResourcePickerItems = [],\n isAppPickerSideModeActive = undefined,\n isAppPickerPulseActive = false,\n isAppPickerTooltipActive = false,\n onAppPickerTooltipCloseIconClicked = f => f,\n onAppPickerTooltipRendered = f => f,\n teamID = '',\n mainContentLinkDestination = '',\n navigationLinkDestination = '',\n productType = '',\n resourceType = RESOURCE_TYPES.FORM,\n childrenPosition = '',\n createForm = f => f,\n settingsDontUseRootPath = false,\n tooltipAttach,\n tooltipText,\n ssoLoginOptions,\n hideSignUp,\n agentID,\n isAccountBoxVisible = true\n } = this.props;\n const {\n mostOverdueInvoice, team, showTeamBadge, isAbTestLoading, isTestVariant, logAbTestAction\n } = this.state;\n const { appConfig } = this;\n const { components, className: appClassName } = appConfig;\n const { campaign: { type: userCampaign = null } = {} } = user;\n const campaignAvailable = ['BLACKFRIDAY', 'EOY', 'NEWUSER'].includes(userCampaign);\n const isCampaignActive = campaignAvailable && ['reports', 'tables', 'inbox'].includes(appName);\n\n const rootClassNames = classnames({\n jNewHeader: true,\n [appClassName]: true,\n [this.textTheme]: true,\n [customHeaderClass]: !!customHeaderClass,\n appBoxOpened: isNavigationOpened,\n navigationToggleDisabled,\n branding21: truncate,\n isCampaignAvatarActive: isCampaignActive,\n appPickerSideWrapper: isAppPickerSideModeActive,\n appPickerPulseActive: isAppPickerPulseActive,\n appPickerTooltipActive: isAppPickerTooltipActive\n });\n const { preventLogoRedirection = false, visibleNavigationApps = [] } = enterpriseConfigs;\n const badgeType = (user.isGovernment ? 'government' : '') || (user.isHIPAA === '1' ? 'hipaa' : '');\n return (\n \n {mainContentLinkDestination && (\n {\n if (e.code === 'Space' || e.code === 'Enter') {\n this.skipToMainContent(e);\n }\n }}\n >\n {t('Skip to main content')}\n \n )}\n {navigationLinkDestination && (\n \n {t('Skip to navigation')}\n \n )}\n {this.isFieldVisible('Logo') && (\n \n { components.logo.visible && (\n \n )}\n \n {this.isFieldVisible('AppNavigation') && showAppNavigation && (\n \n )}\n {LogoTitleRenderer && }\n
    \n )}\n \n {childrenPosition === 'left' && children}\n\n {components.title.visible && (\n \n {this.renderTitle()}\n \n )}\n { components.subTitle.visible && (\n {}}\n />\n )}\n \n \n { !childrenPosition && children }\n {isAccountBoxVisible && this.isFieldVisible('AccountBox') && user && (\n (!forceUseRegularAccountBox && user.userType === 'formuser') ? (\n
    \n \n
    \n ) : (\n \n )\n )}\n \n {this.isFieldVisible('FormPicker') && isFormListOpened && (\n }\n showHeader={true}\n listTitle={formListTitle}\n listDescription={formListDescription}\n searchPlaceholder={formListSearchPlaceholder}\n isModal={true}\n isModalOpen={isFormListOpened}\n onClose={this.toggleFormList}\n submissionsKeyword={submissionsKeyword}\n customItemsList={customResourcePickerItems}\n t={t}\n productType={productType}\n />\n )}\n \n );\n }\n}\n\nProductHeader.propTypes = {\n /* eslint-disable react/no-unused-prop-types */\n // Toggle handlers are dynamically used\n accountBoxToggleHandler: func,\n formListToggleHandler: func,\n navigationToggleHandler: func,\n // Toggle disable props are dynamically used\n navigationToggleDisabled: bool,\n formListToggleDisabled: bool,\n accountBoxToggleDisabled: bool,\n /* eslint-enable react/no-unused-prop-types */\n appConfig: appConfigPropsTypes,\n appList: instanceOf(Array),\n appName: string,\n appTag: string,\n children: node,\n form: shape({\n id: string,\n title: string\n }),\n title: string,\n appID: string,\n formIDs: instanceOf(Array),\n enterpriseConfigs: shape({\n hideFields: instanceOf(Array),\n visibleNavigationApps: instanceOf(Array),\n preventLogoRedirection: bool\n }),\n forms: instanceOf(Array),\n linkHandler: func,\n logoAction: func,\n onMyformsClick: func,\n handleSwitchToOld: oneOfType([func, bool]),\n onTitleBlur: func,\n onTitleClick: func,\n appMenuComponent: func,\n subTitle: oneOfType([func, string, node]),\n titleClassName: string,\n forceTitleRename: bool,\n backToMyFormsText: string,\n backToMyFormsLink: string,\n formListTitle: string,\n formListDescription: string,\n formListSearchPlaceholder: string,\n emptyFormListTitle: node,\n emptyFormListDescription: node,\n emptyFormListIcon: node,\n user: shape({\n username: string,\n account_type: oneOfType([shape({\n name: string\n }), string]),\n userType: string,\n email: string\n }),\n customHeaderClass: string,\n logo: shape({\n src: string\n }),\n onLoginSuccess: func,\n TitleRenderer: elementType,\n navigationAppTitle: oneOfType([string, node]),\n actionLogger: func,\n showAppNavigation: bool,\n currentMode: string,\n forceUseRegularAccountBox: bool,\n loginPredefinedEmail: string,\n signupPredefinedEmail: string,\n initialLoginScreen: string,\n forceRegularUser: bool,\n initiator: string,\n verificationHash: string,\n shouldCallNavigate: bool,\n hideAdminConsole: bool,\n showUserLimitList: bool,\n submissionsKeyword: string,\n LogoTitleRenderer: elementType,\n customResourcePickerItems: arrayOf(shape({\n CustomItemComponent: propTypes.renderable,\n props: shape({})\n })),\n isAppPickerSideModeActive: bool,\n isAppPickerPulseActive: bool,\n isAppPickerTooltipActive: bool,\n onAppPickerTooltipCloseIconClicked: func,\n onAppPickerTooltipRendered: func,\n teamID: string,\n mainContentLinkDestination: string,\n navigationLinkDestination: string,\n teamProperties: shape({}),\n teamBadgeID: string,\n productType: string,\n isTeamMember: bool,\n resourceType: string,\n childrenPosition: string,\n createForm: func,\n settingsDontUseRootPath: bool,\n tooltipAttach: string,\n tooltipText: string,\n eventTypes: array,\n ssoLoginOptions: array,\n hideSignUp: bool,\n agentID: string,\n isAccountBoxVisible: bool\n};\n\nProductHeader.defaultProps = {\n accountBoxToggleHandler: f => f,\n handleSwitchToOld: false,\n formListToggleHandler: f => f,\n navigationToggleHandler: f => f,\n navigationToggleDisabled: false,\n formListToggleDisabled: false,\n accountBoxToggleDisabled: false,\n appConfig: null,\n appList: [],\n appName: '',\n title: null,\n appTag: '',\n children: null,\n form: {},\n appID: '',\n formIDs: [],\n forms: [],\n linkHandler: f => f,\n logoAction: null,\n appMenuComponent: null,\n onMyformsClick: null,\n onTitleBlur: f => f,\n onTitleClick: null,\n subTitle: '',\n titleClassName: '',\n emptyFormListTitle: null,\n emptyFormListDescription: null,\n emptyFormListIcon: ,\n forceTitleRename: false,\n backToMyFormsText: 'Go Back to My Forms',\n backToMyFormsLink: '/myforms',\n formListSearchPlaceholder: 'Search in your forms',\n formListTitle: 'Go to another form',\n formListDescription: 'You\\'ve done great on this form. Time to focus on another one? Let\\'s go then!',\n submissionsKeyword: 'Submissions',\n user: {},\n enterpriseConfigs: {\n hideFields: [],\n preventLogoRedirection: false,\n visibleNavigationApps: []\n },\n customHeaderClass: null,\n logo: {},\n onLoginSuccess: () => window.location.reload(),\n navigationAppTitle: '',\n TitleRenderer: Title,\n actionLogger: null,\n showAppNavigation: true,\n currentMode: undefined,\n forceUseRegularAccountBox: undefined,\n loginPredefinedEmail: '',\n signupPredefinedEmail: '',\n initialLoginScreen: 'signupOptions',\n forceRegularUser: true,\n initiator: '',\n verificationHash: '',\n shouldCallNavigate: true,\n hideAdminConsole: false,\n showUserLimitList: true,\n LogoTitleRenderer: null,\n customResourcePickerItems: [],\n isAppPickerSideModeActive: undefined,\n isAppPickerPulseActive: false,\n isAppPickerTooltipActive: false,\n onAppPickerTooltipCloseIconClicked: f => f,\n onAppPickerTooltipRendered: f => f,\n teamID: '',\n mainContentLinkDestination: '',\n navigationLinkDestination: '',\n teamProperties: null,\n teamBadgeID: '',\n productType: '',\n isTeamMember: false,\n resourceType: RESOURCE_TYPES.FORM,\n childrenPosition: '',\n createForm: f => f,\n settingsDontUseRootPath: false,\n tooltipAttach: 'Bottom',\n tooltipText: null,\n eventTypes: undefined,\n ssoLoginOptions: [],\n hideSignUp: false,\n agentID: '',\n isAccountBoxVisible: true\n};\n\nexport default ProductHeader;\n","import React, { PureComponent } from 'react';\nimport ProductHeader from '../ProductHeader';\n\nclass Header extends PureComponent {\n render() {\n return ;\n }\n}\n\nexport default Header;\n","import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { SortableElement } from 'react-sortable-hoc';\nimport { Editable } from '@jotforminc/editable';\n\nclass TabItem extends PureComponent {\n constructor(props) {\n super(props);\n this.handleTabNameChange = this.handleTabNameChange.bind(this);\n this.handleClick = this.handleClick.bind(this);\n }\n\n handleDoubleClick = () => {\n const { handleDoubleClick } = this.props;\n\n if (handleDoubleClick) {\n handleDoubleClick();\n }\n };\n\n handleContextMenu = e => {\n const { isActive, handleContextMenu } = this.props;\n if (isActive && handleContextMenu) {\n e.preventDefault();\n handleContextMenu(e);\n }\n };\n\n handleClick(e) {\n const { tab, handleTabChange, handleMouseLeave } = this.props;\n const tabID = tab.id;\n\n handleTabChange(tabID);\n handleMouseLeave(e);\n }\n\n handleTabNameChange(content) {\n const { handleTabNameChange, closeTabRename } = this.props;\n handleTabNameChange(content);\n closeTabRename();\n }\n\n render() {\n const {\n tab, isActive, renderTabIconRight, renderTabIconLeft, getTabClassName,\n showNotification, isTabRenameDisabled, forceTabRename, closeTabRename,\n handleMouseEnter, handleMouseLeave\n } = this.props;\n\n const tabID = tab.id;\n\n return (\n {}}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n aria-label={tab.type}\n tabIndex={isActive ? '0' : '-1'}\n aria-selected={isActive}\n role=\"tab\"\n >\n {renderTabIconLeft && renderTabIconLeft(tab.type, isActive, tabID)}\n \n {renderTabIconRight && renderTabIconRight(tab)}\n \n );\n }\n}\n\nTabItem.propTypes = {\n tab: PropTypes.shape({\n name: PropTypes.string,\n id: PropTypes.string.isRequired,\n count: PropTypes.number,\n type: PropTypes.string\n }).isRequired,\n renderTabIconRight: PropTypes.func,\n renderTabIconLeft: PropTypes.func,\n getTabClassName: PropTypes.func.isRequired,\n isActive: PropTypes.bool.isRequired,\n handleTabChange: PropTypes.func.isRequired,\n handleTabNameChange: PropTypes.func.isRequired,\n handleContextMenu: PropTypes.func.isRequired,\n handleDoubleClick: PropTypes.func,\n forceTabRename: PropTypes.bool,\n closeTabRename: PropTypes.func.isRequired,\n isTabRenameDisabled: PropTypes.bool.isRequired,\n showNotification: PropTypes.bool.isRequired,\n handleMouseEnter: PropTypes.func.isRequired,\n handleMouseLeave: PropTypes.func.isRequired\n};\n\nTabItem.defaultProps = {\n forceTabRename: false,\n handleDoubleClick: null,\n renderTabIconRight: null,\n renderTabIconLeft: null\n};\n\nexport default SortableElement(TabItem);\n","import React, { memo } from 'react';\nimport { createPortal } from 'react-dom';\n\nconst unsupportedBrowserForLocaleString = window.navigator.userAgent.indexOf('MSIE ') > 0; // IE 10 or older\n\nconst TabItemInfo = ({\n tab,\n style\n}) => {\n let count = parseInt(tab.count, 10);\n if (Number.isNaN(count)) count = 0;\n count = unsupportedBrowserForLocaleString\n ? count.toLocaleString().slice(0, -3)\n : count.toLocaleString();\n\n return createPortal(\n \n
    \n
    {tab.name}
    \n
    \n \n ,\n document.body\n );\n};\n\nexport default memo(TabItemInfo);\n","import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { SortableContainer } from 'react-sortable-hoc';\n\nimport TabItem from './TabItem';\nimport TabItemInfo from './TabItemInfo';\n\nconst leftMargin = 16;\nclass Tabs extends PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n activeTabItemInfo: null\n };\n }\n\n handleScroll = () => {\n this.setState({ activeTabItemInfo: null });\n };\n\n handleMouseEnter = e => {\n const { activeTabID, tabList } = this.props;\n const target = e.currentTarget;\n const tabID = target.getAttribute('data-tab-id');\n const isActive = activeTabID === tabID;\n const editableNode = target.querySelector('.jfTab-itemName');\n\n if (!isActive && target && editableNode) {\n const { scrollWidth, offsetWidth } = editableNode;\n const rect = target.getBoundingClientRect();\n\n if (scrollWidth > offsetWidth || offsetWidth === 0) {\n const left = rect.left >= leftMargin ? rect.left : leftMargin;\n const foundTab = tabList.find(t => t.id === tabID);\n\n this.setState({\n activeTabItemInfo: {\n tab: foundTab,\n style: {\n left: `${left}px`,\n top: `${rect.top + rect.height}px`,\n display: 'flex'\n }\n }\n });\n }\n }\n };\n\n handleMouseLeave = () => {\n this.setState({ activeTabItemInfo: null });\n };\n\n render() {\n const {\n tabList, activeTabID,\n forceTabRename, handleTabChange, handleTabNameChange,\n closeTabRename, isViewMenuOpened, innerRef, appName,\n renderTabIconRight, renderTabIconLeft, getTabClassName,\n handleContextMenu, handleDoubleClick, isTabRenameDisabled\n } = this.props;\n const { activeTabItemInfo } = this.state;\n\n return (\n <>\n 0 && 'tablist'}\n >\n {tabList.map((tab, tabIndex) => {\n const tabID = tab.id;\n return (\n \n );\n })}\n \n {activeTabItemInfo && }\n \n );\n }\n}\n\nTabs.propTypes = {\n innerRef: PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.shape({})\n ]).isRequired,\n renderTabIconLeft: PropTypes.func,\n renderTabIconRight: PropTypes.func,\n getTabClassName: PropTypes.func.isRequired,\n handleDoubleClick: PropTypes.func,\n activeTabID: PropTypes.string,\n tabList: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n handleContextMenu: PropTypes.func.isRequired,\n handleTabChange: PropTypes.func.isRequired,\n handleTabNameChange: PropTypes.func.isRequired,\n closeTabRename: PropTypes.func.isRequired,\n isTabRenameDisabled: PropTypes.bool.isRequired,\n forceTabRename: PropTypes.bool,\n appName: PropTypes.string,\n isViewMenuOpened: PropTypes.bool\n};\n\nTabs.defaultProps = {\n activeTabID: '',\n appName: '',\n forceTabRename: false,\n renderTabIconLeft: null,\n renderTabIconRight: null,\n handleDoubleClick: null,\n isViewMenuOpened: false\n};\n\nexport default SortableContainer(Tabs);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from 'lodash/debounce';\nimport Tabs from './TabList';\n\nimport '../styles/_jfTab.scss';\n\nconst extraMargin = 10;\n\nclass TabsContainer extends Component {\n constructor(props) {\n super(props);\n\n this.nextTabItem = this.tabMovementWithArrows.bind(this, 'next');\n this.prevTabItem = this.tabMovementWithArrows.bind(this, 'previous');\n this.tabHeaderResizeHandler = debounce(this.tabHeaderResizeHandler.bind(this), 400);\n this.scrollableTabContainer = React.createRef();\n this.tabTools = React.createRef();\n\n window.addEventListener('resize', this.tabHeaderResizeHandler);\n\n this.initialState = this.state;\n }\n\n componentDidMount() {\n this.setTabMenuScrollPosition(0);\n }\n\n componentDidUpdate(prevProps) {\n const { activeTabID } = this.props;\n this.changeArrowVisibility();\n if (prevProps.activeTabID !== activeTabID && activeTabID !== '') {\n const tabItems = this.scrollableTabContainer.current.childNodes;\n const activeTab = Array.from(tabItems).find(item => item.getAttribute('data-tab-id') === activeTabID);\n if (activeTab) {\n this.setPositionAccordingToActiveSheet(activeTab);\n }\n this.handleTabsWidth();\n }\n }\n\n handleTabsWidth() {\n if (!this.scrollableTabContainer.current) {\n return;\n }\n\n const droppableNode = this.scrollableTabContainer.current;\n const tabItemNodes = droppableNode.querySelectorAll('.jfTab-item:not(.isActive)');\n const activeTabNode = droppableNode.querySelector('.jfTab-item.isActive');\n const toolsNode = this.tabTools.current;\n\n if (toolsNode && activeTabNode) {\n activeTabNode.removeAttribute('style');\n const padding = 32;\n const offset = toolsNode.offsetWidth + activeTabNode.offsetWidth + padding;\n const availableSpace = window.innerWidth - offset;\n const diff = availableSpace / tabItemNodes.length;\n\n tabItemNodes.forEach(item => {\n const itemNode = item;\n if (diff < 94) {\n itemNode.classList.add('isIconMode');\n } else {\n itemNode.style.maxWidth = `${diff}px`;\n itemNode.classList.remove('isIconMode');\n }\n this.changeArrowVisibility();\n });\n }\n }\n\n handleKeyUp() {\n\n }\n\n setPositionAccordingToActiveSheet = activeTab => {\n const { tabMenuWidth } = this.getTabSizes();\n const { offsetLeft: offsetLeftValue } = activeTab;\n const activeTabWidth = activeTab.getBoundingClientRect().width;\n const scrollTabContainerLeftPosition = this.scrollableTabContainer.current.scrollLeft;\n const wrapperPaddingValue = 16;\n if ((offsetLeftValue + activeTabWidth) > tabMenuWidth) {\n this.setTabMenuScrollPosition(((offsetLeftValue - tabMenuWidth) + activeTabWidth) - wrapperPaddingValue);\n } else if ((offsetLeftValue - wrapperPaddingValue) < scrollTabContainerLeftPosition) {\n this.setTabMenuScrollPosition(offsetLeftValue - wrapperPaddingValue);\n }\n };\n\n getTabSizes() {\n try {\n const tabMenuWidth = this.scrollableTabContainer.current.getBoundingClientRect().width;\n const tabItems = this.scrollableTabContainer.current.childNodes;\n\n const tabItemsWidth = Array.from(tabItems).reduce((acu, curr) => {\n return acu + curr.getBoundingClientRect().width + extraMargin;\n }, extraMargin * -1);\n\n return { tabItemsWidth, tabMenuWidth };\n } catch (e) {\n // console.log(e.message);\n return { tabItemsWidth: 0, tabMenuWidth: 0 };\n }\n }\n\n getInVisibleItemsWidth() {\n const { tabItemsWidth, tabMenuWidth } = this.getTabSizes();\n return tabItemsWidth > tabMenuWidth ? (tabItemsWidth - tabMenuWidth) * -1 : 0;\n }\n\n setTabMenuScrollPosition(value) {\n if (this.scrollableTabContainer.current) {\n const tabMenu = this.scrollableTabContainer.current.parentElement.childNodes[0].classList;\n tabMenu.add('smooth');\n this.scrollableTabContainer.current.scrollLeft = value;\n tabMenu.remove('smooth');\n }\n }\n\n isArrowsVisible() {\n if (!this.scrollableTabContainer.current) {\n return;\n }\n\n const droppableNode = this.scrollableTabContainer.current;\n const { scrollWidth, offsetWidth } = droppableNode;\n\n return scrollWidth > offsetWidth && scrollWidth !== offsetWidth;\n }\n\n changeArrowVisibility() {\n if (this.tabTools.current) {\n if (this.isArrowsVisible()) {\n this.tabTools.current.classList.add('showArrows');\n } else {\n this.tabTools.current.classList.remove('showArrows');\n this.setTabMenuScrollPosition(0);\n }\n }\n }\n\n tabHeaderResizeHandler() {\n this.handleTabsWidth();\n this.setTabMenuScrollPosition(0);\n }\n\n tabMovementWithArrows(direction) {\n const progression = 100;\n const initialPosition = 0;\n const { scrollLeft } = this.scrollableTabContainer.current;\n const { tabItemsWidth, tabMenuWidth } = this.getTabSizes();\n const remainArea = (tabItemsWidth - tabMenuWidth + 40);\n if (direction === 'next' && scrollLeft < remainArea) {\n if (remainArea > scrollLeft + progression) {\n this.setTabMenuScrollPosition(scrollLeft + progression);\n } else if (remainArea < scrollLeft + progression) {\n this.setTabMenuScrollPosition(scrollLeft + (remainArea - scrollLeft));\n }\n } else if (direction === 'previous' && initialPosition < scrollLeft) {\n if (initialPosition > scrollLeft - progression) {\n this.setTabMenuScrollPosition(initialPosition);\n } else if (initialPosition <= scrollLeft - progression) {\n this.setTabMenuScrollPosition(scrollLeft - progression);\n }\n }\n }\n\n render() {\n const {\n tabs, form, activeTabID, addTabIcon, addTabText,\n leftArrowIcon, rightArrowIcon, trackTools, handleDoubleClick,\n handleTabDragEnd, isViewMenuOpened, handleNewViewClick,\n getTabClassName, handleTabChange, handleTabNameChange,\n closeTabRename, forceTabRename, renderTabIconRight,\n renderTabIconLeft, tabClass, handleContextMenu, isTabRenameDisabled,\n tabRight, tabLeft\n } = this.props;\n\n return (\n
    \n {tabLeft}\n
    \n
    \n {trackTools}\n
    \n \n
    \n
    \n
    \n {!!handleNewViewClick\n && (\n
    \n {addTabIcon}\n {addTabText}\n
    \n )}\n
    \n \n {leftArrowIcon}\n \n \n {rightArrowIcon}\n \n
    \n
    \n
    \n {tabRight}\n
    \n );\n }\n}\n\nTabsContainer.propTypes = {\n handleTabDragEnd: PropTypes.func.isRequired,\n questions: PropTypes.shape({}).isRequired,\n addTabIcon: PropTypes.shape({}),\n leftArrowIcon: PropTypes.shape({}),\n rightArrowIcon: PropTypes.shape({}),\n trackTools: PropTypes.shape({}),\n addTabText: PropTypes.string,\n tabs: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n form: PropTypes.shape({\n get: PropTypes.func\n }).isRequired,\n activeTabID: PropTypes.string,\n handleTabChange: PropTypes.func.isRequired,\n handleTabNameChange: PropTypes.func.isRequired,\n handleDoubleClick: PropTypes.func,\n handleContextMenu: PropTypes.func,\n closeTabRename: PropTypes.func.isRequired,\n handleNewViewClick: PropTypes.func,\n getTabClassName: PropTypes.func,\n renderTabIconRight: PropTypes.func,\n renderTabIconLeft: PropTypes.func,\n forceTabRename: PropTypes.bool,\n isViewMenuOpened: PropTypes.bool,\n isTabRenameDisabled: PropTypes.bool,\n tabClass: PropTypes.string,\n tabRight: PropTypes.node,\n tabLeft: PropTypes.node\n};\n\nTabsContainer.defaultProps = {\n activeTabID: '',\n forceTabRename: false,\n isViewMenuOpened: false,\n addTabIcon: null,\n handleDoubleClick: null,\n rightArrowIcon: null,\n leftArrowIcon: null,\n trackTools: null,\n tabRight: null,\n tabLeft: null,\n handleNewViewClick: null,\n renderTabIconRight: () => {},\n renderTabIconLeft: () => {},\n handleContextMenu: null,\n getTabClassName: () => '',\n addTabText: '',\n isTabRenameDisabled: false,\n tabClass: 'isDefault'\n};\n\nexport default TabsContainer;\n","import React, { forwardRef, useRef, useEffect } from 'react';\nimport {\n string,\n shape,\n bool,\n oneOfType\n} from 'prop-types';\nimport Tethered from 'react-tether';\nimport { usePermissions } from '@jotforminc/permissions';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport { handleCustomNavigation, nodeContains } from '@jotforminc/utils';\nimport { useDelayed } from '@jotforminc/hooks';\n\nimport { connect } from 'react-redux';\nimport SVG from '../../components/SVG';\n\nimport { useClickOutsideState } from '../../hooks';\nimport { classNames } from '../../utils';\nimport { translatedProps } from '../../constants/proptypes';\nimport {\n formSelector,\n autoDeleteSubmissionsInterval,\n allowAutoDeleteSubmissionsSelector\n} from '../../selectors';\nimport { prepareMultipleDownload } from '../../actions';\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\nimport { withInboxEnhancer } from '../../hocs/InboxEnhancer';\n\nconst defaultTetheredSettings = {\n attachment: 'bottom right',\n targetAttachment: 'top right',\n constraints: [{\n to: 'window',\n attachment: 'together',\n pin: true\n }],\n style: { zIndex: 100 }\n};\n\nexport const FormMenuComponent = forwardRef(({\n tetheredSettings,\n className,\n disabled,\n menuClassName,\n form,\n t,\n autoDeleteSubmissionsPeriod,\n allowAutoDeleteSubmissions\n}, ref) => {\n const [isFormMenuVisible, setFormMenuVisibility] = useClickOutsideState(false, [ref]);\n const [isOverflowMenuVisible] = useClickOutsideState(false);\n const formMenuRef = useRef();\n const [, clear, set] = useDelayed(setFormMenuVisibility, 100);\n\n const makeFormMenuVisible = () => {\n setFormMenuVisibility(true);\n };\n\n const makeFormMenuUnvisible = () => {\n setFormMenuVisibility(false);\n };\n\n const onViewForm = () => {\n handleCustomNavigation(`/${form.id}`, '_blank');\n WatchmanRecorder.recordEvent('FormisViewed', 'Inbox-TabMenu');\n };\n const onAssignForm = () => {\n handleCustomNavigation(`/build/${form.id}/publish/assign`, '_blank');\n WatchmanRecorder.recordEvent('FormisAssigned', 'Inbox-TabMenu');\n };\n const onEditForm = () => {\n handleCustomNavigation(`/build/${form.id}`, '_blank');\n WatchmanRecorder.recordEvent('FormisEdited', 'Inbox-TabMenu');\n };\n\n const onAutoDeleteSubmissions = () => {\n handleCustomNavigation(`/build/${form.id}/settings`, '_blank');\n WatchmanRecorder.recordEvent('AutoDeleteSubmissionsEdit', 'Inbox-TabMenu');\n };\n\n const onMouseLeaveFormMenuButton = e => {\n if (nodeContains(formMenuRef, e.target)) return;\n set(false);\n };\n\n // TODO: convert this to a HOC, so we wont need the trick below\n const clickHandler = fn => {\n return {\n onClick: fn\n };\n };\n\n useEffect(() => {\n if (isFormMenuVisible && formMenuRef.current) {\n formMenuRef.current.focus();\n }\n }, [isFormMenuVisible]);\n\n const permissions = usePermissions();\n\n const tethered = {\n ...defaultTetheredSettings,\n ...tetheredSettings\n };\n return (\n <>\n \n }\n aria-haspopup=\"menu\"\n disabled={disabled}\n {...clickHandler(makeFormMenuVisible)}\n onMouseEnter={makeFormMenuVisible}\n onMouseLeave={onMouseLeaveFormMenuButton}\n >\n {t.FORM}\n \n set(false)}\n className={classNames('jfMenu formFormMenu', menuClassName, { isVisible: isFormMenuVisible })}\n >\n }\n {...clickHandler(onViewForm)}\n onMouseEnter={makeFormMenuVisible}\n onMouseLeave={makeFormMenuUnvisible}\n >\n {t.VIEW_FORM}\n \n {permissions.assignForm && (\n }\n {...clickHandler(onAssignForm)}\n onMouseEnter={makeFormMenuVisible}\n onMouseLeave={makeFormMenuUnvisible}\n >\n {t.ASSIGN_FORM}\n \n )}\n {permissions.editForm && (\n }\n {...clickHandler(onEditForm)}\n onMouseEnter={makeFormMenuVisible}\n onMouseLeave={makeFormMenuUnvisible}\n >\n {t.EDIT_FORM}\n \n )}\n {permissions.editForm && allowAutoDeleteSubmissions && (\n }\n {...clickHandler(onAutoDeleteSubmissions)}\n onMouseEnter={makeFormMenuVisible}\n onMouseLeave={makeFormMenuUnvisible}\n >\n {t.AUTO_DELETE_SUBMISSIONS}\n \n {\n autoDeleteSubmissionsPeriod !== 'Disabled' ? (\n t.AUTO_DELETE_SUBMISSIONS_INTERVAL.replace(\n '{autoDeleteInterval}',\n `${autoDeleteSubmissionsPeriod.toLowerCase()}${parseInt(autoDeleteSubmissionsPeriod, 10) > 1 ? 's' : ''}`\n )\n ) : (\n t.AUTO_DELETE_SUBMISSIONS_DISABLED\n )\n }\n \n \n )}\n \n \n \n );\n});\n\nFormMenuComponent.propTypes = {\n form: shape({}).isRequired,\n className: string,\n disabled: string,\n tetheredSettings: shape({}),\n autoDeleteSubmissions: oneOfType([\n shape({}),\n bool\n ]).isRequired,\n allowAutoDeleteSubmissions: bool,\n ...translatedProps\n};\n\nFormMenuComponent.defaultProps = {\n className: '',\n disabled: '',\n tetheredSettings: {},\n allowAutoDeleteSubmissions: false\n};\n\nconst mapState = state => ({\n form: formSelector(state),\n autoDeleteSubmissionsPeriod: autoDeleteSubmissionsInterval(state),\n allowAutoDeleteSubmissions: allowAutoDeleteSubmissionsSelector(state)\n});\n\nconst mapDispatch = {\n initiateMultipleDownload: prepareMultipleDownload\n};\n\nconst enhance = withInboxEnhancer('formMenu', connect(mapState, mapDispatch));\n\nexport default enhance(FormMenuComponent);\n","import React from 'react';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogBody,\n DialogActions,\n DialogCloseButton,\n Button,\n DialogIcon\n} from '@jotforminc/magnet';\nimport {\n bool,\n func,\n node,\n object\n} from 'prop-types';\nimport { IconInfoCircle } from '@jotforminc/svg-icons';\n\nconst TabWarningDialog = ({\n isOpen,\n config: {\n icon,\n texts\n },\n onDelete,\n onClose\n}) => {\n return (\n \n \n \n {texts.title}\n \n
    \n \n {texts.informationText}\n
    \n
    \n
    \n \n \n {texts.cancelButton}\n \n \n {texts.actionButton}\n \n \n \n
    \n );\n};\n\nTabWarningDialog.propTypes = {\n isOpen: bool,\n config: {\n icon: node,\n texts: object\n },\n onDelete: func,\n onClose: func\n};\n\nTabWarningDialog.defaultProps = {\n isOpen: false,\n config: {\n icon: null,\n texts: {}\n },\n onDelete: () => {},\n onClose: () => {}\n};\n\nexport default TabWarningDialog;\n","/* eslint-disable complexity */\nimport React, {\n useRef, useEffect, useMemo, useState\n} from 'react';\nimport {\n string, func, shape, bool\n} from 'prop-types';\nimport Tethered from 'react-tether';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport { useFeatures } from '@paralleldrive/react-feature-toggles';\nimport { TabButtons } from '@jotforminc/tabs';\nimport { IconTrashFilled } from '@jotforminc/svg-icons';\nimport SVG from '../SVG';\nimport { classNames } from '../../utils';\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\nimport { formPropType, translatedProps } from '../../constants/proptypes';\nimport DownloadAll from '../../containers/DownloadAll';\nimport FormMenu from '../../containers/FormMenu';\nimport { withUIDispatcher } from '../../hocs/UserInterfaceManager';\nimport GhostButton from '../GhostButton';\nimport { useClickOutsideState } from '../../hooks';\nimport {\n deleteInboxView, getInboxViews, saveInboxView, updateInboxView\n} from '../../api';\nimport TabWarningDialog from './TabWarningDialog';\n\nconst HeaderTabs = ({\n form,\n tabs,\n activeTab,\n handleTabChange,\n handleSetViews,\n isOwner,\n permissions,\n setSettingsPanel,\n t,\n user\n}) => {\n const menuRef = useRef();\n const branding21 = true;\n const [isMenuVisible, setIsMenuVisible] = useClickOutsideState(false, [menuRef]);\n const [isWarningVisible, setWarningVisibility] = useState(false);\n const conversationsTabPermission = isOwner && user?.AIAgentBetaAccepted === '1';\n\n const [renamingTab, setRenamingTab] = useState();\n\n useEffect(() => {\n setRenamingTab(false);\n }, [activeTab]);\n\n const features = useFeatures();\n const isNewDesign = features.includes('isNewDesign');\n const showCompleted = (isNewDesign && permissions.completedDocuments);\n const tabName = activeTab === 'inbox' ? 'Inbox' : 'New Tab';\n\n const getTabClassName = ({ id, isDisabled, className }) => {\n return classNames(\n className,\n isDisabled && 'isDisabled',\n id === activeTab && 'isActive'\n );\n };\n\n const handleTabItemMenuClick = e => {\n e.preventDefault();\n e.stopPropagation();\n setIsMenuVisible(true);\n };\n\n const handleSettings = () => {\n setIsMenuVisible(false);\n setSettingsPanel({\n isOpened: true, activeTab: 'general'\n });\n };\n\n useEffect(() => {\n if (isMenuVisible && menuRef.current) {\n menuRef.current.focus();\n }\n }, [isMenuVisible]);\n\n const updateViews = async () => {\n return getInboxViews(form.id).then(handleSetViews);\n };\n\n const renderInboxContextMenu = () => (\n { e.stopPropagation(); }}\n onKeyDown\n role=\"menu\"\n aria-hidden={!isMenuVisible}\n tabIndex={isMenuVisible ? 0 : -1}\n >\n
    \n {\n isOwner && (\n }\n onClick={handleSettings}\n >\n {t.INBOX_SETTINGS}\n \n )\n }\n
    \n
    \n \n
    \n
    \n {\n permissions?.download\n && (\n \n )\n }\n\n
    \n \n );\n\n renderInboxContextMenu.onClick = handleTabItemMenuClick;\n\n const handleDeleteTab = () => {\n setIsMenuVisible(false);\n setWarningVisibility(true);\n };\n\n const handleRenameTab = () => {\n setIsMenuVisible(false);\n setRenamingTab(true);\n };\n\n const isSaveAndContinueEnabled = useMemo(\n () => {\n if (Array.isArray(form?.autoFill)) {\n const url = new URL(window.location.href);\n if (url.searchParams.get('useIncomplete') && form?.isHIPAA !== '1') {\n return form?.autoFill[0]?.menu === 'default';\n }\n return false;\n }\n return false;\n },\n [form?.id, form?.isHIPAA]\n );\n\n const handleDuplicateTab = async () => {\n setIsMenuVisible(false);\n const { filterObject, name, color } = tabs[activeTab];\n const newTab = await saveInboxView(form.id, { filterObject, name, color });\n await updateViews();\n handleTabChange(newTab.id);\n WatchmanRecorder.recordEvent('TabisDuplicated', 'Inbox-TabMenu');\n };\n\n const renderAdditionalTabMenu = () => (\n { e.stopPropagation(); }}\n onKeyDown\n role=\"menu\"\n aria-hidden={!isMenuVisible}\n tabIndex={isMenuVisible ? 0 : -1}\n >\n
    \n {\n isOwner && (\n }\n onClick={handleRenameTab}\n >\n {t.RENAME}\n \n )\n }\n
    \n
    \n \n
    \n
    \n {\n isOwner && (\n }\n onClick={handleDuplicateTab}\n >\n {t.DUPLICATE}\n \n )\n }\n
    \n
    \n {\n isOwner && (\n }\n onClick={handleDeleteTab}\n className=\"forDelete\"\n >\n {t.DELETE}\n \n )\n }\n
    \n \n );\n\n renderAdditionalTabMenu.onClick = handleTabItemMenuClick;\n\n const signTabList = [\n {\n id: 'signAllDocuments',\n name: t.SIGN_ALL_DOCS,\n type: 'signAllDocuments',\n className: 'allDocuments',\n icon: 'IconTabSignAll',\n isShown: permissions.signAllDocument\n },\n {\n id: 'signWaitingMySignature',\n name: t.SIGN_WAITING_FOR_SIGNATURE,\n type: 'signWaitingMySignature',\n className: 'waitingDocuments',\n icon: 'IconTabSignWaitingMySignature',\n isShown: permissions.signWaitingMySignature,\n count: tabs && tabs.signWaitingMySignature && tabs.signWaitingMySignature.count\n },\n {\n id: 'signWaitingOthers',\n name: t.SIGN_WAITING_FOR_OTHERS,\n type: 'signWaitingOthers',\n className: 'waitingOthersDocuments',\n icon: 'IconTabSignWaiting',\n isShown: permissions.signWaitingOthers,\n count: tabs && tabs.signWaitingOthers && tabs.signWaitingOthers.count\n },\n {\n id: 'signCompleted',\n name: t.SIGN_COMPLETED,\n type: 'signCompleted',\n className: 'completedDocuments',\n icon: 'IconTabSignCompleted',\n isShown: permissions.signCompleted\n },\n {\n id: 'signCanceled',\n name: t.SIGN_CANCELED,\n type: 'signCanceled',\n className: 'canceledDocuments',\n icon: 'IconTabSignCanceled',\n isShown: permissions.signCanceled\n },\n {\n id: 'signDeclined',\n name: t.SIGN_DECLINED,\n type: 'signDeclined',\n className: 'declinedDocuments',\n icon: 'IconTabSignDeclined',\n isShown: permissions.signDeclined\n }\n ];\n\n const tabList = [\n {\n id: 'inbox',\n name: t.INBOX,\n type: 'inbox',\n className: 'forInbox',\n icon: 'IconProductInboxColorBorder',\n iconPassive: 'IconProductInboxFilled',\n isShown: showCompleted ? isOwner : permissions.inbox,\n contextMenu: renderInboxContextMenu\n },\n {\n id: 'incompleteSubmissions',\n name: t.INCOMPLETE_SUBMISSIONS,\n count: tabs?.incompleteSubmissions?.count,\n type: 'incompleteSubmissions',\n className: 'forIncomplete',\n icon: 'IconTabBrandingIncomplete',\n iconPassive: 'IconTabBrandingIncompletePassive',\n isShown: isOwner && isSaveAndContinueEnabled\n },\n {\n id: 'sentbox',\n name: t.SENTBOX,\n type: 'sentbox',\n className: 'forSentbox',\n icon: 'IconPaperPlaneFilled',\n isShown: permissions.sentbox\n },\n {\n id: 'pendingApprovals',\n name: t.PENDING_APPROVALS,\n count: tabs && tabs.pendingApprovals && tabs.pendingApprovals.count,\n type: 'pendingApprovals',\n className: 'forPendingApprovals',\n icon: 'IconEllipsisHorizontalCircleFilled',\n isShown: permissions.pendingApprovals\n },\n {\n id: 'completed',\n name: t.COMPLETED,\n count: tabs && tabs.completed && tabs.completed.count,\n type: 'completed',\n className: 'forCompleted',\n icon: 'IconCheckSquareFilled',\n isShown: isNewDesign && permissions.completed\n },\n ...signTabList\n ];\n\n const latestTabs = [\n {\n id: 'conversations',\n name: t.AI_CONVERSATIONS,\n count: tabs && tabs.conversations && tabs.conversations.count,\n type: 'conversations',\n className: 'forAiConversations',\n icon: 'IconAiFilled',\n isShown: conversationsTabPermission\n },\n {\n id: 'archive',\n name: t.ARCHIVE,\n count: tabs && tabs.archive && tabs.archive.count,\n type: 'archive',\n className: 'forArchive',\n icon: 'IconBoxArchiveFilled',\n isShown: permissions.archive\n },\n {\n id: 'trash',\n name: t.TRASH,\n type: 'trash',\n className: 'forTrash',\n icon: 'IconTrashFilled',\n isShown: permissions.trash\n }\n ];\n\n const extendedTabList = useMemo(() => {\n return [\n ...tabList,\n ...Object.values(tabs || {}).filter(tab => tab.type === 'additionalTab').map(tab => ({\n ...tab,\n isShown: true,\n count: null,\n className: 'forInbox',\n contextMenu: renderAdditionalTabMenu,\n icon: 'IconProductInboxColorBorder',\n iconPassive: 'IconProductInboxFilled'\n })).sort((a, b) => {\n return a?.id > b?.id ? 1 : -1;\n }),\n ...latestTabs\n ].filter(f => f.isShown);\n }, [tabs, tabList]);\n\n const shouldRenderCountBadge = tabId => signTabList.some(a => a.id === tabId);\n\n const renderTabIconRight = ({\n id, contextMenu = null, count, name\n }) => (\n
    \n {\n shouldRenderCountBadge(id) && (\n \n {count}\n \n )\n }\n {id === activeTab && typeof contextMenu === 'function' ? (\n \n \n {contextMenu()}\n \n ) : null}\n
    \n );\n\n const renderArrow = direction => {\n return (\n \n );\n };\n\n const renderTabIconLeft = (type, isActive, tabID) => {\n const el = extendedTabList.find(e => e.id === tabID);\n const iconName = isActive ? el.icon : el.iconPassive || el.icon;\n if (!iconName) return null;\n\n return ;\n };\n\n const handleContextMenu = e => {\n const { currentTarget } = e;\n\n handleTabItemMenuClick({\n ...e, preventDefault: e.preventDefault, stopPropagation: e.stopPropagation, target: currentTarget\n });\n };\n\n const onDeleteTab = () => {\n setWarningVisibility(false);\n const currentTabIndex = extendedTabList.findIndex(tab => tab.id === activeTab);\n const tabToSwitch = extendedTabList[currentTabIndex + 1] || extendedTabList[currentTabIndex - 1];\n handleTabChange(tabToSwitch.id);\n\n deleteInboxView(form.id, activeTab).then(updateViews);\n WatchmanRecorder.recordEvent('TabisDeleted', 'Inbox-TabMenu');\n };\n\n const onWarningClose = () => {\n setWarningVisibility(false);\n };\n\n const handleTabNameChange = newName => {\n updateInboxView(form.id, activeTab, { name: newName }).then(updateViews);\n setRenamingTab(true);\n WatchmanRecorder.recordEvent('TabisRenamed', 'Inbox-TabMenu');\n };\n\n const currentTabName = useMemo(() => {\n const currentTab = extendedTabList.find(tab => tab.id === activeTab);\n return currentTab?.name;\n }, [extendedTabList]);\n\n const tabWarningDialogConfig = {\n icon: IconTrashFilled,\n texts: {\n title: `${t.DELETE_TAB_TITLE} ${currentTabName}?`,\n informationText: t.THIS_ACTION_CANNOT_BE_UNDONE,\n actionButton: t.YES_DELETE,\n cancelButton: t.NO_KEEP\n }\n };\n\n return (\n <>\n \n {\n extendedTabList.length === 1 && activeTab === 'sentbox' ?
    : (\n setRenamingTab(false)}\n activeTabID={activeTab}\n getTabClassName={getTabClassName}\n handleTabChange={handleTabChange}\n handleTabDragEnd={f => f}\n leftArrowIcon={renderArrow('Left')}\n rightArrowIcon={renderArrow('Right')}\n handleTabNameChange={handleTabNameChange}\n renderTabIconLeft={renderTabIconLeft}\n renderTabIconRight={renderTabIconRight}\n forceTabRename={renamingTab}\n tabClass=\"jfInbox-tab\"\n handleContextMenu={handleContextMenu}\n handleDoubleClick={() => setRenamingTab(!renamingTab)}\n />\n )\n }\n \n );\n};\n\nHeaderTabs.propTypes = {\n form: formPropType.isRequired,\n activeTab: string,\n handleTabChange: func.isRequired,\n handleSetViews: func.isRequired,\n isOwner: bool.isRequired,\n permissions: shape({}).isRequired,\n tabs: shape({\n inbox: shape({}),\n sentbox: shape({}),\n drafts: shape({})\n }).isRequired,\n ...translatedProps\n};\nHeaderTabs.defaultProps = {\n activeTab: ''\n};\n\nexport default withUIDispatcher(HeaderTabs);\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport React, {\n useMemo, useRef, useEffect, useState\n} from 'react';\nimport { string, func, shape } from 'prop-types';\nimport { useQuery } from '@jotforminc/hooks';\nimport { SharePanelTexts, ShareButton as ShareBTN } from '@jotforminc/share-panel';\nimport { IconTurnArrowShortRightFilled } from '@jotforminc/svg-icons';\nimport {\n t,\n translationRenderer\n} from '@jotforminc/translation';\nimport { isEnterprise as isEnterpriseFunc } from '@jotforminc/enterprise-utils';\nimport { safeJSONParse } from '@jotforminc/utils';\n\nimport {\n getShareLink, generateShareLink, getAssignees, bulkShare, revokeUsers,\n updatePermissions, resendShareInvitationEmail, removeAccessRequest, approveAccessRequest\n} from '../../api';\nimport { getQueryParameter } from '../../utils';\nimport { DEFAULT_SHARE_TEXTS } from '../../constants';\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\n\nconst ModalHeader = () => {\n return (\n
    \n

    \n {t('Share This Inbox')}\n

    \n
    \n );\n};\n\nconst ShareButton = ({\n // eslint-disable-next-line react/prop-types\n formID, onUpdateForm, isHIPAA, buttonProps = {}, shareProps = { assigneeProtected: 'Yes' }\n}) => {\n const parsedProps = safeJSONParse(shareProps, shareProps, true);\n const { assigneeProtected, organizationAccess, ssoProtected } = parsedProps;\n const isShareActive = useRef(false);\n if (!formID) {\n return null;\n }\n\n const isEnterprise = isEnterpriseFunc();\n\n const isPublicAccessDisabled = !isEnterprise && (assigneeProtected === 'Yes' || organizationAccess);\n\n const { data: _shareLink, setData: _setShareLink, loading } = useQuery(async () => {\n if (!isShareActive.current) return '';\n try {\n const existingLink = await getShareLink(formID);\n if (existingLink) {\n return existingLink;\n }\n } catch (e) {\n // console.log(e);\n }\n\n return '';\n }, { isShareActive: isShareActive.current, formID });\n\n const _isPrivate = assigneeProtected === 'Yes'\n || (organizationAccess && organizationAccess !== 'No')\n || ssoProtected === 'Yes';\n\n const [accessGrantShown, setAccessGrantShow] = useState();\n const [isPrivate, setPrivacy] = useState(_isPrivate);\n\n const publicLink = `${document.location.origin}/inbox/${formID}`;\n const shareLink = isPrivate && !isHIPAA ? _shareLink : publicLink;\n\n const setShareLink = link => {\n _setShareLink(link);\n return link;\n };\n\n const getAllPermissionOptions = ({ single = true }) => {\n const subject = single ? 'User' : 'Invited users';\n\n return [\n {\n showWhenSelected: t('Read Only'),\n text: t('Read Only'),\n desc: translationRenderer('[1[{subject}]] can only [2[view]] data.')({\n renderer1: () => t(subject),\n renderer2: text => {text}\n }),\n value: 'readOnly'\n },\n {\n showWhenSelected: t('Collaborator'),\n text: t('Collaborator'),\n desc: translationRenderer('[1[{subject}]] can [2[edit]] and [3[comment]] on data.')({\n renderer1: () => t(subject),\n renderer2: text => {text},\n renderer3: text => {text}\n }),\n value: 'supporter'\n }\n ];\n };\n\n const getPermissionOptions = ({ single = true }) => {\n const allOptions = getAllPermissionOptions({ single });\n\n if (isPrivate) {\n return allOptions;\n }\n\n return allOptions.filter(o => o.value !== 'supporter');\n };\n\n const { data: assignees, reload: reloadAssignees } = useQuery(getAssignees, formID);\n\n const saveAssignees = ({ emails, message, role }) => bulkShare(formID, { users: emails, message, role }).then(() => {\n reloadAssignees();\n WatchmanRecorder.recordEvent('onInvitationSend', 'SharePanel');\n return true;\n });\n\n const onSend = saveAssignees;\n\n const onResendInvitation = async email => {\n const shareID = assignees.find(a => a.user.email === email).id;\n try {\n const { message } = await resendShareInvitationEmail(shareID);\n\n if (message) {\n return {\n success: true,\n message\n };\n }\n } catch (e) {\n return ({\n success: false,\n message: t('Email could not be sent!')\n });\n }\n };\n\n const onAssigneePermissionChange = ({ email, submissionPermission }) => {\n const shareID = assignees.find(a => a.user.email === email).id;\n return updatePermissions(shareID, { role: submissionPermission });\n };\n\n const assigneeUsers = useMemo(() => (\n assignees\n ? assignees.map(assignee => ({\n ...assignee.user,\n submissionPermission: assignee.role,\n isAccessRequested: assignee.accessRequestStatus,\n accessRequestID: assignee.accessRequestID,\n isFresh: assignee.subject_id === getQueryParameter('formUserID'),\n customChildElement: assignee.subject_id === getQueryParameter('formUserID') ?
    {t('Permission granted!')}
    : null\n }))\n : false\n ), [assignees]);\n\n const onGenerateNewLink = () => generateShareLink(formID).then(setShareLink);\n\n const onRevokeUser = ({ email }) => {\n const shareID = assignees.find(a => a.user.email === email).id;\n return revokeUsers([shareID]).then(reloadAssignees);\n };\n\n const onRevokeMultipleUser = async emails => {\n const shareIDs = assignees.filter(a => emails.indexOf(a.user.email) > -1).map(resource => resource.id);\n return revokeUsers(shareIDs).then(reloadAssignees);\n };\n\n const onRemoveAccessRequest = accessRequestID => {\n removeAccessRequest(accessRequestID).then(reloadAssignees);\n };\n\n const onApproveAccessRequest = accessRequestID => {\n approveAccessRequest(accessRequestID).then(reloadAssignees);\n };\n\n const shareBtn = useRef();\n\n useEffect(() => {\n if (\n accessGrantShown\n || !assignees\n || window.location.href.indexOf('formUserID') === -1\n ) {\n return;\n }\n\n shareBtn.current.showModalPage('assignees');\n setAccessGrantShow(true);\n }, [assignees]);\n\n const renderedShareBtn = useMemo(() => {\n const texts = Object.entries({\n ...SharePanelTexts,\n ...DEFAULT_SHARE_TEXTS,\n ...isHIPAA ? {\n SHARE_LINK_HEADER_DESC: `With this link, verified ${isEnterprise ? '' : 'Jotform '}accounts with HIPAA passwords will be able to request access to the published inbox.`\n } : {}\n }).reduce((acc, [key, val]) => {\n acc[key] = t(val);\n return acc;\n }, {});\n\n return (\n {\n reloadAssignees();\n WatchmanRecorder.recordEvent('onShareButtonClicked', 'sharePanel');\n isShareActive.current = true;\n }}\n shareProps={{\n texts,\n link: shareLink || t('Once you create a link, people with link can sign up to view.'),\n showSubmissionLinkOnThankyou: 'No',\n showSubmissionLinkOnAutoresponder: 'No',\n onPropertyChange: props => {\n onUpdateForm(formID, {\n inboxShare: JSON.stringify({ ...parsedProps, ...props })\n });\n },\n recordEvent: WatchmanRecorder.recordEvent,\n onGenerateNewLink,\n onSend,\n onResendInvitation,\n onRevokeUser,\n onRevokeMultipleUser,\n onRevokeAllUsers: onRevokeMultipleUser,\n onAssigneePermissionChange,\n onRemoveAccessRequest,\n onApproveAccessRequest,\n onAccessSettingsChangeAttempt: val => setPrivacy(val !== 'public'),\n features: {\n linkSettings: false,\n publicShare: !isHIPAA ? !isPublicAccessDisabled : false,\n companyAccessPermissions: true,\n copyLink: !!shareLink,\n createLink: !loading && !shareLink && isPrivate && !isHIPAA,\n generateNewLink: shareLink && isPrivate && !isHIPAA,\n linkExpiration: isPrivate && !isHIPAA,\n formUserMultipleManage: true,\n assignPermissionOnInvite: true,\n sendReminder: false,\n scheduleReminderEmail: false,\n viewSubmitterSubmissions: false,\n selectEmailsFromList: true,\n allowRequestAccess: isPrivate\n },\n assignees: assigneeUsers,\n permissionOptions: getPermissionOptions({ single: false }),\n userListPermissionOptions: getAllPermissionOptions({}),\n assigneeProtected: 'Yes',\n assigneeSubmissionPermission: 'readOnly',\n isSSOSupported: !!window.SSOSupportedEnvironment,\n isEnterprise: isEnterprise,\n ...parsedProps\n }}\n buttonProps={{\n ...buttonProps,\n colorStyle: 'secondary',\n 'aria-label': t('Share'),\n 'aria-haspopup': 'dialog',\n rounded: true,\n showTextOnly: 'lg',\n size: 'small',\n startIcon: IconTurnArrowShortRightFilled\n }}\n modalProps={{\n header: ,\n usePortal: true,\n portalContainerSelector: '#modal-container',\n reffedDivProps: { className: 'forShareModal' }\n }}\n >\n {t('Share')}\n \n );\n }, [assignees, shareLink, shareProps]);\n\n return (\n renderedShareBtn\n );\n};\n\nShareButton.propTypes = {\n formID: string.isRequired,\n shareProps: string.isRequired,\n buttonProps: shape({}),\n onUpdateForm: func.isRequired\n};\n\nShareButton.defaultProps = {\n buttonProps: {}\n};\n\nexport default ShareButton;\n","import React from 'react';\nimport { handleCustomNavigation } from '@jotforminc/utils';\nimport SVG from '../SVG';\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\n\nimport './AllSubmissionsButton.scss';\n\nconst AllSubmissionsButton = () => {\n const handleAllSubmisionsButtonClick = () => {\n WatchmanRecorder.recordEvent('allSubmissions', 'Form Picker');\n handleCustomNavigation('/sentbox/all', '_self');\n };\n\n return (\n \n \n All Submissions\n
    \n );\n};\n\nexport default AllSubmissionsButton;\n","/* eslint-disable no-unused-vars */\nimport { shape, string } from 'prop-types';\nimport React, {\n useRef, useState\n} from 'react';\nimport { translationRenderer } from '@jotforminc/translation';\nimport { toast } from 'react-toastify';\nimport { IconEyeFilled, IconChevronDown } from '@jotforminc/svg-icons';\nimport { Button } from '@jotforminc/magnet';\nimport RequestAccessButton from '../RequestAccessButton';\nimport { requestEditAccess as requestAccess } from '../../api';\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\nimport { useClickOutsideState } from '../../hooks';\n\nconst RequestAccessDropdown = ({\n role,\n permissions,\n formID,\n t\n}) => {\n const buttonRef = useRef();\n const dropdownRef = useRef();\n const modalRef = useRef();\n const [isRequestAccessDropdownVisible, setIsRequestAccessDropdownVisible] = useClickOutsideState(false, [buttonRef, dropdownRef, modalRef]);\n const [editRequestStep, setEditRequestStep] = useState('');\n\n const onSendRequestEditAccess = async message => {\n setEditRequestStep('loading');\n const isDisabled = editRequestStep === 'done' || !permissions?.requestEdit;\n if (['readOnly', 'assignee'].indexOf(role) > -1 && !isDisabled) {\n const isReadOnly = role === 'readOnly';\n const data = await requestAccess(formID,\n {\n message,\n accessType: isReadOnly ? 'supporter' : 'submitAndEdit',\n preventToast: true\n },\n isReadOnly ? 'inbox' : 'form');\n if (data === 'success') {\n toast.success(t.EDIT_REQUEST_SENT_SUCCESS, {\n type: toast.TYPE.SUCCESS,\n position: toast.POSITION.TOP_RIGHT,\n className: 'success',\n autoClose: true\n });\n setEditRequestStep('done');\n setIsRequestAccessDropdownVisible(false);\n WatchmanRecorder.recordEvent('requestEdit', 'Submission Toolbar');\n } else {\n setEditRequestStep('error');\n }\n } else {\n setEditRequestStep('error');\n }\n };\n\n const handleRequestEditDropdown = () => {\n setIsRequestAccessDropdownVisible(!isRequestAccessDropdownVisible);\n };\n\n return (\n
    \n handleRequestEditDropdown()}\n rounded\n showTextOnly=\"lg\"\n size=\"small\"\n startIcon={IconEyeFilled}\n variant=\"outline\"\n >\n {t.READ_ONLY}\n \n {isRequestAccessDropdownVisible && (\n
    \n \n {(!permissions.requestEdit || editRequestStep === 'done') ? t.EDIT_REQUEST_ALREADY_SENT : (\n translationRenderer('[1[Request]] [2[edit access]] [3[from the inbox owner to make changes.]]')({\n renderer1: text => {text},\n renderer2: text => {text},\n renderer3: text => {text}\n }))}\n \n \n
    \n )}\n
    \n );\n};\n\nRequestAccessDropdown.propTypes = {\n role: string.isRequired,\n formID: string.isRequired,\n permissions: shape({}).isRequired,\n t: shape({}).isRequired\n};\n\nexport default RequestAccessDropdown;\n","/* eslint-disable complexity */\nimport React, { Component } from 'react';\nimport {\n bool, shape, func, string, arrayOf\n} from 'prop-types';\nimport { connect } from 'react-redux';\nimport {\n getUserAppList,\n Header as CommonHeader,\n getDefaultNavItems\n} from '@jotforminc/header-components';\nimport { handleCustomNavigation } from '@jotforminc/utils';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\nimport { withRouter } from 'react-router-dom';\nimport {\n withInboxEnhancer\n} from '../../hocs/InboxEnhancer';\n\nimport {\n userPropType,\n historyPropType,\n enhancedProps\n} from '../../constants/proptypes';\n\nimport {\n userSelector,\n userTypeSelector,\n formSelector,\n isAdminSelector,\n activeSubmissionIDSelector,\n unreadSubmissionCountSelector,\n activeTabIDSelector,\n tabsSelector,\n userLoadedSelector,\n tabCountSelector,\n isSignFormSelector,\n isAllSentBoxSelector,\n teamSelector,\n isFormOwnerSelector,\n userPermissionsSelector,\n submissionSelector,\n userRoleSelector,\n isSettingsPanelOpenSelector,\n getIsTeamMember,\n isGuestUserSelector,\n submissionsSelector\n} from '../../selectors';\n\nimport {\n fetchForm,\n setViews,\n updateForm,\n updateSentbox,\n setActiveTab,\n setSettings,\n fetchUserForms\n} from '../../actions';\n\nimport HeaderTabs from '../../components/HeaderTabs';\nimport Feature from '../../components/Feature';\nimport ShareButton from '../../components/ShareButton';\nimport SVG from '../../components/SVG';\n\nimport { filterSignApps, updateLocationParams, renameKeys } from '../../utils';\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\nimport AllSubmissionsButton from '../../components/AllSubmissionsButton';\nimport RequestAccessDropdown from '../../components/RequestAccessDropdown';\n\nexport class HeaderWrapper extends Component {\n constructor(props) {\n super(props);\n this.renderSubTitle = this.renderSubTitle.bind(this);\n this.linkHandler = this.linkHandler.bind(this);\n this.onSettings = this.onSettings.bind(this);\n this.handleListToggle = this.handleListToggle.bind(this);\n this.handleTabChange = this.handleTabChange.bind(this);\n this.shouldRenderShare = this.shouldRenderShare.bind(this);\n this.handleMyforms = this.handleMyforms.bind(this);\n }\n\n handleMyforms(params) {\n const { team } = this.props;\n handleCustomNavigation(team.isTeamMember ? `/myteams/${team?.properties?.slug || team.id}` : `/myforms${params && params.queryParams ? `?${params.queryParams}` : ''}`, '_self');\n }\n\n handleMyDocuments(params) {\n handleCustomNavigation(`/mydocuments${params && params.queryParams ? `?${params.queryParams}` : ''}`, '_self');\n }\n\n handleListToggle() {\n const { toggleClass, onFetchUserForms } = this.props;\n onFetchUserForms();\n toggleClass('jfInbox--form-list-visible');\n }\n\n handleTabChange(tabID) {\n const { history, tabs, activeTab } = this.props;\n if (activeTab === tabID) return;\n const tab = tabs.tabs[tabID];\n const { filterText = null, filterObject = null } = tab || {};\n const newLocationParams = {\n tab: tabID, sid: '', editMode: false, filterText, filterObject\n };\n if (tabID === 'conversations') {\n WatchmanRecorder.recordEvent('entered-ai-tab', 'inbox-ai-transcript');\n }\n history.push(updateLocationParams(newLocationParams));\n }\n\n handleRequestEditDropdown() {\n const { isRequestAccessDropdownVisible } = this.state;\n this.setState({\n isRequestAccessDropdownVisible: !isRequestAccessDropdownVisible\n });\n }\n\n onSettings() {\n const { setSettingsPanel, isSettingsPanelOpen } = this.props;\n setSettingsPanel({\n isOpened: !isSettingsPanelOpen, activeTab: 'general'\n });\n }\n\n getSentBoxConfig(branding21) {\n const navigationItems = getDefaultNavItems(branding21);\n return {\n ...navigationItems.inbox,\n title: 'Sentbox'\n };\n }\n\n get forms() {\n const { form, user: { forms }, activeTab } = this.props;\n return forms.map(tempForm => (tempForm.id === form.id && activeTab !== 'sentbox' ? ({ ...tempForm, count: form.count, new: form.new }) : tempForm));\n }\n\n checkShouldShowRequestEdit = () => {\n const {\n submission, role, permissions\n } = this.props;\n if (submission.isSignSubmission) return false;\n return (role === 'assignee' || role === 'readOnly') && !permissions?.editSubmissions;\n };\n\n shouldRenderShare(permissions) {\n const disAllowedPermissions = ['signAllDocument', 'signWaitingMySignature', 'signWaitingMySignature', 'signDeclined', 'signCanceled'];\n const allowedPermissions = ['share'];\n\n return (\n permissions\n && allowedPermissions.some(x => x in permissions && permissions[x])\n && !disAllowedPermissions.some(x => x in permissions && permissions[x])\n );\n }\n\n isValidDate(date) {\n return date && date !== '0000-00-00 00:00:00';\n }\n\n linkHandler(link) {\n const {\n history, removeClass, onUpdateSentbox\n } = this.props;\n WatchmanRecorder.recordEvent('selectaFormSentbox', 'Form Picker');\n history.push(`/${link}`);\n onUpdateSentbox();\n removeClass('jfInbox--form-list-visible');\n }\n\n renderSubTitle() {\n const {\n form,\n t,\n userType,\n isSignForm,\n isAllSentBox\n } = this.props;\n if (isSignForm === 'Yes') return null;\n return (\n
    \n \n
    \n WatchmanRecorder.recordEvent('FormisViewed', 'Inbox-Header')}\n >\n {\n // eslint-disable-next-line no-nested-ternary\n isAllSentBox ? (\n t.VIEW_FORM\n ) : (\n userType === 'formuser'\n ? (\n <>\n \n {t.FILL_THIS_FORM}\n \n )\n : t.VIEW_THIS_FORM)\n }\n\n \n
    \n
    \n
    \n );\n }\n\n render() {\n const {\n user, userLoaded, form, activeTab, tabsCount, tabs, t, onUpdateForm, onSetViews, isSignForm, isAdmin,\n isOwner, permissions, isAllSentBox, team, role, setSettingsPanel, isThereBreakingError, isTeamMember,\n isGuestUser\n } = this.props;\n if (!userLoaded) { return null; }\n const shouldShowRequestEdit = this.checkShouldShowRequestEdit();\n let signFormProps = {};\n if (isSignForm === 'Yes') {\n signFormProps = {\n backToMyFormsLink: '/mydocuments',\n backToMyFormsText: 'Go Back to My Sign Documents',\n appList: filterSignApps(getUserAppList(user, 'inbox'), user),\n onMyformsClick: this.handleMyDocuments,\n logoAction: () => this.handleMyDocuments(),\n formListTitle: 'Go to another Sign Document',\n formListDescription: '',\n submissionsKeyword: 'Documents sent',\n formListSearchPlaceholder: 'Search in your Sign Documents',\n navigationAppTitle: 'Sign Inbox'\n };\n }\n let sentboxProps = {};\n if (activeTab === 'sentbox') {\n sentboxProps = {\n formListTitle: 'Go to another sentbox',\n formListDescription: 'You can select the form you have filled to view your submissions.',\n formListSearchPlaceholder: 'Search in filled forms'\n };\n }\n\n const useSentBoxConfig = permissions.sentbox;\n const isSentboxView = activeTab === 'sentbox' || isAllSentBox;\n const shouldViewAppPicker = team.isTeamMember || permissions.goAnotherProduct;\n // const isAllSentboxAllowed = (isSentboxView && user.allowAllSubmissions === true) || user.id === '44032633';\n\n const convertSignDocumentKeys = forms => {\n const newKeys = { created_at: 'creationTime', updated_at: 'modificationTime' };\n return forms.map(singleForm => renameKeys(singleForm, newKeys));\n };\n\n const liteHeaderProps = {\n showAppNavigation: false,\n TitleRenderer: () =>
    {form.title}
    ,\n subTitle: () => <>\n };\n\n return (\n <>\n {!global.window.useFromPortal && (\n this.handleMyforms()}\n onMyformsClick={this.handleMyforms}\n linkHandler={this.linkHandler}\n subTitle={this.renderSubTitle}\n appList={getUserAppList(user)}\n key={`${form.count}${form.new}`}\n formListToggleHandler={this.handleListToggle}\n navigationToggleDisabled={!shouldViewAppPicker}\n {...(team.isTeamMember && { teamID: team.id })}\n backToMyFormsText={`Go Back to ${team.isTeamMember ? 'Team Workspace' : 'My Forms'}`}\n backToMyFormsLink={team.isTeamMember ? `/myteams/${team?.properties?.slug || team.id}` : '/myforms'}\n {...sentboxProps}\n {...(isSentboxView) && {\n customResourcePickerItems: [{ CustomItemComponent: AllSubmissionsButton }]\n }}\n {...signFormProps}\n teamProperties={team?.properties}\n teamBadgeID={team.id}\n productType=\"Inbox\"\n isTeamMember={team.isTeamMember}\n resourceType={form.formType === 'signForm' ? 'sign' : 'form'}\n {...(isEnterprise() ? {\n initialLoginScreen: 'loginOptions',\n ssoLoginOptions: (global.window.SSO_LOGIN_OPTIONS || []),\n hideSignUp: true\n } : {})}\n {...(isThereBreakingError && liteHeaderProps)}\n >\n {shouldShowRequestEdit && !isTeamMember\n && (\n \n )}\n {this.shouldRenderShare(permissions) && !isThereBreakingError && (\n \n )}\n />\n )}\n \n )}\n {!isAllSentBox && !isThereBreakingError && (\n \n )}\n \n );\n }\n}\n\nHeaderWrapper.propTypes = {\n user: userPropType.isRequired,\n userLoaded: bool,\n form: shape({}).isRequired,\n history: historyPropType,\n toggleClass: func.isRequired,\n isAllSentBox: bool,\n team: shape({\n id: string,\n properties: shape({}),\n roles: arrayOf(string)\n }),\n ...enhancedProps\n};\n\nHeaderWrapper.defaultProps = {\n history: {\n push: f => f\n },\n userLoaded: false,\n isAllSentBox: false,\n team: {\n id: '',\n properties: {},\n roles: []\n }\n};\n\nconst mapStateToProps = stateProps => ({\n user: userSelector(stateProps),\n userType: userTypeSelector(stateProps),\n userLoaded: userLoadedSelector(stateProps),\n form: formSelector(stateProps),\n tabs: tabsSelector(stateProps),\n tabsCount: tabCountSelector(stateProps),\n activeTab: activeTabIDSelector(stateProps),\n activeSubmissionID: activeSubmissionIDSelector(stateProps),\n submissionCount: unreadSubmissionCountSelector(stateProps),\n isAdmin: isAdminSelector(stateProps),\n isSignForm: isSignFormSelector(stateProps),\n isAllSentBox: isAllSentBoxSelector(stateProps),\n team: teamSelector(stateProps),\n isOwner: isFormOwnerSelector(stateProps),\n permissions: userPermissionsSelector(stateProps),\n submission: submissionSelector(stateProps),\n role: userRoleSelector(stateProps),\n isSettingsPanelOpen: isSettingsPanelOpenSelector,\n isTeamMember: getIsTeamMember(stateProps),\n isGuestUser: isGuestUserSelector(stateProps),\n submissions: submissionsSelector(stateProps)\n});\n\nconst mapDispatchToProps = {\n onUpdateForm: updateForm,\n onSetViews: setViews,\n changeForm: fetchForm,\n onUpdateSentbox: updateSentbox,\n onSetActiveTab: setActiveTab,\n setSettingsPanel: setSettings,\n onFetchUserForms: fetchUserForms\n};\n\nconst enhance = withInboxEnhancer('headerContainer', connect(mapStateToProps, mapDispatchToProps));\n\nexport const HeaderWrapperWithoutRouter = enhance(HeaderWrapper);\n\nexport default withRouter(enhance(HeaderWrapper));\n","import React from 'react';\nimport { func } from 'prop-types';\nimport { ButtonField as Button } from '@jotforminc/button-field';\n\nimport SVG from '../SVG';\n\nconst SearchPanelButton = ({\n onClick\n}) => {\n return (\n }\n />\n );\n};\n\nSearchPanelButton.propTypes = {\n onClick: func\n};\n\nSearchPanelButton.defaultProps = {\n onClick: f => f\n};\n\nexport default SearchPanelButton;\n","/* eslint-disable camelcase */\nimport React, { useEffect } from 'react';\nimport { string } from 'prop-types';\n\nimport { ButtonField as Button } from '@jotforminc/button-field';\n\nimport { redirectToLoginPage } from '../../utils';\nimport NoAnswer from '../NoAnswer';\n\nimport {\n userPropType,\n translatedProps\n} from '../../constants/proptypes';\n\nconst ErrorPage = ({\n user, t, text\n}) => {\n const accountType = user?.account_type?.name;\n\n useEffect(() => {\n if (!accountType) {\n redirectToLoginPage();\n }\n }, []);\n\n return (\n
    \n \n
    {text || t.UNABLE_TO_LOAD}
    \n
    \n {accountType === 'GUEST' && (\n \n )}\n \n )}\n />\n
    \n );\n};\n\nErrorPage.propTypes = {\n text: string,\n user: userPropType.isRequired,\n ...translatedProps\n};\n\nErrorPage.defaultProps = {\n text: ''\n};\n\nexport default ErrorPage;\n","import React from 'react';\nimport { ButtonField as Button } from '@jotforminc/button-field';\n\nimport NoAnswer from '../NoAnswer';\nimport { translatedProps } from '../../constants/proptypes';\n\nconst PrintViewCurtain = ({\n t // eslint-disable-line\n}) => {\n return (\n
    \n \n
    {t.PRINTING_TEXT}
    \n
    \n \n \n )}\n />\n
    \n );\n};\n\nPrintViewCurtain.propTypes = {\n ...translatedProps\n};\n\nexport default PrintViewCurtain;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { ResourcePicker, RESOURCE_TYPES } from '@jotforminc/resource-picker';\n\nconst FormList = ({\n form = {},\n forms = [],\n isFormListOpened = false,\n linkHandler = null,\n isClosable = true,\n keepOrder = false,\n showHeader = false,\n listTitle = 'Go to another form',\n listDescription = \"You've done great on this form. Time to focus on another one? Let's go then!\",\n submissionsKeyword = 'Submissions',\n onClose = f => f\n}) => {\n return (\n <>\n \n \n );\n};\n\nFormList.propTypes = {\n form: PropTypes.shape({\n id: PropTypes.string\n }),\n forms: PropTypes.arrayOf(PropTypes.shape({\n id: PropTypes.string\n })),\n isFormListOpened: PropTypes.bool,\n linkHandler: PropTypes.func,\n onClose: PropTypes.func,\n isClosable: PropTypes.bool,\n keepOrder: PropTypes.bool,\n showHeader: PropTypes.bool,\n listTitle: PropTypes.string,\n listDescription: PropTypes.string,\n submissionsKeyword: PropTypes.string\n};\n\nexport default FormList;\n","import React, { useEffect } from 'react';\nimport { connect } from 'react-redux';\nimport { bool } from 'prop-types';\nimport { withRouter } from 'react-router-dom';\nimport { t } from '@jotforminc/translation';\nimport { FormList } from '@jotforminc/header-components';\n\nimport { redirectToLoginPage } from '../../utils';\nimport { withInboxEnhancer } from '../../hocs/InboxEnhancer';\nimport {\n formsPropType, enhancedProps, userPropType, historyPropType\n} from '../../constants/proptypes';\n\nimport {\n userFormsSelector,\n userSelector\n} from '../../selectors';\n\nimport {\n fetchForm,\n fetchQuestions\n} from '../../actions';\n\nexport const FormPickerComponent = ({\n visible,\n user,\n forms,\n history,\n changeForm,\n showHeader\n}) => {\n const isGuest = (user?.account_type?.name || user?.account_type) === 'GUEST';\n\n useEffect(() => {\n if (isGuest) {\n redirectToLoginPage();\n }\n }, [isGuest]);\n\n const linkHandler = link => {\n history.push(`/${link}`);\n changeForm(link);\n };\n\n if ((!user || isGuest) || !forms || !forms.length) {\n return null;\n }\n\n return (\n \n );\n};\n\nFormPickerComponent.propTypes = {\n forms: formsPropType.isRequired,\n history: historyPropType,\n visible: bool,\n user: userPropType.isRequired,\n showHeader: bool,\n ...enhancedProps\n};\n\nFormPickerComponent.defaultProps = {\n visible: false,\n showHeader: false,\n history: {\n push: f => f\n }\n};\n\nconst mapStateToProps = stateProps => ({\n forms: userFormsSelector(stateProps),\n user: userSelector(stateProps)\n});\n\nconst mapDispatchToProps = {\n fetchForm,\n fetchQuestions\n};\n\nconst mergeProps = (stateProps, dispatchProps, componentProps) => ({\n ...componentProps,\n ...stateProps,\n ...dispatchProps,\n changeForm: formID => {\n if (formID) {\n dispatchProps.fetchForm(formID);\n dispatchProps.fetchQuestions(formID);\n }\n }\n});\n\nconst enhance = withInboxEnhancer('formPicker', connect(mapStateToProps, mapDispatchToProps, mergeProps));\n\nexport default withRouter(enhance(FormPickerComponent));\n","/* eslint-disable max-len */\nexport const samples = `t: hi\nr: {\"actions\":[{\"type\": \"greeting\", \"value\": \"Hello!\"}]}\n\nt: send email to Hatice, she has to pay additional 10 dollars\nr: {\"query\": {\"3\": \"Hatice\"}, \"actions\":[{\"type\": \"mail\", \"subject\": \"About your order today\", \"body\": \"Hi {customer name},####I have prepared your order, but you have to pay an additional $10.####All the best\"}]}\n\nt: how many orders tomorrow\nr: {\"query\": {\"6\": \"tomorrow\"}, \"actions\": [{\"type\": \"sum\"}]}\n\nt: how many cakes should I prepare today\nr: {\"query\": {\"6\": \"today\"}, \"actions\": [{\"type\": \"sum\", \"qid\": \"7\", \"key\": \"quantity\"}]}\n\nt: how many cakes ordered last week\nr: {\"query\": {\"6\": \"last week\"}, \"actions\": [{\"type\": \"sum\", \"qid\": \"7\", \"key\": \"quantity\"}]}\n\nt: how much did I earned today\nr: {\"query\": {\"created_at\": \"today\"}, \"actions\": [{\"type\": \"sum\", \"qid\": \"7\", \"key\": \"total\"}]}\n\nt: how many orders from John tomorrow\nr: {\"query\": {\"6\": \"tomorrow\", \"3\": \"John\"}, \"actions\": [{\"type\": \"sum\"}]}\n\nt: how many chocolate cakes I baked yesterday\nr: {\"query\": {\"6\": \"yesterday\"}, \"actions\": [{\"type\": \"sum\", \"qid\": \"7\", \"key\": \"quantity\", \"name\": \"Chocolate Cake\"}]}\n\nt: how much i earned from limon cake\nr: {\"query\": {\"created_at\": \"last month\"}, \"actions\": [{\"type\": \"sum\", \"qid\": \"7\", \"key\": \"amount\", \"name\": \"Limon Cake\"}]}\n\nt: how many strawberry cakes John Smith ordered\nr: {\"query\": {\"3\": \"John Smith\", \"7\": \"Strawberry Cake\"}, \"actions\": [{\"type\": \"sum\", \"qid\": \"7\", \"key\": \"quantity\"}]}\n\nt: find orders from John and forward them to jan@berka.com\nr: {\"query\": {\"3\": \"John\"}, \"actions\":[{\"type\": \"forward\", to: \"jan@berka.com\"}]}\n\nt: send email to the customers who ordered cakes for tomorrow, say that I have to cancel orders because I'm ill.\nr: {\"query\": {\"6\": \"tomorrow\"}, \"actions\":[{\"type\": \"mail\", \"subject\": \"Cancellation of Orders\", \"body\": \"Hi {customer name},####I'm ill today so I have to cancel your orders.####Sorry for the inconvenience.\"}]}\n\nt: send an email to the customer who ordered cakes for 2.00 pm, say that I'll be late for 15 min.\nr: {\"query\": {\"6\": \"2.00 pm\"}, \"actions\":[{\"type\": \"mail\", \"subject\": \"Cake Delivery\", \"body\": \"Hi {customer name},####I'll be late for 15 min.####Thanks for your understanding\"}]}\n\nt: send email to orders yesterday that we've prepared their cakes\nr: {\"query\": {\"6\": \"today\"}, \"actions\": [{\"type\": \"mail\", \"subject\": \"Cake Delivery\", \"body\": \"Hi {customer name},####We've prepared your order.####Regards\"}]}\n\nt: send email to orders today delivery\nr: {\"query\": {\"6\": \"today\"}, \"actions\": [{\"type\": \"mail\", \"subject\": \"Cake Delivery\", \"body\": \"Hi {customer name},####We're on our way to your address with your order.####See you soon\"}]}\n\nt: how much did I earned from janberka@gmail.com last week\nr: {\"query\": {\"created_at\": \"last week\", \"4\": \"janberka@gmail.com\"}, \"actions\": [{\"type\": \"sum\", \"qid\": \"7\", \"key\": \"total\"}]}\n\nt: how many orders did I get from John Smith last 3 month\nr: {\"query\": {\"created_at\": \"last 3 month\", \"3\": \"John Smith\"}, \"actions\": [{\"type\": \"sum\"]}\n\nt: which cakes did I prepare yesterday for John\nr: {\"query\": {\"6\": \"yesterday\", \"3\": \"John\"}, \"actions\": [{\"type\": \"sum\", \"qid\": \"7\", \"key\": \"quantity\"}]}\n\nt: how many strawberry cakes ordered\nr: {\"query\": {\"actions\": [{\"type\": \"sum\", \"qid\": \"7\", \"key\": \"quantity\", \"name\": \"Strawberry Cake\"}]}\n\nt: how many chocolate cake ordered this week\nr: {\"query\": {\"created_at\": \"this week\"}, \"actions\": [{\"type\": \"sum\", \"qid\": \"7\", \"key\": \"quantity\", \"name\": \"Chocolate Cake\"}]}\n\nt: how many limon cake should i prepare tomorrow\nr: {\"query\": {\"6\": \"tomorrow\"}, \"actions\": [{\"type\": \"sum\", \"qid\": \"7\", \"key\": \"quantity\", \"name\": \"Limon Cake\"}]}\n\nt: What should I prepare today\nr: {\"query\": {\"6\": \"tomorrow\"}, \"actions\": [{\"type\": \"sum\", \"qid\": \"7\", \"key\": \"quantity\"}]}\n\nt: send mail to yesterday's customers, ask if they enjoy our cakes\nr: {\"query\" {\"6\": \"tomorrow\"}, \"actions\": [{\"type\": \"mail\", \"body\": \"Hi {customer name},####Hope you have enjoyed our cakes. your feedback is important for us, please let us know if you had any problems.####All the best\"}]}\n\nt: download Kaan's orders as CSV file\nr: {\"query: {\"3\": \"Kaan\"}, \"actions\": [{\"type\": \"download\", \"format\": \"csv\"}]}`;\n","import React, {\n createContext, useState, useContext, useMemo\n} from 'react';\nimport useSwr from 'swr';\nimport { shape, node } from 'prop-types';\nimport { useFeatures } from '@paralleldrive/react-feature-toggles';\nimport { samples } from './constants';\nimport { gpt3Completion, getFilter } from '../../api';\n\nconst AssistantContext = createContext();\n\nconst shouldPrompt = ({ type }) => type !== 'control_text' && type !== 'control_head';\n\nconst sumReducer = async (form, action, submissions) => {\n const { products } = form;\n\n if (action.key === 'quantity' || action.key === 'amount') {\n const foundProducts = Object.values(submissions.reduce((acc, submission) => {\n const { answer } = submission.answers[action.qid] || {};\n const { paymentArray } = answer || {};\n const { product } = paymentArray ? JSON.parse(paymentArray) : {};\n\n if (!product) return acc;\n\n product.forEach(p => {\n const productName = p?.split('(')?.[0].trim?.();\n const entry = products.find(e => e.name === productName);\n const oldTotal = acc?.[productName]?.total || 0;\n\n try {\n const count = parseFloat(\n action.key === 'quantity'\n ? p?.split('Quantity: ')?.[1]?.split(')')?.[0]\n : p?.split('Amount: ')?.[1]?.split(' ')?.[0]\n ) || 0;\n\n const total = oldTotal + count;\n const img = entry?.images?.[0] || false;\n\n const foundProduct = {\n total,\n img,\n text: productName\n };\n\n if (action.name) {\n const isCurrent = action.name === productName;\n\n if (isCurrent) {\n acc[action.name] = foundProduct;\n }\n\n return;\n }\n\n acc[productName] = foundProduct;\n } catch (e) {\n console.log({ e });\n }\n });\n\n return acc;\n }, {}));\n\n if (!foundProducts?.length) return 0;\n\n if (foundProducts.length === 1) {\n return foundProducts[0];\n }\n\n return foundProducts;\n }\n\n return submissions.reduce((sum, submission) => {\n if (!action.qid) return sum + 1;\n\n const { answer } = submission.answers[action.qid] || {};\n const { paymentArray } = answer || {};\n const parsed = JSON.parse(paymentArray);\n return sum + parseFloat(parsed[action.key] || 0, 10);\n }, 0);\n};\n\nconst mailReducer = async (form, action, submissions) => {\n return Object.values(submissions.reduce((mails, s) => {\n const { answers } = s;\n\n const email = answers[4]?.answer;\n const name = answers[3]?.prettyFormat;\n\n return {\n ...mails,\n [email]: {\n email,\n name\n }\n };\n }, {}));\n};\n\nconst downloadReducer = async (form, action, submissions) => {\n return submissions;\n};\n\nconst greetingReducer = async (form, action) => {\n return action.value || 'Hello';\n};\n\nconst reducers = {\n sum: sumReducer, mail: mailReducer, greeting: greetingReducer, download: downloadReducer\n};\n\nconst reducer = (form, actions, submissions) => (\n Promise.all(\n actions.map(async action => {\n const value = await reducers[action.type]?.(form, action, submissions);\n\n const resp = {\n ...action,\n value\n };\n\n return resp;\n })\n )\n);\n\nconst AssistantProvider = ({ form, children }) => {\n const features = useFeatures();\n\n if (!features.includes('assistant')) {\n return (\n {children}\n );\n }\n\n const { questions, products: formProducts } = form;\n\n const products = useMemo(() => {\n return formProducts?.map?.(({ name, price }) => ({ name, price }));\n }, [formProducts]);\n\n const abstract = useMemo(() => {\n return JSON.stringify(\n Object.values(questions)\n .filter(shouldPrompt)\n .map(q => ({\n qid: q.qid,\n name: q.name,\n text: q.text,\n type: q.type,\n ...(q.type === 'control_payment' ? { products } : {})\n }))\n );\n }, [questions]);\n\n const [question, setQuestion] = useState();\n\n const fetcher = async q => {\n // if (!available) return;\n if (!q) return;\n\n const prompt = `${abstract}\\n\\n${samples}\\n\\nt: ${q}\\nr:`;\n\n const gptResponse = await gpt3Completion({\n prompt,\n stop: '\\n\\n',\n temprature: 0.9,\n top_p: 0.2\n }).then(resp => JSON.parse(resp.trim()));\n\n if (!gptResponse) return;\n\n const { query, actions } = gptResponse;\n const response = query ? await getFilter(form.id, query) : false;\n\n const { content: submissions = false, resultSet: { filter = false } = {} } = response || {};\n\n try {\n const result = await reducer(form, actions, submissions);\n\n return {\n query,\n filter,\n result,\n actions\n };\n } catch (e) {\n console.log(e);\n }\n\n return {\n query,\n filter,\n actions,\n result: null\n };\n };\n\n const swrContext = useSwr(question, fetcher);\n\n const value = { setQuestion, ...swrContext };\n\n return {children};\n};\n\nexport const useAssistant = () => useContext(AssistantContext);\n\nAssistantProvider.propTypes = {\n form: shape({}).isRequired,\n children: node.isRequired\n};\n\nexport default AssistantProvider;\n","import React from 'react';\nimport { func, string } from 'prop-types';\nimport { t, translationRenderer } from '@jotforminc/translation';\nimport {\n Button,\n Dialog,\n DialogBody,\n DialogIcon,\n DialogTitle,\n DialogDescription,\n DialogActions,\n DialogCloseButton\n} from '@jotforminc/magnet';\nimport { IconExclamationCircle } from '@jotforminc/svg-icons';\n\nimport './styles.scss';\n\nconst TITLE = 'This form\\'s submissions will be [1[{str}]] they\\'re received.';\n\nconst AutoDeleteSubmissionsInfoModal = ({\n period,\n onClose,\n goToTrash\n}) => {\n return (\n (\n \n deleted\n {t(` ${period}`)}\n {' '}\n after\n \n )\n })}\n >\n \n \n \n {translationRenderer(TITLE)({\n renderer1: () => (\n \n deleted\n {t(` ${period}`)}\n {' '}\n after\n \n )\n })}\n \n \n {[t('Deleted submissions will be stored in Trash for 30 days. After 30 days, they will be permanently deleted.')]}\n \n \n \n \n \n \n \n \n );\n};\n\nAutoDeleteSubmissionsInfoModal.propTypes = {\n period: string.isRequired,\n onClose: func.isRequired,\n goToTrash: func.isRequired\n};\n\nexport default AutoDeleteSubmissionsInfoModal;\n","import AutoDeleteSubmissionsInfoModal from './AutoDeleteSubmissionsInfoModal';\n\nexport default AutoDeleteSubmissionsInfoModal;\n","/* global localStorage */\nimport React from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { AutoDeleteSubmissionsInfoModal } from '@jotforminc/jotform-common';\n\nimport { StorageHelper } from '@jotforminc/storage-helper';\nimport { setActiveTab, setOpenIntroModal } from '../../actions';\nimport { formIDSelector, autoDeleteSubmissionsInterval } from '../../selectors';\nimport { AUTO_DELETE_INFO_POPUP_KEY } from '../../constants';\n\nconst AutoDeleteInformationModal = () => {\n const dispatch = useDispatch();\n const formID = useSelector(formIDSelector);\n const period = useSelector(autoDeleteSubmissionsInterval);\n const autoDeleteInfoKey = `${AUTO_DELETE_INFO_POPUP_KEY}_${formID}`;\n const history = useHistory();\n\n const onClose = () => {\n if (localStorage) {\n StorageHelper.setLocalStorageItem({\n key: autoDeleteInfoKey, value: '1'\n });\n }\n dispatch(setOpenIntroModal(null));\n };\n\n const goToTrash = () => {\n onClose();\n dispatch(setActiveTab('trash'));\n history.push(`/${formID}/trash`);\n };\n\n return (\n 1 ? 's' : ''}`}\n />\n );\n};\n\nexport default AutoDeleteInformationModal;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { currentOpenIntroModal } from '../../selectors';\nimport AutoDeleteInformationModal from '../../components/IntroModals/AutoDeleteSubmissionsInfoModal';\nimport { AUTO_DELETE_INFORMATION_MODAL } from '../../constants';\n\nconst IntroModalsContainer = () => {\n const openIntroModal = useSelector(currentOpenIntroModal);\n\n switch (openIntroModal) {\n case AUTO_DELETE_INFORMATION_MODAL:\n return ;\n default:\n return null;\n }\n};\n\nexport default IntroModalsContainer;\n","/* eslint-disable no-restricted-imports */\n/* eslint-disable complexity */\nimport React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport Bowser from 'bowser';\nimport { getActiveAlias } from '@jotforminc/router-bridge';\nimport {\n string,\n func,\n bool,\n shape\n} from 'prop-types';\nimport { Button } from '@jotforminc/magnet';\nimport { IconBars } from '@jotforminc/svg-icons';\nimport { toast } from 'react-toastify';\nimport { LoginFlow } from '@jotforminc/login-flow';\nimport { withPermissions } from '@jotforminc/permissions';\nimport { getAPIURL } from '@jotforminc/request-layer';\nimport { capitalizeFirstLetter, readCookie } from '@jotforminc/utils';\nimport { MobileAppSheet } from '@jotforminc/jotform-common';\n\nimport RegularInbox from '../RegularInbox';\nimport HeaderContainer from '../HeaderWrapper';\n\nimport SearchPanelButton from '../../components/SearchPanelButton';\nimport ErrorPage from '../../components/ErrorPage';\nimport PrintViewCurtain from '../../components/PrintViewCurtain';\n\nimport { withInboxEnhancer } from '../../hocs/InboxEnhancer';\nimport ErrorBoundry from '../../hocs/ErrorBoundry';\n\nimport {\n userPropType,\n enhancedProps,\n locationPropTypes,\n uiPropType\n} from '../../constants/proptypes';\n\nimport {\n formTitleSelector,\n routerFormIDSelector,\n isAdminSelector,\n userLoadedSelector,\n activeSubmissionIDSelector,\n submissionEditModeSelector,\n filterObjectSelector,\n filterTextSelector,\n uiSelector,\n activeTabIDSelector,\n userSelector,\n submissionCountSelector,\n formSelector,\n questionsSelector,\n questionOrdersSelector,\n filterResultCountSelector,\n questionValuesSelector,\n filteredSubmissionsLoadingSelector,\n submissionsLoadedSelector,\n isFormOwnerSelector,\n isSignFormSelector,\n userFormsSelector,\n isPreviousOrdersSelector,\n isPwaSelector,\n isAllSentBoxSelector,\n previousOrdersTypeSelector,\n filteredSubmissionsSelector,\n getAiAgents\n} from '../../selectors';\n\nimport {\n fetchForm,\n setActiveTab,\n fetchQuestions,\n setEditMode,\n setActiveSubmission,\n setFilterObject,\n setFilterText,\n setIsAllSentbox,\n selectSubmission,\n fetchQuestionValues,\n setViews\n} from '../../actions';\n\nimport {\n getQueryParameter,\n parseLocationParams,\n setUserVarsFS,\n updateLocationParams\n} from '../../utils';\nimport {\n LEFT_PANEL_CLASS, MOBILE_CLASS, MOBILE_MAX_WIDTH, PROHIBITED_ACTIONS_FOR_GUEST_USERS, SEARCH_PROHIBITED_FIELDS\n} from '../../constants';\nimport FormPicker from '../FormPicker';\nimport AssistantProvider from '../../contexts/Assistant';\nimport IntroModalsContainer from '../IntroModalsContainer';\nimport FilterResultBar from '../../components/FilterResultBar';\nimport AdvanceSearch from '../../components/AdvanceSearch';\nimport SubmissionViewHeader from '../SubmissionViewHeader';\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\nimport { updateInboxView, saveInboxView, getInboxViews } from '../../api';\nimport LoginFlowCard from '../../assets/img/walkthrough/LoginFlow.png';\n\nimport '@jotforminc/jotform.css/reset.css';\nimport '@jotforminc/jotform.css/panel-variables.css';\n\nlet TOTAL_GUEST_ACTIO_COUNT = Math.floor(Math.random() * (20 - 1 + 1) + 1);\n\nexport class AppBase extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n showFilterResultBar: false,\n signUpRequired: false,\n isDownloadButtonOnMobile: false,\n isThereBreakingError: false\n };\n\n this.onSearchPanelButton = this.onSearchPanelButton.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.hideResultBar = this.hideResultBar.bind(this);\n this.createNewTab = this.createNewTab.bind(this);\n this.setBreakingErrorState = this.setBreakingErrorState.bind(this);\n }\n\n async componentDidMount() {\n const {\n addClass,\n history,\n changeIsAllSentbox,\n formID\n } = this.props;\n\n const isFullStoryEnabled = formID % 100 === 32 || formID === '230991944457064';\n\n if (history && history.listen) {\n history.listen(location => {\n const publicPath = getActiveAlias();\n if (publicPath === 'sentbox') {\n if ((location.pathname.includes('all'))) {\n changeIsAllSentbox(true);\n return;\n }\n }\n changeIsAllSentbox(false);\n });\n }\n\n if (isFullStoryEnabled) {\n setUserVarsFS({ isInboxDiscovery_bool: true });\n }\n\n const {\n os: { name: operatingSystem },\n platform: { type: operatingPlatform },\n browser: { name: browserName }\n } = Bowser.parse(window.navigator.userAgent);\n\n addClass(`jfInbox--is${capitalizeFirstLetter(operatingSystem)}`, `jfInbox--is${capitalizeFirstLetter(operatingPlatform)}`, `jfInbox--is${capitalizeFirstLetter(browserName.split(' ').join(''))}`);\n\n if (window.isGuestFormOwner) {\n ['mousedown', 'touchstart'].forEach(evt => {\n global.document.body.addEventListener(evt, e => {\n const actionClassList = e.target.classList;\n let isActionNotAllowed = false;\n TOTAL_GUEST_ACTIO_COUNT--;\n actionClassList.forEach(actionClass => {\n if (PROHIBITED_ACTIONS_FOR_GUEST_USERS.indexOf(actionClass) > -1) {\n isActionNotAllowed = true;\n }\n });\n if (isActionNotAllowed || TOTAL_GUEST_ACTIO_COUNT < 1) {\n e.stopImmediatePropagation();\n e.stopPropagation();\n e.preventDefault();\n this.setState({ signUpRequired: true });\n TOTAL_GUEST_ACTIO_COUNT = Math.floor(Math.random() * (20 - 1 + 1) + 1);\n }\n }, true);\n });\n }\n\n this.prevProps = this.props;\n\n const isMobile = window.innerWidth <= MOBILE_MAX_WIDTH;\n if (isMobile && readCookie('mobile-app-sheet-shown-inbox') !== 'true') {\n this.setState({ isDownloadButtonOnMobile: true });\n }\n }\n\n componentDidUpdate = () => {\n this.updateState();\n };\n\n // eslint-disable-next-line react/sort-comp\n updateState = () => {\n const {\n location: locationCurrent,\n changeFilterObject,\n changeFilterText,\n changeActiveSubmission,\n changeActiveTab,\n changeEditMode,\n changeForm,\n addClass,\n hasClass,\n history,\n removeClass,\n user,\n userLoaded,\n permissions,\n onTaskListRenew\n } = this.props;\n\n if (!userLoaded) return;\n\n const {\n filterText: filterTextPrev,\n filterObject: filterObjectPrev,\n formID: formIDPrev,\n activeTab: activeTabPrev,\n isEditMode: isEditModePrev,\n activeSubmissionID: activeSubmissionIDPrev\n } = this.prevProps;\n\n const {\n formID, editMode, filterObject = {}, filterText = '', tab, sid\n } = parseLocationParams(locationCurrent);\n\n const isDownload = getQueryParameter('download') === '1';\n if (!isDownload && formID && tab === 'inbox' && !permissions.inbox) {\n if (user.userType === 'formuser' && permissions.sentbox) {\n return history.replace(updateLocationParams({ tab: 'sentbox' }));\n }\n\n if (permissions.pendingApprovals) {\n return history.replace(updateLocationParams({ tab: 'pendingApprovals' }));\n }\n }\n\n if (formIDPrev && formID !== formIDPrev) {\n changeForm(formID);\n }\n\n if (tab !== activeTabPrev) {\n removeClass(\n 'jfInbox--tab-inbox',\n 'jfInbox--tab-archive',\n 'jfInbox--tab-trash',\n 'jfInbox--tab-drafts',\n 'jfInbox--tab-incompleteSubmissions',\n 'jfInbox--tab-sentbox',\n 'jfInbox--tab-pendingApprovals'\n );\n addClass(`jfInbox--tab-${tab}`);\n toast.dismiss();\n\n if (activeTabPrev) {\n changeActiveTab(tab);\n }\n }\n\n if (JSON.stringify(filterObject) !== JSON.stringify(filterObjectPrev)) {\n changeFilterObject(filterObject);\n if (!(Object.values(filterObject).length === 0 || (Object.values(filterObject).length === 1 && filterObject.timeFilterText === 'All time'))) {\n this.setState({ showFilterResultBar: true });\n } else {\n this.setState({ showFilterResultBar: false });\n }\n }\n\n if (filterText !== filterTextPrev) {\n changeFilterText(filterText);\n }\n\n if (sid === '' && hasClass(MOBILE_CLASS) && !hasClass(LEFT_PANEL_CLASS)) {\n addClass(LEFT_PANEL_CLASS);\n } else if (sid !== activeSubmissionIDPrev) {\n changeActiveSubmission(sid);\n }\n\n if (editMode !== isEditModePrev) {\n changeEditMode(editMode);\n if (!editMode) {\n onTaskListRenew();\n }\n }\n\n this.prevProps = {\n formID,\n activeTab: tab,\n isEditMode: editMode,\n activeSubmissionID: sid,\n filterText,\n filterObject\n };\n };\n\n handleFilterChange({ target: { value } }) {\n const { updateFilterText } = this.props;\n updateFilterText(value);\n }\n\n onSearchPanelButton() {\n const { addClass } = this.props;\n addClass(LEFT_PANEL_CLASS);\n }\n\n setBreakingErrorState() {\n this.setState({ isThereBreakingError: true });\n }\n\n hideResultBar() {\n this.setState({ showFilterResultBar: false });\n }\n\n createNewTab(tabName = '') {\n const {\n history,\n onSetViews,\n form,\n filterObject\n } = this.props;\n saveInboxView(form.id, { filterObject, name: tabName.length > 0 ? tabName : 'Untitled Tab' }).then(tab => {\n getInboxViews(form.id).then(newTabs => {\n onSetViews(newTabs);\n history.push(updateLocationParams({ tab: tab.id, sid: '', filterObject }));\n WatchmanRecorder.recordEvent('createNewTab', 'SearchPanelToolbar');\n });\n });\n }\n\n render() {\n const {\n formID,\n ui,\n user,\n form,\n filterResultCount,\n submissionCount,\n t,\n submissionsLoading,\n submissionsLoaded,\n filterObject,\n filterText,\n updateFilterObject,\n questions,\n questionValues,\n getQuestionValues,\n isAllSentBox,\n activeTab,\n isFormOwner,\n isSignForm,\n updateFilterText,\n userForms,\n isPreviousOrders,\n isPwa,\n previousOrdersType,\n aiAgents\n } = this.props;\n\n const {\n showFilterResultBar,\n signUpRequired,\n isDownloadButtonOnMobile,\n isThereBreakingError\n } = this.state;\n\n if (!formID) {\n return ;\n }\n\n if (ui.errored) return ;\n\n const questionList = Object.values(questions)\n .filter(question => question && SEARCH_PROHIBITED_FIELDS.indexOf(question.type) === -1 && ['tags'].indexOf(question.qid) === -1)\n .reduce((prev, curr) => {\n return {\n ...prev,\n [curr.qid]: curr\n };\n }, {});\n\n const isCustomView = (/[0-9]/).test(activeTab);\n const isIncomplete = activeTab === 'incompleteSubmissions';\n const canCreateTab = !isIncomplete && !isCustomView && isFormOwner && Object.keys(filterObject).length > 0 && !isSignForm && filterResultCount > 0;\n const isMobile = window.innerWidth <= MOBILE_MAX_WIDTH;\n const isHistoryViewVisibleInConversations = activeTab === 'conversations';\n const isAnyAgentCreated = Object.keys(aiAgents ?? {})?.length > 0;\n\n return (\n \n
    \n
    \n \n
    \n \n <>\n {\n !isMobile && (!isHistoryViewVisibleInConversations || isAnyAgentCreated) ? (\n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n ) : null\n }\n updateFilterObject({})}\n t={t}\n />\n
    \n \n {signUpRequired && (\n this.setState({ signUpRequired: false })}\n apiURL={getAPIURL()}\n navigationWrapper={
    }\n additionalScreens={{ epilogue: <> }}\n appName='inbox'\n shouldCallNavigate={false}\n includeConfirm={false}\n showFormOnSignupOptions\n horizontalSocialButtons\n initialScreen=\"signupOptions\"\n verificationHash={window.verificationHash}\n mode=\"multi-column-modal\"\n onUserLogin={() => window.location.reload()}\n OtherColumnComponents={[Login Flow Card]}\n buttonNames={{\n google: 'inbox-empty-google-login',\n facebook: 'inbox-empty-facebook-login',\n apple: 'inbox-empty-apple-login',\n emailLogin: 'inbox-empty-standart-login-button',\n emailSignup: 'inbox-empty-header-createmyaccount'\n }}\n />\n )}\n
    \n \n \n
    \n \n \n \n {(isDownloadButtonOnMobile && submissionsLoaded) && }\n
    \n );\n }\n}\n\nAppBase.propTypes = {\n formID: string.isRequired,\n user: userPropType.isRequired,\n userLoaded: bool.isRequired,\n history: shape({}).isRequired,\n location: locationPropTypes.isRequired,\n changeEditMode: func.isRequired,\n onTaskListRenew: func.isRequired,\n ui: uiPropType.isRequired,\n ...enhancedProps\n};\n\nconst mapStateToProps = (stateProps, componentProps) => ({\n formID: routerFormIDSelector(componentProps),\n formTitle: formTitleSelector(stateProps),\n form: formSelector(stateProps),\n isAdmin: isAdminSelector(stateProps),\n userLoaded: userLoadedSelector(stateProps),\n activeTab: activeTabIDSelector(stateProps),\n activeSubmissionID: activeSubmissionIDSelector(stateProps),\n isEditMode: submissionEditModeSelector(stateProps),\n filterText: filterTextSelector(stateProps),\n filterObject: filterObjectSelector(stateProps),\n filterResultCount: filterResultCountSelector(stateProps),\n submissionCount: submissionCountSelector(stateProps),\n isSignForm: isSignFormSelector(stateProps),\n ui: uiSelector(stateProps),\n user: userSelector(stateProps),\n questions: questionsSelector(stateProps),\n questionOrders: questionOrdersSelector(stateProps),\n questionValues: questionValuesSelector(stateProps),\n submissionsLoading: filteredSubmissionsLoadingSelector(stateProps),\n submissionsLoaded: submissionsLoadedSelector(stateProps),\n isFormOwner: isFormOwnerSelector(stateProps),\n userForms: userFormsSelector(stateProps),\n isPreviousOrders: isPreviousOrdersSelector(stateProps),\n isPwa: isPwaSelector(stateProps),\n previousOrdersType: previousOrdersTypeSelector(stateProps),\n isAllSentBox: isAllSentBoxSelector(stateProps),\n filteredSubmissions: filteredSubmissionsSelector(stateProps),\n aiAgents: getAiAgents(stateProps)\n});\n\nconst mapDispatchToProps = {\n changeEditMode: setEditMode,\n changeActiveTab: setActiveTab,\n changeActiveSubmission: setActiveSubmission,\n changeFilterObject: setFilterObject,\n changeFilterText: setFilterText,\n changeIsAllSentbox: setIsAllSentbox,\n fetchForm,\n fetchQuestions,\n onSetViews: setViews,\n onSelectSubmission: selectSubmission,\n getQuestionValues: fetchQuestionValues\n};\n\nconst mergeProps = (stateProps, dispatchProps, componentProps) => ({\n ...componentProps,\n ...stateProps,\n ...dispatchProps,\n changeForm: formID => {\n if (formID) {\n dispatchProps.fetchForm(formID);\n dispatchProps.fetchQuestions(formID);\n }\n },\n updateFilterText: filterText => {\n return componentProps.history.push(updateLocationParams({ filterText }));\n },\n updateFilterObject: filterObject => {\n const { activeTab, formID } = stateProps;\n\n if ((/[0-9]/).test(activeTab)) {\n updateInboxView(formID, activeTab, { filterObject });\n }\n\n if (Object.keys(filterObject).length > 0) {\n return componentProps.history.push(updateLocationParams({ filterObject }));\n }\n\n componentProps.history.replace(/\\?.*/, '');\n }\n});\n\nconst enhance = withInboxEnhancer('app', connect(mapStateToProps, mapDispatchToProps, mergeProps));\n\nconst App = withPermissions(withRouter(enhance(AppBase)));\n\nexport default App;\n","import React from 'react';\nimport { shape, string } from 'prop-types';\nimport { useWorkflow } from '@jotforminc/workflow-components';\nimport App from '../App';\n\nconst AppWrapper = ({ match: { params: { formID } } }) => {\n const {\n onTaskListRenew = f => f\n } = useWorkflow();\n return (\n \n );\n};\n\nAppWrapper.propTypes = {\n match: shape({\n params: shape({\n formID: string\n })\n }).isRequired\n};\n\nexport default AppWrapper;\n","/* eslint-disable no-nested-ternary */\nimport React, { useState, useEffect } from 'react';\nimport { func } from 'prop-types';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { WorkflowActions, SubmissionThread } from '@jotforminc/workflow-components';\nimport { Header } from '@jotforminc/header-components';\nimport { LoginFlow } from '@jotforminc/login-flow';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\nimport { getAPIURL } from '@jotforminc/request-layer';\nimport { handleCustomNavigation } from '@jotforminc/utils';\nimport { isSSO } from '@jotforminc/router-bridge';\nimport { INITIATOR_TYPES } from '@jotforminc/constants';\n\nimport SubmissionView from '../SubmissionView';\nimport SubmissionContainer from '../SubmissionContainer';\n\nimport ErrorPage from '../../components/ErrorPage';\n\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\nimport { withInboxEnhancer } from '../../hocs/InboxEnhancer';\nimport { DEFAULT_DATE_FORMAT } from '../../constants';\nimport {\n submissionPropType,\n uiPropType,\n userPropType,\n translatedProps,\n formPropType\n} from '../../constants/proptypes';\n\nimport {\n preparePrint,\n printComplete,\n setMessage\n} from '../../actions';\n\nimport {\n userSelector,\n submissionsSelector,\n uiSelector,\n formSelector,\n questionsSelector,\n questionOrdersSelector\n} from '../../selectors';\nimport SubmissionViewHeader from '../SubmissionViewHeader';\nimport { initFeedback } from '../../utils';\n\n// TODO: migrate to new translation structure\nexport const SingleSubmissionComponent = ({\n submission,\n ui,\n user,\n form,\n addClass,\n t,\n onSetMessage\n}) => {\n const [isSubmissionEmpty, setSubmissionEmpty] = useState(true);\n const [loginRequired, setLoginRequired] = useState(false);\n const [isAccountBoxOpen, setAccountBoxOpen] = useState(false);\n const [isTaskCompleted, setIsTaskCompleted] = useState(false);\n\n useEffect(() => {\n const { answers } = submission;\n const isEmpty = !answers;\n setSubmissionEmpty(isEmpty);\n }, [submission]);\n\n useEffect(() => {\n initFeedback({ user, formID: form.id });\n }, [submission]);\n\n useEffect(() => {\n addClass('jfInbox--singleSubmission');\n }, []);\n\n const openInboxBasedOnTaskComplete = () => {\n // check form has workflow\n if (form.isEncrypted === 'Yes') {\n handleCustomNavigation('/listings', '_self');\n return;\n }\n\n handleCustomNavigation(`/inbox/${form.id}/${isTaskCompleted ? 'completed' : 'pendingApprovals'}`, '_self');\n };\n\n const openPendingInbox = () => {\n handleCustomNavigation(`/inbox/${form.id}/pendingApprovals`, '_self');\n };\n\n const toggleAccountBox = () => {\n setAccountBoxOpen(!isAccountBoxOpen);\n };\n\n const showMail = id => {\n onSetMessage({\n type: 'Reply', useApi: false, taskID: id, requestMore: true, title: 'requestMoreInfo'\n });\n };\n\n const renderHeaderTitle = () => (\n
    \n
    \n {form.title}\n
    \n
    \n );\n\n const renderHeaderSubTitle = () => {\n return form.isEncrypted === 'Yes' ? null : (\n {\n if (user.hasResettedPassword) {\n openPendingInbox(true);\n } else {\n setLoginRequired(true);\n }\n }}\n className='jNewHeader-subtitle'\n onKeyDown={f => f}\n >\n {window.JOTFORM_ENV === 'ENTERPRISE' ? t.VIEW_ON_INBOX : t.VIEW_ON_JOTFORM_INBOX}\n \n );\n };\n\n const onLoginFlowClose = () => {\n setLoginRequired(false);\n };\n\n const openLoginFlow = () => {\n setTimeout(() => {\n setLoginRequired(true);\n }, 1500);\n };\n\n const afterTaskAction = () => {\n setIsTaskCompleted(true);\n openLoginFlow();\n };\n\n const isFormUser = user.userType === 'formuser';\n const initialLoginScreen = user.hasUser || isEnterprise() ? 'loginOptions' : 'signupOptions';\n\n return (\n <>\n {ui.errored\n ? \n : (\n <>\n {loginRequired\n ? (\n }\n additionalScreens={{ epilogue: <> }}\n appName='inbox'\n initiator={INITIATOR_TYPES.INBOX}\n onUserLogin={openInboxBasedOnTaskComplete}\n shouldCallNavigate={false}\n initialScreen={initialLoginScreen}\n verificationHash={window.verificationHash}\n thankYouModalOnClose={onLoginFlowClose}\n buttonNames={{\n google: 'inbox-google-login',\n facebook: 'inbox-facebook-login',\n apple: 'inbox-apple-login',\n emailLogin: 'inbox-standart-login-button',\n emailSignup: 'inbox-header-createmyaccount'\n }}\n />\n )\n : null}\n
    \n {(Boolean(user.username) || isFormUser) && (\n f}\n loginPredefinedEmail={user.email}\n signupPredefinedEmail={user.email}\n toggleAccountBox={toggleAccountBox}\n isAccountBoxOpened={isAccountBoxOpen}\n currentMode={!user.hasResettedPassword && window.verificationHash && 'LOGIN_FLOW'}\n onLoginSuccess={() => window.location.reload()}\n showAppNavigation={false}\n forceUseRegularAccountBox={!user.hasResettedPassword}\n forceRegularUser={false}\n initiator={INITIATOR_TYPES.INBOX}\n initialLoginScreen={initialLoginScreen}\n logoAction={!user.email ? () => setLoginRequired(true) : null}\n enterpriseConfigs={{ preventLogoRedirection: !user.hasResettedPassword }}\n verificationHash={window.verificationHash}\n shouldCallNavigate={false}\n />\n )}\n
    \n
    \n \n
    a).join(' ')}>\n
    \n\n
    \n \n
    \n
    \n \n
    \n
    \n f}\n afterTaskAction={user.hasResettedPassword ? f => f : afterTaskAction}\n requestMoreInfoClick={id => showMail(id)}\n />\n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n )}\n \n );\n};\n\nSingleSubmissionComponent.propTypes = {\n submission: submissionPropType,\n ui: uiPropType.isRequired,\n user: userPropType.isRequired,\n form: formPropType.isRequired,\n addClass: func.isRequired,\n ...translatedProps\n};\n\nSingleSubmissionComponent.defaultProps = {\n submission: {\n id: '',\n answers: false,\n created_at: ''\n }\n};\n\nconst mapStateToProps = stateProps => {\n return ({\n user: userSelector(stateProps),\n submission: submissionsSelector(stateProps)[0] || {\n id: '',\n answers: false,\n created_at: ''\n },\n ui: uiSelector(stateProps),\n form: formSelector(stateProps),\n questions: questionsSelector(stateProps),\n questionOrders: questionOrdersSelector(stateProps)\n });\n};\n\nconst mapDispatchToProps = {\n initiatePrint: preparePrint,\n completePrint: printComplete,\n onSetMessage: setMessage\n};\n\nconst enhance = withInboxEnhancer('singleSubmission', withRouter, connect(mapStateToProps, mapDispatchToProps));\n\nexport default enhance(SingleSubmissionComponent);\n","/* eslint-disable no-nested-ternary */\nimport React, { useState, useEffect } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\nimport { Header } from '@jotforminc/header-components';\nimport { LoginFlow } from '@jotforminc/login-flow';\nimport { getAPIURL } from '@jotforminc/request-layer';\nimport { handleCustomNavigation } from '@jotforminc/utils';\nimport { isSSO } from '@jotforminc/router-bridge';\nimport { INITIATOR_TYPES } from '@jotforminc/constants';\nimport { getQueryParameter } from '../../utils';\nimport { withInboxEnhancer } from '../../hocs/InboxEnhancer';\nimport {\n userPropType,\n translatedProps,\n formPropType\n} from '../../constants/proptypes';\n\nimport {\n userSelector,\n formSelector\n} from '../../selectors';\nimport NoSubmission from '../../components/NoSubmission';\n\n// TODO: migrate to new translation structure\nexport const SingleSubmissionComponent = ({\n user,\n form,\n t\n}) => {\n const fromWhere = getQueryParameter('from');\n const [loginRequired, setLoginRequired] = useState(false);\n const [isAccountBoxOpen, setAccountBoxOpen] = useState(false);\n useEffect(() => {\n global.document.body.classList.add('jfInbox--isEmpty');\n }, []);\n const toggleAccountBox = () => {\n setAccountBoxOpen(!isAccountBoxOpen);\n };\n\n const renderHeaderTitle = () => (\n
    \n
    \n {form.title}\n
    \n
    \n );\n\n const handleOpenInbox = () => {\n handleCustomNavigation(`/inbox/${form.id}/`);\n };\n\n const handleMyforms = () => {\n window.top.location = '/myforms';\n };\n const renderHeaderSubTitle = () => {\n return (\n f}\n style={{ cursor: 'pointer' }}\n >\n {window.JOTFORM_ENV === 'ENTERPRISE' ? t.VIEW_ON_INBOX : t.VIEW_ON_JOTFORM_INBOX}\n \n );\n };\n\n const onLoginFlowClose = () => {\n setLoginRequired(false);\n };\n\n const isFormUser = user.userType === 'formuser';\n const initialLoginScreen = user.hasUser || isEnterprise() ? 'loginOptions' : 'signupOptions';\n\n return (\n <>\n {loginRequired ? (\n }\n additionalScreens={{ epilogue: <> }}\n appName='inbox'\n initiator={INITIATOR_TYPES.INBOX}\n shouldCallNavigate={false}\n initialScreen={initialLoginScreen}\n verificationHash={window.verificationHash}\n thankYouModalOnClose={onLoginFlowClose}\n buttonNames={{\n google: 'inbox-empty-google-login',\n facebook: 'inbox-empty-facebook-login',\n apple: 'inbox-empty-apple-login',\n emailLogin: 'inbox-empty-standart-login-button',\n emailSignup: 'inbox-empty-header-createmyaccount'\n }}\n />\n )\n : null }\n
    \n {(Boolean(user.username) || isFormUser) && (\n window.location.reload()}\n showAppNavigation={false}\n forceUseRegularAccountBox={!user.hasResettedPassword}\n forceRegularUser={false}\n initiator={INITIATOR_TYPES.INBOX}\n initialLoginScreen={initialLoginScreen}\n logoAction={handleMyforms}\n enterpriseConfigs={{ preventLogoRedirection: false }}\n verificationHash={window.verificationHash}\n shouldCallNavigate={false}\n />\n )}\n
    \n
    \n \n
    \n
    \n
    \n \n );\n};\n\nSingleSubmissionComponent.propTypes = {\n user: userPropType.isRequired,\n form: formPropType.isRequired,\n ...translatedProps\n};\n\nconst mapStateToProps = stateProps => {\n return ({\n user: userSelector(stateProps),\n form: formSelector(stateProps)\n });\n};\n\nconst enhance = withInboxEnhancer('singleSubmission', withRouter, connect(mapStateToProps, null));\n\nexport default enhance(SingleSubmissionComponent);\n","import { createBrowserHistory } from 'history';\nimport { getAppPath } from '@jotforminc/router-bridge';\n\nconst basename = getAppPath();\n\nexport default createBrowserHistory({\n basename\n});\n","import React, { Component } from 'react';\nimport { TwoButtonPopup } from '@jotforminc/two-button-popup';\nimport { string, func } from 'prop-types';\nimport { connect } from 'react-redux';\n\nimport {\n userPropType,\n enhancedProps\n} from '../../constants/proptypes';\n\nimport { userSelector, formIDSelector } from '../../selectors';\nimport { withInboxEnhancer } from '../../hocs/InboxEnhancer';\n\nexport class Feedback extends Component {\n constructor(props) {\n super(props);\n\n this.handleMessage = this.handleMessage.bind(this);\n this.switch = this.switch.bind(this);\n this.feedback = this.feedback.bind(this);\n\n this.switchPopup = React.createRef();\n this.feedbackPopup = React.createRef();\n }\n\n componentDidMount() {\n global.window.addEventListener('message', this.handleMessage);\n }\n\n componentDidUpdate() {\n const { getRef } = this.props;\n getRef(this);\n }\n\n componentWillUnmount() {\n global.window.removeEventListener('message', this.handleMessage);\n }\n\n handleMessage(e) {\n if (e.data && e.data.action && e.data.action === 'submission-completed') {\n if (this.feedbackPopup.current.isOpen) {\n this.feedbackPopup.current.hide();\n }\n }\n }\n\n feedback() {\n this.feedbackPopup.current.show();\n }\n\n switch() {\n this.switchPopup.current.show();\n }\n\n render() {\n const {\n formID,\n user,\n t\n } = this.props;\n\n return (\n <>\n \n \n \n\n \n \n \n \n );\n }\n}\n\nFeedback.propTypes = {\n formID: string.isRequired,\n user: userPropType.isRequired,\n getRef: func,\n ...enhancedProps\n};\n\nFeedback.defaultProps = {\n getRef: f => f\n};\n\nconst mapStateToProps = stateProps => ({\n user: userSelector(stateProps),\n formID: formIDSelector(stateProps)\n});\n\nconst enhance = withInboxEnhancer('feedback', connect(mapStateToProps));\n\nexport default enhance(Feedback);\n","import React, { Component } from 'react';\nimport { func, bool, string } from 'prop-types';\nimport { connect } from 'react-redux';\nimport { Resizable } from 're-resizable';\n\nimport FeedbackComponent from '../Feedback';\nimport ContentPanelComponent from '../ContentPanel';\nimport { withInboxEnhancer } from '../../hocs/InboxEnhancer';\nimport SentryRecorder from '../../utils/SentryRecorder';\n\nimport {\n FLEX_TOP_ALIGNED_CLASS,\n CHANGE_FLEX_LAYOUT_MAX_WIDTH,\n COMPACT_TOOLBAR_WIDTH,\n COMPACT_SUBMISSION_HEADER_CLASS\n} from '../../constants';\n\nimport {\n activeSubmissionIDSelector,\n answersSelector\n} from '../../selectors';\n\nimport {\n setLiteMode,\n fetchForm,\n fetchQuestions,\n setActiveTab,\n setActiveSubmission\n} from '../../actions';\n\nimport {\n answersPropType, enhancedProps\n} from '../../constants/proptypes';\n\nimport '../../styles/ResizableHandle.scss';\n\nconst resizableMinWidth = 485;\nconst resizableMaxWidth = 720;\nconst defaultWidth = global.localStorage.inboxViewWidth;\nconst maxWidth = Math.min(Math.max(global.window.innerWidth * 0.5, resizableMinWidth), resizableMaxWidth);\n\nexport class LiteModeInbox extends Component {\n constructor(props) {\n super(props);\n\n this.containerElement = document.getElementById(props.elementID) || { offsetHeight: 0 };\n\n const resizableWidth = defaultWidth || maxWidth;\n\n this.state = {\n resizableWidth,\n resizableHeight: this.containerElement.offsetHeight\n };\n\n this.onWindowSizeChange = this.onWindowSizeChange.bind(this);\n this.onResizeStop = this.onResizeStop.bind(this);\n this.resizeHandler = this.resizeHandler.bind(this);\n\n this.onShowSwitch = this.onShowSwitch.bind(this);\n this.onShowFeedback = this.onShowFeedback.bind(this);\n this.handleRejection = this.handleRejection.bind(this);\n }\n\n componentDidMount() {\n const {\n changeForm,\n formID,\n setLite,\n selectedFolder,\n changeActiveTab\n } = this.props;\n window.addEventListener('resize', this.onWindowSizeChange);\n window.addEventListener('unhandledrejection', this.handleRejection);\n changeForm(formID);\n setLite();\n if (selectedFolder === 'mySubmissions') {\n changeActiveTab('mySubmissions');\n } else if (selectedFolder && selectedFolder !== 'mySubmissions') {\n changeActiveTab('listings');\n }\n }\n\n componentDidUpdate({\n formID: formIDPrev,\n answers: answersPrev,\n resourceID: resourceIDPrev,\n activeSubmission: activeSubmissionPrev\n }) {\n const {\n addClass,\n formID: formIDCurrent,\n changeForm,\n answers,\n resourceID,\n setResourceID,\n activeSubmission,\n setActiveSubmissionID,\n selectedFolder\n } = this.props;\n\n if (formIDCurrent !== formIDPrev) {\n changeForm(formIDCurrent);\n }\n\n addClass('jfInbox--spacing-compact');\n\n const { resizableWidth } = this.state;\n\n if (resizableWidth < COMPACT_TOOLBAR_WIDTH) {\n addClass('jfInbox--isCompactToolbar');\n }\n\n if (answers && !answersPrev && resourceID && selectedFolder === 'mySubmissions') {\n setActiveSubmissionID(resourceID);\n }\n\n if (activeSubmission && activeSubmission !== activeSubmissionPrev && selectedFolder === 'mySubmissions') {\n setResourceID(activeSubmission);\n }\n\n if (resourceID !== resourceIDPrev && activeSubmission === activeSubmissionPrev && formIDCurrent === formIDPrev && selectedFolder === 'mySubmissions') {\n setActiveSubmissionID(resourceID);\n }\n }\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.onWindowSizeChange);\n window.removeEventListener('unhandledrejection', this.handleRejection);\n }\n\n handleRejection(event) {\n SentryRecorder.recordException({\n message: 'Unhandled Rejection!',\n reason: event.reason\n });\n }\n\n onWindowSizeChange() {\n this.setState({\n resizableHeight: this.containerElement.offsetHeight\n });\n }\n\n onResizeStop(e, direction, ref) {\n global.localStorage.inboxViewWidth = ref.clientWidth;\n this.setState({\n resizableWidth: ref.clientWidth\n });\n }\n\n onShowSwitch() {\n this.feedback.switch();\n }\n\n onShowFeedback() {\n this.feedback.feedback();\n }\n\n resizeHandler(e, direction, ref) {\n const {\n addClass,\n removeClass\n } = this.props;\n\n if (ref.clientWidth < COMPACT_TOOLBAR_WIDTH) {\n addClass('jfInbox--isCompactToolbar');\n } else {\n removeClass('jfInbox--isCompactToolbar');\n }\n\n if (ref.clientWidth < CHANGE_FLEX_LAYOUT_MAX_WIDTH) {\n addClass(FLEX_TOP_ALIGNED_CLASS, COMPACT_SUBMISSION_HEADER_CLASS);\n } else {\n removeClass(FLEX_TOP_ALIGNED_CLASS, COMPACT_SUBMISSION_HEADER_CLASS);\n }\n }\n\n render() {\n const {\n isEncrypted,\n answers,\n onEvent,\n selectedFolder,\n renewList,\n accountTypeName,\n updateListItem\n } = this.props;\n\n const {\n resizableWidth,\n resizableHeight\n } = this.state;\n\n return (\n <>\n \n onEvent('closeClicked'),\n selectedFolder,\n renewList,\n updateListItem\n }}\n />\n \n { this.feedback = r; }} />\n \n );\n }\n}\n\nLiteModeInbox.propTypes = {\n onEvent: func,\n isEncrypted: bool,\n answers: answersPropType.isRequired,\n elementID: string,\n changeForm: func,\n setLite: func,\n selectedFolder: string,\n renewList: func,\n resourceID: string,\n accountTypeName: string,\n updateListItem: func,\n ...enhancedProps\n};\n\nLiteModeInbox.defaultProps = {\n onEvent: f => f,\n isEncrypted: false,\n elementID: null,\n selectedFolder: '',\n changeForm: f => f,\n setLite: f => f,\n renewList: f => f,\n updateListItem: f => f,\n accountTypeName: '',\n resourceID: ''\n};\n\nconst mapStateToProps = stateProps => ({\n answers: answersSelector(stateProps),\n activeSubmission: activeSubmissionIDSelector(stateProps)\n});\n\nconst mapDispatchToProps = {\n setLite: setLiteMode,\n fetchForm,\n fetchQuestions,\n changeActiveTab: setActiveTab,\n setActiveSubmissionID: setActiveSubmission\n};\n\nconst mergeProps = (stateProps, dispatchProps, componentProps) => ({\n ...componentProps,\n ...stateProps,\n ...dispatchProps,\n changeForm: formID => {\n if (formID) {\n dispatchProps.fetchForm(formID);\n dispatchProps.fetchQuestions(formID);\n }\n }\n});\n\nconst enhance = withInboxEnhancer('liteModeInbox', connect(mapStateToProps, mapDispatchToProps, mergeProps));\n\nexport default enhance(LiteModeInbox);\n","import React from 'react';\nimport { objectOf, bool } from 'prop-types';\nimport { FeatureToggles } from '@paralleldrive/react-feature-toggles';\n\nimport { convertFeaturesObjectToArray } from '../../utils';\n\nconst FeatureTogglesComponent = ({ features, ...props }) => (\n \n);\n\nFeatureTogglesComponent.propTypes = {\n features: objectOf(bool).isRequired\n};\n\nexport default FeatureTogglesComponent;\n","import React, { Suspense } from 'react';\nimport { safeLazy } from '@jotforminc/safe-lazy-import';\n\nconst Preview = safeLazy(() => import(/* webpackChunkName: \"CommonPreview\" */ './CommonPreview'));\n\nconst LazyPreview = ({ ...props }) => (\n loading}>\n \n \n);\n\nexport default LazyPreview;\n","import React, { useState } from 'react';\nimport { render, unmountComponentAtNode } from 'react-dom';\nimport {\n bool, func, shape, string\n} from 'prop-types';\nimport { connect } from 'react-redux';\nimport classNames from 'classnames';\nimport { useFeatures } from '@paralleldrive/react-feature-toggles';\nimport { toast } from 'react-toastify';\nimport { useThread, MoreButton as MoreMenu } from '@jotforminc/workflow-components';\nimport { usePermissions } from '@jotforminc/permissions';\nimport { ButtonField as Button } from '@jotforminc/button-field';\nimport { t } from '@jotforminc/translation';\nimport { Unsupported } from '@jotforminc/preview';\n\nimport LazyPreview from '../LazyPreview/LazyPreview';\nimport NoteContent from '../../containers/NoteContent';\nimport SVG from '../SVG';\nimport NoteEditor from '../NoteEditor';\nimport { deleteNote as deleteNoteApi } from '../../api';\nimport { isFormOwnerSelector, liteModeSelector, userSelector } from '../../selectors';\nimport { userPropType } from '../../constants/proptypes';\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\nimport { getCommentContent } from '../../utils';\n\nconst NoteEntry = {};\n\nNoteEntry.Name = ({ actionType }) => (\n \n \n {actionType.toLowerCase()}\n \n);\n\nNoteEntry.Name.propTypes = {\n actionType: string.isRequired\n};\n\nNoteEntry.Attachment = ({\n actionDetails: { attachments, parentID, id }, entryState, setAttachmentState,\n isThreadExpanded, entryLayout\n}) => {\n const [fileIndex, setFileIndex] = useState(0);\n const [previewVisibility, setPreviewVisibility] = useState(false);\n let uploadUrls = attachments && JSON.parse(attachments);\n let childAttachments = [];\n const isParentCollapsed = String(parentID).indexOf('entry') < 0 && !isThreadExpanded;\n if (isParentCollapsed && entryLayout !== 'AnswerLayout') {\n const { data: { thread } } = useThread();\n thread.forEach(({ actionDetails }) => {\n if (actionDetails?.parentID === `entry_${id}` && [null, undefined, '[]', '', 'null', 'undefined'].indexOf(actionDetails?.attachments) < 0) {\n const appendedAttachment = JSON.parse(actionDetails?.attachments);\n if (Array.isArray(appendedAttachment)) {\n childAttachments = [...childAttachments, ...appendedAttachment];\n }\n }\n });\n if (!uploadUrls) {\n uploadUrls = [...childAttachments];\n childAttachments = [];\n }\n }\n if (Array.isArray(uploadUrls)) {\n if (childAttachments.length > 0) {\n uploadUrls = [...uploadUrls, ...childAttachments];\n }\n\n if (uploadUrls.length < 1 && entryState !== 'edit') return null;\n\n uploadUrls = uploadUrls.map(uploadUrl => {\n const fullName = /[^/]*$/.exec(uploadUrl)[0];\n const extension = fullName?.split('.')?.pop()?.toUpperCase();\n\n return {\n description: '',\n fileName: fullName,\n fileThumbnailUrl: uploadUrl,\n fileUrl: uploadUrl,\n previewUrl: uploadUrl,\n size: '',\n extension\n };\n });\n\n const actionAttachments = uploadUrls.map(({\n fileName, extension, fileUrl\n }, i) => {\n return (\n <>\n {\n setFileIndex(i);\n setPreviewVisibility(true);\n }}\n >\n <>\n {entryState !== 'edit' && (\n
    \n \n
    \n )}\n \n {fileName}\n \n {entryState === 'edit' && (\n {\n e.stopPropagation();\n setAttachmentState(fileUrl);\n }}\n >\n \n \n )}\n \n \n \n );\n });\n\n if (entryState === 'edit') {\n setTimeout(() => {\n const container = document.getElementById(`portal-${id}`);\n if (container && actionAttachments.length > 0) {\n render(actionAttachments, container);\n } else {\n unmountComponentAtNode(container);\n }\n }, 350);\n return null;\n }\n\n return (\n \n {actionAttachments}\n {previewVisibility && (\n setPreviewVisibility(false)}\n />\n )}\n \n );\n } return null;\n};\n\nNoteEntry.Attachment.propTypes = {\n actionDetails: shape({}).isRequired,\n entryState: string.isRequired,\n setAttachmentState: func,\n isThreadExpanded: bool,\n entryLayout: string\n};\n\nNoteEntry.Attachment.defaultProps = {\n setAttachmentState: f => f,\n isThreadExpanded: false,\n entryLayout: ''\n};\n\nconst mapStateToProps = state => ({\n userLoggedIn: userSelector(state),\n liteMode: liteModeSelector(state),\n isFormOwner: isFormOwnerSelector(state)\n});\n\nconst NoteEntryStatus = ({\n actionDetails, entryState, setEntryState, entryLayout, liteMode, attachmentState, setAttachmentState, user\n}) => {\n const afterSave = () => {\n setEntryState(undefined);\n WatchmanRecorder.recordEvent(`${entryLayout === 'AnswerLayout' ? 'Inline' : ''}Comment-Edit`, liteMode ? 'Lite Inbox' : 'Comments on All Tabs');\n };\n\n if (entryState === 'edit') {\n return (\n
    \n setEntryState(undefined)}\n value={actionDetails.content}\n actionDetails={actionDetails}\n showButtons\n isEditing={true}\n afterSave={afterSave}\n buttonTexts={{ save: 'Edit' }}\n attachmentState={attachmentState}\n setAttachmentState={setAttachmentState}\n user={user}\n />\n
    \n );\n }\n\n return (\n \n );\n};\n\nNoteEntryStatus.propTypes = {\n actionDetails: shape({}).isRequired,\n setEntryState: func,\n entryState: bool,\n entryLayout: string,\n liteMode: bool,\n attachmentState: string,\n setAttachmentState: func,\n user: shape({})\n};\n\nNoteEntryStatus.defaultProps = {\n setEntryState: f => f,\n entryState: undefined,\n entryLayout: 'EntryLayout',\n liteMode: false,\n attachmentState: '',\n setAttachmentState: f => f,\n user: {}\n};\n\nNoteEntry.Status = connect(mapStateToProps, null)(NoteEntryStatus);\n\nconst NoteEntryContext = ({\n actionDetails, setExpanded, setEntryState, user: commentUser, userLoggedIn, openSubThread, entryLayout, liteMode,\n isFormOwner\n}) => {\n const { reload: reloadThread } = useThread();\n const features = useFeatures();\n const permissions = usePermissions();\n const isSubThreads = features.includes('isSubThreads');\n const deleteNote = () => {\n // eslint-disable-next-line camelcase\n const { id, submission_id: submissionID } = actionDetails;\n deleteNoteApi({ id, submissionID }).then(reloadThread);\n\n toast.success(t('Your comment is deleted.'), {\n type: toast.TYPE.SUCCESS,\n position: toast.POSITION.TOP_RIGHT,\n className: 'success',\n autoClose: false\n });\n\n WatchmanRecorder.recordEvent(`${entryLayout === 'AnswerLayout' ? 'Inline' : ''}Comment-Delete`, liteMode ? 'Lite Inbox' : 'Comments on All Tabs');\n };\n\n const handleDeleteClick = () => deleteNote(actionDetails);\n const handleEditClick = () => {\n setExpanded(true);\n setEntryState('edit');\n };\n\n const handleReplyClick = () => {\n openSubThread();\n setExpanded(true);\n };\n\n const isCommentOwner = userLoggedIn && commentUser && userLoggedIn?.email === commentUser?.email;\n\n if (isCommentOwner || (entryLayout !== 'AnswerLayout' && isSubThreads)) {\n return (permissions?.notes\n && (\n \n {entryLayout !== 'AnswerLayout' && isSubThreads && permissions?.editNotes ? (\n }\n className=\"forReply\"\n onClick={handleReplyClick}\n useMouseUp\n tabIndex={0}\n >\n {t('Reply')}\n \n ) : null}\n {isCommentOwner ? (\n }\n className=\"forEdit\"\n onClick={handleEditClick}\n tabIndex={0}\n >\n {t('Edit')}\n \n ) : null}\n {isFormOwner || isCommentOwner ? (\n }\n className=\"forDelete\"\n onClick={handleDeleteClick}\n useMouseUp\n tabIndex={0}\n >\n {t('Delete')}\n \n ) : null}\n \n )\n );\n }\n\n return null;\n};\n\nNoteEntryContext.propTypes = {\n actionDetails: shape({}).isRequired,\n setExpanded: func,\n setEntryState: func,\n user: userPropType.isRequired,\n userLoggedIn: userPropType.isRequired,\n openSubThread: func,\n entryLayout: string,\n liteMode: bool,\n isFormOwner: bool\n};\n\nNoteEntryContext.defaultProps = {\n setExpanded: f => f,\n setEntryState: f => f,\n openSubThread: f => f,\n entryLayout: 'EntryLayout',\n liteMode: false,\n isFormOwner: false\n};\n\nNoteEntry.Context = connect(mapStateToProps, null)(NoteEntryContext);\n\nexport default NoteEntry;\n","/* eslint-disable complexity */\nimport React, {\n useRef, useState, useEffect\n} from 'react';\nimport {\n func, bool, string, arrayOf, shape\n} from 'prop-types';\nimport classNames from 'classnames';\nimport { useThread } from '@jotforminc/workflow-components';\nimport { connect } from 'react-redux';\nimport { capitalizeFirstLetter } from '@jotforminc/utils';\nimport Mail from '../../components/Mail';\nimport t from '../../constants/texts';\nimport Comment from '../../components/Comment';\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\nimport { scrollSubmissionToElement } from '../../utils';\n\nimport {\n formSelector,\n userSelector,\n userTypeSelector,\n emailQidSelector,\n fullNameQidSelector,\n questionsSelector,\n questionOrdersSelector,\n activeSubmissionSelector,\n liteModeSelector,\n hideEmptyFieldsSelector,\n hideNonInputFieldsSelector,\n submissionDateFormatSelector,\n activeTabIDSelector,\n editSubmissionPreference,\n isMessageContainerVisibleSelector,\n messageSelector,\n isPreviousOrdersSelector,\n isPwaSelector,\n isTeamAdminSelector,\n getTeamID,\n getRecaptchaSiteSelector\n} from '../../selectors';\n\nimport {\n setMessage, closeMessage\n} from '../../actions';\n\nimport {\n formPropType,\n userPropType,\n submissionPropType,\n questionOrdersPropType,\n questionsPropType,\n NUMBER_OR_STRING_PROPTYPE\n} from '../../constants/proptypes';\n\nexport const MessageContainerComponent = ({\n user,\n form,\n submission,\n questions,\n fullNameQid,\n emailQid,\n questionOrders,\n hideEmptyFields,\n hideHeaderAndText,\n submissionDateFormat,\n onCloseMessage,\n isMessageContainerVisible,\n message,\n activeTab,\n isPreviousOrders,\n isPwa,\n className,\n isMounted,\n liteMode,\n isTeamAdmin,\n teamID,\n recaptchaSite\n}) => {\n const mailRef = useRef();\n\n const [isOpened, setIsOpened] = useState(false);\n const {\n reload: reloadThread\n } = useThread();\n\n const safeQuestions = user.isHIPAA !== '1' ? questions : Object.keys(questions).reduce((acc, qid) => {\n if (!questions[qid].protected || questions[qid].protected !== 'Yes') {\n acc[qid] = questions[qid];\n }\n return acc;\n }, {});\n\n const actionType = liteMode ? 'Lite Inbox' : 'Mail&Comment Modal on All tabs';\n\n useEffect(() => {\n if (isMessageContainerVisible) {\n setTimeout(() => {\n setIsOpened(true);\n }, 500);\n return;\n }\n setIsOpened(false);\n }, [isMounted]);\n\n const onMailSent = () => {\n reloadThread().then(() => {\n scrollSubmissionToElement(document.querySelector('.jfThread-entry:last-child'));\n });\n closeMessage();\n };\n\n const actionHandler = (action, payload) => {\n try {\n if (action === 'click') {\n if (payload?.includes?.('mode-fullscreen')) {\n WatchmanRecorder.recordEvent('Resize-SidetoEnlarge', actionType);\n }\n\n if (payload?.includes?.('mode-open')) {\n WatchmanRecorder.recordEvent('Resize-EnlargetoSide', actionType);\n }\n\n if (payload?.includes?.('mode-minimize')) {\n WatchmanRecorder.recordEvent('Resize-Minimize', actionType);\n }\n if (payload?.includes?.('.jfMessage-header-action.forClose')) {\n WatchmanRecorder.recordEvent('Closed', actionType);\n }\n\n if ([\n 'forFormat', 'forFontFamilyItem', 'forFontSizeItem',\n 'forTextAlignItem', 'forColorPicker', 'forFormatColor'\n ].find(act => payload?.includes?.(act))) {\n WatchmanRecorder.recordEvent('TextEditorApplied', actionType);\n }\n\n if (payload?.includes?.('addEmojiItem')) {\n WatchmanRecorder.recordEvent('EmojiApplied', actionType);\n }\n }\n\n if (action === 'change') {\n if (payload?.includes?.('NewReplytoEmailAdded')) {\n WatchmanRecorder.recordEvent('NewReplytoEmailAdded', actionType);\n }\n\n if (payload?.includes?.('messageCc') && payload !== 'messageCc ') {\n WatchmanRecorder.recordEvent('CCinserted', actionType);\n }\n\n if (payload?.includes?.('messageBcc') && payload !== 'messageBcc ') {\n WatchmanRecorder.recordEvent('BCCinserted', actionType);\n }\n\n if (payload?.includes?.('addSenderEmail')) {\n WatchmanRecorder.recordEvent('NewSenderEmailAdded', actionType);\n }\n\n if (payload?.includes?.('FormresponseSelected')) {\n WatchmanRecorder.recordEvent('FormresponseSelected', actionType);\n }\n }\n\n if (['attachment', 'submissionTable', 'formField'].some(str => str.includes(payload)) > -1) {\n WatchmanRecorder.recordEvent(payload, actionType);\n }\n } catch (err) {\n console.log(err);\n }\n };\n\n return (\n
    \n {\n message?.type === 'comment' ? (\n onCloseMessage()}\n ref={mailRef}\n editorTitle={message.title}\n onSave={onMailSent}\n activeTab={activeTab}\n formID={form?.id}\n placeholder={(isPreviousOrders && isPwa) ? 'Write your message to seller' : null}\n t={t}\n isTeamAdmin={isTeamAdmin}\n teamID={teamID}\n />\n ) : (\n onCloseMessage()}\n submissionDateFormat={submissionDateFormat}\n requestMore={message.requestMore}\n editorTitle={message.title}\n hideEmptyFields={hideEmptyFields}\n hideHeaderAndText={hideHeaderAndText}\n t={t}\n taskID={message.taskID}\n useAPI={message.useApi}\n onSuccess={() => reloadThread()}\n isReply={message.type === 'Reply'}\n isOpened={isOpened}\n className=\"forNewMessage\"\n eventTarget={capitalizeFirstLetter(activeTab)}\n actionHandler={actionHandler}\n messageToReply={message.customEmail}\n recaptchaSite={recaptchaSite}\n />\n )\n }\n
    \n );\n};\n\nMessageContainerComponent.propTypes = {\n user: userPropType.isRequired,\n form: formPropType.isRequired,\n questionOrders: questionOrdersPropType.isRequired,\n questions: questionsPropType.isRequired,\n submission: submissionPropType.isRequired,\n submissionDateFormat: string.isRequired,\n fullNameQid: NUMBER_OR_STRING_PROPTYPE,\n emailQid: arrayOf(string),\n requestMore: bool,\n hideEmptyFields: bool,\n hideHeaderAndText: bool,\n taskID: string,\n onCloseMessage: func,\n message: shape({}),\n activeTab: string,\n className: string,\n isMounted: bool,\n isMessageContainerVisible: bool,\n isPreviousOrders: bool,\n isPwa: bool,\n liteMode: bool,\n isTeamAdmin: bool,\n teamID: string,\n recaptchaSite: string\n};\n\nMessageContainerComponent.defaultProps = {\n fullNameQid: null,\n requestMore: false,\n emailQid: [''],\n className: 'closed',\n isMounted: false,\n hideEmptyFields: false,\n activeTab: 'inbox',\n hideHeaderAndText: false,\n isMessageContainerVisible: false,\n isPreviousOrders: false,\n isPwa: false,\n taskID: null,\n onCloseMessage: () => {},\n message: {\n useAPI: false,\n title: null,\n requestMore: false,\n taskID: '',\n type: 'Reply'\n },\n liteMode: false,\n isTeamAdmin: false,\n teamID: '',\n recaptchaSite: ''\n};\n\nconst mapStateToProps = stateProps => ({\n user: userSelector(stateProps),\n userType: userTypeSelector(stateProps),\n form: formSelector(stateProps),\n activeTab: activeTabIDSelector(stateProps),\n allowEdit: editSubmissionPreference(stateProps),\n liteMode: liteModeSelector(stateProps),\n emailQid: emailQidSelector(stateProps),\n fullNameQid: fullNameQidSelector(stateProps),\n questions: questionsSelector(stateProps),\n questionOrders: questionOrdersSelector(stateProps),\n submission: activeSubmissionSelector(stateProps),\n hideEmptyFields: hideEmptyFieldsSelector(stateProps),\n hideHeaderAndText: hideNonInputFieldsSelector(stateProps),\n submissionDateFormat: submissionDateFormatSelector(stateProps),\n isMessageContainerVisible: isMessageContainerVisibleSelector(stateProps),\n message: messageSelector(stateProps),\n isPreviousOrders: isPreviousOrdersSelector(stateProps),\n isPwa: isPwaSelector(stateProps),\n isTeamAdmin: isTeamAdminSelector(stateProps),\n teamID: getTeamID(stateProps),\n recaptchaSite: getRecaptchaSiteSelector(stateProps)\n});\nconst mapDispatchToProps = {\n onSetMessage: setMessage,\n onCloseMessage: closeMessage\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(MessageContainerComponent);\n","import React, {\n useState, useEffect\n} from 'react';\nimport {\n shape\n} from 'prop-types';\nimport { createPortal } from 'react-dom';\nimport { connect } from 'react-redux';\nimport { useDelayUnmount } from '@jotforminc/hooks';\n\nimport {\n activeSubmissionSelector,\n isMessageContainerVisibleSelector,\n messageSelector\n} from '../../selectors';\n\nimport {\n setMessage, closeMessage\n} from '../../actions';\n\nimport {\n submissionPropType\n} from '../../constants/proptypes';\nimport MailContainer from '../MessageContainer';\n\nexport const ReplyEmailContainer = ({\n submission,\n isMessageContainerVisible,\n message\n}) => {\n const [isMounted, setIsMounted] = useState(false);\n const [shouldRenderChild, className] = useDelayUnmount(isMounted, 250);\n\n const containerDom = global.document.querySelector(message.container ? message.container : '#reply-content');\n\n useEffect(() => {\n if (!isMounted) {\n setIsMounted(true);\n return;\n }\n\n setIsMounted(false);\n }, [isMessageContainerVisible]);\n\n return (\n shouldRenderChild && submission.answers && (\n createPortal(\n , containerDom\n )\n )\n );\n};\n\nReplyEmailContainer.propTypes = {\n submission: submissionPropType.isRequired,\n message: shape({})\n};\n\nReplyEmailContainer.defaultProps = {\n onSetMessage: () => {},\n closeMessage: () => {},\n message: {\n useAPI: false,\n title: null,\n requestMore: false,\n taskID: '',\n type: 'Reply'\n }\n};\n\nconst mapStateToProps = stateProps => ({\n submission: activeSubmissionSelector(stateProps),\n isMessageContainerVisible: isMessageContainerVisibleSelector(stateProps),\n message: messageSelector(stateProps)\n});\n\nconst mapDispatchToProps = {\n onSetMessage: setMessage,\n onCloseMessage: closeMessage\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ReplyEmailContainer);\n","/* eslint-disable camelcase */\n/* eslint-disable complexity */\nimport 'react-toastify/dist/ReactToastify.css';\n\nimport React, { Suspense } from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n func, string, bool, shape, array\n} from 'prop-types';\nimport TimeMe from 'timeme.js/timeme';\nimport { connect } from 'react-redux';\nimport { ToastContainer } from 'react-toastify';\nimport { BrowserRouter as Router, Switch, Route } from 'react-router-dom';\nimport { ThreadProvider, WorkflowProvider } from '@jotforminc/workflow-components';\nimport { PopoverContainer } from '@jotforminc/jotform-common';\nimport { getActiveAlias } from '@jotforminc/router-bridge';\nimport { Permissions, withPermissions } from '@jotforminc/permissions';\nimport { isEnterprise as isEnterpriseFunc } from '@jotforminc/enterprise-utils';\nimport { safeLazy } from '@jotforminc/safe-lazy-import';\nimport keyboardJs from '../../vendor/keyboard';\n\nimport AppWrapper from '../AppWrapper';\nimport SingleSubmission from '../SingleSubmission';\nimport NoSubmissionCustom from '../SingleSubmissionEmpty';\nimport history from '../../history';\nimport LiteModeInboxContainer from '../LiteModeInbox';\n\nimport {\n MOBILE_CLASS,\n MOBILE_MAX_WIDTH,\n FLEX_TOP_ALIGNED_CLASS,\n CHANGE_FLEX_LAYOUT_MAX_WIDTH,\n COMPACT_SUBMISSION_HEADER_CLASS,\n DEFAULT_DATE_FORMAT,\n LITE_MODE_PAGES\n} from '../../constants';\n\nimport WatchmanRecorder from '../../utils/WatchmanRecorder';\nimport { withUIManager } from '../../hocs/UserInterfaceManager';\nimport { withTranslationManager } from '../../hocs/Translation';\nimport { NUMBER_OR_STRING_PROPTYPE, userPropType, submissionPropType } from '../../constants/proptypes';\nimport {\n unreadSubmissionCountSelector,\n userSelector,\n submissionCountSelector,\n formIDSelector,\n formTitleSelector,\n userLoadedSelector,\n isEncryptedSelector,\n answersSelector,\n liteModeSelector,\n submissionSpacingPreferenceSelector,\n submissionLayoutPreferenceSelector,\n prevSubmissionIDSelector,\n nextSubmissionIDSelector,\n userTypeSelector,\n activeSubmissionSelector,\n activeTabIDSelector,\n isFormOwnerSelector,\n submissionDateFormatSelector,\n userTimezoneSelector,\n isSignFormSelector,\n isAllSentBoxSelector,\n submissionsSelector,\n isGuestUserSelector,\n userRoleSelector,\n isMessageContainerVisibleSelector,\n encryptionProtocolSelector,\n showDecryptionModalSelector,\n isSettingsPanelOpenSelector\n} from '../../selectors';\n\nimport '../../styles/style.scss';\nimport {\n assert, getQueryParameter, isEditingText, getViewportValues, updateLocationParams, getTeamInfoForWorkflow\n} from '../../utils';\nimport {\n prevSubmission, nextSubmission, setHighlightPendingApproval, renewSubmission, setUserPermissions, setSettings\n} from '../../actions';\nimport FeatureToggles from '../../components/FeatureToggles';\nimport { withBreakpoints } from '../../hocs/Breakpoints';\nimport { getFormPermissions } from '../../api';\nimport SocketProvider from '../../contexts/Socket';\nimport NoteEntry from '../../components/NoteEntry';\nimport NoteEditor from '../../components/NoteEditor';\nimport ReplyMailContainer from '../ReplyEmailContainer';\n\nconst DecryptionWizard = safeLazy(() => import(/* webpackChunkName: \"LazyDecryptionWizard\" */ '@jotforminc/form-encryption').then(module => (\n { default: module.DecryptionWizard }\n)));\n\nconst metaViewport = global.document.querySelector('meta[name=viewport]');\nconst viewportState = getViewportValues(window.innerWidth);\nconst winIsThread = true || window.location.href.indexOf('thread') > -1;\nconst useGPT3 = window.location.href.indexOf('gpt3') > -1;\nconst winOldDesign = window.location.href.indexOf('oldDesign') > -1;\nconst winIsNewEmail = true || window.location.href.indexOf('newEmail') > -1;\nconst winIsSubThreads = true || window.location.href.indexOf('subThreads') > -1;\nconst winIsPrintThread = true || window.location.href.indexOf('printThread') > -1;\nconst winIsCommentAssignees = true || window.location.href.indexOf('commentAssignees') > -1;\nconst winIsNewTags = true || window.location.href.indexOf('newTags') > -1;\nconst winIsNewSentBox = true || window.location.href.indexOf('isNewSentBox') > -1;\nconst winIsRequestEdit = true || window.JOTFORM_ENV === 'DEVELOPMENT' || window.location.href.indexOf('useRequestEdit') > -1;\nconst winIsRequestDelete = true || window.JOTFORM_ENV === 'DEVELOPMENT' || window.location.href.indexOf('useRequestDelete') > -1;\nconst pageName = getActiveAlias();\nconst isLiteMode = LITE_MODE_PAGES.indexOf(pageName) > -1;\nconst useCanUndo = true;\nconst PermissionsProvider = Permissions.provider;\n\nconst Toast = () => {\n if (!global.document.body.querySelector('body #jfInbox-toast')) {\n const Toaster = global.document.createElement('div');\n Toaster.setAttribute('id', 'jfInbox-toast');\n Toaster.setAttribute('aria-live', 'polite');\n Toaster.setAttribute('aria-relevant', 'all');\n global.document.body.appendChild(Toaster);\n }\n\n return ReactDOM.createPortal(, global.document.body.querySelector('body #jfInbox-toast'));\n};\n\nconst Root = withUIManager(withTranslationManager(({ children }) => {\n return (\n
    \n \n {!isLiteMode ? : null}\n {children}\n \n
    \n );\n}));\n\nexport class InboxRoot extends React.Component {\n // TODO: convert to a hoc\n constructor() {\n super();\n\n this.sendActiveTime = this.sendActiveTime.bind(this);\n\n this.onWindowSizeChange = this.onWindowSizeChange.bind(this);\n this.setViewportValues = this.setViewportValues.bind(this);\n this.actionHandler = this.actionHandler.bind(this);\n this.getUserPermissions = this.getUserPermissions.bind(this);\n\n this.root = React.createRef();\n }\n\n componentDidMount() {\n // Initialize timer to calculate active time spent on component\n TimeMe.initialize({ currentPageName: 'jotform-inbox' });\n TimeMe.setIdleDurationInSeconds(5);\n TimeMe.trackTimeOnElement('jfInbox--root');\n\n // Wait to have set the actor of WatchmanRecorder\n setTimeout(() => {\n WatchmanRecorder.recordEvent('viewOpened', 'InboxRoot');\n }, 1000);\n\n // TODO: move liteMode events to respective component\n keyboardJs.bind('left', e => {\n const { liteMode, onPrevSubmission } = this.props;\n if (onPrevSubmission && !isEditingText() && liteMode) {\n WatchmanRecorder.recordEvent('onPrevSubmissionKeyup', 'InboxRoot');\n onPrevSubmission();\n e.preventDefault();\n }\n });\n\n keyboardJs.bind('up', e => {\n const { liteMode, onPrevSubmission } = this.props;\n if (onPrevSubmission && !isEditingText() && !liteMode) {\n WatchmanRecorder.recordEvent('onPrevSubmissionKeyup', 'InboxRoot');\n onPrevSubmission();\n e.preventDefault();\n }\n });\n\n keyboardJs.bind('right', e => {\n const { liteMode, onNextSubmission } = this.props;\n if (onNextSubmission && !isEditingText() && liteMode) {\n WatchmanRecorder.recordEvent('onNextSubmissionKeyup', 'InboxRoot');\n onNextSubmission();\n e.preventDefault();\n }\n });\n\n keyboardJs.bind('down', e => {\n const { liteMode, onNextSubmission } = this.props;\n\n if (onNextSubmission && !isEditingText() && !liteMode) {\n WatchmanRecorder.recordEvent('onNextSubmissionKeyup', 'InboxRoot');\n onNextSubmission();\n e.preventDefault();\n }\n });\n\n if (getQueryParameter('debug') === '1') {\n keyboardJs.bind('alt+shift+a', () => {\n throw new Error('Test Error');\n });\n\n keyboardJs.bind('alt+shift+b', () => {\n return new Promise((res, rej) => { rej(new Error('Test Rejection')); });\n });\n }\n\n if (getQueryParameter('approve') || getQueryParameter('deny') || getQueryParameter('moreActions')) {\n const { changeHighlightPendingApproval } = this.props;\n changeHighlightPendingApproval(true);\n }\n\n window.addEventListener('beforeunload', this.sendActiveTime);\n\n if (global.Notification) {\n if (global.Notification.permission === 'default') {\n global.Notification.requestPermission();\n }\n }\n\n if (window.innerWidth <= MOBILE_MAX_WIDTH) {\n this.root.current.addClass(MOBILE_CLASS);\n }\n\n if (window.innerWidth <= CHANGE_FLEX_LAYOUT_MAX_WIDTH) {\n this.root.current.addClass(FLEX_TOP_ALIGNED_CLASS, COMPACT_SUBMISSION_HEADER_CLASS);\n }\n\n this.setViewportValues();\n window.addEventListener('resize', this.onWindowSizeChange);\n }\n\n componentDidUpdate({ unreadSubmissionCount: unreadSubmissionCountPrev, submissionCount: submissionCountPrev }) {\n const {\n onEvent,\n unreadSubmissionCount: unreadSubmissionCountCurrent,\n submissionCount: submissionCountCurrent,\n activeFormID,\n liteMode\n } = this.props;\n\n if (unreadSubmissionCountPrev !== unreadSubmissionCountCurrent\n || submissionCountPrev !== submissionCountCurrent) {\n assert(unreadSubmissionCountCurrent >= 0, new Error('InboxRoot: Unread count should not be negative!'));\n\n const fixedCount = unreadSubmissionCountCurrent < 0 ? 0 : unreadSubmissionCountCurrent;\n\n if (!liteMode && window.opener) {\n window.opener.postMessage(`updateUnreadCount:${activeFormID}:${fixedCount}`, '*'); // eslint-disable-line\n window.opener.postMessage(`updateSubmissionCount:${activeFormID}:${submissionCountCurrent}`, '*'); // eslint-disable-line\n } else if (onEvent) {\n onEvent('unreadChanged', fixedCount);\n onEvent('countChanged', submissionCountCurrent);\n }\n }\n }\n\n componentWillUnmount() {\n window.removeEventListener('beforeunload', this.sendActiveTime);\n window.removeEventListener('resize', this.onWindowSizeChange);\n this.sendActiveTime();\n }\n\n onWindowSizeChange() {\n const isMobileClassExists = this.root.current.hasClass(MOBILE_CLASS);\n const { isSettingsPanelOpen, setSettingsPanel } = this.props;\n\n if (window.innerWidth <= MOBILE_MAX_WIDTH && !isMobileClassExists) {\n this.root.current.addClass(MOBILE_CLASS);\n } else if (window.innerWidth > MOBILE_MAX_WIDTH) {\n if (isMobileClassExists) this.root.current.removeClass(MOBILE_CLASS);\n if (isSettingsPanelOpen) {\n setSettingsPanel({\n isOpened: false\n });\n }\n }\n }\n\n get enabledFeatures() {\n const {\n userType, liteMode, permissions, user, isSignForm, isAllSentBox\n } = this.props;\n\n // const isProductionAdminOrSupport = global.JOTFORM_ENV === 'PRODUCTION' && ['ADMIN', 'SUPPORT'].indexOf(user?.account_type?.name) > -1;\n // const isDevelopment = global.JOTFORM_ENV === 'DEVELOPMENT';\n\n // const isEnterprise = !(/jotformers.com|onurmultitest.jotform|hipaatest.jotform|hipaajotformers.com/.test(window.location.href)) && window.JOTFORM_ENV && window.JOTFORM_ENV === 'ENTERPRISE';\n const isEnterprise = isEnterpriseFunc();\n const isMyForms = window?.location?.href.indexOf('myforms') > -1;\n const isApps = window?.location?.href.indexOf('jotform_pwa') > -1;\n const isTesting = user?.isTesting || global.JOTFORM_ENV === 'TESTING';\n const isThread = isTesting || winIsThread;\n const isNewEmail = isTesting || winIsNewEmail;\n const isNewComment = true;\n const isNewMessage = true;\n const isSubThreads = isTesting || winIsSubThreads;\n const isCommentAssignees = winIsCommentAssignees;\n const isInboxViews = true;\n const isPrintThread = winIsPrintThread;\n\n // const isTestIOUser = `${user.userName}`.indexOf('testiouser_') > -1 || readCookie('workflowBetaUser') === 'true';\n // const host = global && global.location ? global.location.hostname : '';\n // const isJotformers = host.indexOf('jotformers.com') !== -1;\n\n const isNewDesign = !winOldDesign;\n\n /* eslint-disable no-unused-expressions */\n this?.root?.current?.addClass?.(`jfInbox--is${isNewDesign ? 'New' : 'Legacy'}Design`);\n this?.root?.current?.removeClass?.(`jfInbox--is${!isNewDesign ? 'New' : 'Legacy'}Design`);\n this?.root?.current?.addClass?.(`jfInbox--is${isAllSentBox ? 'AllSentBox' : ''}`);\n this?.root?.current?.addClass?.(`jfInbox--is${(window.branding21 || user?.branding21 === '1') ? 'New' : 'Old'}Branding`);\n /* eslint-enable no-unused-expressions */\n\n const isSign = isSignForm === 'Yes';\n\n const features = {\n tags: userType === 'user' && !liteMode && permissions?.role !== 'readOnly',\n background: false,\n share: userType === 'user',\n supporters: window.location.href.indexOf('supporters') > -1 || isEnterprise,\n submissionEdit: true,\n submissionShare: false,\n advanceSearch: true,\n submissionNotes: true,\n permissions: true,\n approval: !isThread,\n submissionThread: isThread && !isSign,\n assistant: useGPT3,\n suggestTags: useGPT3,\n suggestSentence: useGPT3,\n isNewEmail,\n isNewMessage,\n isNewDesign,\n isSubThreads,\n useSocket: !isEnterprise && !isMyForms,\n useCanUndo,\n sign: isSign,\n submissionView: !isSign,\n isPrintThread,\n isCommentAssignees,\n isInboxViews,\n isNewTags: winIsNewTags,\n isNewSentBox: winIsNewSentBox,\n isRequestDelete: !isApps && !isEnterprise && winIsRequestDelete,\n isRequestEdit: !isApps && !isEnterprise && winIsRequestEdit,\n isNewFilter: true,\n isNewComment\n };\n\n return features;\n }\n\n async getUserPermissions(formID) {\n const { onSetUserPermissions } = this.props;\n const { permissions, role } = await getFormPermissions(formID);\n\n onSetUserPermissions(permissions, role);\n\n return { permissions, role };\n }\n\n setViewportValues() {\n if (viewportState) {\n const {\n multiplier,\n className\n } = viewportState;\n\n this.applyViewportPatch(multiplier);\n this.root.current.addClass(`jfInbox--${className}`);\n }\n }\n\n sendActiveTime() {\n // Get information to sent\n const componentTime = TimeMe.getTimeOnElementInSeconds('jfInbox--root');\n\n // Stop and reset TimeMe\n TimeMe.stopAllTimers();\n TimeMe.resetAllRecordedPageTimes();\n\n // Send time as event\n if (componentTime > 0) {\n WatchmanRecorder.recordEvent('SessionTime', componentTime, {\n isBeacon: true\n });\n }\n }\n\n applyViewportPatch(scaleValue) {\n metaViewport.setAttribute('content', `width=device-width, initial-scale=${scaleValue}`);\n }\n\n actionHandler(type, payload) {\n const { liteMode } = this.props;\n\n if (type === 'click') {\n if (payload.includes('Comment-Reply')) {\n WatchmanRecorder.recordEvent(`${payload.includes('inline') ? 'Inline' : ''}Comment-Reply`, liteMode ? 'Lite Inbox' : 'Comments on All Tabs');\n }\n }\n }\n\n render() {\n const {\n baseName, onEvent, user, isEncrypted, liteMode, elementID, formID, activeFormID, submission, activeTabID, isFormOwner, onRenewSubmission, threadLayout, submissionDateFormat,\n userTimeZone, selectedFolder, renewList, resourceID, setResourceID, isGuestUser, userRole, encryptionProtocol, isMessageContainerVisible, showDecryptionModal, updateListItem\n } = this.props;\n\n const {\n isNewComment, isSubThreads, useCanUndo: canUndo\n } = this.enabledFeatures;\n const teamInfo = getTeamInfoForWorkflow();\n const accountTypeName = user?.account_type?.name;\n\n const threadProps = {\n dateFormat: DEFAULT_DATE_FORMAT,\n submission,\n useTimeZone: userTimeZone,\n layout: threadLayout,\n additionalEntryTypes: {\n ...(isNewComment ? { comment: NoteEntry, message: NoteEntry } : { })\n },\n subThreads: isSubThreads,\n NoteEditor,\n project: 'inbox',\n actionHandler: this.actionHandler,\n apiKey: getQueryParameter('apiKey'),\n teamInfo\n };\n\n return (\n \n \n {(isEncrypted || showDecryptionModal) && (\n \n \n \n )}\n \n \n \n WatchmanRecorder.recordEvent(action, 'Inbox&PendingApprovals')}\n isFormOwner={isFormOwner}\n onRenewSubmission={onRenewSubmission}\n featureSubmissionThread={this.enabledFeaturesfeatures?.includes('submissionThread')}\n dateFormat={submissionDateFormat}\n canUndo={canUndo}\n teamInfo={teamInfo}\n >\n {baseName ? (\n \n \n \n {isEncrypted && (isGuestUser || userRole === 'portalUser') && (\n \n )}\n \n \n \n \n ) : (\n \n \n \n )}\n {isMessageContainerVisible && }\n \n \n \n \n \n \n );\n }\n}\n\nInboxRoot.propTypes = {\n liteMode: bool,\n submissionCount: NUMBER_OR_STRING_PROPTYPE,\n unreadSubmissionCount: NUMBER_OR_STRING_PROPTYPE,\n onEvent: func,\n baseName: string,\n activeFormID: string.isRequired,\n isSignForm: string,\n user: userPropType.isRequired,\n userType: string.isRequired,\n onPrevSubmission: func,\n onNextSubmission: func,\n elementID: string,\n isEncrypted: bool,\n formID: NUMBER_OR_STRING_PROPTYPE,\n changeHighlightPendingApproval: func,\n permissions: shape({}).isRequired,\n submission: submissionPropType.isRequired,\n activeTabID: string.isRequired,\n isFormOwner: bool.isRequired,\n onRenewSubmission: func.isRequired,\n threadLayout: string.isRequired,\n submissionDateFormat: string,\n userTimeZone: string.isRequired,\n selectedFolder: string,\n renewList: func,\n isAllSentBox: bool,\n resourceID: string,\n setResourceID: func,\n onSetUserPermissions: func,\n submissions: array,\n isGuestUser: bool.isRequired,\n userRole: bool.isRequired,\n isMessageContainerVisible: bool,\n encryptionProtocol: string,\n showDecryptionModal: bool,\n isSettingsPanelOpen: bool,\n setSettingsPanel: func,\n updateListItem: func\n};\n\nInboxRoot.defaultProps = {\n liteMode: true,\n submissionCount: 0,\n unreadSubmissionCount: 0,\n onEvent: f => f,\n baseName: null,\n elementID: '',\n isEncrypted: false,\n formID: null,\n onPrevSubmission: null,\n onNextSubmission: null,\n changeHighlightPendingApproval: f => f,\n submissionDateFormat: DEFAULT_DATE_FORMAT,\n isSignForm: 'No',\n selectedFolder: '',\n renewList: f => f,\n isAllSentBox: false,\n resourceID: '',\n setResourceID: f => f,\n onSetUserPermissions: f => f,\n submissions: [],\n isMessageContainerVisible: false,\n encryptionProtocol: 'JF-CSE-V1',\n showDecryptionModal: false,\n isSettingsPanelOpen: false,\n setSettingsPanel: f => f,\n updateListItem: f => f\n};\n\nconst mapStateToProps = stateProps => {\n return ({\n user: userSelector(stateProps),\n userType: userTypeSelector(stateProps),\n userTimeZone: userTimezoneSelector(stateProps),\n prevSubmissionID: prevSubmissionIDSelector(stateProps),\n nextSubmissionID: nextSubmissionIDSelector(stateProps),\n unreadSubmissionCount: unreadSubmissionCountSelector(stateProps),\n submissionCount: submissionCountSelector(stateProps),\n activeFormID: formIDSelector(stateProps),\n isSignForm: isSignFormSelector(stateProps),\n isEncrypted: isEncryptedSelector(stateProps),\n formTitle: formTitleSelector(stateProps),\n userLoaded: userLoadedSelector(stateProps),\n answers: answersSelector(stateProps),\n liteMode: liteModeSelector(stateProps),\n submissionSpacingPreference: submissionSpacingPreferenceSelector(stateProps),\n submissionLayoutPreference: submissionLayoutPreferenceSelector(stateProps),\n submission: activeSubmissionSelector(stateProps),\n activeTabID: activeTabIDSelector(stateProps),\n isFormOwner: isFormOwnerSelector(stateProps),\n isAllSentBox: isAllSentBoxSelector(stateProps),\n submissionDateFormat: submissionDateFormatSelector(stateProps),\n submissions: submissionsSelector(stateProps),\n isGuestUser: isGuestUserSelector(stateProps),\n userRole: userRoleSelector(stateProps),\n isMessageContainerVisible: isMessageContainerVisibleSelector(stateProps),\n encryptionProtocol: encryptionProtocolSelector(stateProps),\n showDecryptionModal: showDecryptionModalSelector(stateProps),\n isSettingsPanelOpen: isSettingsPanelOpenSelector(stateProps)\n });\n};\n\nconst changeSid = sid => {\n const location = updateLocationParams({ sid });\n history.push(location);\n};\n\nconst mapDispatchToProps = {\n onPrevSubmission: prevSubmission,\n onNextSubmission: nextSubmission,\n changeHighlightPendingApproval: setHighlightPendingApproval,\n onRenewSubmission: renewSubmission,\n onSetUserPermissions: setUserPermissions,\n setSettingsPanel: setSettings\n};\n\nconst mergeProps = ({ prevSubmissionID, nextSubmissionID, ...stateProps }, dispatchProps, componentProps) => {\n const onPrevSubmission = () => {\n dispatchProps.onPrevSubmission();\n if (!stateProps.liteMode) {\n changeSid(prevSubmissionID);\n }\n };\n\n const onNextSubmission = () => {\n dispatchProps.onNextSubmission();\n if (!stateProps.liteMode) {\n changeSid(nextSubmissionID);\n }\n };\n\n const navigationFns = {\n ...(prevSubmissionID && ({ onPrevSubmission })),\n ...(nextSubmissionID && ({ onNextSubmission }))\n };\n\n const props = {\n ...componentProps,\n ...stateProps,\n ...dispatchProps,\n ...navigationFns\n };\n\n return props;\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps, mergeProps)(\n withBreakpoints('threadLayout', {\n narrow: 0,\n normal: 1024\n }, withPermissions(InboxRoot))\n);\n","import { getAppPath } from '@jotforminc/router-bridge';\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { Provider } from 'react-redux';\n\nimport { initWidgetsBuilder } from '@jotforminc/widgets-js-sdk';\nimport inboxReducers from './reducers';\nimport inboxSagas from './sagas';\n\nimport initStore from './utils/Initiator';\nimport InboxRootComponent from './containers/InboxRoot';\n\ninitWidgetsBuilder();\n\nconst publicPath = getAppPath();\nconst store = initStore(inboxSagas, inboxReducers);\n\nconst root = createRoot(document.getElementById('jfInbox-root'));\n\nroot.render(\n \n \n \n);\n","import { createSelector, defaultMemoize } from 'reselect';\nimport Fuse from 'fuse.js';\nimport qs from 'qs';\nimport { safeJSONParse } from '@jotforminc/utils';\n\nimport { match, ANY } from '../vendor/pampy';\nimport {\n assert,\n generateProducts,\n generateApiFilterObject,\n generateHeaderQuestionIDs,\n prepareQuestionOrders,\n getSubmissionDateLanguage,\n getEmptyHeaderOption,\n findIndexByID,\n qidSelector,\n getQueryParameter\n} from '../utils';\n\nimport {\n FILTER_KEYWORDS, FILTER_TEXT_LIMIT, NON_INPUT_QUESTIONS, PAYMENT_FIELDS\n} from '../constants';\n\nconst makeBasicSelector = (propName, defaultValue) => state => {\n assert(typeof state !== 'undefined', new Error(`${propName} selector: invalid state provided.`));\n const result = state[propName];\n if (typeof defaultValue === 'undefined') {\n assert(typeof result !== 'undefined', new Error(`${propName} selector: invalid prop accessed.`));\n } else if (typeof result === 'undefined') {\n return defaultValue;\n }\n return result;\n};\n\nconst createBasicSelector = (selector, combinerKey, defaultValue) => createSelector(selector, makeBasicSelector(combinerKey, defaultValue));\n\n// REDUX-UNDO SELECTORS\nexport const presentSelector = makeBasicSelector('present');\n\n// USER SELECTORS\nexport const userSelector = makeBasicSelector('user');\nexport const systemPlansSelector = createBasicSelector(userSelector, 'systemPlans');\nexport const userFormsSelector = createBasicSelector(userSelector, 'forms');\nexport const accountTypeSelector = createBasicSelector(userSelector, 'account_type');\nexport const userTypeSelector = createBasicSelector(userSelector, 'userType');\nexport const accountTypeNameSelector = createBasicSelector(accountTypeSelector, 'name', '');\nexport const isAdminSelector = createSelector(accountTypeNameSelector, name => name === 'ADMIN');\nexport const userTimezoneSelector = createBasicSelector(userSelector, 'time_zone');\nexport const userLanguageSelector = createBasicSelector(userSelector, 'language');\nexport const isFormUserSelector = createSelector(userTypeSelector, userType => userType === 'formuser');\nexport const userRoleSelector = createBasicSelector(userSelector, 'role');\nexport const userPermissionsSelector = createBasicSelector(userSelector, 'permissions');\nexport const isGuestUserSelector = createSelector(accountTypeNameSelector, name => name === 'GUEST');\n\n/**\n * UI SELECTORS\n */\nexport const uiSelector = makeBasicSelector('ui');\nexport const messageSelector = createBasicSelector(uiSelector, 'message');\nexport const userLoadingSelector = createBasicSelector(uiSelector, 'userLoading');\nexport const replyVisibleSelector = createBasicSelector(uiSelector, 'isReplyVisibilityCustom');\nexport const userFormsLoadingSelector = createBasicSelector(uiSelector, 'userFormsLoading');\nexport const formLoadingSelector = createBasicSelector(uiSelector, 'formLoading');\nexport const questionsLoadingSelector = createBasicSelector(uiSelector, 'questionsLoading');\nexport const submissionsLoadingSelector = createBasicSelector(uiSelector, 'submissionsLoading');\nexport const submissionsDeletingSelector = createBasicSelector(uiSelector, 'submissionsDeleting', false);\nexport const userLoadedSelector = createBasicSelector(uiSelector, 'userLoaded');\nexport const userFormsLoadedSelector = createBasicSelector(uiSelector, 'userFormsLoaded');\nexport const formLoadedSelector = createBasicSelector(uiSelector, 'formLoaded');\nexport const questionsLoadedSelector = createBasicSelector(uiSelector, 'questionsLoaded');\nexport const submissionsLoadedSelector = createBasicSelector(uiSelector, 'submissionsLoaded');\nexport const submissionEditModeSelector = createBasicSelector(uiSelector, 'submissionEditMode');\nexport const currentOpenIntroModal = createBasicSelector(uiSelector, 'openIntroModal', null);\nexport const isAttachmentsDownloadingSelector = createBasicSelector(uiSelector, 'attachmentDownloading');\nexport const showDecryptionModalSelector = createBasicSelector(uiSelector, 'openDecryptionModal', false);\nexport const getIsAIHistoryViewVisible = createBasicSelector(uiSelector, 'isAIHistoryViewVisible', false);\nexport const userAndFormLoadedSelector = createSelector([\n userLoadedSelector,\n formLoadedSelector,\n questionsLoadedSelector\n], (...states) => states.reduce((prev, curr) => prev && curr));\nexport const appLoadedSelector = createSelector([\n userAndFormLoadedSelector,\n submissionsLoadedSelector\n], (...states) => states.reduce((prev, curr) => prev && curr));\nexport const getRecaptchaSiteSelector = createBasicSelector(uiSelector, 'recaptchaSite', '');\n\nexport const filterResultCountSelector = createBasicSelector(uiSelector, 'filterResultCount', 0);\nexport const liteModeSelector = createBasicSelector(uiSelector, 'liteMode');\nexport const filteredSubmissionsLoadingSelector = createBasicSelector(uiSelector, 'filteredSubmissionsLoading');\nexport const highlightPendingApprovalSelector = createBasicSelector(uiSelector, 'highlightPendingApproval');\nexport const isPreviousOrdersSelector = createBasicSelector(uiSelector, 'isPreviousOrders');\nexport const isPwaSelector = createBasicSelector(uiSelector, 'isPwa');\nexport const previousOrdersTypeSelector = createBasicSelector(uiSelector, 'previousOrdersType');\nexport const settingsPanelSelector = createBasicSelector(uiSelector, 'settingsPanel');\nexport const isMessageContainerVisibleSelector = createSelector(\n [messageSelector],\n message => message?.isOpened\n);\nexport const isSettingsPanelOpenSelector = createSelector(\n [settingsPanelSelector],\n settingsPanel => settingsPanel?.isOpened\n);\nexport const encryptionStatusSelector = createBasicSelector(uiSelector, 'encryptionStatus');\nexport const campaignActiveSelector = createBasicSelector(uiSelector, 'campaignActive');\nexport const campaignSubmissionContentVisibleSelector = createBasicSelector(uiSelector, 'campaignSubmissionContentVisible');\nexport const isSubmissionViewLoading = createBasicSelector(uiSelector, 'submissionViewLoading');\nexport const getAiAgentCreatingStatus = createBasicSelector(uiSelector, 'aiAgentCreatingStatus');\n\n/**\n * ROUTER SELECTORS\n */\nexport const matchSelector = makeBasicSelector('match', {});\nexport const paramsSelector = createBasicSelector(matchSelector, 'params', {});\nexport const routerFormIDSelector = createBasicSelector(paramsSelector, 'formID', null);\n\n/**\n * TABS SELECTORS\n */\nexport const tabsSelector = makeBasicSelector('tabs');\nexport const isAllSentBoxInitialSelector = createBasicSelector(tabsSelector, 'isAllSentbox');\nexport const activeTabIDSelector = createBasicSelector(tabsSelector, 'activeTabID');\nexport const activeTabSelector = createSelector(\n [tabsSelector, activeTabIDSelector],\n (tabs, activeTabID) => activeTabID && tabs.tabs[activeTabID]\n);\nexport const isAllSentBoxSelector = createSelector(\n [activeTabIDSelector, isAllSentBoxInitialSelector],\n (activeTabID, isAllSentbox) => activeTabID === 'sentbox' && window.location.pathname.indexOf('/sentbox/all') > -1 && isAllSentbox\n);\nexport const tabCountSelector = createSelector(\n [activeTabSelector],\n tab => (tab && tab.count) || 0\n);\nexport const selectedSubmissionIDsSelector = createSelector(\n [activeTabSelector],\n tab => (tab && tab.selectedSubmissionIDs) || []\n);\nexport const allSubmissionsSelectedSelector = createSelector(\n [activeTabSelector],\n tab => (tab && tab.allSelected) || false\n);\nexport const filterTextSelector = createSelector(\n [activeTabSelector],\n tab => (tab && tab.filterText) || ''\n);\nexport const filterObjectSelector = createSelector(\n [activeTabSelector],\n tab => (tab && tab.filterObject) || {}\n);\nexport const isSentBoxSelector = createSelector(\n [activeTabIDSelector],\n activeTabID => activeTabID === 'sentbox' && window.location.pathname.indexOf('/sentbox') > -1\n);\n\n/**\n * FORM SELECTORS\n */\nexport const formSelector = createSelector(makeBasicSelector('form', {}), presentSelector);\nexport const formIDSelector = createBasicSelector(formSelector, 'id', null);\nexport const isSignFormSelector = createBasicSelector(formSelector, 'isSignForm', null);\nexport const formTitleSelector = createBasicSelector(formSelector, 'title');\nexport const unreadSubmissionCountSelector = createBasicSelector(formSelector, 'new');\nexport const lastSubmissionDateSelector = createBasicSelector(formSelector, 'last_submission');\nexport const formStyleSelector = createBasicSelector(formSelector, 'styleJSON');\nexport const isEncryptedSelector = createSelector(formSelector, form => (form.isEncrypted === 'Yes'));\nexport const isNewAppointmentSelector = createSelector(formSelector, form => (form.newAppointment === 'Yes'));\nexport const showAddressOnMapSelector = createSelector(formSelector, form => (form.showAddressOnMap === 'Yes'));\nexport const submissionCountSelector = createBasicSelector(formSelector, 'count');\nexport const submissionWidgetsSelector = createBasicSelector(formSelector, 'submissionWidgets');\nexport const tagQuestionSelector = createBasicSelector(submissionWidgetsSelector, 'tags');\nexport const primaryAvailableQuestionIDsSelector = createBasicSelector(formSelector, 'primaryAvailableQuestionIDs');\nexport const secondaryAvailableQuestionIDsSelector = createBasicSelector(formSelector, 'secondaryAvailableQuestionIDs');\nexport const submissionSpacingPreferenceSelector = createBasicSelector(formSelector, 'submissionSpacingPreference');\nexport const submissionLayoutPreferenceSelector = createBasicSelector(formSelector, 'submissionLayoutPreference');\nexport const paymentStringsSelector = createBasicSelector(formSelector, 'paymentStrings');\nexport const hideSubmissionHeaderSelector = createSelector([formSelector, liteModeSelector], (form, isLiteMode) => (isLiteMode ? 'No' : form.hideSubmissionHeader));\nexport const questionValuesSelector = createBasicSelector(formSelector, 'questionValues');\nexport const submissionDateFormatSelector = createSelector(formSelector, form => form.submissionDateFormat);\nexport const isAssigneeProtectedSelector = createSelector(formSelector, form => (form.assigneeProtected === 'Yes'));\nexport const isFormFillerAllowedToContactSelector = createSelector(formSelector, ({ allowFormFillerToContact }) => (\n typeof allowFormFillerToContact === 'undefined' || allowFormFillerToContact === 'Yes'\n));\nexport const assigneeSubmissionPermissionSelector = createSelector(formSelector, form => form.assigneeSubmissionPermission);\nexport const encryptionProtocolSelector = createBasicSelector(formSelector, 'encryptionProtocol', 'JF-CSE-V1');\nexport const isSubmissionViewNotAllowedSelector = createSelector([assigneeSubmissionPermissionSelector, isAssigneeProtectedSelector, userRoleSelector],\n (assigneeSubmissionPermission, isAssigneeProtected, userRole) => userRole === 'assignee' && isAssigneeProtected && assigneeSubmissionPermission === 'submitOnly');\nexport const questionsSelector = createSelector(\n [formSelector, showAddressOnMapSelector, liteModeSelector],\n (form, showMap, liteMode) => {\n const { hasSubmitterInfo } = form;\n\n return Object.values(form.questions)\n .map(question => (question.type === 'control_address' && !liteMode ? { ...question, showMap: showMap || false } : question))\n .reduce((prev, curr) => {\n if (curr.qid === 'submitter' && !hasSubmitterInfo) { // Don't show submitter if form is not sso protected\n return { ...prev };\n }\n return ({\n ...prev,\n [curr.qid]: curr\n });\n }, {});\n }\n);\nexport const fileUploadQidSelector = createSelector(\n [questionsSelector],\n questions => Object.values(questions).filter(({ type }) => type === 'control_fileupload').map(qidSelector) || []\n);\n\nexport const getQuestionIDsSelector = createSelector(\n [questionsSelector],\n questions => Object.values(questions).map(({ qid }) => qid) || []\n);\n\nexport const questionOrdersSelector = createSelector([formSelector, questionsSelector, liteModeSelector, getQuestionIDsSelector],\n (form, questions, liteMode, questionIDs) => {\n const query = qs.parse(document.location.search.split('?')[1]);\n const qids = query.qids && query.qids.split(',');\n\n const questionOrders = form.questionOrders === '[]' ? safeJSONParse(form.questionOrders) : form.questionOrders || [];\n const uniqueQuestionOrders = [...new Set(questionOrders)];\n const validQuestionsOrders = uniqueQuestionOrders.filter(qid => questionIDs.includes(qid));\n const liteModeOrders = prepareQuestionOrders(questions);\n const ordered = qids || (liteMode ? liteModeOrders : validQuestionsOrders);\n\n return !form.hasSubmitterInfo ? ordered.filter(id => id !== 'submitter') : ordered;\n });\n\nexport const getFieldListSelector = createSelector(\n [questionsSelector, questionOrdersSelector],\n (questions, questionOrders) => {\n const filteredQuestions = Object.values(questions).filter(question => !NON_INPUT_QUESTIONS.includes(question.type));\n const allQuestionIDs = filteredQuestions.filter(question => question && question.submissionWidget !== 'Yes')\n .sort(({ order: formerOrder }, { order: latterOrder }) => (parseInt(formerOrder, 10) - parseInt(latterOrder, 10)))\n .map(({ qid }) => qid);\n const selected = questionOrders.filter(qid => !NON_INPUT_QUESTIONS.includes(questions[qid].type));\n\n const unselected = allQuestionIDs ? allQuestionIDs.filter(qid => questionOrders.every(sQid => sQid !== qid)) : [];\n return {\n selected,\n unselected\n };\n }\n);\n\nexport const fullNameQidSelector = createSelector(\n primaryAvailableQuestionIDsSelector,\n primaryAvailableQuestionIDs => (primaryAvailableQuestionIDs.primaryCandidates.control_fullname ? primaryAvailableQuestionIDs.primaryCandidates.control_fullname[0] : '')\n);\nexport const emailQidSelector = createSelector(\n primaryAvailableQuestionIDsSelector,\n primaryAvailableQuestionIDs => (primaryAvailableQuestionIDs.primaryCandidates.control_email ? primaryAvailableQuestionIDs.primaryCandidates.control_email : [])\n);\n\n/* eslint-disable max-len */\nexport const questionSearchKeysSelector = createSelector(\n [questionOrdersSelector, questionsSelector],\n (questionOrders, questions) => questions && Array.isArray(questionOrders) && questionOrders.filter(key => ['ip', 'id', 'created_at', 'submitter', 'submittedVia'].indexOf(key) === -1).reduce((prev, qid) => ([\n ...prev,\n `answers.${qid}.prettyFormat`,\n `answers.${qid}.answer`,\n ...match(\n questions[qid] || {},\n ({ type }) => type === 'control_address', () => [\n `answers.${qid}.answer.addr_line1`,\n `answers.${qid}.answer.addr_line2`,\n `answers.${qid}.answer.city`,\n `answers.${qid}.answer.country`,\n `answers.${qid}.answer.postal`,\n `answers.${qid}.answer.state`\n ],\n ({ type }) => type === 'control_address', () => [\n `answers.${qid}.answer.prefix`,\n `answers.${qid}.answer.first`,\n `answers.${qid}.answer.middle`,\n `answers.${qid}.answer.last`,\n `answers.${qid}.answer.suffix`\n ],\n ({ type }) => type === 'control_phone', () => [\n `answers.${qid}.answer.country`,\n `answers.${qid}.answer.area`,\n `answers.${qid}.answer.phone`,\n `answers.${qid}.answer.full`\n ],\n ({ type }) => type === 'control_radio', () => [\n `answers.${qid}.answer.other`\n ],\n ({ type }) => (type === 'control_checkbox' || type === 'control_radio'), ({ options = '' }) => [\n ...options.toString().split('|').map((_, index) => `answers.${qid}.answer.${index}`),\n `answers.${qid}.answer.other`\n ],\n ({ type }) => type === 'control_range', () => [\n `answers.${qid}.answer.from`,\n `answers.${qid}.answer.to`\n ],\n ({ type }) => type === 'control_time', () => [\n `answers.${qid}.answer.hourSelect`,\n `answers.${qid}.answer.hourSelectRange`,\n `answers.${qid}.answer.minuteSelect`,\n `answers.${qid}.answer.minuteSelectRange`,\n `answers.${qid}.answer.ampm`,\n `answers.${qid}.answer.ampmRange`\n ],\n ANY, () => []\n )\n ]), [\n questionOrders.indexOf('ip') > -1 && 'ip',\n questionOrders.indexOf('id') > -1 && 'id',\n questionOrders.indexOf('created_at') > -1 && 'created_at',\n questionOrders.indexOf('submitter') > -1 && 'submitter',\n questionOrders.indexOf('submittedVia') > -1 && 'submittedVia'\n ].filter(val => val))\n);\n\nexport const workflowQuestionsSelector = createSelector(submissionWidgetsSelector, submissionWidgets => Object.entries(submissionWidgets)\n .filter(([key]) => /^workflow_(?:.*?)__(?:\\d+)$/.test(key))\n .reduce((prev, [, question]) => ({ ...prev, [question.qid]: question }), {}));\n\n/**\n * SUBMISSION SELECTORS\n */\nexport const submissionSelector = makeBasicSelector('submission');\nconst intermediateSubmissionsSelector = makeBasicSelector('submissions');\nexport const submissionsSelector = createSelector(submissionSelector, intermediateSubmissionsSelector);\nexport const activeSubmissionIDSelector = createBasicSelector(submissionSelector, 'activeSubmissionID', '');\nexport const allSubmissionIDsSelector = createSelector(submissionsSelector, submissions => {\n return submissions.map(({ id }) => id);\n});\nexport const submissionIndexSelector = createSelector(\n intermediateSubmissionsSelector,\n submissions => defaultMemoize(sid => findIndexByID(submissions, sid))\n);\nexport const submissionAtIndexSelector = createSelector(\n intermediateSubmissionsSelector,\n submissions => index => submissions[index]\n);\n\nexport const activeSubmissionIndexSelector = createSelector(\n [submissionSelector, activeSubmissionIDSelector],\n (submission, activeSubmissionID) => submissionIndexSelector(submission)(activeSubmissionID)\n);\n\nexport const prevSubmissionIDSelector = createSelector(\n [submissionsSelector, activeSubmissionIndexSelector],\n (submissions, currentSubmissionIndex) => {\n const s = submissions[currentSubmissionIndex - 1];\n return s && s.id;\n }\n);\n\nexport const nextSubmissionIDSelector = createSelector(\n [submissionsSelector, activeSubmissionIndexSelector],\n (submissions, currentSubmissionIndex) => {\n const s = submissions[currentSubmissionIndex + 1];\n return s && s.id;\n }\n);\n\nexport const reverseActiveSubmissionIndexSelector = createSelector(\n [activeSubmissionIndexSelector, filterResultCountSelector],\n (activeSubmissionIndex, submissionCount) => submissionCount - activeSubmissionIndex\n);\n\nexport const filteredSubmissionIDsSelector = createSelector(submissionSelector, submission => submission.filteredSubmissionIDs);\n\n// Get current submission\nexport const activeSubmissionSelector = createSelector(\n [submissionsSelector, activeSubmissionIndexSelector],\n (submissions, currentSubmissionIndex) => submissions[currentSubmissionIndex] || { id: '', answers: false, created_at: '' }\n);\n\nexport const agentSubmissionHistorySelector = createBasicSelector(submissionSelector, 'agentSubmissionHistory', []);\n\nexport const answersSelector = createBasicSelector(activeSubmissionSelector, 'answers');\nexport const submissionByIDSelector = sid => createSelector(submissionsSelector, submissions => {\n return submissions.filter(f => f).find(({ id }) => sid === id) || {};\n});\n\nexport const getDownloadDisabledSubmissions = createSelector(submissionsSelector, submissions => submissions.filter(submission => submission?.encryptionProtocol === 'JF-CSE-V2')) || [];\nexport const getIsSubmissionsIncludeEncryptedEntry = submissions => (submissions.length > 0 && submissions.some(submission => submission?.encryptionProtocol === 'JF-CSE-V2')) || false;\n\n/**\n * TEAM SELECTORS\n */\nexport const teamSelector = makeBasicSelector('team');\nexport const getTeamID = createSelector(teamSelector, team => team.id);\nexport const getTeamProperties = createSelector(teamSelector, team => team.properties);\nexport const getUserTeamRoles = createSelector(teamSelector, team => team.roles);\nexport const getIsTeamMember = createSelector(teamSelector, team => team.isTeamMember);\nexport const getTeamMemberEmails = createSelector(teamSelector, team => team.properties.memberEmails || []);\nexport const isTeamAdminSelector = createSelector(teamSelector, team => team.roles.includes('team_admin'));\n\n/**\n * AI AGENT SELECTORS\n */\n// export const getAiAgents = makeBasicSelector('aiAgents');\nexport const getAiAgents = state => state.aiAgents;\nexport const getAiAgentIds = createSelector(getAiAgents, aiAgents => {\n return aiAgents && Object.keys(aiAgents);\n});\nexport const getAiAgentByAgentId = createSelector(\n [\n getAiAgents,\n (_, agentId) => agentId\n ],\n (agents, agentId) => {\n if (!agents) {\n return null;\n }\n\n if (!agents[agentId]) {\n return null;\n }\n\n return agents[agentId];\n }\n);\n\nexport const getAiAgentBySubmissionId = createSelector(\n [\n getAiAgents,\n submissionsSelector,\n (_, submissionId) => submissionId\n ],\n (aiAgents, submissions, submissionId) => {\n const submission = submissions.find(s => s.id === submissionId);\n if (aiAgents && aiAgents[submission?.aiAgentID]) {\n return aiAgents[submission?.aiAgentID];\n }\n\n return null;\n }\n);\n\n/**\n * MIXED SELECTORS\n */\nexport const isTeamContextAllowedSelector = createSelector([getIsTeamMember, userRoleSelector], (isTeamMember, userRole) => {\n if (isTeamMember && userRole === 'readOnly') {\n return false;\n }\n return true;\n});\n\nexport const isFormOwnerSelector = createSelector([userSelector, formSelector, isAdminSelector, userRoleSelector, getIsTeamMember], (user, form, isAdmin, role, isTeamMember) => {\n if (user.username === form.owner || isAdmin) {\n return true;\n }\n\n if (isTeamMember && role === 'owner') {\n return true;\n }\n return false;\n});\n\n// TODO: we must remove admin check from `isFormOwnerSelector` and remove this selector\nexport const isFormOwnerNotAdminSelector = createSelector([userSelector, formSelector, userRoleSelector, getIsTeamMember], (user, form, role, isTeamMember) => {\n if (user.username === form.owner) {\n return true;\n }\n\n if (isTeamMember && role === 'owner') {\n return true;\n }\n return false;\n});\n\nexport const hideNonInputFieldsSelector = createSelector([formSelector, liteModeSelector], (form, liteMode) => (liteMode || form.hideNonInputSubmissionFields === 'Yes'));\nexport const hideEmptyFieldsSelector = createSelector([formSelector, liteModeSelector], (form, liteMode) => (liteMode || form.hideEmptySubmissionFields === 'Yes'));\n\nexport const headerQuestionIDsSelector = createSelector(\n [primaryAvailableQuestionIDsSelector, secondaryAvailableQuestionIDsSelector, questionsSelector],\n generateHeaderQuestionIDs\n);\n\nexport const allHeaderFieldsSelector = createSelector(\n [headerQuestionIDsSelector, formSelector],\n (headerQuestionIds, form) => {\n const allHeaderFields = Object.keys(headerQuestionIds).reduce((acc, key) => {\n const questionInfo = headerQuestionIds[key];\n if (!questionInfo) return acc;\n if (Array.isArray(questionInfo)) return acc.concat(questionInfo.filter(e => e));\n return acc.concat(questionInfo);\n }, []);\n\n const submitterFields = [\n { qid: 'submitter', fieldID: 'name' },\n { qid: 'submitter', fieldID: 'email' }\n ];\n\n return form.hasSubmitterInfo ? [...allHeaderFields, ...submitterFields] : allHeaderFields;\n }\n);\n\nexport const allHeaderFieldOptionsSelector = createSelector(\n [allHeaderFieldsSelector, questionsSelector],\n (allHeaderFields, questions) => {\n const makeOptions = (options, field) => {\n if (Object.keys(questions).length < 1 || !field) {\n return options;\n }\n const qid = field.qid || field;\n const question = questions[qid] || {};\n let questionName = question.text;\n if (field.fieldID && question.sublabels && question.sublabels[`field_${field.fieldID}`]) {\n questionName += ` - ${question.sublabels[`field_${field.fieldID}`]}`;\n }\n\n return [...options, {\n value: JSON.stringify(field),\n text: questionName\n }];\n };\n const options = allHeaderFields.reduce(makeOptions, []);\n return options.length ? options : [getEmptyHeaderOption()];\n }\n);\n\nexport const headerFieldSelector = createSelector(\n [allHeaderFieldOptionsSelector, formSelector],\n (allHeaderFieldOptions, form) => {\n let headerField = form && form.inbox && form.inbox[0] && form.inbox[0].headerField;\n if (headerField === '\"submitter\"') headerField = { qid: 'submitter', fieldID: 'name' }; // To cover old users who has \"submitter\" saved on form props\n\n if (typeof headerField === typeof {}) {\n headerField = JSON.stringify(headerField);\n }\n return headerField || allHeaderFieldOptions[0].value;\n }\n);\n\nexport const subheaderFieldSelector = createSelector(\n [allHeaderFieldOptionsSelector, headerFieldSelector, formSelector],\n (allHeaderFieldOptions, headerField, form) => {\n let subheaderField = form && form.inbox && form.inbox[0] && form.inbox[0].subheaderField;\n if (typeof subheaderField === typeof {}) {\n subheaderField = JSON.stringify(subheaderField);\n }\n const notInHeaderFieldFilter = ({ value }) => {\n if (!headerField) return true;\n return value !== headerField;\n };\n const distinctSubheaderFieldOptions = allHeaderFieldOptions.filter(notInHeaderFieldFilter);\n if (!distinctSubheaderFieldOptions.length) {\n distinctSubheaderFieldOptions.push(getEmptyHeaderOption());\n }\n\n if (subheaderField && subheaderField !== headerField) return subheaderField;\n\n return distinctSubheaderFieldOptions[0].value;\n }\n);\n\nexport const productsSelector = createSelector(\n [formSelector, answersSelector],\n (form, answers) => {\n const paymentQuestion = Object.values(form.questions).filter(({ type }) => PAYMENT_FIELDS && PAYMENT_FIELDS.includes(type));\n if (paymentQuestion && paymentQuestion.length > 0) return generateProducts(paymentQuestion, form.products, answers);\n return form.products;\n }\n);\n\nconst fuseStoreSelector = createSelector(\n [submissionsSelector, questionSearchKeysSelector],\n (submissions, questionSearchKeys) => new Fuse(submissions, {\n threshold: 0.01,\n distance: 100000,\n shouldSort: false,\n keys: questionSearchKeys || [],\n maxPatternLength: FILTER_TEXT_LIMIT\n })\n);\n\nexport const selectSubmissionIDs = defaultMemoize(filterObject => createSelector(\n [submissionsSelector, fuseStoreSelector, filterTextSelector],\n (submissions, fuseStore, filterText) => {\n if (!filterObject || !filterText) {\n return null;\n }\n\n if (Object.keys(filterObject).length > 0 || filterText !== '') {\n return [];\n }\n\n const findIDs = filterFunction => () => submissions.reduce((accum, value) => {\n return (filterFunction(value) && value.id) ? {\n ...accum,\n [value.id]: true\n } : accum;\n }, {});\n\n const filteredSubmissions = match(\n filterText,\n FILTER_KEYWORDS.READ, findIDs(({ new: isUnread }) => isUnread === '0'),\n FILTER_KEYWORDS.UNREAD, findIDs(({ new: isUnread }) => (isUnread === '1' || isUnread === '2')),\n FILTER_KEYWORDS.STARRED, findIDs(({ flag }) => flag === '1'),\n FILTER_KEYWORDS.UNSTARRED, findIDs(({ flag }) => flag === '0'),\n ANY, () => {\n const fuseResult = fuseStore.search(filterText).map(({ item }) => item);\n return findIDs(result => fuseResult.indexOf(result) > -1)();\n }\n );\n\n return filteredSubmissions;\n }\n));\n\nexport const filteredSubmissionsSelector = createSelector(\n [submissionsSelector, filteredSubmissionIDsSelector],\n (submissions, filteredIds) => {\n if (!filteredIds) {\n return submissions;\n }\n return submissions.filter(value => value.id in filteredIds);\n }\n);\n\nexport const apiFilterObjectSelector = createSelector([filterObjectSelector, filterTextSelector], generateApiFilterObject);\n\nexport const filteredSubmissionCountSelector = createSelector(\n [submissionsSelector, filterObjectSelector, filterTextSelector, filterResultCountSelector],\n (submissions, filterObject, filterText, filterResultCount, filteredSubmissions) => {\n if (!(filterText || (filterObject && Object.keys(filterObject).length > 1))) {\n return submissions.length;\n }\n return (filteredSubmissions && filteredSubmissions.length > filterResultCount ? filteredSubmissions.length : filterResultCount);\n }\n);\n\nexport const filteredActiveSubmissionIndexSelector = createSelector(\n [filteredSubmissionsSelector, activeSubmissionIDSelector],\n (submissions, activeSubmissionID) => submissionIndexSelector({ submissions })(activeSubmissionID)\n);\n\nexport const selectedSubmissionsSelector = createSelector(\n [selectedSubmissionIDsSelector, filteredSubmissionsSelector],\n (selectedSubmissionIDs, submissions) => submissions.filter(submission => submission && selectedSubmissionIDs.indexOf(submission.id) > -1)\n);\n\nexport const editSubmissionPreference = createSelector([formSelector, activeSubmissionSelector, assigneeSubmissionPermissionSelector], (form, submission, assigneeSubmissionPermission) => {\n const editSubmissionPermissionFromUser = typeof assigneeSubmissionPermission === 'undefined' || assigneeSubmissionPermission === 'submitAndEdit';\n\n const { hasAnySignSubmission = false } = form;\n if (!hasAnySignSubmission) {\n return editSubmissionPermissionFromUser;\n }\n\n const { isSignSubmission = false } = submission;\n const editSubmissionPermissionFromSubmission = isSignSubmission && editSubmissionPermissionFromUser\n ? false // We should downgrade the edit submission permission even the user is eligible to.\n : editSubmissionPermissionFromUser;\n\n return editSubmissionPermissionFromSubmission;\n});\n\nexport const isUnreadSelectedSelector = createSelector(\n [selectedSubmissionsSelector, activeSubmissionSelector],\n (selectedSubmissions, submission) => (\n selectedSubmissions.length > 0\n ? selectedSubmissions.some(({ new: isUnread }) => (isUnread === '1' || isUnread === '2'))\n : (submission && (submission.new === '1' || submission.new === '2'))\n )\n);\n\nexport const isFavoriteSelectedSelector = createSelector(\n [selectedSubmissionsSelector, activeSubmissionSelector],\n (selectedSubmissions, submission) => (\n selectedSubmissions.length > 0\n ? selectedSubmissions.some(({ flag }) => (flag === '1'))\n : (submission && (submission.flag === '1'))\n )\n);\n\nexport const submissionDateLanguageSelector = createSelector(\n [userSelector, formSelector],\n getSubmissionDateLanguage\n);\n\nexport const autoDeleteSubmissionsInterval = createSelector(\n [userSelector, formSelector], (user, form) => {\n // priority is important for autoDeleteSubmissions.\n // form priority is at the top, user priority is placed after form.\n return form.autoDeleteInterval || user.autoDeleteInterval || 'Disabled';\n }\n);\n\nexport const allowAutoDeleteSubmissionsSelector = createSelector(userSelector, user => {\n if (getQueryParameter('autoDeleteSubmissions')) {\n return true;\n }\n\n return user.allowAutoDeleteSubmissions;\n});\n\nexport const getIsSentboxContextSelector = createSelector([isFormUserSelector, activeTabIDSelector], (isFormUser, activeTabID) => isFormUser || window.useFromPortal || activeTabID === 'sentbox');\n\nexport const getIsAiConversationsEnable = createBasicSelector(uiSelector, 'isAiConversationsEnable', false);\nexport const getAiAvatarIconUrl = createBasicSelector(uiSelector, 'aiAvatarIconUrl', null);\nexport const getAiAgentName = createBasicSelector(uiSelector, 'aiAgentName', null);\n\nexport const getIsFullStorySessionUrlSaved = createBasicSelector(uiSelector, 'isFullStorySessionUrlSaved', false);\n","class EventQueue {\n static queue = {};\n\n constructor(id) {\n this.id = id;\n EventQueue.queue[this.id] = [];\n\n this.setHandler = this.setHandler.bind(this);\n this.emptyQueue = this.emptyQueue.bind(this);\n this.registerEvent = this.registerEvent.bind(this);\n }\n\n get isDevelopment() {\n return process.env.NODE_ENV === 'development';\n }\n\n handler = null;\n\n // handler is ready to send events\n setHandler(handler) {\n this.handler = handler;\n this.emptyQueue();\n }\n\n emptyQueue() {\n // Process queue\n EventQueue.queue[this.id].forEach(event => {\n this.handler(...event);\n });\n\n // Empty queue\n EventQueue.queue[this.id] = [];\n }\n\n registerEvent(...params) {\n if (this.isDevelopment) {\n // For debugging\n EventQueue.queue[this.id].push(params);\n } else if (typeof this.handler === 'function') {\n // Send current event\n this.handler(...params);\n } else {\n EventQueue.queue[this.id].push(params);\n }\n }\n}\n\nexport default EventQueue;\n","import Tracking from '@jotforminc/tracking';\nimport EventQueue from './EventQueue';\n\nclass SentryRecorder extends EventQueue {\n constructor() {\n super('sentry-recorder');\n\n this.recordException = this.recordException.bind(this);\n\n if (this.isDevelopment) {\n if (typeof this.formID !== 'undefined') {\n this.setFormIDToSentry(this.formID);\n }\n\n this.setHandler(Tracking.captureException);\n }\n\n window.addEventListener('beforeunload', () => {\n this.emptyQueue();\n });\n }\n\n get isDevelopment() {\n return process.env.NODE_ENV === 'development';\n }\n\n setFormIDToSentry(id) {\n if (this.isDevelopment) {\n Tracking.configureScope(scope => {\n scope.setExtra({ formID: id });\n });\n }\n }\n\n setFormID(id) {\n this.formID = id;\n this.setFormIDToSentry(id);\n }\n\n recordException(e) {\n this.registerEvent(e, { logger: 'javascript' });\n // console.log(e);\n }\n}\n\nconst instance = new SentryRecorder();\n\nexport default instance;\n","/* eslint-disable max-lines, no-unused-expressions */\nimport React from 'react';\nimport axios from 'axios';\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport declassify from 'declassify';\nimport DOMPurify from 'dompurify';\nimport juice from 'juice';\nimport memoize from 'lodash/memoize';\nimport isEmpty from 'lodash/isEmpty';\nimport isElement from 'lodash/isElement';\nimport flow from 'lodash/flow';\nimport { t } from '@jotforminc/translation';\nimport { SmallPortalItem } from '@jotforminc/resource-picker';\nimport { getDateTimeText } from '@jotforminc/answer-fields';\nimport {\n safeJSONParse, capitalizeFirstLetter, handleCustomNavigation, encodeURLs\n} from '@jotforminc/utils';\nimport { FileUtils } from '@jotforminc/upload-fields';\nimport levenshtein from 'js-levenshtein';\nimport querystring from 'qs';\nimport classnames from 'classnames';\nimport { getAppPath, getActiveAlias } from '@jotforminc/router-bridge';\nimport Tracking from '@jotforminc/tracking';\nimport SentryRecorder from './SentryRecorder';\nimport { match, ANY } from '../vendor/pampy';\n\nimport {\n MONTHS,\n COLOR_LIST,\n FIELDS_WITH_ARRAY_PROPS,\n FIELDS_WITH_BACKGROUND_COLOR,\n TAG_COLOR_LIST,\n ASYNC_ACTION_TYPES,\n PRIMARY_AVAILABLE_FIELDS,\n SECONDARY_AVAILABLE_FIELDS,\n FILTER_KEYWORDS,\n ADDRESS_FIELD_LABEL_MAP,\n RESPONSIVE_RESOLUTION_MULTIPLIER_MAP,\n PAYMENT_FIELD_NAMES,\n DEFAULT_DATE_FORMAT,\n JOTFORM_MOMENT_LANGUAGE_MAP,\n signAllowedApps,\n CURRENCY_SYMBOLS,\n LITE_MODE_PAGES,\n SUBJECT_AVAILABLE_FIELDS\n} from '../constants';\nimport texts from '../constants/texts';\nimport { isTeamMember, TEAM_ID } from '../constants/team';\n\nconst createPropSelector = propName => obj => obj[propName];\nexport const qidSelector = createPropSelector('qid');\n// const identity = f => f;\n\n// Basic assert function to stop further process if given condition does not hold\nexport function assert(assertion, error = new Error('Assertion failed.')) {\n let result = false;\n\n try {\n result = (typeof assertion === 'function') ? assertion() : assertion;\n } catch (e) {\n if (process.env.NODE_ENV === 'production' || document.location.href.indexOf('debug=true') > -1) {\n SentryRecorder.recordException(e);\n } else {\n // Re-throw in production\n throw e;\n }\n }\n\n if (!result) {\n if (process.env.NODE_ENV === 'production' || document.location.href.indexOf('debug=true') > -1) {\n SentryRecorder.recordException(error);\n } else {\n throw error;\n }\n }\n}\n\n/**\n * Action creators for sync actions\n */\nexport const makeActionCreator = (type, ...argNames) => {\n assert(() => {\n return [type, ...argNames].reduce((res, name) => {\n return res && typeof name === 'string';\n }, true);\n }, new Error('makeActionCreator: type and argument names must be strings.'));\n return (...args) => argNames.reduce((prev, arg, index) => ({\n ...prev,\n [argNames[index]]: args[index]\n }), { type });\n};\n\n/**\n * Async action constant generator\n *\n * @param {*} string: Base action constant\n */\nexport const makeAsyncActions = action => {\n assert(/^([A-Z_])*$/.test(action), new Error('makeAsyncActions: action must be all upper case and underscore only.'));\n\n return ASYNC_ACTION_TYPES.reduce((prev, curr) => ({\n ...prev,\n [curr]: `${action}_${curr.toUpperCase()}`\n }), {});\n};\n\n/**\n * Get normalized field name for answer fields\n */\nexport const normalizeFieldName = questionType => {\n // Do not assert when testing - will break automated component tests\n if (process.env.NODE_ENV !== 'test') {\n assert(questionType.indexOf('control_') === 0, new Error(`normalizeFieldName: Unexpected questionType ${questionType}`));\n }\n const fieldType = questionType.replace('control_', '');\n return capitalizeFirstLetter(fieldType);\n};\n\nexport const isPaymentField = fieldName => {\n return PAYMENT_FIELD_NAMES.includes(fieldName) || PAYMENT_FIELD_NAMES.includes(normalizeFieldName(fieldName));\n};\n\n// export const getEditables = (questionType = '') => Fields.Editables[normalizeFieldName(questionType)] || null;\n\n/**\n * Generate random hash string\n */\nexport const randomHash = () => Math.random().toString(36).substr(2, 6);\n\n/**\n * Generate different hash key from given array\n */\nexport const uniqueRandomHash = arr => {\n let key = randomHash();\n\n while (arr.indexOf(key) > -1) {\n key = randomHash();\n }\n\n return key;\n};\n\nconst cssRulesToString = cssRules => cssRules.reduce((prev, rule) => {\n if (rule instanceof global.CSSStyleRule) {\n return `${prev} ${rule.cssText}`;\n }\n\n return prev;\n}, '');\n\n// Get page styles as string\nexport const getPageStyles = async () => {\n const styleSheets = Object.values(document.styleSheets);\n const computedStyles = await Promise.all(styleSheets.map(async styleSheet => {\n let styleString = '';\n try {\n switch (true) {\n // Workaround for link tags with different doman (Browser prevent us from accessing CSSRules of that kind of stylesheets)\n case Boolean(styleSheet.href) && styleSheet.href.indexOf(window.location.host) === -1: {\n const styleSheetCSS = await axios.get(styleSheet.href);\n const tempCSSStyleSheet = new global.CSSStyleSheet();\n await tempCSSStyleSheet.replace(styleSheetCSS);\n const cssRules = Object.values(styleSheet.cssRules);\n styleString = cssRulesToString(cssRules);\n break;\n }\n default: {\n const cssRules = Object.values(styleSheet.cssRules);\n styleString = cssRulesToString(cssRules);\n break;\n }\n }\n } catch (e) {\n // catch thrown errors of style sheets has unaccessible cssRules prop\n }\n return styleString;\n }));\n\n return computedStyles.join(' ');\n};\n\n// Get a random item from given array\nexport const getRandomItem = arr => arr[Math.floor(Math.random() * Math.floor(arr.length))];\n\n// Gives a random color specificed color list\nexport const getRandomColor = () => getRandomItem(COLOR_LIST);\n\n// Get color with sheets app logic\nexport const extractColorStyle = (index, colorArray = COLOR_LIST) => (\n index > -1\n ? colorArray[index % colorArray.length]\n : colorArray[colorArray.length - 1]\n);\n\n// Get answer props based on question type\nexport const generateAnswerProps = ({\n type, answer, options, permissions, activeTab\n}, defaultAnswerProps = {}, getOptionColor = extractColorStyle) => {\n if (type === 'control_submissionSubmittedVia') {\n return {\n answerProps: {\n ...defaultAnswerProps,\n PortalItemRenderer: props => \n }\n };\n }\n\n let overrideStyle = {};\n switch (type) {\n case 'control_email':\n if (!permissions?.reply || activeTab === 'incompleteSubmissions') {\n overrideStyle = {\n textDecoration: 'none',\n color: '#0a1551',\n cursor: 'default',\n pointerEvents: 'none'\n };\n }\n break;\n default:\n break;\n }\n\n // If not any styling defined yet return empty obj, or just maybe the default props? Ooooh that's right. ^-^\n if (FIELDS_WITH_BACKGROUND_COLOR.indexOf(type) === -1) {\n return {\n answerProps: defaultAnswerProps, style: overrideStyle, answer: answer?.text || answer\n };\n }\n\n // Making sure the options converted into an array\n const optionList = (typeof options === 'string') ? safeJSONParse(options, options.split('|')) : [];\n const optionArray = !Array.isArray(optionList) ? [optionList] : optionList;\n\n // Styled but not arrayed answers does not need index matching\n if (FIELDS_WITH_ARRAY_PROPS.indexOf(type) === -1) {\n return { answerProps: { ...defaultAnswerProps, backgroundColor: getOptionColor(optionArray.indexOf(answer)) }, style: overrideStyle };\n }\n // Array field index matching and styling based on it\n const answerArray = typeof answer === 'object' ? Object.values(answer) : [answer || ''];\n return {\n answerProps: answerArray.map(currentAnswer => {\n // Find answer index\n const index = (type === 'control_imagechoice')\n ? optionArray.findIndex(option => (currentAnswer === `${option.text}|${option.link}`))\n : optionArray.indexOf(currentAnswer);\n\n return {\n ...defaultAnswerProps,\n backgroundColor: getOptionColor(index)\n };\n }),\n style: overrideStyle\n };\n};\n\n/* eslint-disable camelcase */\nexport const generatePropsForSheetField = (\n { type, answer, options_array },\n defaultAnswerProps = {}\n) => {\n if (FIELDS_WITH_BACKGROUND_COLOR.indexOf(type) === -1) return { answerProps: defaultAnswerProps };\n const optionsArray = (typeof options_array === 'string') ? safeJSONParse(options_array) : options_array || {};\n\n if (type === 'control_radio' && answer && Object.keys(optionsArray).length > 0) {\n const answerStr = Array.isArray(answer) ? answer[0] : answer;\n const answerKey = answerStr.substring(1, answerStr.length - 1);\n let answerObj = optionsArray[answerKey];\n if (!answerObj) {\n answerObj = {};\n Object.keys(optionsArray).forEach(key => {\n const option = optionsArray[key];\n if (option.value === answerStr || option.value === answerKey) {\n answerObj = option;\n }\n });\n return {\n optionsArray,\n answer: `{${answerObj.key}}`,\n answerProps: [{ style: { backgroundColor: answerObj.color } }]\n };\n }\n return {\n optionsArray,\n answerProps: [{ style: { backgroundColor: answerObj.color } }]\n };\n }\n return {\n optionsArray\n };\n};\n/* eslint-enable camelcase */\n\nexport const generateGlobalAnswerProps = ({ type, inputType, selectedField = '' }) => {\n const generatedProps = {};\n if (type === 'control_matrix') {\n generatedProps.orientation = inputType === 'Yes No' || inputType === 'Emoji Slider' ? 'row' : 'column';\n }\n\n // Take Photo widget\n if (type === 'control_widget' && selectedField === '529c8286a75dae5e7f000005') {\n generatedProps.optimizeImage = true;\n }\n return generatedProps;\n};\n\nexport const redirectToLoginPage = rp => {\n if (window.location.href.indexOf('dbg') > -1) {\n return false;\n }\n window.preventReady = true;\n const nextHref = `${window.location.origin}/login?rp=${encodeURIComponent(rp || window.location)}`;\n handleCustomNavigation(nextHref, '_self', true);\n};\n\nexport const redirectToEU = () => {\n if (process.env.NODE_ENV !== 'production') return;\n if (window.JOTFORM_ENV && window.JOTFORM_ENV !== 'PRODUCTION') return;\n if (window.location.origin.indexOf('eu') > -1) return;\n\n const nextHref = `https://eu.jotform.com${window.location.pathname}${window.location.search}`;\n handleCustomNavigation(nextHref, '_self', true);\n};\n\nexport function downloadFile(url, fileName) {\n const link = document.createElement('a');\n\n link.href = url;\n if (fileName) {\n link.download = fileName;\n }\n\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n}\n\nexport const redirectToHIPAA = () => {\n if (process.env.NODE_ENV !== 'production') return;\n if (window.JOTFORM_ENV && window.JOTFORM_ENV !== 'PRODUCTION') return;\n if (window.location.origin.indexOf('hipaa') > -1) return;\n\n const nextHref = `https://hipaa.jotform.com${window.location.pathname}`;\n handleCustomNavigation(nextHref, '_self', true);\n};\n\nexport const redirectToRegular = () => {\n if (process.env.NODE_ENV !== 'production') return;\n if (window.JOTFORM_ENV && window.JOTFORM_ENV === 'ENTERPRISE') return;\n\n if (window.location.origin.indexOf('hipaa') > -1 || window.location.origin.indexOf('eu') > -1) {\n const nextHref = `https://www.jotform.com${window.location.pathname}`;\n handleCustomNavigation(nextHref, '_self', true);\n }\n};\n\nexport const prepareMailContent = async Component => {\n // This first call is necessary to load computed styles before calling getPageStyles()\n // renderToStaticMarkup(Component);\n // after fetching computing styles, memoize getPageStyles()\n const memoizedGetPageStyles = memoize(getPageStyles);\n const styles = await memoizedGetPageStyles();\n\n const submissionHTML = encodeURLs(renderToStaticMarkup(Component));\n\n const inlineStylesContent = juice.inlineContent(submissionHTML, styles, {\n applyStyleTags: false,\n inlinePseudoElements: false,\n applyAttributesTableElements: false,\n applyHeightAttributes: false,\n applyWidthAttributes: false,\n insertPreservedExtraCss: false,\n preserveKeyFrames: false\n });\n\n const sanitizedContent = declassify.process(inlineStylesContent, {\n ignore: [\n 'quotationWrapper',\n 'jfSubmission-container',\n 'submissonTable'\n ]\n });\n\n return sanitizedContent;\n};\n\nexport const prepareMailContentLight = async Component => {\n const submissionHTML = encodeURLs(renderToStaticMarkup(Component));\n const sanitizedContent = declassify.process(submissionHTML, {\n ignore: [\n 'quotationWrapper',\n 'jfSubmission-container',\n 'submissonTable'\n ]\n });\n\n return sanitizedContent;\n};\n\nexport const sanitizeDOM = (html, options = { ALLOWED_TAGS: ['p', 'span', 'div', 'br'] }) => {\n return DOMPurify.sanitize(html, options);\n};\n\nexport const getPriceWithCurrency = (price, currency) => {\n const priceNum = parseFloat(`${price}`.replace(/,/g, ''));\n const priceF = Math.abs(priceNum);\n const prefix = priceNum === priceF ? '' : '-';\n const currencySymbol = CURRENCY_SYMBOLS[currency] ? CURRENCY_SYMBOLS[currency] : '';\n return currencySymbol ? `${prefix}${currencySymbol}${priceF.toFixed(2)}` : `${prefix}${priceF.toFixed(2)} ${currency || ''}`;\n};\n\nexport const dateStringToObject = dateString => {\n const [, year, month, day, hour, min] = dateString.match(/(\\d{4})-(\\d{2})-(\\d{2}) (\\d{2}):(\\d{2})/) || [];\n\n return {\n year,\n month,\n day,\n hour,\n min\n };\n};\n\nexport const collateBy = conditionFunc => arr => arr.reduce((map, curr) => {\n const result = conditionFunc(curr);\n return map.set(result, [...(map.get(result) || []), curr]);\n}, new Map());\n\nexport const isOptionsArrayContain = (optionsArray, query, queryKey = 'value') => {\n return Object.values(optionsArray).find(option => option[queryKey] && query && (option[queryKey].toLowerCase() === query.toLowerCase()));\n};\n\nexport const getNextAvailableTagColor = memoize(tags => {\n const colors = Object.values(tags).map(({ color }) => color);\n const availableColor = TAG_COLOR_LIST.find(({ color }) => colors.indexOf(color) === -1);\n\n return availableColor ? availableColor.color : TAG_COLOR_LIST[0].color;\n});\nexport const getNextAvailableTagKey = memoize(tags => {\n const keys = Object.values(tags).map(({ key }) => key);\n const nextKey = uniqueRandomHash(keys);\n return nextKey;\n});\n\nexport const getQueryAsObject = (location = window.location) => {\n const search = location.search ? location.search.replace(/^\\?/, '') : '';\n const parsedSearch = querystring.parse(search);\n return parsedSearch;\n};\n\nexport const getAfterQueryParam = (param, location) => {\n const query = getQueryAsObject(location);\n return query[param];\n};\n\nexport const getQueryParameter = (name, location) => {\n const values = getQueryAsObject(location);\n return values[name] || '';\n};\n\nexport const getDummyQuestionKeys = questions => Object.keys(questions).filter(qid => Number.isNaN(parseInt(qid, 10)) && qid === 'tags');\nexport const addPrefixToObjectKeys = (prefix, data) => Object.keys(data).reduce((prev, curr) => ({\n ...prev,\n [`${prefix}[${curr}]`]: (data[curr] === null) || (typeof data[curr] === 'object' && Object.keys(data[curr]).length === 0) ? null : data[curr]\n}), {});\nexport const prepareSubmissionWidgets = questions => Object.values(questions)\n .filter(({ submissionWidget }) => submissionWidget === 'Yes')\n .reduce((prev, curr) => ({ ...prev, [curr.text.toLowerCase()]: curr }), {});\n\nexport const classNames = classnames;\n\nconst isTextSimilar = (compare = '', array = []) => {\n return array.reduce((accum, str) => {\n return accum || (levenshtein(\n t(compare).toLowerCase().trim(),\n t(str).toLowerCase().trim()\n ) <= 2);\n }, false);\n};\n\nconst mixedFieldsRecuder = (accum, { fields = [], sublabels = {}, qid = '' }) => {\n const mixedFields = Array.isArray(fields) ? fields.map(field => ({\n type: `control_${field.type}`,\n text: (sublabels || {})[`field_${field.fieldID}`],\n qid: {\n qid,\n fieldID: field.fieldID\n }\n })) : [];\n return [\n ...accum,\n ...mixedFields\n ];\n};\n\nexport const preparePrimaryAvailableQuestionIDs = questions => {\n const questionsArray = Object.values(questions);\n\n const mixedFields = questionsArray.filter(({ type }) => type in {\n control_mixed: 1\n }).reduce(mixedFieldsRecuder, []);\n\n const extendedQuestions = [\n ...mixedFields,\n ...questionsArray\n ];\n\n const textboxes = extendedQuestions.filter(({ type }) => type in {\n control_textbox: 1\n });\n\n const artificialFirstNames = textboxes.filter(({ text }) => isTextSimilar(text, [\n 'First Name',\n 'Name'\n ]));\n\n const artificialLastNames = textboxes.filter(({ text }) => isTextSimilar(text, [\n 'Last Name',\n 'Surname'\n ]));\n\n const artificialFullNames = textboxes.filter(({ text }) => isTextSimilar(text, [\n 'Fullname',\n 'Name Surname',\n 'Contact Name',\n 'Driver\\'s Name',\n 'Student Name',\n 'Your Name',\n 'My Name',\n 'Username',\n 'Requestor\\'s Name'\n ]));\n\n // TODO: always include texts with Name or Contact in it?\n\n const baseObj = {};\n\n baseObj.primaryCandidates = PRIMARY_AVAILABLE_FIELDS.reduce((prev, curr) => {\n return {\n ...prev,\n [curr]: (extendedQuestions.filter(({ type }) => type === curr) || {}).map(qidSelector) || []\n };\n }, {});\n\n if (artificialFirstNames.length) {\n baseObj.artificialFirstNames = artificialFirstNames;\n }\n\n if (artificialLastNames.length) {\n baseObj.artificialLastNames = artificialLastNames;\n }\n\n if (artificialFullNames.length) {\n baseObj.artificialFullNames = artificialFullNames;\n }\n\n baseObj.artificialEmails = extendedQuestions.filter(({ text, type }) => type in {\n control_textbox: 1\n } && isTextSimilar(text, [\n 'Email',\n 'Email Address'\n ]))\n .map(qidSelector);\n\n return baseObj;\n};\n\nexport const getEmptyHeaderOption = () => ({\n value: '',\n text: t(texts.NO_QUESTION_AVAILABLE)\n});\n\nexport const getNoneHeaderOption = () => ({\n value: 'none',\n text: t(texts.NONE)\n});\n\nexport const isHeaderFieldDisabled = fieldOptions => {\n if (fieldOptions.length !== 1) return false;\n\n const { value, text } = fieldOptions[0];\n const { value: emptyValue, text: emptyText } = getEmptyHeaderOption();\n return value === emptyValue && text === emptyText;\n};\n\nexport const prepareSecondaryAvailableQuestionIDs = questions => {\n const questionsArray = Object.values(questions);\n\n return SECONDARY_AVAILABLE_FIELDS.reduce((prev, curr) => ({\n ...prev,\n [curr]: (questionsArray.filter(({ type }) => type === curr) || {}).map(qidSelector) || []\n }), {});\n};\n\nexport const getVacancyInfo = (arr, offset = 0, limit = arr.length) => {\n let maxIndex = -Infinity;\n let minIndex = Infinity;\n\n const vacancies = [];\n for (let i = offset; i < offset + limit; i++) {\n if (!arr[i]) {\n vacancies.push(i);\n }\n\n if (i > maxIndex) {\n maxIndex = i;\n }\n\n if (minIndex > i) {\n minIndex = i;\n }\n }\n\n return { vacancies, minIndex, maxIndex };\n};\n\n// Helper functions to prepare question order property\nexport const prepareQuestionOrders = questions => {\n const questionValues = Object.values(questions);\n\n return questionValues.filter(question => question && question.submissionWidget !== 'Yes')\n .sort(({ order: formerOrder }, { order: latterOrder }) => (parseInt(formerOrder, 10) < parseInt(latterOrder, 10) ? -1 : 1))\n .filter(({ qid }) => qid !== 'ip' && qid !== 'id')\n .map(qidSelector);\n};\n\nexport const convertFeaturesObjectToArray = featuresObj => Object.keys(featuresObj).filter(featureKey => featuresObj[featureKey]);\n\n/**\n * Generates download URL\n * @param {string} type\n * @param {string|number} formID\n * @param {Object.} questions\n * @param {Array.} questionOrders\n * @returns {string}\n */\nexport const getSubmissionDownloadURL = (type, formID, questions, questionOrders) => {\n const defaultExcluded = ['autoHide', 'rangeType:all'];\n // exclude hidden questions\n const excludeList = Object.values(questions)\n .filter(question => !questionOrders.includes(question.qid))\n .reduce((prev, curr) => {\n prev.unshift(curr.qid);\n return prev;\n }, defaultExcluded);\n const baseURL = window.location.origin;\n\n return `${baseURL}/server.php?action=${type}&formID=${formID}&excludeList=${excludeList}`;\n};\n\nexport const getPrettyAnswer = ({\n type = '',\n answer = '',\n prettyFormat = '',\n locale = 'en',\n userTimeZone = false\n} = {}) => {\n try {\n return match(\n type,\n 'control_fullname', prettyFormat || (answer ? `${answer.first} ${answer.last}` : ''),\n 'control_email', answer,\n 'control_textbox', prettyFormat || answer,\n 'control_phone', prettyFormat.replace('() ', ''),\n 'control_datetime', () => (getDateTimeText({\n userTimeZone,\n locale,\n answer,\n dateFormat: DEFAULT_DATE_FORMAT\n }) || prettyFormat),\n 'control_birthdate', () => (getDateTimeText({\n userTimeZone,\n locale,\n answer: { ...answer, month: MONTHS.indexOf(answer.month) + 1 },\n dateFormat: DEFAULT_DATE_FORMAT\n }) || prettyFormat),\n 'control_time', prettyFormat,\n 'control_number', answer,\n 'control_dropdown', prettyFormat || answer,\n 'control_submissionID', answer,\n 'control_submissionSubmitter', answer,\n 'control_submissionSubmittedVia', answer,\n 'control_autoincrement', answer,\n ANY, ''\n );\n } catch {\n return '';\n }\n};\n\nexport const addSubmitterAnswerReducer = (acc, submission) => {\n let newSubmission = submission;\n if (submission.submittedBy) {\n newSubmission = {\n ...submission,\n answers: {\n ...submission.answers,\n submitter: { answer: submission.submittedBy }\n }\n };\n }\n if (submission.submittedVia) {\n newSubmission = {\n ...newSubmission,\n answers: {\n ...newSubmission.answers,\n submittedVia: { answer: submission.submittedVia }\n }\n };\n }\n acc.push(newSubmission);\n return acc;\n};\n\nexport const addSubmittedViaInfo = (acc, submission) => {\n if (submission.submittedVia) {\n acc.push({\n ...submission,\n answers: {\n ...submission.answers,\n submittedVia: { answer: submission.submittedVia }\n }\n });\n } else {\n acc.push(submission);\n }\n return acc;\n};\n\nexport const getAnswerFromHeaderField = (field, answers, formatOptions) => {\n const qid = safeJSONParse(field, field);\n if (!qid) return '';\n\n let answer = answers[qid];\n if (qid.qid) { // mixed or submitter\n if (!answers[qid.qid]) return '';\n answer = answers[qid.qid];\n\n if (typeof answer.answer === 'object') {\n const isSubmitterInfo = qid.qid === 'submitter';\n answer = {\n answer: answer.answer ? answer.answer[isSubmitterInfo ? qid.fieldID : `field_${qid.fieldID}`] : null,\n type: isSubmitterInfo ? 'control_submissionSubmitter' : 'control_textbox'\n };\n } // Else weird content like \n }\n\n const formattedAnswer = {\n ...answer,\n ...formatOptions\n };\n\n return getPrettyAnswer(formattedAnswer);\n};\n\nexport const copyToClipboard = text => {\n const dummy = document.createElement('input');\n global.document.body.appendChild(dummy);\n dummy.setAttribute('value', text);\n dummy.select();\n global.document.execCommand('copy');\n global.document.body.removeChild(dummy);\n};\n\nexport const getViewportValues = searchWidth => {\n return Object.values(RESPONSIVE_RESOLUTION_MULTIPLIER_MAP).find(item => {\n const { width } = item;\n return searchWidth < width;\n });\n};\n\nexport const createAxiosParams = ({\n isHIPAA, isSign, checkSigns, limit, offset, filter, orderby, sort, addAssignFormSubmission, ...rest\n}) => {\n const conditionalParams = {\n ...(isHIPAA ? { tempTables: 'sync' } : {}),\n ...(isSign ? { addSignDocumentData: 1 } : {}),\n ...(checkSigns ? { checkSigns: 1 } : {}),\n ...(addAssignFormSubmission ? { assignFormSubmission: 1 } : {})\n };\n\n const params = {\n next: 1,\n addSubmitter: 1,\n addNotes: 1,\n addPendingApprovals: 1,\n addWorkflowStatus: 1,\n addRequestDelete: 1,\n addSubmittedVia: 1,\n orderby: `${orderby},${sort}`,\n limit,\n offset,\n ...rest,\n ...conditionalParams,\n filter\n };\n\n return params;\n};\n\nconst changePreviewFileOn = ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'csv', 'txt'];\n\nexport const previewUrl = (answer, exceptionList = []) => {\n const extension = FileUtils.getFileExtension(answer).toLowerCase();\n return exceptionList.indexOf(answer) === -1 && changePreviewFileOn.indexOf(extension) > -1 ? answer.replace(`.${extension}`, `_jf${extension}ss.png`) : answer;\n};\n\nexport const isElementInViewport = el => {\n const {\n top,\n left,\n bottom,\n right\n } = el.getBoundingClientRect();\n\n return (\n top >= 0\n && left >= 0\n && bottom <= (global.innerHeight || global.document.body.clientHeight)\n && right <= (global.innerWidth || global.document.body.clientWidth)\n );\n};\n\nexport const isAnswerAvailable = answer => answer && answer.answer && !isEmpty(answer.answer);\n\nexport const nonEmptyArray = value => Array.isArray(value) && value.length > 0;\n\nexport const generateProducts = (question, products, answers) => {\n const answerProducts = [];\n const { answer } = answers?.[question[0]?.qid] ?? {};\n\n if (answer && Object.keys(answer).length > 2) {\n Object.values(answer).forEach(productRawData => {\n const parsedProducts = (typeof productRawData === 'string') ? safeJSONParse(productRawData) : productRawData;\n if (parsedProducts && parsedProducts.pid) {\n products.forEach(product => {\n if (product.pid === parsedProducts.pid) {\n parsedProducts.icon = product.icon;\n }\n });\n answerProducts.push(parsedProducts);\n }\n });\n }\n\n return answerProducts;\n};\n\nexport const mapGeneralCurrentFilter = (filterObject = {}) => {\n if (filterObject['new:eq'] === '0') return 'read';\n if (filterObject['new:eq'] === '1') return 'unread';\n if (filterObject['flag:eq'] === '0') return 'unstarred';\n if (filterObject['flag:eq'] === '1') return 'starred';\n\n return '';\n};\n\nconst checkEncodedFilterText = filterText => {\n const encodedText = encodeURIComponent(filterText);\n const decodedText = decodeURIComponent(encodedText);\n\n return decodedText === filterText;\n};\n\nexport const generateApiFilterObject = (filterObject = {}, filterText = '') => {\n // If filterText is already encoded, do not encode again.\n const encodedFullText = checkEncodedFilterText(filterText) ? filterText : encodeURIComponent(filterText);\n\n const filterTextObject = match(\n filterText,\n FILTER_KEYWORDS.READ, () => ({ 'new:eq': '0' }),\n FILTER_KEYWORDS.UNREAD, () => ({ 'new:ne': '0' }),\n FILTER_KEYWORDS.STARRED, () => ({ 'flag:eq': '1' }),\n FILTER_KEYWORDS.UNSTARRED, () => ({ 'flag:eq': '0' }),\n text => typeof text === 'string' && text.length > 0, () => ({ fullText: encodedFullText }),\n ANY, null\n );\n\n if (!filterTextObject && Object.keys(filterObject).length === 0) {\n return null;\n }\n\n return {\n ...filterTextObject,\n ...filterObject\n };\n};\n\nexport const generateHeaderQuestionIDs = (primaryAvailableQuestionIDs, secondaryAvailableQuestionIDs, questions) => {\n const questionOrders = prepareQuestionOrders(questions);\n assert(Array.isArray(questionOrders), new Error('generateHeaderQuestionIDs: questionOrders must be an array.'));\n const orderMap = questionOrders.reduce((accum, id, index) => ({ ...accum, [id]: index }), {});\n\n const sorter = (a, b) => {\n return orderMap[a.qid || a] - orderMap[b.qid || b];\n };\n\n const reducer = (extraIdCheck = () => true) => (prev, curr) => [\n ...prev,\n ...curr\n .filter(qid => {\n const id = qid?.qid || qid;\n return (orderMap[id] >= 0 && extraIdCheck(id));\n })\n .sort(sorter)\n ];\n\n // This is an array\n let primary = [];\n\n let prioritizeFullnameOverFirstLast = false;\n let prioritizeFullnameOverFull = false;\n\n if (primaryAvailableQuestionIDs.primaryCandidates.control_fullname.length) {\n const fullnameOrder = Number.parseInt(orderMap[primaryAvailableQuestionIDs.primaryCandidates.control_fullname[0]], 10);\n if (primaryAvailableQuestionIDs.artificialFirstNames && primaryAvailableQuestionIDs.artificialFirstNames.length) {\n prioritizeFullnameOverFirstLast = fullnameOrder < Number.parseInt(primaryAvailableQuestionIDs.artificialFirstNames[0].order, 10);\n }\n if (primaryAvailableQuestionIDs.artificialFullNames && primaryAvailableQuestionIDs.artificialFullNames.length) {\n prioritizeFullnameOverFull = fullnameOrder < Number.parseInt(primaryAvailableQuestionIDs.artificialFullNames[0].order, 10);\n }\n }\n\n if (!prioritizeFullnameOverFirstLast && primaryAvailableQuestionIDs.artificialFirstNames && primaryAvailableQuestionIDs.artificialLastNames) {\n primary = [\n primaryAvailableQuestionIDs.artificialFirstNames.map(qidSelector).sort(sorter)[0],\n primaryAvailableQuestionIDs.artificialLastNames.map(qidSelector).sort(sorter)[0]\n ];\n } else if (!prioritizeFullnameOverFull && primaryAvailableQuestionIDs.artificialFullNames) {\n primary = [\n primaryAvailableQuestionIDs.artificialFullNames.map(qidSelector).sort(sorter)[0]\n ];\n }\n\n if (primaryAvailableQuestionIDs.primaryCandidates) {\n const primaryCandidates = Object.values(primaryAvailableQuestionIDs.primaryCandidates)\n .filter(nonEmptyArray)\n .reduce(reducer(), []);\n\n primary = [...primary, ...primaryCandidates].filter((item, pos, a) => a.indexOf(item) === pos);\n }\n\n const [secondary] = Object.values([\n ...(primaryAvailableQuestionIDs.artificialEmails.length ? primaryAvailableQuestionIDs.artificialEmails : []),\n ...Object.values(secondaryAvailableQuestionIDs)\n ])\n .filter(nonEmptyArray)\n .reduce(reducer(id => primary.indexOf(id) === -1), []);\n\n return {\n primary,\n secondary\n };\n};\n\nexport const generateSubstituteLabel = question => match(\n question,\n // Fullname\n ({ type, sublabels }) => type === 'control_fullname' && sublabels && (Boolean(sublabels.first) || Boolean(sublabels.last)), ({\n prefix,\n middle,\n suffix,\n sublabels\n }) => classNames(\n suffix === 'Yes' && sublabels.suffix,\n middle === 'Yes' && sublabels.prefix,\n sublabels.first,\n sublabels.last,\n prefix === 'Yes' && sublabels.prefix\n ),\n // Address\n ({ type }) => type === 'control_address', ({ subfields, sublabels }) => {\n const subLabelMap = ADDRESS_FIELD_LABEL_MAP.entries();\n const enabledFields = (subfields || 'st1|st2|city|state|zip|country').split('|').filter(val => val);\n\n let subLabel = subLabelMap.next();\n\n while (!subLabel.done) {\n const [key, labelKey] = subLabel.value;\n\n if (enabledFields.indexOf(key) > -1 && sublabels[labelKey]) {\n return sublabels[labelKey];\n }\n\n subLabel = subLabelMap.next();\n }\n },\n // Phone\n ({ type, inputMask }) => type === 'control_phone' && inputMask === 'disable', ({ countryCode, sublabels }) => classNames(\n countryCode === 'Yes' && sublabels.country,\n sublabels.area,\n sublabels.phone\n ),\n // CompoundHint (multiple placeholders)\n ({ compoundHint }) => Boolean(compoundHint), ({ compoundHint }) => compoundHint.split(',').join(' '),\n ({ type }) => type === 'control_widget', ({ cfname }) => cfname,\n // Default\n ANY, ({\n subLabel,\n description,\n hint\n }) => subLabel || description || hint || ''\n);\n\nexport const isEditingText = () => {\n if (!document.activeElement) {\n return false;\n }\n if (document.activeElement.nodeName.toLowerCase() === 'input') {\n return true;\n }\n if (document.activeElement.getAttribute('contenteditable') === 'true') {\n return true;\n }\n return false;\n};\n\nexport const getSubmissionDateLanguage = (user, form) => (form && form.submissionDateLanguage) || (user && user.language && JOTFORM_MOMENT_LANGUAGE_MAP[user.language]) || 'en';\nexport const getSubmissionDateFormat = form => form.submissionDateFormat || DEFAULT_DATE_FORMAT;\n\nexport const ellipsisTruncate = (string, length) => {\n return string.length + 3 < length ? string : `${string.substring(0, length - 3)}...`;\n};\n\nexport const nodeContainsClassname = (node1, className) => {\n if (!isElement(node1)) {\n return false;\n }\n let parentNode = node1;\n do {\n if (parentNode?.classList?.contains(className)) {\n return true;\n }\n parentNode = (parentNode && parentNode.parentNode);\n } while (parentNode);\n\n return false;\n};\n\nexport const parseSearchParams = location => {\n // Post flows are running, get search from query if exists\n const searchQuery = getQueryParameter('search', location);\n const filterQuery = getAfterQueryParam('filters', location) || '';\n const liteMode = getQueryParameter('liteMode');\n const download = getQueryParameter('download');\n const showNotes = getQueryParameter('showNotes');\n const dgrf = getQueryParameter('dgrf');\n const aiConversations = getQueryParameter('aiConversations');\n const aiFilter = getQueryParameter('aiFilter');\n const enableDRA = getQueryParameter('enableDRA');\n\n return {\n ...(searchQuery ? { filterText: searchQuery } : { }),\n ...(filterQuery ? { filterObject: querystring.parse(filterQuery) } : { }),\n showNotes,\n liteMode,\n download,\n dgrf,\n aiConversations,\n aiFilter,\n enableDRA\n };\n};\n\nexport const filterObjectQuestionControl = (filterObject, questions) => {\n if (filterObject && questions) {\n try {\n const newFilterObject = Object.keys(filterObject).filter(key => {\n const isQidKey = key.includes(':');\n if (!isQidKey) {\n return true;\n }\n const splitKey = key.split(':');\n if (splitKey[0].charAt(0) !== 'q') {\n return true;\n }\n const paramQid = splitKey[0].substring(1);\n\n if (Number.isNaN(parseInt(paramQid, 10))) {\n return true;\n }\n const findedItem = Object.keys(questions).find(keyQuestion => keyQuestion === paramQid);\n if (findedItem) {\n return true;\n }\n return false;\n }).reduce((cur, key) => {\n return Object.assign(cur, { [key]: filterObject[key] });\n }, {});\n return newFilterObject;\n } catch (error) {\n return filterObject;\n }\n }\n return filterObject;\n};\n\nexport const parseLocationParams = (location = window.location) => {\n const search = parseSearchParams(location);\n\n const basePath = getAppPath();\n const pathName = window.location.pathname;\n\n const appName = getActiveAlias();\n\n let pathArr = pathName\n .replace(basePath, '')\n .replace(/\\/f\\/r\\/.*?\\//, '/')\n .split('/').filter(p => !!p);\n const formID = pathArr[0];\n\n const editMode = pathArr[pathArr.length - 1] === 'edit';\n\n if (editMode) {\n pathArr = pathArr.slice(0, -1);\n }\n\n const params = {\n ...search, formID, editMode, tab: appName, sid: ''\n };\n\n if (pathArr.length === 1) {\n return params;\n }\n\n if (pathArr.length > 2) {\n const [, tab = params.tab, sid = params.sid] = pathArr;\n return {\n ...params, tab, sid\n };\n }\n\n if (/[a-z]/.test(pathArr[1]) || pathArr[1].length <= 16) {\n const [, tab = params.tab] = pathArr;\n return { ...params, tab };\n }\n\n if (/[0-9]/.test(pathArr[1])) {\n const [, sid = params.sid] = pathArr;\n return {\n ...params, sid\n };\n }\n return params;\n};\n\nconst stringifyLocationParams = ({\n filterText, filterObject, formID, editMode, tab, sid, showNotes, dgrf, aiConversations, aiFilter, enableDRA\n}) => {\n const location = [formID];\n\n const activeAlias = getActiveAlias();\n if (\n tab\n && ((tab !== 'inbox' && activeAlias === 'inbox') || (tab !== 'sentbox' && activeAlias === 'sentbox'))\n ) {\n location.push(tab);\n }\n\n if (sid) {\n location.push(sid);\n }\n\n if (editMode) {\n location.push('edit');\n }\n\n let locationStr = location.join('/');\n\n const query = { };\n\n if (filterText) {\n query.search = filterText;\n }\n\n if (showNotes) {\n query.showNotes = showNotes;\n }\n\n if (dgrf) {\n query.dgrf = dgrf;\n }\n\n if (aiFilter) {\n query.aiFilter = aiFilter;\n }\n\n if (aiConversations) {\n query.aiConversations = aiConversations;\n }\n\n if (filterObject) {\n query.filters = querystring.stringify(filterObject);\n }\n\n if (enableDRA) {\n query.enableDRA = enableDRA;\n }\n\n if (window.location.pathname.indexOf('/sentbox/all') > -1 && editMode) {\n locationStr = locationStr.replace(/.+?\\//, 'all/');\n }\n\n const queryString = querystring.stringify(query);\n\n return `/${locationStr}${queryString ? `?${queryString}` : ''}`;\n};\n\nexport const updateLocationParams = (params, location = window.location) => {\n const paramsPrev = parseLocationParams(location);\n return stringifyLocationParams({ ...paramsPrev, ...params });\n};\n\nexport const findIndexByID = (arr, id) => arr.findIndex(item => item && item.id === id);\n\nexport const createFilter = (fullText, filterObject) => {\n return {\n ...filterObject,\n ...(fullText && { fullText })\n };\n};\n\nconst noOp = f => f;\n\nconst smoothScroll = ({\n el = window,\n to,\n from = el.scrollTop,\n direction = from < to ? 20 : -20,\n cb = noOp\n}) => {\n if (direction > 0 && from > to) return cb();\n if (direction < 0 && from < to) return cb();\n\n const nextI = from + direction;\n\n global.requestAnimationFrame(() => {\n el.scrollTo(0, nextI);\n smoothScroll({\n el, to, from: nextI, direction, cb\n });\n });\n};\n\nexport const scrollSubmissionToElement = (el, cb = noOp) => {\n const scrollContainer = document.querySelector('.jfInbox-submission-container');\n if (!el || !scrollContainer) return;\n\n const { top } = el.getBoundingClientRect();\n\n const nextTop = scrollContainer.scrollTop + (top - 200);\n\n try {\n smoothScroll({ el: scrollContainer, to: nextTop, cb });\n } catch (error) {\n scrollContainer.scrollTop = nextTop;\n cb();\n }\n};\n\nexport const focusTaskSection = () => {\n const tasks = Array.prototype.slice.call(document.querySelectorAll('.jfInbox-submission-view-container-inner.forThread .jfThread-entry.task, .jfThread-action'));\n if (!tasks.length) return;\n\n tasks.map(task => task.classList.add('isScrolled'));\n setTimeout(() => {\n tasks.map(task => task.classList.remove('isScrolled'));\n }, 1000);\n\n scrollSubmissionToElement(tasks[0]);\n};\n\nlet removeFocusTimeout;\nconst removeAnswerFocus = () => {\n document.querySelectorAll('.jfSubmission-answer').forEach(el => el.classList.remove('isFocused'));\n};\n\nexport const toggleHighlightAnswer = (qid, isHighlighting) => {\n const answer = document.querySelector(`#qid_${qid}`);\n if (answer) {\n if (isHighlighting) {\n answer.classList.add('isFocused');\n } else {\n answer.classList.remove('isFocused');\n }\n }\n};\n\nexport const focusAnswerField = (qid, removeFocus = true, isEntry = false) => event => {\n return new Promise(resolve => {\n let answer = document.querySelector(`#qid_${qid}`);\n\n if (isEntry) {\n answer = document.querySelector(`#${qid}`);\n }\n\n if (!answer) {\n return;\n }\n\n if (event) {\n event.preventDefault();\n }\n\n removeAnswerFocus();\n\n scrollSubmissionToElement(answer, () => {\n answer.classList.add('isFocused');\n\n if (removeFocus) {\n if (removeFocusTimeout) {\n clearTimeout(removeFocusTimeout);\n }\n\n removeFocusTimeout = setTimeout(removeAnswerFocus, 1500);\n }\n\n resolve(answer);\n });\n });\n};\n\nexport const focusAnswerThread = async (parentID, isEntry = false) => {\n const field = await focusAnswerField(parentID, true, isEntry)();\n\n if (field) {\n const selector = isEntry ? `#${parentID} .subThreadToggle` : '.jfAnswer-addNote-button';\n const thread = field.querySelector(selector);\n thread?.click();\n }\n};\n\nexport const hasTags = answers => {\n return !!Object.values(answers).find(eachAnswer => {\n const { name, submissionWidget, answer = [] } = eachAnswer;\n return name === 'tags' && submissionWidget === 'Yes' && answer.length > 0;\n });\n};\n\nlet feedback;\n\nexport const initFeedback = ({ user, formID }, cb = () => {}) => {\n const shouldInitFeedback = (user.username && user.email && formID)\n && !global.window.useFromPortal\n && !feedback\n && global.JOTFORM_ENV === 'PRODUCTION';\n\n if (!shouldInitFeedback) return cb(feedback);\n\n feedback = true;\n\n const xhr = new global.XMLHttpRequest();\n xhr.open('POST', '/server/check-olark-chat-support');\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n xhr.onload = () => {\n if (xhr.status === 200 && xhr.responseText !== 'FALSE') {\n try {\n const myPattern = new RegExp(/';\n script += '';\n script += '';\n\n markup.push(\n
    \n );\n\n markup.push(
    );\n markup.push(
    );\n markup.push(\n
    \n position:\n
    \n address:\n
    \n
    \n );\n }\n\n return (\n
    \n {markup}\n
    \n );\n};\n\nexport default Geolocation;\n","import React, { Component } from 'react';\nimport ProductContainer from '../helpers/ProductContainer';\n\nexport default class Gocardless extends Component {\n render() {\n return (\n \n );\n }\n}\n\nGocardless.getState = (prop) => {\n return ProductContainer.getState(prop);\n};\n\nGocardless.getScript = (prop) => {\n return ProductContainer.getScript(prop);\n};\n\nGocardless.getHidden = (prop) => {\n return ProductContainer.getHidden(prop);\n};\n","import React, { Component } from 'react';\nimport ProductContainer from '../helpers/ProductContainer';\n\nexport default class Googleco extends Component {\n render() {\n return (\n \n );\n }\n}\n\nGoogleco.getState = (prop) => {\n return ProductContainer.getState(prop);\n};\n\nGoogleco.getScript = (prop) => {\n return ProductContainer.getScript(prop);\n};\n\nGoogleco.getHidden = (prop) => {\n return ProductContainer.getHidden(prop);\n};\n","import React from 'react';\nimport { addValidation, classNames } from '../helpers/Utils';\n\nconst Grading = (prop) => {\n const qid = prop.qid.value;\n const id = prop.id.value;\n const qname = prop.qname.value;\n\n const gradingOptions = prop.options.value.split('|');\n const markup = [];\n for (let i = 0; i < gradingOptions.length; i += 1) {\n const option = gradingOptions[i];\n const gbox = (\n \n );\n const glabel = ;\n\n const children = prop.boxAlign.value === 'Left' ? [gbox, glabel] : [glabel, gbox];\n\n markup.push(\n
    \n {children}\n
    \n );\n }\n\n // Zero is unlimited\n if (prop.total.value !== '0') {\n markup.push(\n
    \n {'Total'.locale()}:  \n 0\n / \n { prop.total.value }\n  \n \n
    \n );\n }\n\n return
    {markup}
    ;\n};\n\nexport default Grading;\n","import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport { htmlDecode } from '@jotforminc/form-common';\nimport QuestionProps from '../helpers/QuestionProps';\nimport { sanitize } from '../helpers/Utils';\n\nexport default class Head extends Component {\n get headerSize() {\n return this.props.headerType && this.props.headerType.value ? this.props.headerType.value : 'Default';\n }\n\n get htmlDecodedAndSanitizedText() {\n return htmlDecode(sanitize(this.props.text.value)) || '';\n }\n\n get htmlDecodedAndSanitizedSubHeader() {\n return htmlDecode(sanitize(this.props.subHeader.value)) || '';\n }\n\n createHeaderTag() {\n const headerProps = {\n id: `header_${this.props.id.value}`,\n className: 'form-header',\n 'data-component': 'header',\n 'aria-hidden': !this.htmlDecodedAndSanitizedText ? 'true' : undefined\n };\n\n let inline;\n if (this.props.inlineEditClass) {\n inline = React.createElement(this.props.inlineEditClass, {\n id: this.props.id.value,\n propPath: 'text',\n text: this.htmlDecodedAndSanitizedText,\n defaultValue: QuestionProps[this.props.type.value].text.value,\n placeholder: 'Type a header',\n focusToElement: this.props.inlineEditFocusToElement ? this.props.inlineEditFocusToElement : null,\n isFirstHeader: this.props.inlineEditIsFirstHeader || false,\n pageTitle: this.props.inlineEditPageTitle || '',\n isMobile: this.props.isMobile || false\n });\n }\n\n if (this.headerSize === 'Large') {\n return (\n

    \n {inline || this.htmlDecodedAndSanitizedText}\n

    \n );\n } else if (this.headerSize === 'Small') {\n return (\n

    \n {inline || this.htmlDecodedAndSanitizedText}\n

    \n );\n }\n return (\n

    \n {inline || this.htmlDecodedAndSanitizedText}\n

    \n );\n }\n\n createSubHeader() {\n let inline;\n if (this.props.inlineEditClass) {\n inline = React.createElement(this.props.inlineEditClass, {\n id: this.props.id.value,\n propPath: 'subHeader',\n text: this.htmlDecodedAndSanitizedSubHeader,\n defaultValue: QuestionProps[this.props.type.value].subHeader.value,\n placeholder: 'Type a subheader',\n isMobile: this.props.isMobile || false\n });\n }\n\n if (this.props.inlineEditClass || (this.props.subHeader && this.props.subHeader.value && this.props.subHeader.value !== 'Click to edit sub heading...')) {\n return (\n \n {inline || this.htmlDecodedAndSanitizedSubHeader}\n
    \n );\n }\n return null;\n }\n\n createHeaderImage(headerImage, imgAlign) {\n // TODO: fix it when isSecure prop is ready.\n const isSecure = true;\n const imgAlt = (this.props.alt && this.props.alt.value)\n || (this.props.text && this.props.text.value);\n const className = `header-logo-${imgAlign.toLowerCase()}`;\n const headerLogoDisplay = isSecure ? 'table-cell' : 'none';\n\n if (headerImage.value === 'images/security_certificate_seal_positivessl.gif' || headerImage.value === 'images/security_certificate_seal_globalsign.gif') {\n return (\n \n \n \n
    \n \n \n \n \n \n \n \n
    \n \n \n \"SSL\"\n \n \n ' }} />\n );\n }\n\n return (\n
    \n {markup}\n
    \n );\n};\n\nexport default Signature;\n","import React, { Component } from 'react';\nimport ProductContainer from '../helpers/ProductContainer';\n\nexport default class Sofort extends Component {\n render() {\n return (\n \n );\n }\n}\n\nSofort.getState = (prop) => {\n return ProductContainer.getState(prop);\n};\n\nSofort.getScript = (prop) => {\n return ProductContainer.getScript(prop);\n};\n\nSofort.getHidden = (prop) => {\n return ProductContainer.getHidden(prop);\n};\n","import React, { Component } from 'react';\nimport ProductContainer from '../helpers/ProductContainer';\n\nexport default class Skrill extends Component {\n render() {\n return (\n \n );\n }\n}\n\nSkrill.getState = (prop) => {\n return ProductContainer.getState(prop);\n};\n\nSkrill.getScript = (prop) => {\n return ProductContainer.getScript(prop);\n};\n\nSkrill.getHidden = (prop) => {\n return ProductContainer.getHidden(prop);\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport ProductContainer from '../helpers/ProductContainer';\nimport PaymentCreditCardAndAddress from '../helpers/PaymentCreditCardAndAddress';\n\nexport default class Square extends Component {\n render() {\n if (!ProductContainer.checkRenderStatus(this.props)) {\n ProductContainer.staticVars.hidden = true;\n return '';\n }\n const paymentCreditCardAndAddress = ;\n return (\n
    \n \n {paymentCreditCardAndAddress}\n
    \n );\n }\n}\n\n\nSquare.propTypes = {\n currency: PropTypes.shape({\n value: PropTypes.string\n })\n};\n\nSquare.getState = (prop) => {\n return ProductContainer.getState(prop);\n};\n\nSquare.getScript = (prop) => {\n return ProductContainer.getScript(prop);\n};\n\nSquare.getHidden = (prop) => {\n return ProductContainer.getHidden(prop);\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport ProductContainer from '../helpers/ProductContainer';\nimport PaymentCreditCardAndAddress from '../helpers/PaymentCreditCardAndAddress';\n\nexport default class Stripe extends Component {\n render() {\n if (!ProductContainer.checkRenderStatus(this.props)) {\n ProductContainer.staticVars.hidden = true;\n return '';\n }\n const paymentCreditCardAndAddress = ;\n return (\n
    \n \n {paymentCreditCardAndAddress}\n
    \n );\n }\n}\n\nStripe.propTypes = {\n currency: PropTypes.shape({\n value: PropTypes.string\n })\n};\n\n\nStripe.getState = (prop) => {\n return ProductContainer.getState(prop);\n};\n\nStripe.getScript = (prop) => {\n return ProductContainer.getScript(prop);\n};\n\nStripe.getHidden = (prop) => {\n return ProductContainer.getHidden(prop);\n};\n","import React, { Component } from 'react';\nimport ProductContainer from '../helpers/ProductContainer';\nimport PaymentCreditCardAndAddress from '../helpers/PaymentCreditCardAndAddress';\n\nexport default class StripeCheckout extends Component {\n render() {\n const paymentCreditCardAndAddress = ;\n return (\n
    \n \n {paymentCreditCardAndAddress}\n
    \n );\n }\n}\n\nStripeCheckout.getState = (prop) => {\n return ProductContainer.getState(prop);\n};\n\nStripeCheckout.getScript = (prop) => {\n return ProductContainer.getScript(prop);\n};\n\nStripeCheckout.getHidden = (prop) => {\n return ProductContainer.getHidden(prop);\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport ProductContainer from '../helpers/ProductContainer';\nimport BaseButton from '../helpers/BaseButton';\n\nexport default class StripeACH extends Component {\n renderBankInfo() {\n return (\n \n
    {'Select Bank Account'.locale()}
    {'Please select the bank account to make a payment.'.locale()}\n \n \n \n \n \n \n \n \n \n \n \n \n
    Institution:institution
    Account Name:account_name
    \n
    \n \n \n
    \n );\n }\n render() {\n if (!ProductContainer.checkRenderStatus(this.props)) {\n ProductContainer.staticVars.hidden = true;\n return '';\n }\n return (\n
    \n \n {this.renderBankInfo()}\n
    \n );\n }\n}\n\nStripeACH.propTypes = {\n plaidPublic: PropTypes.shape({\n value: PropTypes.string\n }),\n environment: PropTypes.shape({\n value: PropTypes.string\n })\n};\n\nStripeACH.getState = (prop) => {\n return ProductContainer.getState(prop);\n};\n\nStripeACH.getScript = (prop) => {\n return ProductContainer.getScript(prop);\n};\n\nStripeACH.getHidden = (prop) => {\n return ProductContainer.getHidden(prop);\n};\n","import React, { Component } from 'react';\nimport ProductContainer from '../helpers/ProductContainer';\nimport PaymentCreditCardAndAddress from '../helpers/PaymentCreditCardAndAddress';\n\nexport default class StripeACHManual extends Component {\n render() {\n if (!ProductContainer.checkRenderStatus(this.props)) {\n ProductContainer.staticVars.hidden = true;\n return '';\n }\n const paymentCreditCardAndAddress = ;\n return (\n
    \n \n {paymentCreditCardAndAddress}\n
    \n );\n }\n}\n\nStripeACHManual.getState = (prop) => {\n return ProductContainer.getState(prop);\n};\n\nStripeACHManual.getScript = (prop) => {\n return ProductContainer.getScript(prop);\n};\n\nStripeACHManual.getHidden = (prop) => {\n return ProductContainer.getHidden(prop);\n};\n","import React, { Component } from 'react';\nimport ProductContainer from '../helpers/ProductContainer';\n\nexport default class PayFast extends Component {\n render() {\n return (\n \n );\n }\n}\n\nPayFast.getState = (prop) => {\n return ProductContainer.getState(prop);\n};\n\nPayFast.getScript = (prop) => {\n return ProductContainer.getScript(prop);\n};\n\nPayFast.getHidden = (prop) => {\n return ProductContainer.getHidden(prop);\n};\n","/* eslint no-eval:0 */\n\nimport PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport { stripSlashes } from '@jotforminc/utils'\nimport { htmlDecode } from '@jotforminc/form-common';\n\nimport { sanitize } from '../helpers/Utils';\nexport default class Text extends Component {\n componentWillReceiveProps(nextProps) {\n if (!nextProps.isEditing && this.props.isEditing && this.props.richTextEditor) {\n this.props.richTextEditor.onSave();\n }\n }\n\n handleClick() {\n if (this.props.passive) {\n this.props.toggleRichTextEditorForQuestion(this.props.id.value, true);\n }\n }\n\n render() {\n if (!this.props.richTextEditor || !this.props.isEditing) {\n let txt = (this.props.text.value || '').replace(/|script>/ig, ' ');\n let content;\n txt = htmlDecode(txt);\n if (this.props.passive) {\n content = global.document.createElement('div');\n content = stripSlashes(txt || this.props.emptyText || '');\n content = sanitize(txt);\n } else {\n content = sanitize(stripSlashes(txt));\n }\n if (content === '' && this.props.passive) {\n content = `${'Click to edit this text...'.locale()}`;\n }\n return (\n this.handleClick()}\n />\n );\n }\n\n return React.createElement(this.props.richTextEditor.type, {\n key: `richTextEditor${this.props.id.value}`,\n content: this.props.text.value,\n config: {\n menubar: '',\n plugins: 'autolink link image lists print preview textcolor table code paste searchreplace charactercount advlist',\n paste_as_text: true,\n height: this.props.richTextEditor.editorHeight,\n toolbar: 'customfontfamily customfontsize removeformat bold italic underline forecolor backcolor | alignment listmenu outdent indent table | code hr | link customimage preview | styleselect questionlist', // eslint-disable-line\n language_url: this.props.richTextEditor.languageUrl,\n statusbar: true,\n default_link_target: '_blank'\n },\n containerClass: 'mainCard',\n imagePickerModalClass: 'disable-drag',\n containerStyle: { padding: '10px' },\n addFormFields: true,\n filterPostData: true,\n questions: this.props.richTextEditor.questions,\n onChange: () => { },\n onInit: this.props.richTextEditor.onInit\n });\n }\n}\n\nText.getState = () => {\n return {};\n};\n\nText.propTypes = {\n id: PropTypes.shape({\n value: PropTypes.string\n }),\n text: PropTypes.shape({\n value: PropTypes.string\n }),\n passive: PropTypes.bool,\n toggleRichTextEditorForQuestion: PropTypes.func,\n emptyText: PropTypes.string,\n richTextEditor: PropTypes.shape(),\n isEditing: PropTypes.bool,\n onInit: PropTypes.func,\n};\n\nText.defaultProps = {\n onInit: () => {}\n}\n","import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport { ariaLabelledBy, getCurrentTime, addZeros, subLabel } from '@jotforminc/form-common';\nimport { addValidation, classNames, subLabelSingle } from '../helpers/Utils';\nimport QuestionProps from '../helpers/QuestionProps';\nimport SubLabel from '../helpers/SubLabel';\nimport Time2 from './Timev2';\n\nexport default class Time extends Component {\n\n getTimeOptions(cur, defaultTime, range = false, ampmFormat) {\n const displayTime = defaultTime !== 'none';\n\n const hourOptions = [];\n const hour = range ? cur.hourRange : cur.hour;\n for (let i = cur.start; i <= cur.limit; i++) {\n const hourSelected = (displayTime && i === parseInt(hour, 10)) ? 'selected' : null;\n hourOptions.push(\n \n {ampmFormat ? i : addZeros(i, 2)}\n \n );\n }\n\n const minOptions = [];\n // const min = range ? cur.minRange : cur.min;\n for (let i = 0; i < 60; i += Number(cur.step)) {\n const selected = (displayTime && i === parseInt(cur.min, 10)) ? 'selected' : null;\n minOptions.push(\n \n {addZeros(i, 2)}\n \n );\n }\n const amPm = [];\n const currentAmPm = range ? cur.currentAmpmRange : cur.currentAmpm;\n if (!this.props.showDayPeriods || this.props.showDayPeriods.value !== 'pmOnly') {\n const selected = currentAmPm === 'AM' ? 'selected' : null;\n amPm.push(\n \n {'AM'.locale()}\n \n );\n }\n\n if (!this.props.showDayPeriods || this.props.showDayPeriods.value !== 'amOnly') {\n const selected = currentAmPm === 'PM' ? 'selected' : null;\n amPm.push(\n \n {'PM'.locale()}\n \n );\n }\n\n return { hourOptions: hourOptions, minOptions: minOptions, amPm: amPm };\n }\n render() {\n if (this.props.themeVersion && this.props.themeVersion === 'v2') {\n return ;\n }\n\n // const date = new Date();\n // const hour = date.getHours();\n // const min = date.getMinutes();\n // manipulate prop ?\n const disabled = this.props.readonly && this.props.readonly.value === 'Yes' ? ' disabled' : '';\n const showTimeDiff = this.props.timeDiff && this.props.timeDiff.value === 'Yes';\n const rangeVal = this.props.range && this.props.range.value === 'Yes';\n const hourSubLabel = subLabel(this.props, 'hour', this.props.id.value);\n const minSubLabel = subLabel(this.props, 'minutes', this.props.id.value);\n const ampmSubLabel = subLabelSingle({ subLabel: { value: 'AM/PM Option' } }, 'ampm', this.props.id.value);\n // const until = this.props.until;\n const ampmFormat = this.props.timeFormat && this.props.timeFormat.value === 'AM/PM';\n\n const defaultTime = this.props.defaultTime.value;\n // if(defaultTime === 'Yes') { defaultTime = 'current'; }\n // else if(defaultTime === 'No') { defaultTime = 'none'; }\n\n const defaultClassName = defaultTime === 'current' ? 'currentTime ' : '';\n\n let cur;\n if (this.props.defaultTime.value.indexOf('custom_') > -1) {\n let toCustomHour = false;\n let toCustomMinute = false;\n let fromD = this.props.defaultTime.value.split('custom_')[1];\n if (fromD.indexOf('-') > -1) { // time range\n const range = fromD.split('-');\n const to = range[1];\n fromD = range[0];\n const toSplit = to.split(':');\n toCustomHour = toSplit[0];\n toCustomMinute = toSplit[1];\n }\n cur = getCurrentTime(this.props, fromD.split(':')[0], fromD.split(':')[1], toCustomHour, toCustomMinute);\n } else {\n cur = getCurrentTime(this.props);\n }\n\n const rangeMarkup = [];\n\n const untilSpan = this.props.inlineEditClass ? (\n React.createElement(this.props.inlineEditClass, {\n id: this.props.id.value,\n propPath: 'until',\n text: this.props.until ? this.props.until.value : 'until',\n defaultValue: this.props.until ? this.props.until.value : 'until',\n placeholder: 'Type a range indicator.'\n })) : ((this.props.until && this.props.until.value) || 'until');\n\n if (rangeVal) {\n rangeMarkup.push(\n \n { untilSpan }\n );\n const hrRangeSubLabel = subLabel(this.props, 'hourRange', this.props.id.value);\n rangeMarkup.push(\n  :}\n for={`${this.props.qid.value}_hourSelectRange`}\n key=\"hour_range\"\n >\n \n