{"version":3,"file":"static/js/index.9f8ad758.js","sources":["webpack://@jotforminc/portal/../../configs/tracking-config/src/index.js","webpack://@jotforminc/portal/./src/components/AppIcon/ScAppIconWrapper.js","webpack://@jotforminc/portal/./src/components/AppIcon/index.js","webpack://@jotforminc/portal/./src/components/AppImage/index.js","webpack://@jotforminc/portal/./src/components/AppLogo/index.js","webpack://@jotforminc/portal/./src/components/AppLogo/scLogo.js","webpack://@jotforminc/portal/./src/components/AppModal/ScAppModal.js","webpack://@jotforminc/portal/./src/components/AppModal/index.js","webpack://@jotforminc/portal/./src/components/Badge/ScBadge.js","webpack://@jotforminc/portal/./src/components/Badge/index.js","webpack://@jotforminc/portal/./src/components/BuilderLoading/index.js","webpack://@jotforminc/portal/./src/components/Button/scButton.js","webpack://@jotforminc/portal/./src/components/Button/index.js","webpack://@jotforminc/portal/./src/components/Dropdown/defaults/OptionContainerRenderer.js","webpack://@jotforminc/portal/./src/components/Dropdown/defaults/ButtonRenderer.js","webpack://@jotforminc/portal/./src/components/Dropdown/defaults/ContainerRenderer.js","webpack://@jotforminc/portal/./src/components/Dropdown/index.js","webpack://@jotforminc/portal/./src/components/Dropdown/scDropdown.js","webpack://@jotforminc/portal/./src/components/IconSelector/index.js","webpack://@jotforminc/portal/../../../../src/icons/media/image-broken-filled.svg","webpack://@jotforminc/portal/./src/components/Image/NoImage/index.js","webpack://@jotforminc/portal/./src/components/Image/index.js","webpack://@jotforminc/portal/./src/components/Items/FormItem/index.js","webpack://@jotforminc/portal/./src/components/SVGIcon/index.js","webpack://@jotforminc/portal/./src/components/ItemIcon/scItemIcon.js","webpack://@jotforminc/portal/./src/components/Items/SimpleItem/SimpleIcon.js","webpack://@jotforminc/portal/./src/components/Items/SimpleItem/SimpleItem.js","webpack://@jotforminc/portal/./src/components/Items/defaultRenderers.js","webpack://@jotforminc/portal/./src/components/Items/withContentWrapper.js","webpack://@jotforminc/portal/./src/components/ListItemBase/DefaultImage/index.js","webpack://@jotforminc/portal/./src/components/ListItemBase/helper.js","webpack://@jotforminc/portal/./src/components/ListItemBase/styled.js","webpack://@jotforminc/portal/./src/components/Loading.js","webpack://@jotforminc/portal/./src/components/PortalErrorBoundary/ScErrorFallback.js","webpack://@jotforminc/portal/./src/components/PortalErrorBoundary/DefaultErrorFallback.js","webpack://@jotforminc/portal/./src/components/PortalErrorBoundary/index.js","webpack://@jotforminc/portal/./src/components/PortalFileUpload/scFileUpload.js","webpack://@jotforminc/portal/./src/components/PortalFileUpload/Thumbnail.js","webpack://@jotforminc/portal/./src/components/PortalFileUpload/FileInputRenderer.js","webpack://@jotforminc/portal/./src/components/PortalFileUpload/FileLoadingRenderer.js","webpack://@jotforminc/portal/./src/components/PortalFileUpload/index.js","webpack://@jotforminc/portal/../../libs/apploaders/src/Dots/index.js","webpack://@jotforminc/portal/./src/components/PublicAppLoading/index.js","webpack://@jotforminc/portal/./src/components/RangeSlider/index.js","webpack://@jotforminc/portal/./src/components/ReplaceFormButton/index.js","webpack://@jotforminc/portal/./src/components/TetheredWrapper/index.js","webpack://@jotforminc/portal/./src/components/Tooltip/scTooltip.js","webpack://@jotforminc/portal/./src/components/Tooltip/index.js","webpack://@jotforminc/portal/./src/components/common/SvgRenderer.js","webpack://@jotforminc/portal/./src/constants/appConfig.js","webpack://@jotforminc/portal/../../../../src/icons/media/image-slider-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/map-location-pin-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/share-nodes-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/layout/spacer-vertical-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/media/images-filled.svg","webpack://@jotforminc/portal/./src/constants/availableWidgets.js","webpack://@jotforminc/portal/./src/constants/features.js","webpack://@jotforminc/portal/../../../../src/icons/documents/document-pdf-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/documents/document-xlsx-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/documents/document-doc-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/products/product-tables-color-border.svg","webpack://@jotforminc/portal/../../../../src/icons/products/product-report-builder-color-border.svg","webpack://@jotforminc/portal/../../../../src/icons/products/product-inbox-color-border.svg","webpack://@jotforminc/portal/./src/components/CustomPlaceholderIcon/index.js","webpack://@jotforminc/portal/./src/constants/index.js","webpack://@jotforminc/portal/./src/constants/itemTypes.js","webpack://@jotforminc/portal/./src/constants/modals.js","webpack://@jotforminc/portal/./src/constants/navigation.js","webpack://@jotforminc/portal/./src/constants/propTypes.js","webpack://@jotforminc/portal/./src/constants/team.js","webpack://@jotforminc/portal/./src/store/reducers/ui.js","webpack://@jotforminc/portal/./src/store/reducers/user.js","webpack://@jotforminc/portal/./src/store/watchers/navigation.js","webpack://@jotforminc/portal/../../../../src/icons/general/heart-circle-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/arrows/arrow-left.svg","webpack://@jotforminc/portal/../../../../src/icons/layout/layers-filled.svg","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/AppPreview/assets/svg/tryArrow.svg","webpack://@jotforminc/portal/../../../../src/icons/general/copy-line.svg","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/assets/icon-noresult.svg","webpack://@jotforminc/portal/../../../../src/icons/arrows/arrow-up-to-line.svg","webpack://@jotforminc/portal/../../../../src/icons/layout/layer-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/xmark-circle-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/arrows/caret-right.svg","webpack://@jotforminc/portal/../../../../src/icons/general/bullseye-arrow.svg","webpack://@jotforminc/portal/../../../../src/icons/arrows/arrow-down.svg","webpack://@jotforminc/portal/../../libs/create-new-wizards/src/components/CreateNewWizard/assets/svg/iconClassicForm.svg","webpack://@jotforminc/portal/../../libs/create-new-wizards/src/components/CreateNewWizard/assets/svg/iconCardForm.svg","webpack://@jotforminc/portal/./src/assets/noFormsFoundIcon.svg","webpack://@jotforminc/portal/./src/assets/noSignsFoundIcon.svg","webpack://@jotforminc/portal/./src/assets/noTablesFoundIcon.svg","webpack://@jotforminc/portal/./src/assets/noReportsFoundIcon.svg","webpack://@jotforminc/portal/./src/assets/noAppsFoundIcon.svg","webpack://@jotforminc/portal/./src/assets/noFormsIcon.svg","webpack://@jotforminc/portal/./src/assets/noTablesIcon.svg","webpack://@jotforminc/portal/./src/assets/noReportsIcon.svg","webpack://@jotforminc/portal/./src/assets/noAppsIcon.svg","webpack://@jotforminc/portal/../../../../src/icons/brand/facebook-square-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/brand/twitter-square-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/brand/whatsapp-square-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/finance/money-bill-filled.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/square-dark.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/stripe-color.svg","webpack://@jotforminc/portal/../../../../src/icons/arrows/angles-selector-horizontal.svg","webpack://@jotforminc/portal/../../../../src/icons/finance/credit-card-xmark-filled.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/paypal-express-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/payu-india-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/icons/general/circle-sm-filled.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/authorizenet-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/stripe-dark.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/paypal-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/braintree-dark.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/cardconnect-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/eway-dark.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/venmo-dark.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/mollie-dark.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/cybersource-dark.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/payjunction-color.svg","webpack://@jotforminc/portal/../../../../src/icons/products/product-apps-color-border.svg","webpack://@jotforminc/portal/../../../../src/icons/products/product-form-card-color-border.svg","webpack://@jotforminc/portal/../../../../src/icons/general/xmark-circle.svg","webpack://@jotforminc/portal/../../../../src/icons/general/info-circle.svg","webpack://@jotforminc/portal/../../../../src/icons/arrows/turn-arrow-short-right-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/exclamation.svg","webpack://@jotforminc/portal/../../libs/router-bridge/src/init.js","webpack://@jotforminc/portal/../../libs/tracking/src/init.ts","webpack://@jotforminc/portal/../../libs/common/src/utils/hooks/index.js","webpack://@jotforminc/portal/../../libs/widgets-js-sdk/src/utils/getStyle.js","webpack://@jotforminc/portal/../../libs/widgets-js-sdk/src/utils/postmessage.js","webpack://@jotforminc/portal/../../libs/widgets-js-sdk/src/translations/index.js","webpack://@jotforminc/portal/../../libs/widgets-js-sdk/src/utils/loadWidgetImageAsBase64.js","webpack://@jotforminc/portal/../../libs/widgets-js-sdk/src/widgetsServer/builder.js","webpack://@jotforminc/portal/../../libs/widgets-js-sdk/src/index.js","webpack://@jotforminc/portal/./src/CoreAppRouter.js","webpack://@jotforminc/portal/./src/modules/Owner/CreateNewPortal.js","webpack://@jotforminc/portal/../../libs/utils/src/htmlTools.js","webpack://@jotforminc/portal/./src/store/reducers/portal.js","webpack://@jotforminc/portal/./src/store/reducers/forms.js","webpack://@jotforminc/portal/./src/store/reducers/signs.js","webpack://@jotforminc/portal/./src/store/reducers/share.js","webpack://@jotforminc/portal/./src/store/reducers/apps.js","webpack://@jotforminc/portal/./src/store/reducers/undoRedo.js","webpack://@jotforminc/portal/./src/store/reducers/progress.js","webpack://@jotforminc/portal/./src/store/reducers/widgets.js","webpack://@jotforminc/portal/./src/store/reducers/products.js","webpack://@jotforminc/portal/./src/store/reducers/cdnconfig.js","webpack://@jotforminc/portal/./src/store/reducers/team.js","webpack://@jotforminc/portal/./src/store/reducers/checkoutForm.js","webpack://@jotforminc/portal/./src/store/reducers/pushNotification.js","webpack://@jotforminc/portal/./src/store/reducers/livePreview.js","webpack://@jotforminc/portal/./src/store/reducers/assistant.js","webpack://@jotforminc/portal/./src/store/reducers/dataSource/index.js","webpack://@jotforminc/portal/./src/store/reducers/userManagement.js","webpack://@jotforminc/portal/../../libs/push-notification/src/constants.ts","webpack://@jotforminc/portal/../../libs/push-notification/src/utils/index.ts","webpack://@jotforminc/portal/../../libs/push-notification/src/api/index.ts","webpack://@jotforminc/portal/../../libs/push-notification/src/utils/error-base.ts","webpack://@jotforminc/portal/../../libs/push-notification/src/SubscriptionError.ts","webpack://@jotforminc/portal/../../libs/push-notification/src/PushManager.ts","webpack://@jotforminc/portal/./src/store/watchers/undoRedo.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/AppNameIconSettingsModal/seenManager.js","webpack://@jotforminc/portal/./src/store/saga/ui.js","webpack://@jotforminc/portal/./src/components/Toaster/ScToast.js","webpack://@jotforminc/portal/./src/components/Toaster/Notification.js","webpack://@jotforminc/portal/./src/modules/Builder/constants/undoRedo.js","webpack://@jotforminc/portal/./src/components/Toaster/UndoNotification.js","webpack://@jotforminc/portal/./src/store/watchers/toast.js","webpack://@jotforminc/portal/./src/store/watchers/network.js","webpack://@jotforminc/portal/./src/store/watchers/itemDuplication.js","webpack://@jotforminc/portal/./src/store/watchers/progress.js","webpack://@jotforminc/portal/./src/store/watchers/share.js","webpack://@jotforminc/portal/./src/store/watchers/styling.js","webpack://@jotforminc/portal/./src/store/workers/progressBarAvailability.js","webpack://@jotforminc/portal/./src/store/watchers/pageActions.js","webpack://@jotforminc/portal/./src/store/watchers/assetGeneration.js","webpack://@jotforminc/portal/./src/store/workers/portalOrder.js","webpack://@jotforminc/portal/./src/store/workers/itemSorting.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/GuestLoginModal/index.js","webpack://@jotforminc/portal/./src/store/watchers/modals/guestLoginModal.js","webpack://@jotforminc/portal/../../libs/limit-dialog/src/utils/abtests.js","webpack://@jotforminc/portal/../../libs/limit-dialog/src/components/openFormLimitDialog.js","webpack://@jotforminc/portal/../../libs/utils/src/gtm.js","webpack://@jotforminc/portal/../../libs/create-new-wizards/src/utils.js","webpack://@jotforminc/portal/../../libs/create-new-wizards/src/components/CreateNewPortalWizard/core/handleCloneApp.js","webpack://@jotforminc/portal/../../libs/create-new-wizards/src/components/CreateNewPortalWizard/components/CloneAppModal/constants.js","webpack://@jotforminc/portal/../../libs/create-new-wizards/src/components/CloneModal/CloneSettings.js","webpack://@jotforminc/portal/../../libs/create-new-wizards/src/components/CloneModal/index.js","webpack://@jotforminc/portal/../../libs/create-new-wizards/src/components/CreateNewPortalWizard/components/CloneAppModal/index.js","webpack://@jotforminc/portal/../../libs/create-new-wizards/src/components/CreateNewPortalWizard/core/jotformActions.js","webpack://@jotforminc/portal/./src/store/watchers/modals/cloneApp.js","webpack://@jotforminc/portal/../../libs/modals/src/components/ConfirmationModal/scRevokeAccess.js","webpack://@jotforminc/portal/../../libs/modals/src/components/ConfirmationModal/index.js","webpack://@jotforminc/portal/../../libs/modals/src/components/StillEditingModal/ScCircularProgressBar.js","webpack://@jotforminc/portal/../../libs/modals/src/components/StillEditingModal/index.js","webpack://@jotforminc/portal/./src/store/watchers/modals/StillEditingModal/ScStillEditingModal.js","webpack://@jotforminc/portal/./src/store/watchers/modals/StillEditingModal/index.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/Rating/defaults/DefaultItemRenderer.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/Rating/defaults/DefaultContainerRenderer.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/Rating/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/PortalFeedbackModal/index.js","webpack://@jotforminc/portal/./src/store/watchers/modals/portalFeedbackModal.js","webpack://@jotforminc/portal/./src/store/watchers/modals/index.js","webpack://@jotforminc/portal/./src/store/watchers/signup.js","webpack://@jotforminc/portal/./src/store/watchers/productDetails.js","webpack://@jotforminc/portal/./src/store/watchers/productListActions.js","webpack://@jotforminc/portal/./src/store/watchers/collaboration.js","webpack://@jotforminc/portal/./src/components/Toaster/ShoppingNotification/ScShoppingNotification.js","webpack://@jotforminc/portal/./src/components/Toaster/ShoppingNotification/ShoppingNotification.js","webpack://@jotforminc/portal/./src/store/watchers/appToast.js","webpack://@jotforminc/portal/./src/store/watchers/filterProducts.js","webpack://@jotforminc/portal/./src/keyboard.js","webpack://@jotforminc/portal/./src/store/events.js","webpack://@jotforminc/portal/./src/store/watchers/fullstory.js","webpack://@jotforminc/portal/./src/store/saga/productList.js","webpack://@jotforminc/portal/./src/store/saga/helper.js","webpack://@jotforminc/portal/./src/store/saga/aiAssistant.js","webpack://@jotforminc/portal/./src/constants/questions.js","webpack://@jotforminc/portal/./src/store/saga/checkoutForm.js","webpack://@jotforminc/portal/./src/store/saga/dataSource/constants.js","webpack://@jotforminc/portal/./src/store/saga/dataSource/dataSource.js","webpack://@jotforminc/portal/./src/modules/PublicApp/PushNotificationPermission/utils.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/WhatsNewModal/WhatsNewModalDialogue.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/WhatsNewModal/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Publish/constants.js","webpack://@jotforminc/portal/./src/store/saga/index.js","webpack://@jotforminc/portal/./src/store/index.js","webpack://@jotforminc/portal/./src/withStore.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/DeletePageModal/index.js","webpack://@jotforminc/portal/./src/modules/PublicApp/RestartAppModal.js","webpack://@jotforminc/portal/../../libs/utils/src/translation.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/core/texts.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/Button/index.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/Button/CloseButton.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/core/utils.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/Wizard/WizardWrapper.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/Wizard/index.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/Button/BackButton.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/Header/index.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/Wizard/WizardBody.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/Wizard/WizardItem.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/Loader/index.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/constantImages.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/getDeviceType.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/TemplateItem/utils.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/onImageError.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/TemplateItem/PreviewHint.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/TemplateItem/AppTemplateItem.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/TemplateItem/PdfTemplateItem.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/TemplateItem/FormTemplateItem.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/TemplateItem/TableTemplateItem.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/TemplateItem/ApprovalTemplateItem.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/TemplateItem/AgentTemplateItem.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/TemplateItem/PageTemplateItem.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/templateConstants.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/ScTemplates.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/TemplateItem/TemplateItemContainer.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/PreviewModalContents/SimilarTemplatesItem.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/PreviewModalContents/InfoBar.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/PreviewModalContents/ModalControls.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/PreviewModalContents/FormTemplatePreviewContent.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/AppPreview/core/constants.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/AppPreview/core/texts.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/AppPreview/components/ViewMode.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/AppPreview/components/MobileBorder.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/AppPreview/components/TabletBorder.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/AppPreview/components/MobilePageBorder.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/AppPreview/components/TabletPageBorder.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/AppPreview/core/utils.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/AppPreview/components/MultiplePreview.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/AppPreview/components/SinglePreview.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/AppPreview/components/AppPreviewBody.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/PreviewModalContents/AppTemplatePreviewContent.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/PreviewModalContents/ApprovalTemplatePreviewContent.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/PreviewModalContents/TableTemplatePreviewContent.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/RoleSelector.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/PreviewModalContents/PdfTemplatePreviewContent.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/PreviewModalContents/PageTemplatePreviewContent.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/customModalConstants.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/apiTemplates.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/utils.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/Wizard/WizardTemplateModal.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/api.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/ScSearch.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/Search.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/assets/ClassicFormIcon.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/assets/CardFormIcon.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/ScThemeSelector.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/ThemeSelector.js","webpack://@jotforminc/portal/../../libs/constants/src/languages/index.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/ScTemplateFilters.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/TemplateFilters.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/ScMainWrapper.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/ScMyTemplates.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/ScAsideWrapper.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/Sidebar.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/Sidebar/Accordion.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/Sidebar/RadioButton.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/Sidebar/Sorting.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/Sidebar/Search.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/Sidebar/LanguagesFilter.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/Sidebar/FormLayout.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/Sidebar/index.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/ScRelatedCategories.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/RelatedCategories.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/constants.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/components/SubCategoryGalleryItem.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/agents.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/agentCategories.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/index.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/hooks/useIsMobile.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/StandaloneTemplates/hooks.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/Wizard/NewWizardTemplateModal.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/Navigation/LegacyTemplatesRenderer.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/Navigation/WizardTemplate.js","webpack://@jotforminc/portal/../../libs/create-new-wizards/src/components/CreateNewWizard/core/utils.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/Wizard/WizardList.js","webpack://@jotforminc/portal/../../libs/wizard-shared/src/components/Wizard/WizardListItem.js","webpack://@jotforminc/portal/../../libs/create-new-wizards/src/components/CreateNewWizard/core/texts.js","webpack://@jotforminc/portal/../../libs/create-new-wizards/src/components/CreateNewWizard/components/Navigation/FormTypeSelect.js","webpack://@jotforminc/portal/../../libs/create-new-wizards/src/components/CreateNewWizard/components/Navigation/StartFromScratch.js","webpack://@jotforminc/portal/./src/modules/Builder/components/SelectTemplate.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/ResourcePickerModal/ScResourcePicker.js","webpack://@jotforminc/portal/./src/components/ResourcePickerControlBar/ScResourcePickerControlBar.js","webpack://@jotforminc/portal/./src/components/ResourcePickerControlBar/OptionRenderer.js","webpack://@jotforminc/portal/./src/components/ResourcePickerControlBar/ButtonRenderer.js","webpack://@jotforminc/portal/./src/components/TeamAvatar/Image.js","webpack://@jotforminc/portal/./src/components/TeamAvatar/index.js","webpack://@jotforminc/portal/./src/components/ResourcePickerControlBar/ScControlBarDropdown.js","webpack://@jotforminc/portal/./src/components/ResourcePickerControlBar/index.js","webpack://@jotforminc/portal/./src/components/ResourcePickerWithControlBar/EmptyListPlaceholder.js","webpack://@jotforminc/portal/./src/components/ResourcePickerWithControlBar/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/FormPickerModal/Footer.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/ResourcePickerModal/helper.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/ResourcePickerModal/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/FormPickerModal/NotFoundListPlaceholder.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/FormPickerModal/Header.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/FormPickerModal/index.js","webpack://@jotforminc/portal/./src/modules/PublicApp/Modals/ProductItemDetailsModal/index.js","webpack://@jotforminc/portal/./src/modules/PublicApp/Modals/SearchInProductsModal/FilteredProductList.js","webpack://@jotforminc/portal/./src/modules/PublicApp/Modals/SearchInProductsModal/SearchInProductsContent.js","webpack://@jotforminc/portal/./src/modules/PublicApp/Modals/SearchInProductsModal/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/CheckoutFormPreviewModal/DialogRenderer.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/CheckoutFormPreviewModal/HeaderRenderer.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/CheckoutFormPreviewModal/ContentRenderer.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/CheckoutFormPreviewModal/FooterRenderer.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/CheckoutFormPreviewModal/index.js","webpack://@jotforminc/portal/./src/modules/PublicApp/AppIsDoneModal.js","webpack://@jotforminc/portal/./src/modules/PublicApp/Modals/ShareAppModal/DialogRenderer.js","webpack://@jotforminc/portal/./src/modules/PublicApp/Modals/ShareAppModal/HeaderRenderer.js","webpack://@jotforminc/portal/./src/modules/PublicApp/Modals/ShareAppModal/index.js","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/modals/Flows/Items/Wrapper.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/modals/Flows/Items/Header.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/modals/Flows/Items/Body.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/modals/Flows/Items/Footer.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/modals/Flows/Steps/PaymentGateways.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/modals/Flows/Constants/ConnectionSectionProperties.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/modals/Flows/Steps/PaymentGatewaySettings.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/modals/Flows/Constants/PaymentTypes.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/modals/Flows/Steps/PaymentTypes.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/modals/Flows/Steps/PaymentApmPicker.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/modals/Flows/Steps/PaymentDiscardChanges.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/modals/Flows/PaymentGatewayFlows.tsx","webpack://@jotforminc/portal/../../libs/payment-constants/src/gateway/gatewayDefaultSandboxPropNames.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/utils/functions/isPropBelongsToSandbox.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/utils/functions/getGatewayConnectionPropReferences.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/utils/functions/sandboxPostDataConverter.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/utils/functions/handleOauthPopupManager.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/utils/functions/nameApmToGateway.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/utils/functions/sandboxMappedValueToValue.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/api/moveResourcesToNewConnection.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/api/changeStatusConnection.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/api/detachConnectionResource.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/api/attachConnectionResource.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/api/newConnectionWithCredentials.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/api/checkUniqueConnectionNameWithRequest.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/api/getGatewayList.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/context/useGatewayConnection.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/layouts/Grid/grid.cva.ts","webpack://@jotforminc/portal/../../libs/magnet/src/layouts/Grid/Grid.tsx","webpack://@jotforminc/portal/../../libs/payment-constants/src/gateway/gatewayDefaultIcons.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gateway/gatewaySearchableTags.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/utils/functions/isDevelopment.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/utils/functions/getGatewayList.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/utils/functions/gatewaySearch.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/gatewayRequestModal/index.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/gatewayConnectionModel/components/steps/gatewayPicker.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/gatewayConnectionModel/components/steps/apmGatewayPicker.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/gatewayConnectionModel/components/core/gatewayModeInformation.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/gatewayConnectionModel/components/core/loginFlowColumn.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/gatewayConnectionModel/components/core/commonLoginFlow.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/utils/functions/maskCredentialData.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/gatewayConnectionModel/components/core/toggleOnOff.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/gatewayConnectionModel/components/core/renderCredentialInputs.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/gatewayConnectionModel/components/steps/gatewayConnection.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/gatewayConnectionManagement/components/core/resourceOwnerBadge.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/gatewayConnectionModel/components/core/connectionGatewayDisabledInEnterprise.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/gatewayConnectionModel/components/assets/svgIcons/connectionPickerEmptyIllustration.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/gatewayConnectionModel/components/core/connectionDisableInformation.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/utils/functions/sandboxGetDataConverter.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/utils/functions/connectionListSearch.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/gatewayConnectionModel/components/steps/connectionPicker.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/gatewayConnectionModel/components/core/modalStepsRenderer.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/utils/functions/isMobile.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/utils/functions/isJotformMobileApp.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/gatewayConnectionModel/components/core/modalFooter.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/gatewayConnectionModel/components/core/discardProcessInformation.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/gatewayConnectionModel/components/core/modalContainer.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/gatewayConnectionModel/index.tsx","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/PaymentGatewayPickerModal/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/AppNameIconSettingsModal/SCAppNameIconSettingsModal.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/AppNameIconSettingsModal/Navigation.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/AppNameIconSettingsModal/Renderers.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/AppNameIconSettingsModal/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/ExitIntentSurveyModal/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/MultiStepModal/SharedStateContext.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/MultiStepModal/index.js","webpack://@jotforminc/portal/./src/components/Modals/DataSourcePickerModal/Steps/constants.js","webpack://@jotforminc/portal/./src/components/Modals/DataSourcePickerModal/Steps/common/TableSelectionDefaults.js","webpack://@jotforminc/portal/./src/components/Modals/DataSourcePickerModal/Steps/TabSelection.js","webpack://@jotforminc/portal/./src/components/Modals/DataSourcePickerModal/Steps/ColumnSelection/SelectionDnd/constants.js","webpack://@jotforminc/portal/./src/components/Modals/DataSourcePickerModal/Steps/ColumnSelection/SelectionDnd/Column.js","webpack://@jotforminc/portal/./src/components/Modals/DataSourcePickerModal/Steps/ColumnSelection/SelectionDnd/SelectionItem.js","webpack://@jotforminc/portal/./src/components/Modals/DataSourcePickerModal/Steps/ColumnSelection/SelectionDnd/SelectedItem.js","webpack://@jotforminc/portal/./src/components/Modals/DataSourcePickerModal/Steps/ColumnSelection/SelectionDnd/index.js","webpack://@jotforminc/portal/./src/components/Modals/DataSourcePickerModal/Steps/ColumnSelection/index.js","webpack://@jotforminc/portal/./src/components/Modals/DataSourcePickerModal/Steps/TableSelection/constants.js","webpack://@jotforminc/portal/./src/components/Modals/DataSourcePickerModal/Steps/TableSelection/index.js","webpack://@jotforminc/portal/./src/components/Modals/DataSourcePickerModal/index.js","webpack://@jotforminc/portal/./src/components/Modals/TableProductModal/styled.js","webpack://@jotforminc/portal/./src/components/Modals/TableProductModal/helper.js","webpack://@jotforminc/portal/./src/components/Modals/TableProductModal/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/PreventDetailPageDeletionModal/index.js","webpack://@jotforminc/portal/./src/components/Modals/index.js","webpack://@jotforminc/portal/./src/components/Toaster/index.js","webpack://@jotforminc/portal/./src/components/ClonePreventedFormsNotification/ScClonePreventedFormsNotification.js","webpack://@jotforminc/portal/./src/components/ClonePreventedFormsNotification/index.js","webpack://@jotforminc/portal/../../libs/panel-components/src/components/SettingsPanel/SettingsPanelListItem.js","webpack://@jotforminc/portal/../../libs/panel-components/src/components/SettingsPanel/SettingsPanelWrapper.js","webpack://@jotforminc/portal/../../libs/panel-components/src/components/SettingsPanel/SettingsPanelListNavigation.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Settings/SettingsNavigationPanel/SettingsNavigationPanelItem.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Settings/SettingsNavigationPanel/ScSettingsNavigationPanel.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Settings/SettingsNavigationPanel/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Settings/scSettingsStage.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Settings/SettingsStage.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Settings/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/NavigationPanel/NavigationPanelItem.js","webpack://@jotforminc/portal/./src/modules/Builder/components/NavigationPanel/ScNavigationPanel.js","webpack://@jotforminc/portal/./src/modules/Builder/components/NavigationPanel/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Publish/ScPublishStage.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Publish/PublishStage.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Publish/index.js","webpack://@jotforminc/portal/./src/withFeatureToggles.js","webpack://@jotforminc/portal/./src/App.js","webpack://@jotforminc/portal/./src/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/AssetGenerator/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/AssetGenerator/utils.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Checkbox/ScCheckbox.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Checkbox/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/ColorPicker.js","webpack://@jotforminc/portal/./src/modules/Builder/components/FontPicker/fonts.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/Editors/DocumentFileUpload.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/MultipleRightPanel/utils.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/PageIcon/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/AppLogoPropertyPanel.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/BadgeToggle/badgeToggleConstants.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ButtonActions/buttonRoleTypes.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ButtonActions/components/ButtonFormSelection.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ButtonActions/components/ButtonLinkInput.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ButtonActions/components/ButtonMailInput.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ButtonActions/components/ButtonPageSelection/PageSelection.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ButtonActions/components/ButtonPageSelection/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ButtonActions/components/ButtonPhoneInput.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ChooseFileButton.js","webpack://@jotforminc/portal/../../libs/tag-input/src/utils/index.js","webpack://@jotforminc/portal/../../libs/tag-input/src/patch/index.js","webpack://@jotforminc/portal/../../libs/tag-input/src/constants/index.js","webpack://@jotforminc/portal/../../libs/tag-input/src/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/DataSourcePicker/helper.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/DataSourcePicker/getSubfield.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/DataSourcePicker/styled.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/DataSourcePicker/constants.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/DataSourcePicker/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/DuplicateItemButton/index.js","webpack://@jotforminc/portal/../../../../src/icons/general/icons-filled.svg","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ListItemSideItemSelection/constants.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ListItemSideItemSelection/subSelections/styled.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ListItemSideItemSelection/subSelections/IconSelector.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ListItemSideItemSelection/helper.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ListItemSideItemSelection/subSelections/Image.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/MultiSectionSelect/helper.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/MultiSectionSelect/ValueArea/styled.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/MultiSectionSelect/ValueArea/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/MultiSectionSelect/ScDropdown.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/MultiSectionSelect/OptionGroup/Option/index.js","webpack://@jotforminc/portal/./src/utils/KeyboardNavigation.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/MultiSectionSelect/OptionGroup/styled.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/MultiSectionSelect/OptionGroup/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/MultiSectionSelect/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/PanelItemDescriptionRenderer.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ScLineHr.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ScSectionTitle.js","webpack://@jotforminc/portal/./src/assets/verticalCardStyle.svg","webpack://@jotforminc/portal/./src/assets/horizontalCardStyle.svg","webpack://@jotforminc/portal/./src/assets/listLayoutHorizontal.svg","webpack://@jotforminc/portal/./src/assets/listLayoutVertical.svg","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/constants.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ButtonActions/components/DsPageSelection/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/dataSourceHelpers.js","webpack://@jotforminc/portal/../../../../src/icons/editor/align-text-left.svg","webpack://@jotforminc/portal/../../../../src/icons/editor/align-text-center.svg","webpack://@jotforminc/portal/../../../../src/icons/editor/align-text-right.svg","webpack://@jotforminc/portal/./src/assets/icon_logo_colored.svg","webpack://@jotforminc/portal/./src/assets/icon_general_colored.svg","webpack://@jotforminc/portal/./src/assets/icon_style_colored.svg","webpack://@jotforminc/portal/../../libs/image-upload/src/assets/svg/no-image.svg","webpack://@jotforminc/portal/../../../../src/icons/editor/align-text-justify.svg","webpack://@jotforminc/portal/./src/assets/icon_defaultLayout.svg","webpack://@jotforminc/portal/./src/assets/icon_allShrinkedLayout.svg","webpack://@jotforminc/portal/./src/assets/icon_noIconLayout.svg","webpack://@jotforminc/portal/./src/assets/icon_shrinkedNoIconLayout.svg","webpack://@jotforminc/portal/./src/assets/icon_allFormsLayout.svg","webpack://@jotforminc/portal/./src/assets/icon_plainLayout.svg","webpack://@jotforminc/portal/./src/assets/icon_shrinkedNoHeaderLayout.svg","webpack://@jotforminc/portal/./src/assets/icon_leftAlignedLayout.svg","webpack://@jotforminc/portal/./src/assets/icon_rightAlignedLayout.svg","webpack://@jotforminc/portal/./src/assets/icon_centerAlignedLayout.svg","webpack://@jotforminc/portal/./src/assets/icon_largeElementLayout.svg","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/assets/svg/arrowIcon.svg","webpack://@jotforminc/portal/../../../../src/icons/finance/coins-stacked-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/finance/credit-card-plus.svg","webpack://@jotforminc/portal/../../../../src/icons/general/input-text-long.svg","webpack://@jotforminc/portal/./src/modules/Builder/constants/textAlignment.js","webpack://@jotforminc/portal/./src/modules/Builder/constants/elementSize.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/donationItemConstants.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ButtonActions/components/ButtonShareSelection.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ButtonActions/RoleComponents/roleComponentProps.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ResourceSelection/ScResourceSelection.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/FormSelection/ScActionButtons.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ResourceSelection/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ResourceSelection/helper.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/rightPanelConstants.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/WidgetItemDescriptionRenderer.js","webpack://@jotforminc/portal/../../libs/common/src/components/DimensionPicker/ScDimensionPicker.js","webpack://@jotforminc/portal/../../libs/common/src/components/DimensionPicker/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/DimensionPicker.js","webpack://@jotforminc/portal/./src/modules/Builder/constants/colorPalette.js","webpack://@jotforminc/portal/./src/modules/Builder/styles/ScCheckboxItem.js","webpack://@jotforminc/portal/./src/modules/Builder/components/ColorPalette/ColorPaletteItem.js","webpack://@jotforminc/portal/./src/modules/Builder/components/ColorPalette/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/ItemStyler/scItemStyler.js","webpack://@jotforminc/portal/./src/modules/Builder/components/ItemStyler/CustomPalette.js","webpack://@jotforminc/portal/./src/modules/Builder/components/ItemStyler/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ListItemStyler/ScChangeStyle.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ListItemStyler/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/ToggleButtonGroup/ScToggleButtonGroupContainer.js","webpack://@jotforminc/portal/./src/modules/Builder/components/ToggleButtonGroup/DefaultToggleButtonGrpRenderer.js","webpack://@jotforminc/portal/./src/modules/Builder/components/ToggleButtonGroup/index.js","webpack://@jotforminc/portal/../../libs/image-upload/src/components/sc/ScImagePreview.js","webpack://@jotforminc/portal/../../libs/image-upload/src/components/sc/ScNoImage.js","webpack://@jotforminc/portal/../../libs/image-upload/src/components/NoImage.js","webpack://@jotforminc/portal/../../libs/image-upload/src/components/Image.js","webpack://@jotforminc/portal/../../libs/image-upload/src/components/ImagePreviewForViewer.js","webpack://@jotforminc/portal/../../libs/image-upload/src/components/sc/ScGlobal.js","webpack://@jotforminc/portal/../../libs/image-upload/src/components/sc/ScContainer.js","webpack://@jotforminc/portal/../../libs/image-upload/src/components/sc/ScMultipleImagePreview.js","webpack://@jotforminc/portal/../../libs/image-upload/src/components/ImageUploadWithViewer.js","webpack://@jotforminc/portal/./src/utils/hooks/useRpImageUploadManager.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/RPImageUpload.js","webpack://@jotforminc/portal/../../libs/fontpicker/src/helper.js","webpack://@jotforminc/portal/../../libs/fontpicker/src/FontPickerHeader.js","webpack://@jotforminc/portal/../../libs/fontpicker/src/FontPickerSearch.js","webpack://@jotforminc/portal/../../libs/fontpicker/src/FontPickerListItem.js","webpack://@jotforminc/portal/../../libs/fontpicker/src/FontPickerList.js","webpack://@jotforminc/portal/../../libs/fontpicker/src/FontPicker.js","webpack://@jotforminc/portal/./src/modules/Builder/components/FontPicker/scFontPicker.js","webpack://@jotforminc/portal/./src/modules/Builder/components/FontPicker/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/ColorPalette/AppColorSchemes.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/Editors/RightPanelDocumentFileUpload.js","webpack://@jotforminc/portal/./src/modules/Builder/components/AppThemesPanel/ScAppThemesPanel.js","webpack://@jotforminc/portal/./src/modules/Builder/components/AppThemesPanel/index.js","webpack://@jotforminc/portal/../../libs/common/src/components/ResettableInput/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/ResettableInput/ScResettableInput.js","webpack://@jotforminc/portal/./src/modules/Builder/components/ResettableInput/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/FormLabel/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ImageUploadWithLoadingState.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/BadgeToggle/ResetBadge.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/LoginRequireToggle/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/BadgeToggle/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ButtonActions/Roles/RolesItem.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ButtonActions/Roles/ScRoles.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ButtonActions/Roles/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ButtonActions/Roles/buttonActionProps.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ButtonActions/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ButtonActions/RoleComponents/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ItemIconToggle.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/AppFooter.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/Editors/WidgetFileUpload.js","webpack://@jotforminc/portal/../../libs/common/src/components/Schema/SchemaCard.js","webpack://@jotforminc/portal/../../libs/image-upload/src/components/TetheredImageUpload.js","webpack://@jotforminc/portal/../../libs/common/src/components/Schema/components/SchemaImageUpload.js","webpack://@jotforminc/portal/../../libs/common/src/components/Schema/components/SchemaTextArea.js","webpack://@jotforminc/portal/../../libs/common/src/components/Schema/components/SchemaTextInput.js","webpack://@jotforminc/portal/../../libs/common/src/components/Schema/components/SchemaDropdown.js","webpack://@jotforminc/portal/../../libs/common/src/components/Schema/getFieldComponent.js","webpack://@jotforminc/portal/../../libs/common/src/components/Schema/SchemaEditable.js","webpack://@jotforminc/portal/../../libs/common/src/components/Schema/SchemaItem.js","webpack://@jotforminc/portal/../../libs/common/src/components/Schema/SchemaItemList.js","webpack://@jotforminc/portal/../../libs/common/src/components/Schema/utils.js","webpack://@jotforminc/portal/../../libs/common/src/components/Schema/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Schema/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ShowFormToggle/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ShrinkToggle/index.js","webpack://@jotforminc/portal/../../libs/widgets-js-sdk/src/external/server.js","webpack://@jotforminc/portal/./src/modules/Builder/components/ExternalField/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/AppLayoutsPanel/appLayoutConstants.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/AppLayoutsPanel/ScAppLayoutPanel.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/AppLayoutsPanel/AppLayoutItem.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/AppLayoutsPanel/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/MenuSettingsPanel/ScRpMenuDeviceSection.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/NavigationBarProperties/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/AllPagesSettingsPanel/ScPageSettingsItem.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/AllPagesSettingsPanel/ScPopoverIconSelector.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/AllPagesSettingsPanel/PageIconButton.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/AllPagesSettingsPanel/PageSettingsItem.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/AllPagesSettingsPanel/DraggablePageSettingsItem.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/AllPagesSettingsPanel/PageSettingsContainer.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/AllPagesSettingsPanel/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/MenuSettingsPanel/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/PageSettingsPanel.js","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/store/actionCreators.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/StyledSortableItem.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/ProductItemList.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/tabs.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/tab.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/editors/PriceInput.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/editors/ImagesInput.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/editors/ProductBasicTabEditor.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/editors/ProductOptionsTabEditor.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/editors/SellProductsEditor.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/editors/ProductQuantitySelectorTabEditor.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/editors/ProductOptionCreatorTabEditor.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/SellProductsPanel.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/utils/functions/getParentGatewayType.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/utils/functions/getGatewayType.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/control2co.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlAfterpay.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlApplePayGooglePay.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlAuthnet.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlBluepay.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlBluesnap.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlBraintree.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlCardconnect.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlCashApp.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlChargify.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlClearpay.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlCybersource.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlEcheck.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlEway.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlFirstdata.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlGocardless.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlIyzico.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlMollie.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlMoneris.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlPagseguro.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlPayfast.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlPayjunction.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlPaymentwall.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlPaypal.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlPaypalComplete.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlPaypalExpress.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlPaypalInvoicing.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlPaypalPro.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlPaypalSPB.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlPaysafe.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlPayu.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlPayuMoney.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlSensepass.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlSkrill.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlSofort.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlSquare.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlStripe.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlstripeACH.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlStripeACHManual.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlStripeCheckout.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlVenmo.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlWorldpay.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/index.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayResourceProps/controlWorldpayus.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/utils/functions/hasGatewayConnectionWithRequest.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Context/usePaymentProperties.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Constants/index.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/PaymentConnectionSection/AddConnectionButton.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/PaymentConnectionSection/SectionHeader.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/PaymentConnectionSection/ProductListConnectionWarning.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/PaymentConnectionSection/GatewayNotConnectedWarning.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/PaymentConnectionSection/ConnectionInfo.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/PaymentConnectionSection/ConnectionStatusWarning.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/PaymentConnectionSection/ConnectionOwnerIndicator.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/PaymentConnectionSection/ConnectionModalButton.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/DetachConnectionDialog.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/PaymentConnectionSection/RemoveConnectionButton.tsx","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayPoweredByLabels.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/constants/gatewayInfoTexts.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/PaymentConnectionSection/ConnectionGatewayInfo.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/AdditionalSetupRequiredDialog.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/PaymentConnectionSection/index.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/PaymentTypeDialog.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/PaymentTypeDropdown.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/CurrencyDropdown.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/ComponentWrapper.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Radio/radio.cva.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Radio/radio.types.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Radio/Radio.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Fields/Toggle.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Fields/DynamicDropdown.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Fields/Dropdown.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Fields/CopyUrl.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/ColorPicker/color-picker.cva.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/ColorPicker/ColorPicker.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Input/InputColor.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Input/InputNumber.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Fields/TextInput.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Fields/TextArea.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Fields/ImageUpload.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Fields/Checkbox.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Fields/CheckboxGroup.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/ComponentRenderer.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/GatewayResourceProperties.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/ActionFooter.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/RequiredSettingsIndicator.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/Components/FooterContainer.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentPropertiesPanel/index.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/GatewayPicker.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/GatewaySettings.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/ConnectionModal.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/APMPicker.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/containers/ModalFooterRenderer/BaseFooter.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/containers/ModalFooterRenderer/ApmPickerFooter.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/utils/actionUtils.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/containers/ModalFooterRenderer/GatewaySettingsFooter.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/containers/ModalFooterRenderer/ConnectionModalFooter.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/containers/ModalFooterRenderer/index.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/containers/GatewaySettingsContainer.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/EditPaymentIntegration.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/AddPaymentIntegrationContainer.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/PaymentOverQuotaWarning.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/DonationItemAvailabilityWarning.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/NewComponents/PaymentSettings.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/PaymentSettingsPanel/index.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/containers/PaymentContainer.tsx","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ProductListProperties/ItemSettings.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ProductListProperties/index.js","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/ProductSettingsPanel/index.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/CheckoutFormVisibilitySettingsForm.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/CheckoutFormVisibilitySettingsPanel/constants.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/CheckoutFormVisibilitySettingsPanel/AddElementPopover.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/CheckoutFormVisibilitySettingsPanel/utils.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/CheckoutFormVisibilitySettingsPanel/FormSettingsEditorView.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/CheckoutFormVisibilitySettingsPanel/formFieldsEditorElements.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/CheckoutFormVisibilitySettingsPanel/FormFieldsConfirmationModal.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/CheckoutFormVisibilitySettingsPanel/FormFieldsEditorView.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/CheckoutFormVisibilitySettingsPanel/index.tsx","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ContactInformationSettingsPanel/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/PaymentProperties/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/FormSelection/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/DonationPaymentProperties/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/DonationGatewayWarningItem/index.js","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/panels/DonationBoxPropertiesPanel/index.tsx","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/DonationBoxPropertiesPanelField/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/ListItemSideItemSelection/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/SvgOptionRenderer/styled.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/SvgOptionRenderer/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/CardLayout/constants.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/CardLayout/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/DataSourcePicker/DsRoleComponents/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/rightPanelPropertyItems.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/PanelItemGenerator.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/PanelLineGenerator.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/RightPanelGenerator.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/RightPanelTitleRenderer.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/MultipleRightPanel/ElementStyler/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/MultipleRightPanel/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/RightPanel/utils.js","webpack://@jotforminc/portal/./src/modules/Builder/components/HomePage/constants.js","webpack://@jotforminc/portal/./src/modules/Builder/components/ImagePreview/ScImagePreview.js","webpack://@jotforminc/portal/./src/modules/Builder/components/ImagePreview/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/FormPickerModal/ScFormPicker.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/PortalFeedbackModal/ContentRenderer.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/PortalFeedbackModal/DialogRenderer.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Modals/PortalFeedbackModal/ScPortalFeedbackModal.js","webpack://@jotforminc/portal/./src/modules/Builder/components/PortalFeedbackWithWarning.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Publish/ScPublish.js","webpack://@jotforminc/portal/./src/modules/Builder/components/RadioToggle/scRadioToggle.js","webpack://@jotforminc/portal/./src/modules/Builder/components/RadioToggle/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/RightPanelContainer.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Settings/AppIdentifierSettings/ScBackIconWrapper.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Settings/AppIdentifierSettings/ScDevice.js","webpack://@jotforminc/portal/./src/assets/icon_signalStrength.svg","webpack://@jotforminc/portal/./src/assets/battery_idle.svg","webpack://@jotforminc/portal/./src/assets/battery_charging.svg","webpack://@jotforminc/portal/./src/modules/Builder/components/Settings/AppIdentifierSettings/ScAppIconPreview.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Settings/AppIdentifierSettings/AppIconPreview.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Settings/AppIdentifierSettings/AppIdentifierSettings.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Settings/AppIdentifierSettings/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Settings/SettingsRightPanel.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Settings/constants.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Settings/scSettings.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Settings/scStageHeader.js","webpack://@jotforminc/portal/./src/modules/Builder/components/Settings/utils.js","webpack://@jotforminc/portal/./src/modules/Builder/components/TextArea/scTextArea.js","webpack://@jotforminc/portal/./src/modules/Builder/components/TextArea/index.js","webpack://@jotforminc/portal/./src/modules/Builder/components/TextInput/scTextInput.js","webpack://@jotforminc/portal/./src/modules/Builder/components/TextInput/index.js","webpack://@jotforminc/portal/./src/modules/Builder/constants/designModes.js","webpack://@jotforminc/portal/./src/modules/Builder/constants/rightPanel.js","webpack://@jotforminc/portal/./src/modules/Builder/styles/scPreview.js","webpack://@jotforminc/portal/./src/modules/Builder/styles/scRightPanel.js","webpack://@jotforminc/portal/./src/modules/Builder/styles/scSelect.js","webpack://@jotforminc/portal/./src/modules/PublicApp/AnimationTypes.js","webpack://@jotforminc/portal/./src/modules/PublicApp/ErrorScreen.js","webpack://@jotforminc/portal/./src/modules/PublicApp/OrderNow/ScCircleLoader.js","webpack://@jotforminc/portal/./src/modules/PublicApp/OrderNow/ScCheckoutFormRenderer.js","webpack://@jotforminc/portal/./src/modules/PublicApp/OrderNow/LoginCue.js","webpack://@jotforminc/portal/./src/modules/PublicApp/OrderNow/ScCheckoutFormHeader.js","webpack://@jotforminc/portal/./src/modules/PublicApp/OrderNow/CheckoutFormHeader.js","webpack://@jotforminc/portal/./src/modules/PublicApp/OrderNow/CheckoutFormRenderer.js","webpack://@jotforminc/portal/./src/modules/PublicApp/ProductCart/Cart/CartItemContentRenderer.js","webpack://@jotforminc/portal/./src/modules/PublicApp/ProductCart/Cart/constants.js","webpack://@jotforminc/portal/./src/modules/PublicApp/ProductDetailContentRenderer/ProductDetailActionButtons.js","webpack://@jotforminc/portal/./src/modules/PublicApp/ProductDetailContentRenderer/ProductFavorite.js","webpack://@jotforminc/portal/./src/modules/PublicApp/ProductDetailContentRenderer/ScDetailsModal.js","webpack://@jotforminc/portal/../../libs/common/src/assets/svg/sliderArrow.svg","webpack://@jotforminc/portal/../../libs/common/src/components/Slider/SliderCarousel.js","webpack://@jotforminc/portal/../../libs/common/src/components/Slider/Slider.js","webpack://@jotforminc/portal/./src/modules/PublicApp/ProductDetailContentRenderer/ProductDetailOptionsGroup.js","webpack://@jotforminc/portal/./src/modules/PublicApp/ProductDetailContentRenderer/CloseButtonRenderer.js","webpack://@jotforminc/portal/./src/modules/PublicApp/ProductItemDetails/index.js","webpack://@jotforminc/portal/./src/modules/PublicApp/ProductRenderer/Renderers/IframeRenderer.js","webpack://@jotforminc/portal/./src/modules/PublicApp/ProductRenderer/Renderers/TablesRenderer.js","webpack://@jotforminc/portal/./src/modules/PublicApp/ProductCartItem/ImageRenderer.js","webpack://@jotforminc/portal/./src/modules/PublicApp/SimpleProductItem/index.js","webpack://@jotforminc/portal/./src/modules/PublicApp/TopBar/ScNavigationPanelButton.js","webpack://@jotforminc/portal/./src/modules/PublicApp/TopBar/NavigationPanelButton.js","webpack://@jotforminc/portal/./src/modules/PublicApp/utils.js","webpack://@jotforminc/portal/./src/modules/api/requestLayer.js","webpack://@jotforminc/portal/./src/modules/api/index.js","webpack://@jotforminc/portal/./src/properties/index.js","webpack://@jotforminc/portal/../../libs/portal-schemas/src/schemas/v1/App.js","webpack://@jotforminc/portal/../../libs/portal-schemas/src/schemas/v1/FormItem.js","webpack://@jotforminc/portal/./src/properties/schemas/index.js","webpack://@jotforminc/portal/./src/properties/utils.js","webpack://@jotforminc/portal/./src/properties/DefaultsCacheSingleton.js","webpack://@jotforminc/portal/../../libs/portal-schemas/src/styling/index.js","webpack://@jotforminc/portal/./src/properties/styling/index.js","webpack://@jotforminc/portal/./src/properties/versions.js","webpack://@jotforminc/portal/./src/store/actionCreators/index.js","webpack://@jotforminc/portal/./src/store/actionTypes.js","webpack://@jotforminc/portal/./src/store/reducers/dataSource/constants.js","webpack://@jotforminc/portal/./src/store/selectors/checkoutFormSelectors.js","webpack://@jotforminc/portal/./src/store/selectors/dataSourceSelectors.js","webpack://@jotforminc/portal/./src/store/selectors/formsSelectors.js","webpack://@jotforminc/portal/./src/store/selectors/widgetsSelectors.js","webpack://@jotforminc/portal/./src/store/selectors/shareSelectors.js","webpack://@jotforminc/portal/./src/store/selectors/progressSelectors.js","webpack://@jotforminc/portal/./src/store/selectors/signsSelectors.js","webpack://@jotforminc/portal/./src/store/selectors/coreSelectors.js","webpack://@jotforminc/portal/./src/store/selectors/undoRedoSelectors.js","webpack://@jotforminc/portal/./src/store/selectors/teamSelectors.js","webpack://@jotforminc/portal/./src/store/selectors/appsSelectors.js","webpack://@jotforminc/portal/./src/store/selectors/cdnConfigSelectors.js","webpack://@jotforminc/portal/./src/store/selectors/pushNotificationSelectors.js","webpack://@jotforminc/portal/./src/store/selectors/livePreviewSelectors.js","webpack://@jotforminc/portal/./src/store/selectors/assistantSelectors.js","webpack://@jotforminc/portal/./src/store/selectors/userManagementSelectors.js","webpack://@jotforminc/portal/./src/store/selectors/index.js","webpack://@jotforminc/portal/./src/store/selectors/portalSelectors.js","webpack://@jotforminc/portal/./src/store/selectors/productSelectors.js","webpack://@jotforminc/portal/./src/store/selectors/uiSelectors.js","webpack://@jotforminc/portal/./src/store/selectors/userSelectors.js","webpack://@jotforminc/portal/./src/store/utils.js","webpack://@jotforminc/portal/./src/styles/colors.js","webpack://@jotforminc/portal/./src/styles/animations.js","webpack://@jotforminc/portal/./src/styles/global.js","webpack://@jotforminc/portal/./src/styles/scGeneral.js","webpack://@jotforminc/portal/./src/utils.js","webpack://@jotforminc/portal/./src/utils/AbTestActionLoggerSingleton.js","webpack://@jotforminc/portal/./src/utils/ActionsHelper/ActionableItem.js","webpack://@jotforminc/portal/./src/utils/ActionsHelper/items/Button.js","webpack://@jotforminc/portal/./src/utils/ActionsHelper/items/actions.js","webpack://@jotforminc/portal/./src/utils/ActionsHelper/items/Card.js","webpack://@jotforminc/portal/./src/utils/ActionsHelper/items/Image.js","webpack://@jotforminc/portal/./src/utils/ActionsHelper/items/index.js","webpack://@jotforminc/portal/./src/utils/ActionsHelper/index.js","webpack://@jotforminc/portal/./src/utils/BrowserParser.js","webpack://@jotforminc/portal/./src/utils/abtests/abtests.js","webpack://@jotforminc/portal/./src/utils/abtests/index.js","webpack://@jotforminc/portal/./src/utils/features/index.js","webpack://@jotforminc/portal/./src/utils/features/helper.js","webpack://@jotforminc/portal/../../../../src/icons/general/asterisk.svg","webpack://@jotforminc/portal/./src/utils/hooks.js","webpack://@jotforminc/portal/./src/utils/image/index.js","webpack://@jotforminc/portal/./src/utils/initLiveChat.js","webpack://@jotforminc/portal/./src/components/DeletedFormWarning.js","webpack://@jotforminc/portal/./src/components/DonationGatewayWarning/index.js","webpack://@jotforminc/portal/./src/utils/itemAvailability.js","webpack://@jotforminc/portal/./src/utils/navigation.js","webpack://@jotforminc/portal/./src/utils/paymentUtils.js","webpack://@jotforminc/portal/./src/utils/styleUtils.js","webpack://@jotforminc/portal/../../libs/abtest-manager/src/utils/utils.js","webpack://@jotforminc/portal/../../libs/abtest-manager/src/utils/ABTestVariantCache.js","webpack://@jotforminc/portal/../../libs/abtest-manager/src/utils/layer.js","webpack://@jotforminc/portal/../../libs/abtest-manager/src/utils/ABTestManager.js","webpack://@jotforminc/portal/../../libs/abtest-manager/src/utils/ActionManager.js","webpack://@jotforminc/portal/../../libs/apploaders/src/Apps/index.js","webpack://@jotforminc/portal/../../libs/apploaders/src/Container/index.js","webpack://@jotforminc/portal/../../libs/checkbox/src/components/Checkbox.js","webpack://@jotforminc/portal/../../libs/checkbox/src/components/CheckboxItem.js","webpack://@jotforminc/portal/../../libs/common-button/src/components/Button.js","webpack://@jotforminc/portal/../../libs/common/src/components/ErrorScreen/styled/ScWrapper.js","webpack://@jotforminc/portal/../../libs/common/src/components/ErrorScreen/styled/ScIconWrapper.js","webpack://@jotforminc/portal/../../libs/common/src/components/ErrorScreen/styled/ScCard.js","webpack://@jotforminc/portal/../../libs/common/src/components/ErrorScreen/styled/ScTitle.js","webpack://@jotforminc/portal/../../libs/common/src/components/ErrorScreen/styled/ScDescription.js","webpack://@jotforminc/portal/../../libs/common/src/components/ErrorScreen/index.js","webpack://@jotforminc/portal/../../libs/common/src/components/PanelHeader/index.js","webpack://@jotforminc/portal/../../libs/constants/src/date/index.js","webpack://@jotforminc/portal/../../libs/common/src/utils/moment/index.js","webpack://@jotforminc/portal/../../libs/constants/src/propTypes/index.js","webpack://@jotforminc/portal/../../libs/constants/src/questions/index.js","webpack://@jotforminc/portal/../../libs/constants/src/states/index.js","webpack://@jotforminc/portal/../../libs/constants/src/texts/index.js","webpack://@jotforminc/portal/../../libs/constants/src/time/index.js","webpack://@jotforminc/portal/../../libs/dialog/src/assets/svg/iconHipaaWarning.svg","webpack://@jotforminc/portal/../../libs/dialog/src/components/Dialog.js","webpack://@jotforminc/portal/../../libs/dropdown/src/GroupOptionRenderer.js","webpack://@jotforminc/portal/../../libs/dropdown/src/index.js","webpack://@jotforminc/portal/../../libs/empty-list/src/assets/svg/noFormsIcon.svg","webpack://@jotforminc/portal/../../libs/empty-list/src/assets/svg/noAppsIcon.svg","webpack://@jotforminc/portal/../../libs/empty-list/src/assets/svg/noTablesIcon.svg","webpack://@jotforminc/portal/../../libs/empty-list/src/assets/svg/noReportsIcon.svg","webpack://@jotforminc/portal/../../libs/empty-list/src/assets/svg/noApprovalsIcon.svg","webpack://@jotforminc/portal/../../libs/empty-list/src/assets/svg/noSignDocumentsIcon.svg","webpack://@jotforminc/portal/../../libs/empty-list/src/assets/svg/noTeamFormsIcon.svg","webpack://@jotforminc/portal/../../libs/empty-list/src/assets/svg/noDocumentIcon.svg","webpack://@jotforminc/portal/../../libs/empty-list/src/components/EmptyList.js","webpack://@jotforminc/portal/../../libs/empty-list/src/components/EmptyListBase.js","webpack://@jotforminc/portal/../../libs/empty-list/src/assets/svg/noFormsFoundIcon.svg","webpack://@jotforminc/portal/../../libs/empty-list/src/assets/svg/noAppsFoundIcon.svg","webpack://@jotforminc/portal/../../libs/empty-list/src/assets/svg/noTablesFoundIcon.svg","webpack://@jotforminc/portal/../../libs/empty-list/src/assets/svg/noReportsFoundIcon.svg","webpack://@jotforminc/portal/../../libs/empty-list/src/assets/svg/noApprovalsFoundIcon.svg","webpack://@jotforminc/portal/../../libs/empty-list/src/assets/svg/noSignDocumentsFoundIcon.svg","webpack://@jotforminc/portal/../../libs/empty-list/src/components/NotFoundList.js","webpack://@jotforminc/portal/../../libs/enterprise-utils/src/helpers.js","webpack://@jotforminc/portal/../../libs/feature-toggle/src/components/Feature.js","webpack://@jotforminc/portal/../../libs/feature-toggle/src/components/FeatureToggle.js","webpack://@jotforminc/portal/../../libs/form-fields-menu/src/components/SelectionGroup.js","webpack://@jotforminc/portal/../../libs/form-fields-menu/src/components/ProtectedTag.js","webpack://@jotforminc/portal/../../libs/form-fields-menu/src/components/EncryptedTag.js","webpack://@jotforminc/portal/../../libs/form-fields-menu/src/components/Option.js","webpack://@jotforminc/portal/../../libs/form-fields-menu/src/components/MultipleForms.js","webpack://@jotforminc/portal/../../libs/form-fields-menu/src/components/SingleForm.js","webpack://@jotforminc/portal/../../libs/form-fields-menu/src/index.js","webpack://@jotforminc/portal/../../libs/alert-label/src/index.js","webpack://@jotforminc/portal/../../libs/form-wizard/src/utils/helper.js","webpack://@jotforminc/portal/../../libs/form-wizard/src/components/errorContext.js","webpack://@jotforminc/portal/../../libs/form-wizard/src/components/FieldLine.js","webpack://@jotforminc/portal/../../libs/form-wizard/src/components/defaultComponents.js","webpack://@jotforminc/portal/../../libs/form-wizard/src/components/index.js","webpack://@jotforminc/portal/../../libs/header-components/src/utils/api.js","webpack://@jotforminc/portal/../../libs/header-components/src/constants/index.js","webpack://@jotforminc/portal/../../libs/header-components/src/utils/utils.js","webpack://@jotforminc/portal/../../libs/hooks/src/useResize.js","webpack://@jotforminc/portal/../../libs/hooks/src/index.js","webpack://@jotforminc/portal/../../libs/emoji-mart/src/components/Emoji.js","webpack://@jotforminc/portal/../../libs/icon-selector/src/components/EmojiRenderer/index.js","webpack://@jotforminc/portal/../../libs/icon-selector/src/components/SVGIcon/index.js","webpack://@jotforminc/portal/../../libs/icon-selector/src/constants/index.js","webpack://@jotforminc/portal/../../libs/icon-selector/src/utils/index.js","webpack://@jotforminc/portal/../../libs/image-upload/src/assets/svg/unsplash_icon.svg","webpack://@jotforminc/portal/../../libs/image-upload/src/components/IconSelector.js","webpack://@jotforminc/portal/../../libs/image-upload/src/components/UploadedImagesPanel.js","webpack://@jotforminc/portal/../../libs/image-upload/src/components/ImagePreview.js","webpack://@jotforminc/portal/../../libs/image-upload/src/components/LoadingScreen.js","webpack://@jotforminc/portal/../../libs/upload-fields/src/utils/index.js","webpack://@jotforminc/portal/../../libs/upload-fields/src/index.js","webpack://@jotforminc/portal/../../libs/image-upload/src/utils/index.js","webpack://@jotforminc/portal/../../libs/image-upload/src/actions/index.js","webpack://@jotforminc/portal/../../libs/image-upload/src/constants/index.js","webpack://@jotforminc/portal/../../libs/image-upload/src/components/ImageUpload.js","webpack://@jotforminc/portal/../../libs/limit-dialog/src/constants/texts.js","webpack://@jotforminc/portal/../../libs/limit-dialog/src/api/index.js","webpack://@jotforminc/portal/../../libs/limit-dialog/src/utils/index.js","webpack://@jotforminc/portal/../../libs/loading/src/components/Loading.js","webpack://@jotforminc/portal/../../libs/login-flow/src/assets/close.svg","webpack://@jotforminc/portal/../../../../src/logos/integration/salesforce-logomark-color.svg","webpack://@jotforminc/portal/../../libs/login-flow/src/temporary-duplicate/assets/svg/icon_fb.svg","webpack://@jotforminc/portal/../../libs/login-flow/src/temporary-duplicate/assets/svg/icon_gl.svg","webpack://@jotforminc/portal/../../../../src/icons/general/check-sm.svg","webpack://@jotforminc/portal/../../libs/login-flow/src/assets/icon_ms.svg","webpack://@jotforminc/portal/../../libs/login-flow/src/temporary-duplicate/assets/svg/icon_em.svg","webpack://@jotforminc/portal/../../libs/login-flow/src/assets/icon_gl_36.svg","webpack://@jotforminc/portal/../../libs/login-flow/src/assets/icon_fb_36.svg","webpack://@jotforminc/portal/../../libs/login-flow/src/temporary-duplicate/assets/svg/icon_apple_white.svg","webpack://@jotforminc/portal/../../libs/login-flow/src/assets/icon_ms_36.svg","webpack://@jotforminc/portal/../../libs/login-flow/src/assets/icon_ap_36.svg","webpack://@jotforminc/portal/../../libs/login-flow/src/temporary-duplicate/assets/svg/icon_back3.svg","webpack://@jotforminc/portal/../../libs/login-flow/src/temporary-duplicate/assets/svg/icon_back.svg","webpack://@jotforminc/portal/../../libs/login-flow/src/assets/idp-icons/auth0-logo-icon.svg","webpack://@jotforminc/portal/../../libs/login-flow/src/assets/idp-icons/azure-logo-icon.svg","webpack://@jotforminc/portal/../../libs/login-flow/src/assets/idp-icons/google-logo-icon.svg","webpack://@jotforminc/portal/../../libs/login-flow/src/assets/idp-icons/microsoft-logo-icon.svg","webpack://@jotforminc/portal/../../libs/login-flow/src/assets/idp-icons/okta-logo-icon.svg","webpack://@jotforminc/portal/../../libs/two-factor-settings/src/assets/svg/icon_gl.svg","webpack://@jotforminc/portal/../../libs/two-factor-settings/src/assets/svg/icon_fb.svg","webpack://@jotforminc/portal/../../libs/two-factor-settings/src/assets/svg/icon_apple_white.svg","webpack://@jotforminc/portal/../../../../src/icons/security/key-filled.svg","webpack://@jotforminc/portal/../../libs/login-flow/src/assets/icon_sf_36.svg","webpack://@jotforminc/portal/../../libs/login-flow/src/temporary-duplicate/assets/svg/closeWithCircle.svg","webpack://@jotforminc/portal/../../../../src/icons/general/flag-filled.svg","webpack://@jotforminc/portal/../../libs/utils/src/loginSignup.js","webpack://@jotforminc/portal/../../libs/login-flow/src/utils/layer.js","webpack://@jotforminc/portal/../../libs/login-flow/src/utils/helper.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/OFACModal/OFACModal.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/OFACModal/index.js","webpack://@jotforminc/portal/../../libs/login-flow/src/utils/loginSignup.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/SalesforceButton.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/FacebookButton.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/GoogleButton.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/Password/scPassword.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/Password/RequirementsList.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/Password/constants.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/ErrorAlert.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/Password/index.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/TermsAndConditionsUrls.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/MicrosoftButton.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/AppleButton.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/SocialButtons.js","webpack://@jotforminc/portal/../../libs/login-flow/src/api/manager.js","webpack://@jotforminc/portal/../../libs/login-flow/src/api/index.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/SignupOptions.js","webpack://@jotforminc/portal/../../libs/login-flow/src/constants/index.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/SignupWithEmail.js","webpack://@jotforminc/portal/../../libs/login-flow/src/assets/idp-icons/onelogin-logo-icon.svg","webpack://@jotforminc/portal/../../libs/login-flow/src/assets/idp-icons/private-logo-icon.svg","webpack://@jotforminc/portal/../../libs/login-flow/src/assets/idp-icons/icons.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/SSOLoginOptions.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/LoginOptions.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/ForgotPassword.js","webpack://@jotforminc/portal/../../libs/pie-timer/src/sc/scPieTimer.js","webpack://@jotforminc/portal/../../libs/pie-timer/src/index.js","webpack://@jotforminc/portal/../../libs/verification-input/src/index.js","webpack://@jotforminc/portal/../../libs/two-factor-settings/src/helpers/constants.js","webpack://@jotforminc/portal/../../libs/two-factor-settings/src/components/styled.js","webpack://@jotforminc/portal/../../libs/two-factor-settings/src/sc/scTwoFactorSettings.js","webpack://@jotforminc/portal/../../libs/two-factor-settings/src/components/InfoBox.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/Checkbox.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/TwoFactorLogin.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/EmailAuthLogin.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/TwoFactorMethods.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/SocialInit.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/LoginError.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/DeleteAccountModal/DeleteAccountModalStep1.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/DeleteAccountModal/SocialsContainer.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/DeleteAccountModal/ModalHeader.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/DeleteAccountModal/ErrorMessage.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/DeleteAccountModal/DeleteAccountModalStep2.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/DeleteAccountModal/DeleteAccountModalStep3.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/DeleteAccountModal/DeleteAccountModal.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/DeleteAccountModal/index.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/ResetSuccess.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/SocialTermsStep.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/SocialTermsModal.js","webpack://@jotforminc/portal/../../libs/login-flow/src/utils/renderStandaloneSocialTermsModal.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/EmailAuthLoginModal.js","webpack://@jotforminc/portal/../../libs/login-flow/src/utils/renderStandaloneEmailAuthModal.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/VerifyAccountModal/Verification.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/VerifyAccountModal/index.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/UnusualSignup/index.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/SignupWithSocialOpts.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/RecoverAccountPage.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/RecoverAccountNotification.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/AccountRecoveryViewTicket.js","webpack://@jotforminc/portal/../../libs/login-flow/src/components/LoginFlow.js","webpack://@jotforminc/portal/../../libs/money-utils/src/utils/index.js","webpack://@jotforminc/portal/../../libs/option-group/src/components/OptionGroup.js","webpack://@jotforminc/portal/../../libs/option-group/src/components/StyledComponents.js","webpack://@jotforminc/portal/../../libs/picker-modal/src/styles/ScRB.js","webpack://@jotforminc/portal/../../libs/picker-modal/src/components/PickerModal.js","webpack://@jotforminc/portal/../../libs/portal-components/src/components/Spinner.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/FormPicker/CheckBox.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/FormPicker/FormItem/styled.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/FormPicker/helpers/defaultTheme.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/PortalPicker/defaults/scPortalItem.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/PortalPicker/defaults/PortalItemDefaults/TitleRenderer.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/PortalPicker/defaults/PortalItemDefaults/DescriptionRenderer.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/PortalPicker/defaults/PortalItemDefaults/ItemContentRenderer.js","webpack://@jotforminc/portal/../../libs/search-filter/src/components/constants.js","webpack://@jotforminc/portal/../../libs/search-filter/src/utils/index.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/PortalPicker/defaults/PortalItemDefaults/constants.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/PortalPicker/defaults/PortalItemDefaults/IconRenderer.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/PortalPicker/defaults/PortalItem.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/PortalPicker/defaults/PortalItemDefaults/commonCss.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noFormsFoundIcon.svg","webpack://@jotforminc/portal/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noAppsFoundIcon.svg","webpack://@jotforminc/portal/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noTablesFoundIcon.svg","webpack://@jotforminc/portal/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noReportsFoundIcon.svg","webpack://@jotforminc/portal/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noApprovalsFoundIcon.svg","webpack://@jotforminc/portal/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noSignDocumentsFoundIcon.svg","webpack://@jotforminc/portal/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noBoardsFoundIcon.svg","webpack://@jotforminc/portal/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noFormsIcon.svg","webpack://@jotforminc/portal/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noAppsIcon.svg","webpack://@jotforminc/portal/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noTablesIcon.svg","webpack://@jotforminc/portal/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noReportsIcon.svg","webpack://@jotforminc/portal/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noApprovalsIcon.svg","webpack://@jotforminc/portal/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noSignDocumentsIcon.svg","webpack://@jotforminc/portal/../../libs/resource-picker/src/assets/svg/resourcePickerIcons/noBoardsIcon.svg","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/FormPicker/helpers/propTypes.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/FormPicker/FormItem/index.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/PortalPicker/defaults/scPortalOption.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/PortalPicker/defaults/PortalOption.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/ResourcePicker/items/Reports/index.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/ResourcePicker/items/Approval/index.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/ResourcePicker/items/Sign/styles.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/ResourcePicker/items/Sign/index.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/ResourcePicker/items/Operation/index.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/ResourcePicker/items/Board/index.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/ResourcePicker/constants.js","webpack://@jotforminc/portal/../../libs/smart-list/src/components/SmartList/helpers/defaultTheme.js","webpack://@jotforminc/portal/../../libs/smart-list/src/components/SmartList/FormLoadingSkeleton.js","webpack://@jotforminc/portal/../../libs/smart-list/src/components/SmartList/hooks.js","webpack://@jotforminc/portal/../../libs/smart-list/src/components/SmartList/index.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/FormPicker/FormList/index.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/FormPicker/ConditionalModal.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/ResourcePicker/index.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/components/ResourcePicker/items/Sheet/index.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/constants/index.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/utils/moment.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/utils/hooks.js","webpack://@jotforminc/portal/../../libs/resource-picker/src/utils/utils.js","webpack://@jotforminc/portal/../../libs/router-bridge/src/jfrouter.js","webpack://@jotforminc/portal/../../libs/safe-lazy-import/src/components/ErrorPage.js","webpack://@jotforminc/portal/../../libs/safe-lazy-import/src/utils/safeLazy.js","webpack://@jotforminc/portal/../../libs/search-input/src/index.js","webpack://@jotforminc/portal/../../../../src/icons/arrows/caret-down-bars.svg","webpack://@jotforminc/portal/../../../../src/icons/products/product-payment-form-filled.svg","webpack://@jotforminc/portal/../../libs/smart-list/src/components/SmartList/ControlBar/scControlBar.js","webpack://@jotforminc/portal/../../libs/smart-list/src/components/SmartList/ControlBar/CheckBox.js","webpack://@jotforminc/portal/../../libs/smart-list/src/components/SmartList/ControlBar/SearchInput.js","webpack://@jotforminc/portal/../../libs/smart-list/src/components/SmartList/ControlBar/Dropdown.js","webpack://@jotforminc/portal/../../libs/smart-list/src/components/SmartList/ControlBar/SortMenu.js","webpack://@jotforminc/portal/../../libs/smart-list/src/components/SmartList/ControlBar/FilterForm.js","webpack://@jotforminc/portal/../../libs/smart-list/src/components/SmartList/ControlBar/index.js","webpack://@jotforminc/portal/../../libs/smart-list/src/components/SmartList/utils.js","webpack://@jotforminc/portal/../../libs/storage-helper/src/constants.js","webpack://@jotforminc/portal/../../libs/storage-helper/src/index.js","webpack://@jotforminc/portal/../../libs/styled-modal/src/components/StyledModal/styled.js","webpack://@jotforminc/portal/../../libs/styled-modal/src/components/StyledModal/index.js","webpack://@jotforminc/portal/../../../../src/icons/arrows/angle-down.svg","webpack://@jotforminc/portal/../../../../src/icons/arrows/angle-left.svg","webpack://@jotforminc/portal/../../../../src/icons/arrows/angle-up.svg","webpack://@jotforminc/portal/../../../../src/icons/arrows/angles-selector-slash-horizontal.svg","webpack://@jotforminc/portal/../../../../src/icons/arrows/arrow-down-to-line.svg","webpack://@jotforminc/portal/../../../../src/icons/arrows/arrow-right.svg","webpack://@jotforminc/portal/../../../../src/icons/arrows/arrow-rotate-right.svg","webpack://@jotforminc/portal/../../../../src/icons/arrows/arrow-up-right-from-square-sm.svg","webpack://@jotforminc/portal/../../../../src/icons/arrows/arrow-up-right-from-square.svg","webpack://@jotforminc/portal/../../../../src/icons/arrows/arrows-rotate.svg","webpack://@jotforminc/portal/../../../../src/icons/arrows/caret-down.svg","webpack://@jotforminc/portal/../../../../src/icons/arrows/caret-up.svg","webpack://@jotforminc/portal/../../../../src/icons/arrows/chevron-down.svg","webpack://@jotforminc/portal/../../../../src/icons/arrows/chevron-left.svg","webpack://@jotforminc/portal/../../../../src/icons/arrows/chevron-right.svg","webpack://@jotforminc/portal/../../../../src/icons/brand/linkedin-square-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/brand/salesforce-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/communication/envelope-closed-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/communication/message-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/communication/message-star-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/communication/phone-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/documents/document-image-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/documents/document-simple-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/editor/pencil-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/editor/pencil-line-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/finance/cart-shopping-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/finance/coins-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/finance/credit-card-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/forms-files/form-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/bars.svg","webpack://@jotforminc/portal/../../../../src/icons/general/buildings.svg","webpack://@jotforminc/portal/../../../../src/icons/general/check-circle-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/check-circle.svg","webpack://@jotforminc/portal/../../../../src/icons/general/check-square-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/check.svg","webpack://@jotforminc/portal/../../../../src/icons/general/copy-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/copy.svg","webpack://@jotforminc/portal/../../../../src/icons/general/ellipsis-horizontal.svg","webpack://@jotforminc/portal/../../../../src/icons/general/exclamation-circle-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/exclamation-circle.svg","webpack://@jotforminc/portal/../../../../src/icons/general/exclamation-triangle-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/eye-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/eye-slash-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/gear-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/grid-dots-vertical.svg","webpack://@jotforminc/portal/../../../../src/icons/general/heart-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/heart.svg","webpack://@jotforminc/portal/../../../../src/icons/general/info-circle-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/input-text-short.svg","webpack://@jotforminc/portal/../../../../src/icons/general/label-button-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/link-diagonal-broken.svg","webpack://@jotforminc/portal/../../../../src/icons/general/link-diagonal.svg","webpack://@jotforminc/portal/../../../../src/icons/general/location-pin-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/magnifying-glass.svg","webpack://@jotforminc/portal/../../../../src/icons/general/minus.svg","webpack://@jotforminc/portal/../../../../src/icons/general/pencil-to-square.svg","webpack://@jotforminc/portal/../../../../src/icons/general/plus-sm.svg","webpack://@jotforminc/portal/../../../../src/icons/general/plus.svg","webpack://@jotforminc/portal/../../../../src/icons/general/question-circle-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/single-selection-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/star-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/text.svg","webpack://@jotforminc/portal/../../../../src/icons/general/trash-exclamation-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/trash-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/general/xmark-sm.svg","webpack://@jotforminc/portal/../../../../src/icons/general/xmark.svg","webpack://@jotforminc/portal/../../../../src/icons/media/image-arrow-up-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/media/image-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/media/video-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/products/product-approvals-color.svg","webpack://@jotforminc/portal/../../../../src/icons/products/product-apps-mono.svg","webpack://@jotforminc/portal/../../../../src/icons/products/product-form-builder-color-border.svg","webpack://@jotforminc/portal/../../../../src/icons/products/product-form-builder-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/products/product-inbox-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/products/product-pages-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/products/product-report-builder-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/products/product-sign-color-border.svg","webpack://@jotforminc/portal/../../../../src/icons/products/product-sign-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/products/product-tables-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/products/product-tables-mono.svg","webpack://@jotforminc/portal/../../../../src/icons/products/product-teams-basic-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/security/lock-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/security/scan-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/security/unlock-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/technology/desktop.svg","webpack://@jotforminc/portal/../../../../src/icons/technology/mobile-bell.svg","webpack://@jotforminc/portal/../../../../src/icons/technology/mobile-gear.svg","webpack://@jotforminc/portal/../../../../src/icons/technology/mobile-pencil.svg","webpack://@jotforminc/portal/../../../../src/icons/technology/mobile-title.svg","webpack://@jotforminc/portal/../../../../src/icons/technology/mobile.svg","webpack://@jotforminc/portal/../../../../src/icons/technology/plug-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/technology/tablet.svg","webpack://@jotforminc/portal/../../../../src/icons/time-date/clock-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/users/circle-user-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/users/user-filled.svg","webpack://@jotforminc/portal/../../../../src/icons/users/user-id-card-filled.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/2checkout-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/afterpay-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/afterpay-logomark-dark.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/applegooglepay-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/authorizenet-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/bluepay-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/bluesnap-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/braintree-logomark-dark.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/cardconnect-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/cashapp-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/chargify-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/clickbank-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/cybersource-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/echeck-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/eway-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/firstdata-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/gocardless-logomark-dark.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/iyzico-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/klarna-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/mollie-logomark-dark.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/moneris-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/onebip-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/pagseguro-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/payfast-logomark-dark.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/payjunction-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/paymentwall-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/paypal-business-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/paypal-checkout-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/paypal-invoicing-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/paypal-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/paypal-personal-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/paysafe-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/payu-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/purchaseorder-logomark-dark.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/sensepass-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/skrill-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/square-logomark-dark.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/stripe-ach-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/stripe-achm-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/stripe-checkout-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/stripe-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/venmo-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/worldpay-uk-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/worldpay-us-logomark-color-.svg","webpack://@jotforminc/portal/../../libs/tabs/src/tab-list/Tab.js","webpack://@jotforminc/portal/../../libs/tabs/src/tab-list/TabList.js","webpack://@jotforminc/portal/../../libs/tabs/src/tab-list/components/Wrapper.js","webpack://@jotforminc/portal/../../libs/tabs/src/tab-list/components/TabListContainer.js","webpack://@jotforminc/portal/../../libs/tabs/src/tab-list/components/TabButtonContainer.js","webpack://@jotforminc/portal/../../libs/tabs/src/tab-list/components/TabButton.js","webpack://@jotforminc/portal/../../libs/tabs/src/tab-list/TabListWithStyles.js","webpack://@jotforminc/portal/../../libs/text-input/src/styles.js","webpack://@jotforminc/portal/../../libs/text-input/src/index.js","webpack://@jotforminc/portal/../../libs/toggle/src/index.js","webpack://@jotforminc/portal/../../libs/tooltip/src/components/index.js","webpack://@jotforminc/portal/../../libs/translation/src/constants/index.js","webpack://@jotforminc/portal/../../libs/translation/src/domHelper.js","webpack://@jotforminc/portal/../../libs/translation/src/Translation.js","webpack://@jotforminc/portal/../../libs/translation/src/utils.js","webpack://@jotforminc/portal/../../libs/translation/src/hof.js","webpack://@jotforminc/portal/../../libs/translation/src/global.js","webpack://@jotforminc/portal/../../libs/translation/src/index.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/Button/index.js","webpack://@jotforminc/portal/../../libs/utils/src/color.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/ColorPicker/defaults/Color.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/ColorPicker/defaults/Wrapper.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/ColorPicker/index.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/CopyButton/index.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/Dropdown/index.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/HiddenFrame/index.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/DragContainer/index.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/FileUpload/defaults/Text.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/FileUpload/defaults/Form.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/FileUpload/defaults/Wrapper.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/FileUpload/defaults/ErrorText.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/FileUpload/defaults/FileInput.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/FileUpload/defaults/FilePreview.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/FileUpload/defaults/TextWrapper.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/FileUpload/defaults/DragContainer.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/FileUpload/defaults/Thumbnail.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/FileUpload/defaults/LoadingScreen.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/FileUpload/index.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/Modal/index.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/Option/index.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/OptionGroup/index.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/Popover/index.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/Portal/index.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/SelectionGroup/index.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/TextArea/LimitRenderer.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/TextArea/index.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/TextInput/index.js","webpack://@jotforminc/portal/../../libs/uikit/src/components/Tooltip/index.js","webpack://@jotforminc/portal/../../libs/uikit/src/utils/constants.js","webpack://@jotforminc/portal/../../libs/uikit/src/utils/hooks.js","webpack://@jotforminc/portal/../../libs/uikit/src/utils/index.js","webpack://@jotforminc/portal/../../libs/user-list/src/styles/index.js","webpack://@jotforminc/portal/../../libs/user-list/src/index.js","webpack://@jotforminc/portal/../../libs/utils/src/a11y.js","webpack://@jotforminc/portal/../../libs/utils/src/addressFields.js","webpack://@jotforminc/portal/../../libs/utils/src/data.js","webpack://@jotforminc/portal/../../libs/utils/src/dom.js","webpack://@jotforminc/portal/../../libs/utils/src/limitUtils.js","webpack://@jotforminc/portal/../../libs/utils/src/misc.js","webpack://@jotforminc/portal/../../libs/constants/src/platforms/index.js","webpack://@jotforminc/portal/../../libs/feature-flag/src/components/FeatureFlag/FeatureFlag.js","webpack://@jotforminc/portal/../../libs/utils/src/platform/platform.js","webpack://@jotforminc/portal/../../libs/utils/src/questions.js","webpack://@jotforminc/portal/../../libs/utils/src/shareOnSocials.js","webpack://@jotforminc/portal/../../libs/utils/src/strings.js","webpack://@jotforminc/portal/../../libs/utils/src/time.js","webpack://@jotforminc/portal/../../libs/constants/src/email/index.js","webpack://@jotforminc/portal/../../libs/utils/src/validation.js","webpack://@jotforminc/portal/../../libs/warning-box/src/index.js","webpack://@jotforminc/portal/../../libs/magnet/src/components/Badge/badge.cva.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Badge/badge.types.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Badge/Badge.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Button/button.cva.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Button/button.types.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Button/ButtonContent.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Button/Button.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Checkbox/checkbox.cva.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Checkbox/checkbox.types.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Checkbox/Checkbox.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/ColorPicker/color-picker.types.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Dialog/Dialog.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Dialog/DialogActions.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Dialog/DialogBody.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Dialog/DialogCloseButton.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Dialog/DialogContent.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Dialog/DialogDescription.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Dialog/DialogIcon.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Dialog/DialogTitle.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Dialog/dialog.cva.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Dialog/dialog.types.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/FormControl/form-control.cva.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/FormControl/FormControl.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Indicator/indicator.cva.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Indicator/indicator.types.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Indicator/Indicator.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Input/BaseInput.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Input/InputText.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Input/input.cva.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Input/input.types.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Link/link.cva.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Link/link.types.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Link/Link.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Loader/loader.cva.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Loader/loader.types.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Loader/Loader.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Modal/Modal.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Modal/ModalActions.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Modal/ModalBody.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Modal/ModalHeader.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/components/Modal/modal.cva.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Modal/modal.types.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Textarea/textarea.cva.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Textarea/textarea.types.ts","webpack://@jotforminc/portal/../../libs/magnet/src/components/Textarea/Textarea.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/constants/common.cva.ts","webpack://@jotforminc/portal/../../libs/magnet/src/constants/common.values.ts","webpack://@jotforminc/portal/../../libs/magnet/src/contexts/index.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/layouts/Flex/flex.cva.ts","webpack://@jotforminc/portal/../../libs/magnet/src/layouts/Flex/Flex.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/shared/ChoiceLabel/choice-label.types.ts","webpack://@jotforminc/portal/../../libs/magnet/src/shared/ChoiceLabel/choice-label.cva.ts","webpack://@jotforminc/portal/../../libs/magnet/src/shared/ChoiceLabel/ChoiceLabel.tsx","webpack://@jotforminc/portal/../../libs/magnet/src/tokens/colors/primary.ts","webpack://@jotforminc/portal/../../libs/magnet/src/tokens/colors/secondary.ts","webpack://@jotforminc/portal/../../libs/magnet/src/utils/index.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gateway/gatewayFieldToName.ts","webpack://@jotforminc/portal/../../../../src/logos/payment/square-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/paypal-business-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/paypal-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/paypal-invoicing-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/paypal-pro-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/paypal-checkout-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/paypal-express-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/authorizenet-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/stripe-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/stripe-checkout-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/stripe-achm-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/stripe-ach-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/braintree-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/afterpay-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/venmo-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/mollie-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/cybersource-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/echeck-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/bluepay-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/eway-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/payu-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/payu-india-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/worldpay-uk-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/bluesnap-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/moneris-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/gocardless-logomark-color.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/payfast-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/sensepass-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/klarna-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/firstdata-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/cardconnect-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/worldpay-us-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/2checkout-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/paysafe-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/iyzico-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/skrill-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/chargify-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/payjunction-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/clickbank-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/onebip-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/paymentwall-logomark-light.svg","webpack://@jotforminc/portal/../../../../src/logos/payment/purchaseorder-logomark-light.svg","webpack://@jotforminc/portal/../../libs/payment-constants/src/gateway/gatewayCustomIcons/lightIcons/applePayGooglePay.tsx","webpack://@jotforminc/portal/../../libs/payment-constants/src/gateway/gatewayLightIcons.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gateway/gatewayResourceSupportedPaymentTypes.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gateway/gatewaySupportedCurrencies.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/supportedCurrenciesWithLabel.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gateway/gatewayListSortedByCountry.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlSquare.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlPaypalComplete.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlPaypal.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlPaypalInvoicing.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlPaypalPro.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlPaypalSPB.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlPaypalExpress.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlAuthnet.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlStripe.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlStripeCheckout.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlStripeACHManual.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlStripeACH.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlBraintree.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlCashApp.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlAfterpay.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlClearpay.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlVenmo.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlApplePayGooglePay.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlMollie.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlCybersource.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlEcheck.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlBluepay.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlEway.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlPayu.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlPayuMoney.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlWorldpay.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlWorldpayus.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlBluesnap.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlMoneris.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlGocardless.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlPayfast.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlSensepass.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlSofort.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlPagseguro.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlFirstdata.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlCardconnect.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/control2co.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlPaysafe.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlIyzico.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlSkrill.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlChargify.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlPayjunction.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlClickbank.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlOnebip.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlPaymentwall.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/supportedGatewayConnectionPropsList.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/gatewayConnectionProps/controlPayment.ts","webpack://@jotforminc/portal/../../libs/payment-constants/src/supportedPaymentTypesWithLabel.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/api/getPaymentConnections.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/api/requestLayer.ts","webpack://@jotforminc/portal/../../libs/payment-gateways/src/utils/functions/logPaymentEvents.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/api/layer.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/api/index.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/ConnectionButton/BaseConnectionButton.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/ConnectionButton/ConnectionButtonStripe.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/modals/Flows/Constants/Credentials.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/ConnectionButton/ConnectionButtonSquare.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/ConnectionButton/ConnectionButtonPaypal.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/ConnectionButton/ConnectionButtonMollie.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/ConnectionButton/index.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/ConnectionButton/utils.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/Credential.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/NewDropdown.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/NewTextInput.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/selectbox.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/toggle.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/modals/Flows/Constants/GatewayProperties.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/modals/Flows/Constants/Gateways.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/modals/Flows/Constants/DefaultGatewayProps.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/modals/Flows/Context/useGatewayFlows.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/modals/Flows/Utils/index.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/constants/PaymentProperties.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/constants/componentNames.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/infoline.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/CurrencyDropdown.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/LayoutTypeButton.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/textinput.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/CustomCheckbox.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/CopyUrl.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/Steps.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/ColorPicker.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/TextArea.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/GroupHeader.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/FixedAmounts/AmountListItem.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/FixedAmounts/index.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/Divider.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/PriceInput.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/InputRange.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/InputRangeWithType.tsx","webpack://@jotforminc/portal/../../libs/data-grid/src/components/DataGridCell.js","webpack://@jotforminc/portal/../../libs/data-grid/src/components/DataGridRow.js","webpack://@jotforminc/portal/../../libs/data-grid/src/index.js","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/LabelValueTable.tsx","webpack://@jotforminc/portal/../../libs/radio-group/src/index.js","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/RadioGroup.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/components/fields/SuffixInput.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/constants/componentTypes.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/constants/countries.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/constants/styles.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/constants/variables.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/store/reducers/products.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/store/reducers/productListSettings.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/store/reducers/subscriptions.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/store/reducers/ui.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/store/reducers/activeProduct.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/store/reducers/user.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/store/reducers/connections.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/store/reducers/activeConnection.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/store/reducers/activeGatewaySettings.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/store/reducers/checkoutForm.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/store/middlewares/actionCatcher.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/store/index.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/containers/PaymentProviderContainer.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/hooks/index.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/store/EditorBinding.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/store/actionTypes.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/store/selectors.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/utils/domUtils.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/utils/general.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/constants/ProductListSettingsProperties.ts","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/utils/index.tsx","webpack://@jotforminc/portal/../../libs/payment-settings-editor/src/utils/paymentProperties.ts","webpack://@jotforminc/portal/../../libs/request-layer/src/request-cache/constants.ts","webpack://@jotforminc/portal/../../libs/request-layer/src/request-cache/utils.ts","webpack://@jotforminc/portal/../../libs/request-layer/src/request-cache/index.ts","webpack://@jotforminc/portal/../../libs/request-layer/src/utils/argumentParser.ts","webpack://@jotforminc/portal/../../libs/request-layer/src/utils/constructInterceptorConfig.ts","webpack://@jotforminc/portal/../../libs/request-layer/src/layer/interceptors/index.ts","webpack://@jotforminc/portal/../../libs/request-layer/src/layer/interceptors/defaultInterceptors/index.ts","webpack://@jotforminc/portal/../../libs/request-layer/src/layer/interceptors/defaultInterceptors/utils.ts","webpack://@jotforminc/portal/../../libs/request-layer/src/layer/interceptors/defaultInterceptors/platform/salesforceInterceptors.ts","webpack://@jotforminc/portal/../../libs/request-layer/src/layer/interceptors/defaultInterceptors/defaultInterceptors.ts","webpack://@jotforminc/portal/../../libs/request-layer/src/utils/setInterceptors.ts","webpack://@jotforminc/portal/../../libs/request-layer/src/layer/engines/utils.ts","webpack://@jotforminc/portal/../../libs/request-layer/src/layer/engines/AxiosEngine.ts","webpack://@jotforminc/portal/../../libs/request-layer/src/layer/engines/constants.ts","webpack://@jotforminc/portal/../../libs/request-layer/src/layer/utils.ts","webpack://@jotforminc/portal/../../libs/request-layer/src/layer/index.ts","webpack://@jotforminc/portal/../../libs/request-layer/src/layer/interceptors/customInterceptors/index.ts","webpack://@jotforminc/portal/../../libs/request-layer/src/utils/managerUtils.ts","webpack://@jotforminc/portal/../../libs/tracking/src/utils/FullStoryManager.ts","webpack://@jotforminc/portal/../../libs/tracking/src/constants/index.ts","webpack://@jotforminc/portal/../../libs/tracking/src/utils/SentryManager.ts","webpack://@jotforminc/portal/../../libs/tracking/src/utils/TrackingManager.ts","webpack://@jotforminc/portal/../../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.us.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-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 Styled from 'styled-components';\nimport { ScLogo } from '../AppLogo/scLogo';\n\nconst ScAppIconWrapper = Styled.div`\n ${ScLogo}\n border-radius: 10px;\n ${({ isSVG, bgColor }) => (isSVG ? `background: ${bgColor};` : '')}\n margin-bottom: 5px;\n\n .jfIconSVG-wrapper {\n display: flex;\n }\n`;\n\nexport default ScAppIconWrapper;\n","import React, { memo } from 'react';\nimport { bool } from 'prop-types';\nimport { useSelector } from 'react-redux';\nimport AppImage from '../AppImage';\nimport AppLogo from '../AppLogo';\nimport ScAppIconWrapper from './ScAppIconWrapper';\nimport VERSIONS from '../../properties/versions';\nimport { IMAGE_TYPE } from '../../constants';\nimport SELECTORS from '../../store/selectors';\n\nconst AppIcon = ({ withBorder }) => {\n const {\n appIconType, appIconBackground, appIconColor, appIconSvgRef, appIconURL, installableIconURL\n } = useSelector(SELECTORS.getAppIconProperties);\n const title = useSelector(SELECTORS.getAppTitle);\n const appVersion = useSelector(SELECTORS.getAppVersionSelector);\n const logoProperties = useSelector(SELECTORS.getLogoProperties);\n const Wrapper = ScAppIconWrapper;\n const hasInstallableAppIcon = !!installableIconURL;\n\n // Fallback to AppLogo\n const shouldFallbackToLogo = appVersion === VERSIONS[0];\n if (shouldFallbackToLogo) return ();\n\n return (\n \n );\n};\n\nAppIcon.propTypes = {\n withBorder: bool\n};\n\nAppIcon.defaultProps = {\n withBorder: false\n};\n\nexport default memo(AppIcon);\n","import React, { memo } from 'react';\nimport {\n bool, elementType, oneOf, string\n} from 'prop-types';\nimport { IMAGE_TYPE } from '../../constants';\nimport SvgRenderer from '../common/SvgRenderer';\n\nconst getImageComponent = (url, alt) => {\n if (!url) return null;\n return (\n \n );\n};\n\nconst AppImage = ({\n type,\n bgColor,\n bgURL,\n iconColor,\n svgRef,\n alt,\n Wrapper,\n withBorder\n}) => {\n const isSVG = type === IMAGE_TYPE.icon;\n\n const url = isSVG ? bgURL.replace('http://', 'https://') : bgURL;\n\n return (\n \n {isSVG\n\n ? (\n
\n \n
\n )\n : getImageComponent(url, alt)}\n
\n );\n};\n\nAppImage.propTypes = {\n type: oneOf([IMAGE_TYPE.icon, IMAGE_TYPE.image]),\n bgColor: string,\n bgURL: string,\n iconColor: string,\n svgRef: string,\n alt: string,\n Wrapper: elementType,\n withBorder: bool\n};\n\nAppImage.defaultProps = {\n type: IMAGE_TYPE.image,\n bgColor: '',\n bgURL: '',\n iconColor: '',\n svgRef: '',\n alt: '',\n Wrapper: ({ children, ...props }) => (
{children}
), // eslint-disable-line react/prop-types\n withBorder: false\n};\n\nexport default memo(AppImage);\n","import React from 'react';\nimport {\n bool, elementType, shape, string\n} from 'prop-types';\nimport { ScAppLogo } from './scLogo';\nimport AppImage from '../AppImage';\n\nconst AppLogo = ({\n Wrapper,\n withBorder,\n title,\n logoProperties\n}) => {\n const {\n logoType, logoBackground, logoURL, logoSvgRef, iconColor\n } = logoProperties;\n\n const alt = `${title} Logo`;\n return (\n \n );\n};\n\nAppLogo.propTypes = {\n Wrapper: elementType,\n title: string,\n logoProperties: shape({}),\n withBorder: bool\n};\n\nAppLogo.defaultProps = {\n Wrapper: ScAppLogo,\n title: '',\n logoProperties: {},\n withBorder: false\n};\n\nexport default AppLogo;\n","import Styled, { css } from 'styled-components';\nimport { FEATURE_NAMES } from '../../constants/features';\nimport { isFeatureEnabled } from '../../utils/features/helper';\n\nexport const ScLogo = css`\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n white-space: nowrap;\n overflow: hidden;\n ${isFeatureEnabled(FEATURE_NAMES.AppLogoSize) ? css`\n border-radius: 0;\n & > * {\n border-radius: 0;\n }\n ` : `\n border-radius: 14px;\n & > * {\n border-radius: 4px;\n }\n `}\n\n img {\n width: 100%;\n height: auto;\n }\n\n ${({ withBorder }) => {\n return withBorder ? `\n border: 1px solid #D3DCEF;\n ` : '';\n }}\n`;\n\nexport const ScAppLogo = Styled.div`\n ${ScLogo}\n ${({ isSVG, bgColor }) => (isSVG ? `\n background: ${bgColor};\n ${isFeatureEnabled(FEATURE_NAMES.AppLogoSize) ? `\n border-radius: 14px;\n width: 80px;\n height: 80px;\n ` : ''}\n ` : '')}\n`;\n","import Styled from 'styled-components';\n\nexport const ScIMOverlay = Styled.div`\n position: fixed;\n left: 0; top: 0;\n width: 100%; height: 100%;\n z-index: 1002;\n background-color: rgba(39, 41, 55, 0.61);\n display: flex;\n flex-direction: column;\n align-items: center;\n\n .a2hs {\n width: 92%;\n max-width: ${({ larger }) => (larger ? '730px' : '600px')};\n max-height: 92%;\n border-radius: 8px;\n box-shadow: 0 2px 7px 0 rgba(0, 0, 0, 0.5);\n background-color: #fff;\n margin: auto;\n overflow: auto;\n }\n`;\n\nexport const ScIMContent = Styled.div`\n height: 100%;\n position: relative;\n`;\n\nexport const ScIMHeader = Styled.div`\n padding: 24px 24px 0 0;\n display: flex;\n\n .close-modal {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n margin: 0 0 0 auto;\n background: transparent;\n border: 0;\n padding: 0;\n cursor: pointer;\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background-color: #F3F3FE;\n\n svg {\n width: 30px;\n height: 30px;\n color: #6F76A7;\n }\n }\n\n .header-content {\n flex: 1 1 auto;\n padding: 0 0 0 27px;\n }\n\n .announcement-title {\n margin: 12px 0 0;\n font-size: 20px;\n font-weight: 500;\n font-style: normal;\n line-height: normal;\n letter-spacing: 0.15px;\n color: #2c3345;\n }\n\n .announcement-description {\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: 0.12px;\n color: #8f91aa;\n margin: 0.25em 0;\n }\n\n .announcement-modal-closeBtn {\n padding: 0;\n height: auto;\n margin: 21px 24px 18px 0;\n display: block;\n border: 0;\n flex: 0 0 auto;\n background: transparent;\n cursor: pointer;\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n\n svg {\n width: 20px;\n height: 20px;\n color: #6F76A7;\n }\n }\n\n @media screen and (max-width: 480px) {\n padding: 16px 16px 0 0;\n }\n\n`;\n\nexport const ScIMFooter = Styled.div`\n text-align: center;\n \n .bw {\n border-top: 1px solid #DADEF3;\n padding: 16px;\n background-color: #F3F3FE;\n }\n\n .tw {\n padding: 0 16px 24px 16px;\n\n ol {\n li {\n display: flex;\n align-items: center;\n justify-content: center;\n &:not(:first-child) {\n margin-top: 12px;\n }\n }\n }\n }\n`;\n\nexport const ScIMClose = Styled.button`\n position: absolute;\n right: 0; top: 0;\n`;\n\nexport const ScImage = Styled.div`\n min-height: 500px;\n\n .announcementGif {\n opacity: 0;\n width: 100%;\n padding: 28px 34px 47px 28px;\n border-top: 1px solid #eaebf2;\n transition: opacity 0.3s;\n }\n .announcementGif.ready{\n opacity: 1;\n }\n`;\n","import React, { forwardRef } from 'react';\nimport { elementType, func } from 'prop-types';\nimport { Modal as UIKitModal } from '@jotforminc/uikit';\n\nconst AppModal = forwardRef(({\n DialogRenderer, ContentRenderer, HeaderRenderer, FooterRenderer, onModalClose, ...props\n}, ref) => {\n return (\n \n );\n});\n\n/* eslint react/prop-types: \"off\" */\nAppModal.propTypes = {\n DialogRenderer: elementType,\n HeaderRenderer: elementType,\n ContentRenderer: elementType,\n FooterRenderer: elementType,\n onModalClose: func\n};\n\nAppModal.defaultProps = {\n DialogRenderer: ({ children }) => (\n
\n {children}\n
\n ),\n HeaderRenderer: ({ children }) =>
{children}
,\n ContentRenderer: ({ children }) => (
{children}
),\n FooterRenderer: ({ children }) =>
{children}
,\n onModalClose: () => {}\n};\n\nexport default AppModal;\n","import Styled, { css } from 'styled-components';\n\nexport const ScBadge = Styled.div`\n display: inline-block;\n\n .badge-content {\n display: flex;\n justify-content: center;\n align-items: center;\n color: #fff;\n width: 25px;\n height: 25px;\n border-radius: 50%;\n background-color: #78BB07;\n\n ${({ color }) => {\n return css`background-color: ${color};`;\n }}\n\n svg {\n width: 19px;\n height: 19px;\n }\n }\n`;\n","import React from 'react';\nimport { element, elementType } from 'prop-types';\nimport { IconCheck } from '@jotforminc/svg-icons';\nimport { ScBadge } from './ScBadge';\n\nconst Badge = ({\n icon,\n IconRenderer,\n ...rest\n}) => {\n return (\n \n
\n \n
\n
\n );\n};\n\nBadge.propTypes = {\n icon: element,\n IconRenderer: elementType\n};\n\nBadge.defaultProps = {\n icon: ,\n /* eslint-disable react/prop-types */\n IconRenderer: ({ icon }) => <>{icon}\n};\n\nexport default Badge;\n","import React from 'react';\nimport { AppsLoader as CommonAppsLoading } from '@jotforminc/apploaders';\nimport Styled from 'styled-components';\n\nconst ScContainer = Styled.div`\n width: 100%;\n height: 100%;\n\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst BuilderLoading = () => {\n return (\n \n \n \n );\n};\n\nexport default BuilderLoading;\n","/* eslint-disable max-len */\nimport Styled from 'styled-components';\nimport { Button as UIKitButton } from '@jotforminc/uikit';\nimport { mainFont } from '../../styles/global';\n\nexport const ScUIKitButton = Styled(UIKitButton)`\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: 4px;\n cursor: pointer;\n text-transform: capitalize;\n border: 0;\n padding: 6px;\n margin: 0;\n font-size: 15px;\n font-family: ${mainFont};\n transition: .3s background-color ease;\n }\n\n &.panel.isGreen {\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.isGreen {\n background-color: #54b45c;\n color: #fff;\n }\n\n &.taste.isDarkBlue {\n background-color: #0A1551;\n color: #fff;\n border: 1px solid #0A1551;\n }\n\n &.taste.isDarkBlueColor {\n color: #0A1551;\n background-color: #fff;\n border: 1px solid #0A1551;\n\n &:hover {\n background-color: #C8CEED;\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 &.bare.isBlue {\n color: #0099FF;\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.isLightGreenNegative {\n background-color: #fff;\n color: #78BB07;\n border: 1px solid #78BB07;\n &:hover {\n background-color: #78BB07;\n color: #fff;\n }\n &:active {\n background-color: #5FA200;\n color: #fff;\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: 4px;\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 @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, { useRef } from 'react';\nimport { string } from 'prop-types';\nimport { Hooks } from '@jotforminc/uikit';\nimport { ScUIKitButton } from './scButton';\nimport Tooltip from '../Tooltip';\n\nconst Button = React.forwardRef(({ name, ...props }, ref) => {\n const innerRef = useRef();\n const combinedRef = Hooks.useCombinedRefs(innerRef, ref);\n\n return (\n <>\n \n {name && {name}}\n \n );\n});\n\nButton.propTypes = {\n name: string\n};\n\nButton.defaultProps = {\n name: ''\n};\n\nexport default Button;\n","import React from 'react';\n\nconst OptionContainerRenderer = props =>
  • ;\nexport default OptionContainerRenderer;\n","/* eslint-disable @jotforminc/no-native-button */\nimport React, { forwardRef } from 'react';\nimport {\n bool, oneOfType, shape, string\n} from 'prop-types';\n\nconst ButtonRenderer = forwardRef(({\n option: { text, value } = {},\n isOptionsVisible, placeholder, ...props\n}, ref) => {\n return (\n \n {text ?? placeholder}\n \n );\n});\n\nButtonRenderer.propTypes = {\n option: oneOfType([shape({}), bool]),\n isOptionsVisible: bool,\n placeholder: string\n};\n\nButtonRenderer.defaultProps = {\n option: {},\n isOptionsVisible: false,\n placeholder: ''\n};\n\nexport default ButtonRenderer;\n","import React from 'react';\nimport { renderable } from '../../../constants/propTypes';\n\nconst ContainerRenderer = ({ children }) =>
      {children}
    ;\n\nContainerRenderer.propTypes = {\n children: renderable.isRequired\n};\n\nexport default ContainerRenderer;\n","import React from 'react';\nimport {\n arrayOf, func, number, oneOfType, shape, string, bool, elementType\n} from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { Dropdown as UiKitDropdown } from '@jotforminc/uikit';\nimport { ScDropdown } from './scDropdown';\nimport OptionContainerRenderer from './defaults/OptionContainerRenderer';\nimport DefaultButtonRenderer from './defaults/ButtonRenderer';\nimport ContainerRenderer from './defaults/ContainerRenderer';\n\nconst Dropdown = ({\n onChange, defaultValue, options, filterable, popoverProps, DropdownWrapperRenderer, OptionRenderer, ButtonRenderer, value, ...props\n}) => {\n const handleOptionSelect = ({ value: newVal }) => onChange(newVal);\n\n return (\n \n \n \n );\n};\n\nDropdown.propTypes = {\n onChange: func,\n defaultValue: oneOfType([string, number]),\n value: oneOfType([string, number]),\n options: arrayOf(shape({})),\n filterable: bool,\n popoverProps: shape({}),\n DropdownWrapperRenderer: elementType,\n OptionRenderer: elementType,\n ButtonRenderer: elementType\n};\n\nDropdown.defaultProps = {\n onChange: f => f,\n defaultValue: undefined,\n value: undefined,\n options: [],\n filterable: false,\n popoverProps: {},\n DropdownWrapperRenderer: ScDropdown,\n OptionRenderer: undefined,\n ButtonRenderer: DefaultButtonRenderer\n};\n\nexport default Dropdown;\n","/* eslint-disable max-len */\nimport Styled from 'styled-components';\nimport { mainFontColor } from '../../styles/colors';\n\nexport const ScDropdown = Styled.div`\n position: relative;\n\n .dropdown-button {\n display: block;\n padding: 14px;\n border: 1px solid #C8CEED;\n border-radius: 4px;\n width: 100%;\n font-size: 16px;\n color: #0A1551;\n background-color: #fff;\n text-align: left;\n position: relative;\n cursor: pointer;\n outline: none;\n font-family: inherit;\n\n &:after {\n content: \"\";\n border-left: 1px solid #C8CEED;\n position: absolute;\n top: 0;\n width: 45px;\n height: 100%;\n right: 0;\n z-index: 1;\n background-repeat: no-repeat;\n background-position: 50%;\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.397 6.948L11.1.804A.5.5 0 0010.7 0H1.3a.5.5 0 00-.4.804l4.702 6.144a.5.5 0 00.794 0z' fill='%236F76A7' fill-rule='evenodd'/%3E%3C/svg%3E\");\n }\n\n + div[data-popper-placement] {\n width: 100%;\n }\n }\n\n [data-popper-placement] {\n z-index: 3;\n }\n\n .dropdown-container {\n padding: 0;\n margin: 0;\n background-color: #fff;\n border: 1px solid #d8dae9;\n border-top: 0 solid #d8dae9;\n\n & > div > b {\n display: list-item;\n padding: 14px;\n }\n }\n\n .dropdown-option {\n &-container {\n margin: 0;\n color: ${mainFontColor};\n border-width: 0;\n position: relative;\n font-size: 16px;\n padding: 14px;\n text-align: left;\n cursor: pointer;\n transition: .3s;\n\n &:after {\n content: \"\";\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background-color: #A4DAFF;\n position: absolute;\n top: 50%;\n right: 10px;\n transform: translateY(-50%);\n opacity: 0;\n transition: .3s;\n }\n\n &:hover {\n background-color: #EDF8FF;\n &:after {\n opacity: 1;\n }\n }\n\n &[aria-selected=\"true\"] {\n background-color: #DBF1FF;\n &:after {\n background-image: url(\"data:image/svg+xml,%3Csvg width='18' height='18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='9' cy='9' r='9' fill='%23FFF'/%3E%3Cpath d='m5.625 10 2.8125 2.25 4.5-5.625' stroke='%2309F' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");\n background-color: #DBF1FF;\n background-position: center;\n background-repeat: no-repeat;\n opacity: 1;\n }\n }\n }\n }\n\n .appStatus-disabledOnADay-timezone & {\n .dropdown-button {\n padding: 14px 46px 14px 10px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n width: 150px;\n\n @media screen and (min-width: 481px) and (max-width: 768px) {\n width: 225px;\n }\n }\n\n input[type=\"search\"] {\n width: 287px;\n padding: 10px 10px 10px 36px;\n border: 1px solid #D8DAE9;\n border-radius: 0 4px 0 0;\n background-image: url(\"data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.47432\n 1.49974c1.64444 0 2.9826 1.34575 2.9826 2.99989 0 .6231-.19111 1.22257-.55307 1.73387l-.29362.4147-.41216.29488c-.50835.36407-1.10445.55645-1.72375.55645-1.64486\n 0-2.9826-1.34576-2.9826-2.9999 0-1.65414 1.33774-2.99989 2.9826-2.99989zm0-1.49974C2.00302 0 0 2.01484 0 4.50005c0 2.48522 2.00302 4.50006 4.47432 4.50006.96565\n 0 1.85748-.31092 2.58815-.83403l3.59303 3.61372c.146.1468.3371.2202.5286.2202.1915 0 .3822-.0734.5282-.2202.2919-.2932.2919-.7691 0-1.0623L8.11925\n 7.10382c.52016-.73532.82897-1.63221.82897-2.60335 0-2.48521-2.00303-4.50004811-4.4739-4.50004811V0z' fill='%238D8FA6'/%3E%3C/svg%3E\"); background-repeat: no-repeat;\n background-position: 15px center;\n\n .dropdown-button & {\n border-bottom: none;\n padding-bottom: 10px;\n }\n }\n\n .dropdown-container {\n list-style: none;\n margin: 0;\n height: calc(250px + (1.7rem / 2));\n overflow-y: scroll;\n padding-right: 0px;\n padding-left: 0px;\n width: 285px;\n box-sizing: content-box;\n border-radius: 0 0 4px 4px;\n }\n }\n`;\n/* eslint-enable max-len */\n","import React, { Suspense, memo } from 'react';\nimport { safeLazy } from '@jotforminc/safe-lazy-import';\nimport { Loading } from '../Loading';\n\nconst LibIconSelector = safeLazy(() => import(/* webpackChunkName: \"IconSelector\" */'../Lib/IconSelector'));\n\nconst IconSelector = props => {\n return (\n }>\n \n \n );\n};\n\nexport default memo(IconSelector);\n","\n \n\n","import React, { memo } from 'react';\nimport { bool, elementType, string } from 'prop-types';\nimport { IconImageBrokenFilled } from '@jotforminc/svg-icons';\nimport '../item-image.scss';\n\nconst NoImage = ({ altText, showAltText, PlaceholderRenderer }) => {\n return (\n
    \n \n {altText && showAltText &&
    {altText}
    }\n
    \n );\n};\n\nNoImage.propTypes = {\n altText: string,\n showAltText: bool,\n PlaceholderRenderer: elementType\n};\n\nNoImage.defaultProps = {\n altText: '',\n showAltText: true,\n PlaceholderRenderer: IconImageBrokenFilled\n};\n\nexport default memo(NoImage);\n","import {\n bool, elementType, string\n} from 'prop-types';\nimport React, { memo, useEffect, useState } from 'react';\nimport NoImage from './NoImage';\n\nconst Image = ({\n imageURL, altText, showAltTextActiveOnError, PlaceholderRenderer\n}) => {\n const [useFallback, setUseFallback] = useState(false);\n\n useEffect(() => {\n setUseFallback(false);\n }, [imageURL]);\n\n if (useFallback) {\n return ;\n }\n\n return (\n { setUseFallback(true); }}\n className=\"imageElementImg\"\n />\n );\n};\n\nImage.propTypes = {\n imageURL: string,\n altText: string,\n showAltTextActiveOnError: bool,\n PlaceholderRenderer: elementType\n};\n\nImage.defaultProps = {\n imageURL: '',\n altText: '',\n showAltTextActiveOnError: true,\n PlaceholderRenderer: undefined\n};\n\nexport default memo(Image);\n","import React from 'react';\nimport SimpleItem from '../SimpleItem/SimpleItem';\n\nconst FormItem = props => ;\n\nexport default FormItem;\n","import React from 'react';\nimport { SVGIcon as SVGIconLib } from '@jotforminc/icon-selector';\nimport PropTypes from 'prop-types';\nimport { changeDomainWithCurrent } from '../../utils';\n\nconst SVGIcon = ({ url, ...props }) => ;\n\nSVGIcon.propTypes = {\n url: PropTypes.string.isRequired\n};\n\nexport default SVGIcon;\n","import Styled, { css } from 'styled-components';\n\nconst dimension = '44px';\nconst largeDimension = '100px';\n\nexport const ScItemIcon = Styled.div`\n min-width: ${dimension};\n height: ${dimension};\n margin: 0 8px;\n border-radius: 4px;\n display: flex;\n align-self: center;\n pointer-events: none;\n ${({ backgroundColor }) => (backgroundColor ? `\n background-color: ${backgroundColor};\n ` : '')}\n position: relative;\n\n & > div {\n width: 35px;\n height: 35px;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n\n svg {\n ${({ iconColor }) => (iconColor ? `\n fill: ${iconColor};\n ` : '')}\n }\n\n img {\n width: 100%;\n }\n }\n\n ${({ elementSize }) => (elementSize === 'large' && css`\n min-width: ${largeDimension};\n height: ${largeDimension};\n\n & > div {\n width: 68px;\n height: 68px;\n }\n `)};\n\n ${({ itemTextAlignment }) => {\n switch (itemTextAlignment) {\n case 'left':\n return 'margin: 0 16px 0 0;';\n case 'center':\n return 'margin: 0 0 8px 0;';\n case 'right':\n return 'margin: 0 0 0 16px;';\n default:\n return '';\n }\n }}\n`;\n","import React, { useMemo } from 'react';\nimport { bool, string } from 'prop-types';\nimport SVGIcon from '../../SVGIcon';\nimport { ITEM_TYPES } from '../../../constants/itemTypes';\nimport { getDocumentType } from '../../../utils';\nimport { ScItemIcon } from '../../ItemIcon/scItemIcon';\nimport { ITEM_ICONS, RESOURCE_SELECTION_ICONS } from '../../../constants';\nimport { FEATURE_NAMES } from '../../../constants/features';\nimport { isFeatureEnabled } from '../../../utils/features/helper';\n\nexport const typeHasItem = type => Object.keys(ITEM_ICONS).includes(type);\n\nconst SimpleIcon = ({\n iconURL, itemType, fileType, itemTextAlignment, itemIconBgColor, itemIconColor, elementSize, useResourceSelectionIcons, iconClassName\n}) => {\n if (!typeHasItem(itemType)) return null;\n\n const isFullIconUrlEnabled = isFeatureEnabled(FEATURE_NAMES.FullIconUrl);\n const url = isFullIconUrlEnabled ? `https://cdn.jotfor.ms${iconURL}` : iconURL;\n\n const iconProps = useResourceSelectionIcons ? RESOURCE_SELECTION_ICONS[itemType] : (\n itemType === ITEM_TYPES.DOCUMENT\n ? ITEM_ICONS[itemType][getDocumentType(fileType)]\n : ITEM_ICONS[itemType]\n ) || {};\n const { Icon, bgColor } = iconProps;\n const ItemIcon = useMemo(() => (iconURL ? : ), [iconURL, Icon]);\n if (!ItemIcon) return null;\n\n return (\n \n
    \n {ItemIcon}\n
    \n \n );\n};\n\nSimpleIcon.propTypes = {\n iconURL: string,\n itemType: string,\n fileType: string,\n itemTextAlignment: string,\n itemIconBgColor: string,\n itemIconColor: string,\n elementSize: string,\n useResourceSelectionIcons: bool,\n iconClassName: string\n};\n\nSimpleIcon.defaultProps = {\n iconURL: '',\n itemType: '',\n fileType: '',\n itemTextAlignment: '',\n itemIconBgColor: '',\n itemIconColor: '',\n elementSize: '',\n useResourceSelectionIcons: false,\n iconClassName: ''\n};\n\nexport default SimpleIcon;\n","import React, { useCallback, useMemo } from 'react';\nimport {\n elementType, bool, string, node\n} from 'prop-types';\nimport { checkMobilePhone, sanitizeHTML } from '../../../utils';\nimport { DefaultDivRenderer } from '../defaultRenderers';\nimport { withContentWrapper } from '../withContentWrapper';\n\nconst SimpleItem = ({\n TitleRenderer, DescriptionRenderer,\n showIcon, IconRenderer,\n title, description,\n badge, iconClassName\n}) => {\n const isMobile = checkMobilePhone();\n // Consider twice while adding prop!\n const contentPart = useMemo(withContentWrapper(() => (\n <>\n {sanitizeHTML(title)}\n {sanitizeHTML(description)}\n {isMobile ? badge : null}\n \n )), [title, description, DescriptionRenderer, badge]); // In any case of extra render; consider use individually memoed components\n\n const Wrapper = useCallback(props => {\n const wrapperClassName = showIcon ? 'withIconItemContent' : 'withBadgeItemContent';\n return (!showIcon && !badge) ? (\n // eslint-disable-next-line react/prop-types\n <>{props.children}\n ) : (\n
    \n );\n }, [showIcon, badge]);\n\n const iconPart = useMemo(() => showIcon && (\n \n ), [showIcon, IconRenderer]);\n\n const badgePart = useMemo(() => !!badge && !isMobile && badge);\n\n return (\n \n {iconPart}\n {contentPart}\n {badgePart}\n \n );\n};\n\nSimpleItem.propTypes = {\n title: string,\n description: string,\n showIcon: bool,\n IconRenderer: elementType,\n TitleRenderer: elementType,\n DescriptionRenderer: elementType,\n badge: node,\n iconClassName: string\n};\nSimpleItem.defaultProps = {\n title: '',\n description: '',\n showIcon: false,\n IconRenderer: null,\n TitleRenderer: DefaultDivRenderer,\n DescriptionRenderer: DefaultDivRenderer,\n badge: undefined,\n iconClassName: ''\n};\n\nexport default SimpleItem;\n","import React from 'react';\n\nexport const DefaultDivRenderer = ({ ...props }) =>
    ;\n","import React from 'react';\n\nexport const withContentWrapper = WrappedComponent => props => (\n
    \n \n
    \n);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport SELECTORS from '../../../store/selectors';\n\nconst DefaultStartElement = () => {\n const { listBgColor, appBgColor } = useSelector(SELECTORS.getAppInfoWithDefaults);\n const { id: themeId } = useSelector(SELECTORS.getSelectedAppTheme) || {};\n const defaultColors = { background: appBgColor, icon: listBgColor };\n\n const getSvgColors = theme => {\n switch (theme) {\n case 'shadow':\n return { background: listBgColor, icon: appBgColor };\n case 'default':\n return { background: '#E3E5F5', icon: '#6C73A8' };\n default:\n return defaultColors;\n }\n };\n\n const svgColors = themeId ? getSvgColors(themeId) : defaultColors;\n\n return (\n \n \n \n \n );\n};\n\nexport default DefaultStartElement;\n","/* eslint-disable react/prop-types */\nimport React from 'react';\nimport { t } from '@jotforminc/translation';\nimport { OPTION_VALUES, SIDE_SELECTION_DEFAULTS } from '../../modules/Builder/components/HomePage/RightPanel/ListItemSideItemSelection/constants';\nimport SvgRenderer from '../common/SvgRenderer';\nimport { changeDomainWithCurrent, sanitizeHTML } from '../../utils';\nimport { ScIconWrapper } from './styled';\nimport DefaultImage from './DefaultImage';\n\nexport const VALUE_BOUNDED_OPTIONS = {\n [OPTION_VALUES.ICON]: { props: ['url', 'svgRef'] },\n [OPTION_VALUES.BUTTON]: { props: ['text'] }\n};\n\nexport const getSideElementProps = (isEnd = false) => ({\n [OPTION_VALUES.ICON]: {\n style: isEnd ? { width: 20, height: 20 } : { width: 36, height: 36 }\n }\n});\n\nexport const sideOptionRenderer = ({ type, data }, isEnd = false) => {\n const boundedProps = VALUE_BOUNDED_OPTIONS[type];\n const checkStrategy = boundedProps?.checkEvery ? 'every' : 'some';\n if (boundedProps && !boundedProps.props?.[checkStrategy](key => !!data?.[key])) {\n return null;\n }\n\n const staticProps = getSideElementProps(isEnd)[type];\n\n switch (type) {\n case OPTION_VALUES.IMAGE: {\n // eslint-disable-next-line jsx-a11y/alt-text\n return () => (\n <>\n {\n data === SIDE_SELECTION_DEFAULTS[type]\n ? \n : {t('list\n }\n \n );\n }\n\n case OPTION_VALUES.AVATAR: {\n return () => (\n
    \n {\n data === SIDE_SELECTION_DEFAULTS[type]\n ? \n : {t('list\n }\n
    \n );\n }\n\n case OPTION_VALUES.ICON: {\n return ({ colorScheme }) => {\n return (\n \n \n \n );\n };\n }\n\n case OPTION_VALUES.CUSTOM_TEXT: {\n return ({ onPropChange, TitleRenderer }) => (\n onPropChange({ text: val }),\n characterLimit: 15\n }}\n >\n {sanitizeHTML(data?.text)}\n \n );\n }\n\n case OPTION_VALUES.BUTTON: {\n return ({ onPropChange, TitleRenderer }) => {\n return (\n onPropChange({ text: val }),\n characterLimit: 20\n }\n }\n >\n {sanitizeHTML(data?.text)}\n \n );\n };\n }\n\n default:\n return null;\n }\n};\n","import styled from 'styled-components';\n\nexport const ScListItemContainer = styled.div`\n display: flex;\n align-items: center;\n width: 100%;\n`;\n\nexport const ScSideElementContainer = styled.div`\n display: flex;\n flex-shrink: 0;\n font-size: 14px;\n align-items: center;\n justify-content: center;\n margin-left: ${props => (!props.isStartElement ? 'auto' : '')};\n margin-right: ${props => (props.isStartElement ? '16px' : '')};\n`;\n\nexport const ScIconWrapper = styled.div`\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n ${({ bgColor }) => (bgColor ? `background-color: ${bgColor};` : '')}\n ${({ bgColor }) => (bgColor ? 'border-radius: 4px;' : '')}\n`;\n","import React from 'react';\nimport Styled, { css } from 'styled-components';\n\nconst ScLoadingFrame = Styled.div`\n height: 99%;\n padding: 1em;\n display: flex;\n align-items: center;\n justify-content: center;\n\n ${({ isPreview }) => isPreview && css`\n position: absolute;\n width: 100%;\n z-index: 1;\n background-color: #fff;\n `}\n`;\n\nconst ScLoadingCircle = Styled.div`\n @keyframes spinz { to { transform: rotate(360deg); } }\n\n width: 26px;\n height: 26px;\n flex-shrink: 0;\n border-radius: 50%;\n border-width: 3px;\n border-style: solid;\n border-color: #d9d7e2 #d9d7e2 #d9d7e2 #8583a9;\n z-index: 2;\n font-size: 0;\n animation: spinz 1s cubic-bezier(0.49, 0.95, 0.46, 0.08) infinite forwards;\n`;\n\nexport function Loading(props) { // I think we need to add this to common.\n return (\n \n \n \n );\n}\n","import Styled from 'styled-components';\n\nexport const ScErrorFallback = Styled.div`\n padding: 1em;\n\n .errorFallback-text {\n margin-bottom: 16px;\n color: #fff;\n }\n\n .errorFallback-label {\n display: inline-block;\n width: auto;\n font-size: 1em;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.2px;\n margin-bottom: 0.4em;\n color: #fff;\n }\n\n .errorFallback-textarea {\n outline: none;\n background-color: rgb(72, 80, 104);\n width: 100%;\n color: rgb(255, 255, 255);\n border: none;\n border-radius: 2px;\n padding: 9px 12px 22px 9px;\n font-size: 16px;\n font-family: inherit;\n box-shadow: rgb(36 43 62) 0px 0px 0px 1px;\n margin-bottom: 0.4em;\n }\n`;\n","import React, { useCallback, useState } from 'react';\nimport { func, shape } from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { Button } from '@jotforminc/magnet';\nimport { Feature } from '@jotforminc/feature-toggle';\nimport { FEATURE_NAMES } from '../../constants/features';\nimport { ScErrorFallback } from './ScErrorFallback';\n\nconst DefaultErrorFallback = ({ error, resetErrorBoundary }) => {\n const [feedbackValue, setFeedbackValue] = useState('');\n const handleValueChange = useCallback(e => {\n setFeedbackValue(e.target.value);\n }, []);\n\n const handleSubmit = useCallback(() => {\n console.log('Report to phoenix', error);\n resetErrorBoundary();\n }, [feedbackValue]);\n return (\n \n

    {t('An unexpected error occurred.')}

    \n \n
    {t('Can you elaborate what were you trying to do?')}
    \n \n \n \n )}\n />\n
    \n );\n};\n\nDefaultErrorFallback.propTypes = {\n error: shape({}),\n resetErrorBoundary: func\n};\n\nDefaultErrorFallback.defaultProps = {\n error: {},\n resetErrorBoundary: f => f\n};\n\nexport default DefaultErrorFallback;\n","import React, { useCallback } from 'react';\nimport {\n arrayOf, elementType, any, func\n} from 'prop-types';\nimport { ErrorBoundary } from 'react-error-boundary';\n\nimport { renderable } from '../../constants/propTypes';\nimport DefaultErrorFallback from './DefaultErrorFallback';\nimport { captureException } from '../../utils';\n\nconst PortalErrorBoundary = ({\n Fallback, children, resetKeys, onReset\n}) => {\n const handleError = useCallback((error, info) => {\n console.log('PORTAL ERROR', { error, info });\n captureException(error);\n }, []);\n return (\n \n {children}\n \n );\n};\n\nPortalErrorBoundary.propTypes = {\n children: renderable.isRequired,\n Fallback: elementType,\n resetKeys: arrayOf(any),\n onReset: func\n};\n\nPortalErrorBoundary.defaultProps = {\n Fallback: DefaultErrorFallback,\n resetKeys: [],\n onReset: f => f\n};\n\nexport default PortalErrorBoundary;\n","import Styled from 'styled-components';\nimport { mainFont } from '../../styles/global';\n\nexport const ScFileUpload = Styled.div`\nwidth: 100%;\ndisplay: block;\n\n.imageUpload {\n .tabMenu {\n display: none;\n }\n\n .tabContent {\n padding: 0;\n\n .cardNew {\n border: none;\n min-height: fit-content;\n\n &-leftSide {\n max-width: 140px;\n flex: none;\n\n img {\n width: 120px;\n min-height: 120px;\n max-height: 120px;\n object-fit: contain;\n }\n }\n\n &-rightSide {\n max-width: calc(100% - 140px);\n flex: none;\n\n .cardNew-content {\n white-space: nowrap;\n margin-top: 0;\n\n &-fileName {\n width: 100%;\n color: #fff;\n }\n\n &-fileSize {\n font-size: 12px;\n color: rgba(255, 255, 255, 0.4)\n }\n\n &-button {\n color: #e39045;\n }\n }\n }\n }\n\n .appItem & {\n padding: 14px 28px;\n }\n }\n\n .fileUpload {\n color: #afc2da;\n background-color: transparent;\n color: #23283a;\n\n .appItem & {\n margin-top: 0;\n }\n }\n}\n\n.imageUpload.isTransparent {\n background-color: #fff9;\n\n .tabContent {\n .appItem & {\n padding: 0;\n }\n\n .fileUpload {\n color: #afc2da;\n background-color: transparent;\n color: #23283a;\n height: 150px;\n\n .appItem & {\n margin-top: 0;\n }\n\n &-verticalAlign {\n form#myForm {\n padding: 12px;\n }\n\n &.stage {\n .inlineUploadIcon {\n display: flex;\n }\n }\n\n &-text {\n font-size: 12px;\n user-select: none;\n\n &-loader {\n border: 3px solid #c3cad8;\n border-top: 3px solid #949eb2;\n }\n\n &-loading {\n font-size: 14px;\n font-family: ${mainFont};\n }\n }\n }\n }\n }\n}\n`;\n","import { shape, string } from 'prop-types';\nimport React from 'react';\n\nimport { ITEM_ICONS } from '../../constants';\nimport { DOCUMENT_ITEM_TYPES, ITEM_TYPES } from '../../constants/itemTypes';\nimport { getDocumentType } from '../../utils';\n\nconst Thumbnail = ({ file: { type, url } }) => {\n const iconType = getDocumentType(type);\n\n const renderIconProps = () => ITEM_ICONS[ITEM_TYPES.DOCUMENT][DOCUMENT_ITEM_TYPES.PLACEHOLDER];\n\n const renderThumbnail = () => {\n if (iconType === DOCUMENT_ITEM_TYPES.IMG) {\n return \"file_preview_thumbnail_alternative\";\n }\n const { Icon } = renderIconProps();\n const DocumentIcon = props => Icon(props);\n return (\n
    \n \n
    \n );\n };\n return renderThumbnail();\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 React, { useCallback, useRef } from 'react';\nimport { bool, func, string } from 'prop-types';\nimport { Button } from '@jotforminc/magnet';\nimport { IconImageArrowUpFilled } from '@jotforminc/svg-icons';\nimport { Utils } from '@jotforminc/uikit';\nimport { isMultiSelection } from '../../utils';\n\nconst FileInput = ({\n putFileInput, translate, buttonText, onClick, ...inputProps\n}) => {\n const inputRef = useRef();\n const isBrowserMsEdge = global.isMsEdge && global.isMsEdge === true;\n const htmlFor = isBrowserMsEdge ? 'dummyHtmlForElement' : null;\n const handleLabelClick = () => isBrowserMsEdge && inputRef.current && inputRef.current.click();\n const handlelInputClick = useCallback(e => {\n const multipleSelectionMode = isMultiSelection(e);\n if (!multipleSelectionMode) return onClick(e);\n\n e.preventDefault();\n }, []);\n\n const handleLabelKeyDown = event => Utils.isPressedKeyEnterOrSpace(event) && handleLabelClick();\n const onUploadBtnClick = () => inputRef.current.click();\n\n return (\n <>\n {\n handleLabelClick();\n onUploadBtnClick();\n }}\n onKeyDown={handleLabelKeyDown}\n startIcon={IconImageArrowUpFilled}\n className='fileInputBtn min-h-8 h-auto py-3 text-capitalize'\n type='button'\n >\n {translate(buttonText)}\n \n {putFileInput && (\n \n )}\n \n );\n /* eslint-enable */\n};\n\nFileInput.propTypes = {\n buttonText: string,\n putFileInput: bool,\n translate: func,\n onClick: func\n};\n\nFileInput.defaultProps = {\n buttonText: 'Upload File',\n putFileInput: true,\n translate: f => f,\n onClick: f => f\n};\n\nexport default FileInput;\n","import React from 'react';\nimport { Loader } from '@jotforminc/magnet';\nimport { func } from 'prop-types';\n\nconst FileLoadingRenderer = ({ translate }) => {\n return (\n
    \n \n
    \n {translate('Uploading')}\n ...\n
    \n
    \n );\n};\n\nFileLoadingRenderer.propTypes = {\n translate: func\n};\n\nFileLoadingRenderer.defaultProps = {\n translate: f => f\n};\n\nexport default FileLoadingRenderer;\n","import React from 'react';\nimport {\n bool, elementType, func, shape, string\n} from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { ImageUpload as CommonFileUpload } from '@jotforminc/image-upload';\nimport { ScFileUpload } from './scFileUpload';\nimport Thumbnail from './Thumbnail';\nimport FileInput from './FileInputRenderer';\nimport FileLoadingRenderer from './FileLoadingRenderer';\n\nconst PortalFileUpload = ({\n onFileUpload, onFileRemove, onFileUploading, theme, isFileUploading, value, onFileUploadError, TextWrapperRenderer,\n inputButtonText, allowedFileTypes, allowImageUpload\n}) => {\n return (\n \n onFileUpload(val)}\n renderTabs={['upload']}\n theme={theme}\n useAPI={true}\n forceSelect={false}\n allowedTypes={allowedFileTypes}\n allowImageUpload={allowImageUpload}\n onFileUploading={val => onFileUploading(val)}\n onFileRemove={() => onFileRemove()}\n isFileUploading={isFileUploading}\n removeButtonText={t('Remove File')}\n PreviewThumbnail={Thumbnail}\n FileInputRenderer={FileInput}\n mode=\"FileUpload\"\n onFileUploadError={onFileUploadError}\n {...!isFileUploading && {\n TextWrapperRenderer: TextWrapperRenderer\n }}\n inputButtonText={inputButtonText}\n ImageLoadingScreenRenderer={FileLoadingRenderer}\n />\n \n );\n};\n\nPortalFileUpload.propTypes = {\n onFileUpload: func,\n onFileRemove: func,\n onFileUploading: func,\n theme: string,\n isFileUploading: bool,\n value: shape({\n name: string,\n type: string,\n url: string,\n size: string\n }),\n onFileUploadError: func,\n TextWrapperRenderer: elementType,\n inputButtonText: string,\n allowedFileTypes: string,\n allowImageUpload: bool\n};\n\nPortalFileUpload.defaultProps = {\n onFileUpload: f => f,\n onFileRemove: f => f,\n onFileUploading: f => f,\n theme: 'isDark',\n isFileUploading: false,\n value: {},\n onFileUploadError: f => f,\n TextWrapperRenderer: undefined,\n inputButtonText: undefined,\n allowedFileTypes: '',\n allowImageUpload: false\n};\n\nexport default PortalFileUpload;\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.line {\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-width: 17px;\n stroke-dasharray: 0, 10px;\n stroke-dashoffset: -8px;\n animation-name: lineAnim1;\n animation-fill-mode: backwards;\n animation-duration: 0.5s;\n animation-direction: alternate;\n animation-iteration-count: infinite;\n animation-timing-function: ease-in-out;\n}\n.line2 {\n animation-delay: 0.1s;\n}\n.line3 {\n animation-delay: 0.2s;\n}\n@keyframes lineAnim1 {\n 0% {\n stroke-dasharray: 0, 18px;\n stroke-dashoffset: -8px;\n }\n 100% {\n stroke-dasharray: 18px;\n stroke-dashoffset: 0;\n }\n}\n`;\n\nconst Loader = ({ size, className }) => {\n return (\n \n \n \n \n \n \n \n );\n};\n\nexport default Loader;\n","import React from 'react';\nimport { DotsLoader } from '@jotforminc/apploaders';\nimport Styled from 'styled-components';\n\nconst ScContainer = Styled.div`\n width: 100%;\n height: 100%;\n\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst PublicAppLoading = () => {\n return (\n \n \n \n );\n};\n\nexport default PublicAppLoading;\n","import {\n func, number, oneOfType, string\n} from 'prop-types';\nimport React from 'react';\nimport Styled from 'styled-components';\n\nconst ScRangeInput = Styled.div`\n width: 100%;\n border: 1px solid #303339;\n box-shadow: rgb(86 70 50 / 10%) 0px 2px 4px;\n border-radius: 4px;\n background-color: var(--jfv-panel-right-item-background);\n padding: 9px 15px;\n\n input[type=range] {\n height: 28px;\n appearance: none;\n width: 100%;\n padding: 0;\n }\n\n input[type=range]:focus {\n outline: none;\n }\n\n input[type=range]::-webkit-slider-runnable-track {\n width: 100%;\n height: 4px;\n cursor: pointer;\n animate: 0.2s;\n box-shadow: 0px 0px 0px #000000;\n background: #8B919E;\n border-radius: 4px;\n border: 0px solid #000000;\n }\n\n input[type=range]::-webkit-slider-thumb {\n box-shadow: 0px 0px 0px #000000;\n height: 28px;\n width: 28px;\n border-radius: 25px;\n background: #FFFFFF;\n cursor: pointer;\n appearance: none;\n margin-top: -12px;\n }\n\n${({ rangeValue }) => (rangeValue && `\n input[type=range]::-webkit-slider-runnable-track {\n --ratio: calc((${rangeValue} - 1) / 99);\n --sx: calc(0.5 * 28px + var(--ratio) * (100% - 28px));\n }\n\n input[type=range]::-webkit-slider-runnable-track {\n background: linear-gradient(#0099FF,#0099FF) 0/var(--sx) 100% no-repeat, #8B919E;\n }\n`)}}\n\n input[type=range]::-moz-range-track {\n width: 100%;\n height: 4px;\n cursor: pointer;\n animate: 0.2s;\n box-shadow: 0px 0px 0px #000000;\n background: #8B919E;\n border-radius: 4px;\n border: 0px solid #000000;\n }\n\n input[type=range]::-moz-range-thumb {\n box-shadow: 0px 0px 0px #000000;\n height: 28px;\n width: 28px;\n border-radius: 25px;\n border-color: white;\n background: #FFFFFF;\n cursor: pointer;\n appearance: none;\n margin-top: -12px;\n }\n\n ${({ rangeValue }) => (rangeValue && `\n input[type=range]::-moz-range-track {\n --ratio: calc((${rangeValue} - 1) / 99);\n --sx: calc(0.5 * 28px + var(--ratio) * (100% - 28px));\n }\n\n input[type=range]::-moz-range-track {\n background: linear-gradient(#0099FF,#0099FF) 0/var(--sx) 100% no-repeat, #8B919E;\n }\n`)}}\n`;\n\nconst RangeSlider = ({\n value,\n onChange\n}) => {\n const handleChange = ({ target: { value: newValue } }) => onChange(newValue);\n\n return (\n \n \n \n );\n};\n\nRangeSlider.propTypes = {\n value: oneOfType([number, string]),\n onChange: func\n};\n\nRangeSlider.defaultProps = {\n value: 0,\n onChange: f => f\n};\n\nexport default RangeSlider;\n","import React, { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { Button } from '@jotforminc/magnet';\nimport * as ACTION_CREATORS from '../../store/actionCreators';\nimport { MODALS } from '../../constants/modals';\n\nconst ReplaceFormButton = ({ formID: currentFormID, ...props }) => {\n const dispatch = useDispatch();\n\n const handleSelectForm = useCallback(([formID]) => dispatch(ACTION_CREATORS.replaceFormItemAction({ itemID: currentFormID, formID })), [currentFormID]);\n\n const handleChangeResourceClick = useCallback(e => {\n e.stopPropagation();\n dispatch(ACTION_CREATORS.showGenericModalAction({\n name: MODALS.FORM_PICKER_MODAL,\n onConfirm: handleSelectForm,\n initialSelectedForms: [currentFormID],\n isChangeFormAction: true,\n isMultiSelect: false\n }));\n }, [handleSelectForm, currentFormID]);\n\n return (\n \n );\n};\n\nReplaceFormButton.propTypes = {\n formID: PropTypes.string.isRequired\n};\n\nexport default ReplaceFormButton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { renderable } from '../../constants/propTypes';\n\nconst TetheredWrapper = ({ hasWrapper, children, Wrapper }) => (hasWrapper ? {children} : children);\n\nTetheredWrapper.propTypes = {\n hasWrapper: PropTypes.bool.isRequired,\n children: renderable.isRequired,\n Wrapper: PropTypes.elementType.isRequired\n};\n\nexport default TetheredWrapper;\n","import Styled from 'styled-components';\nimport { Tooltip as UIKitTooltip } from '@jotforminc/uikit';\nimport { rightPanelItemBorderColor } from '../../styles/colors';\n\nexport const ScUIKitTooltip = Styled(UIKitTooltip)`\nfont-size: .75rem;\nline-height: normal;\npadding: .5rem;\ntext-transform: lowercase;\nborder-radius: 2px;\ncolor: #fff;\nfont-weight: 400;\nbackground-color: ${rightPanelItemBorderColor};\ntext-align: right;\nz-index: 2;\n\n&:first-letter { text-transform: uppercase; }\n\n&[data-popper-placement^='top']>[data-popper-arrow] {\n bottom: -4px;\n}\n&[data-popper-placement^='bottom']>[data-popper-arrow] {\n top: -4px;\n}\n&[data-popper-placement^='left']>[data-popper-arrow] {\n right: -4px;\n}\n&[data-popper-placement^='right']>[data-popper-arrow] {\n left: -4px;\n}\n\n`;\n\nexport const ScTooltipArrow = Styled.div`\n// fix for tooltip arrow to point correct element\n// related link for fix: https://github.com/floating-ui/react-popper/issues/364\nwidth: 10px;\nheight: 10px;\n\n&:before{\n content: '';\n display: block;\n width: 10px;\n height: 10px;\n background-color: ${rightPanelItemBorderColor};\n transform: rotate(45deg);\n}\n`;\n","import React, { forwardRef } from 'react';\nimport { elementType, shape } from 'prop-types';\nimport { ScUIKitTooltip, ScTooltipArrow } from './scTooltip';\n\nconst Tooltip = forwardRef(({ popoverOptions, children, ...props }, ref) => {\n return (\n \n {children}\n \n \n );\n});\n\nTooltip.propTypes = {\n popoverOptions: shape({}),\n children: elementType\n};\nTooltip.defaultProps = {\n popoverOptions: {\n placement: 'bottom-end',\n modifiers: [\n {\n name: 'offset',\n options: {\n offset: [0, 8]\n }\n }\n ]\n },\n children: f => f\n};\nexport default Tooltip;\n","import React from 'react';\nimport propTypes from 'prop-types';\nimport { SVGIcon } from '@jotforminc/icon-selector';\nimport appConfig from '../../constants/appConfig';\n\nconst SvgRenderer = ({\n svgRef, iconColor, url, style\n}) => {\n const isIconSpriteLoaded = !!document.getElementById(appConfig.svgIconsContainer);\n const buildr = isIconSpriteLoaded && svgRef;\n\n if (buildr) {\n return (\n \n \n \n );\n }\n return (\n \n );\n};\n\nSvgRenderer.propTypes = {\n svgRef: propTypes.string,\n url: propTypes.string,\n iconColor: propTypes.string,\n style: propTypes.object\n};\n\nSvgRenderer.defaultProps = {\n svgRef: '',\n url: '',\n iconColor: '',\n style: {}\n};\n\nexport default SvgRenderer;\n","import { getAppPath as jfGetBasePath } from '@jotforminc/router-bridge';\n\nimport { isAppSubdomain } from '../utils';\n\nconst appTemplatesPreviewPrefix = '/app-templates/preview/app';\nexport const getBasePath = () => {\n const basePath = jfGetBasePath();\n const appSlug = window?.__appSlug;\n const userSlug = window?.__userSlug;\n const isStandaloneWithSlug = window?.isStandaloneWithSlug;\n const isAppJotform = isAppSubdomain();\n switch (true) {\n case isAppJotform && isStandaloneWithSlug:\n return `/${userSlug}/${appSlug}`;\n case isAppJotform:\n return '/';\n case window.location.href.includes(appTemplatesPreviewPrefix):\n return appTemplatesPreviewPrefix;\n case isStandaloneWithSlug:\n return `${basePath}/${userSlug}/${appSlug}`;\n default:\n return basePath;\n }\n};\n\nexport default {\n basePath: getBasePath(),\n svgIconsContainer: 'app-icons',\n builderToasterContainerID: 'builderPortalToaster',\n publicToasterContainerID: 'publicPortalToaster',\n sentryURL: 'https://36d29a013f8a4bd7adfe310f5fe4d75a@o61806.ingest.sentry.io/5223511',\n embeddedAppQS: 'appEmbedded=1'\n};\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","import React from 'react';\nimport {\n IconImagesFilled, IconImageSliderFilled, IconVideoFilled, IconMapLocationPinFilled, IconShareNodesFilled, IconMessageStarFilled, IconSpacerVerticalFilled\n} from '@jotforminc/svg-icons';\n\nexport const overriddenFeaturedWidgetPropertiesMap = {\n '529cd0ea8afa8f742d000004': { icon: () => }, // Image Slider\n '0fff4c94790070b09933edd8': { icon: () => , name: 'Map' }, // Open Street Map\n '529260f705a7114f70000008': { icon: () => }, // Social Follow\n '592d0b6764f0c37320000472': { icon: () => , name: 'Testimonial' }, // Testimonials\n '5273bb4faa80af0979000005': { icon: () => , name: 'Video' }, // Youtube\n '528ea7c6a4de152e2a00000b': { icon: () => , name: 'Spacer' }, // Spacer\n '12e02d58a07168bd32df509c': { icon: () => , name: 'Image Gallery' } // Image Gallery\n};\n\nexport const FeaturedWidgetIDs = [\n '12e02d58a07168bd32df509c', // Image Gallery\n '529cd0ea8afa8f742d000004', // Image Slider\n '5273bb4faa80af0979000005', // YouTube\n '0fff4c94790070b09933edd8', // Open Street Map\n '529260f705a7114f70000008', // Social Follow\n '592d0b6764f0c37320000472' // Testimonials\n];\n\nexport const PageElementWidgetIDs = [\n '528ea7c6a4de152e2a00000b' // Spacer\n];\n\nexport const OtherWidgetIDs = [\n '5297606bfe8fa6bf0d000016', // Data Grid\n '529641beb15ce2ac76000007', // PDF Embedder\n '5293065005a7114f7000002a', // Fit Text\n '5295629cba137d764f000004', // Iframe Embed\n '53ba6d90e4c0226c7a000007', // Facebook Like Box\n '5272130bf9879ec031000017', // Instagram\n '5374688fa2c8bddc16000019', // Show Map Location\n '52900b6557a7644251000004', // QR Code\n '529d9a5c4b5cd3fd5a000005', // Animated Heading\n 'e5cea8c176512adc41b76621', // Whatsapp\n '5272055ff9879ec031000008', // SoundCloud\n '528ef93577d598b430000010', // Countdown\n '5298b86b81b4577459000026', // Day Countdown\n '526a2cd08a881e882100000c', // Vimeo\n '529d9f15f3d08cfe5d000004', // Cool Caption\n '5295bb771a667c525e000007', // Kinomap\n '5295bdbba3ba8bd35e000004', // Photozou\n '54c10483b90217b7300000b7', // Basic Separator\n '529333ae5b04b0c007000004', // Fancy Timer\n '52722f603e8f4eec31000031', // Twitter\n '52945520dacb3d5320000015', // Ticker\n '5293852fb05330801c000004', // Big Header (City)\n '527210b1f9879ec03100000e', // Spotify\n '56a707d26f2fcf1a7b000004', // Comparison Slider\n '587cd59512ec8eda4b000004', // Cincopa DeepUploader\n '537ddad0f080c17a6d000086', // AutoScrolling Text\n '52722eb93e8f4eec3100002e', // PasteBin\n '5295afd37da55cb758000008', // 23 Video\n '5295ba2b4a87e6175e000004', // Giphy\n '5293030905a7114f70000027', // Digital Clock\n '5295bc6528947a7d5e000004', // LogoTV\n '526a318cdeab09892100001c', // Animoto\n '52971c2431357d3907000011', // Draw.io Embedder\n '528ed87181616a2f2a00001e', // Skype Call Button\n '527261883e8f4eec31000035', // Sketchfab\n '5294a0b8bf38bd4034000007', // Chuck Norris Jokes\n '52945fef3477f3512000001a', // Big Header (Chubby)\n '529cb40bcffa1df571000004', // Quotes\n '529cf1de381e0e8840000004', // Arc Text\n '5298b2a88868157559000021', // Math Graphs\n '526a2d72deab09892100000d', // Dotsub\n '526a2dbf8a881e882100000f', // Funny or Die\n '5295c144a9770db75f000004', // WordPress TV\n '5295bf984d4ed6385f000004', // TED\n '52a6ccdafbe985206800000f', // World Time\n '529ca19069fc7db354000004', // Livestream\n '527211b7f9879ec031000011', // Flickr\n '527213673e8f4eec3100000d', // Pinterest\n '52721af9f9879ec031000023', // Circuitlab\n '52950bf5bfdbf21b4d000005', // Spoiler\n '52722e513e8f4eec3100002b', // Scribd\n '5283818625d5b96b67000004', // Viddler\n '527ca0b14966e5c956000004', // MixCloud\n '7089d6db5602ca02def704df', // Ziggeo Video Player\n '526a31538a881e8821000015', // DailyMotion\n '52946064dacb3d5320000023', // Big Header (Comics)\n '529464a3dacb3d5320000028', // Rss Reader\n '52721c2f3e8f4eec31000022', // deviantART\n '526a33768a881e882100001e', // Youku\n '52945f44dacb3d5320000020', // Big Header (Sports)\n '5295bfc6edbacd465f000004' // Trailer Addict\n];\n\nexport const AllWidgetIDs = [\n ...FeaturedWidgetIDs,\n ...PageElementWidgetIDs,\n ...OtherWidgetIDs\n];\n","export const FEATURE_NAMES = {\n FeedbackOnError: 'FeedbackOnError',\n AppThemes: 'AppThemes',\n ShareAsTemplate: 'ShareAsTemplate',\n Embed: 'Embed',\n CustomSlug: 'CustomSlug',\n EmbeddedForm: 'EmbeddedForm',\n TopBar: 'TopBar',\n AppSubdomain: 'AppSubdomain',\n FullIconUrl: 'FullIconUrl',\n AppFooter: 'AppFooter',\n SortPages: 'SortPages',\n BuilderTopBar: 'BuilderTopBar',\n ImageLink: 'ImageLink',\n AppHeaderVisibility: 'AppHeaderVisibility',\n AppLogoSize: 'AppLogoSize',\n ItemDuplication: 'ItemDuplication',\n ItemDuplicationToPage: 'ItemDuplicationToPage',\n MultipageImps: 'Multipage Imps',\n FormResource: 'FormResource',\n ProductList: 'ProductList',\n Flags: 'Flags',\n MobileProductDetail: 'MobileProductDetail',\n FormFields: 'FormFields',\n TeamResourcePicker: 'TeamResourcePicker',\n NewNavigation: 'NewNavigation',\n TeamCollaboration: 'TeamCollaboration',\n SignField: 'SignField',\n OverQuota: 'OverQuota',\n ThankYouPageDisplayTime: 'ThankYouPageDisplayTime',\n DonationItem: 'DonationItem',\n PWAEnabled: 'PWAEnabled',\n ContactInformation: 'ContactInformation',\n ShareOptions: 'ShareOptions',\n NewPaymentModal: 'NewPaymentModal',\n HelpMenu: 'HelpMenu',\n CardItem: 'CardItem',\n List: 'List',\n PushNotification: 'PushNotification',\n AiAssistant: 'AiAssistant',\n UserManagement: 'UserManagement',\n BackNavigation: 'BackNavigation'\n};\n\nexport const defaultFeatures = {\n [FEATURE_NAMES.Embed]: true, // Needs some refactor and cleaning like OldPublish before removing\n [FEATURE_NAMES.EmbeddedForm]: true,\n [FEATURE_NAMES.TopBar]: true,\n [FEATURE_NAMES.ImageLink]: true,\n [FEATURE_NAMES.BuilderTopBar]: true,\n [FEATURE_NAMES.SortPages]: true,\n [FEATURE_NAMES.AppHeaderVisibility]: true,\n [FEATURE_NAMES.ItemDuplication]: true,\n [FEATURE_NAMES.AppLogoSize]: true,\n [FEATURE_NAMES.MultipageImps]: true,\n [FEATURE_NAMES.MobileProductDetail]: true,\n [FEATURE_NAMES.TeamResourcePicker]: true,\n [FEATURE_NAMES.TeamCollaboration]: true,\n [FEATURE_NAMES.OverQuota]: true,\n [FEATURE_NAMES.ThankYouPageDisplayTime]: true,\n // WIPs\n [FEATURE_NAMES.FeedbackOnError]: false,\n [FEATURE_NAMES.AppThemes]: false,\n [FEATURE_NAMES.AppSubdomain]: window.JOTFORM_ENV === 'PRODUCTION' && !window.isHIPAA && !window.isGDPR,\n [FEATURE_NAMES.FormResource]: false,\n [FEATURE_NAMES.ProductList]: window.isStoreBuilderReleased,\n [FEATURE_NAMES.Flags]: false,\n [FEATURE_NAMES.FormFields]: false,\n [FEATURE_NAMES.SignField]: window.isSignReleased,\n [FEATURE_NAMES.DonationItem]: window.isDonationBoxReleased,\n [FEATURE_NAMES.NewPaymentModal]: true,\n [FEATURE_NAMES.PushNotification]: window.isPushNotificationBetaUser,\n [FEATURE_NAMES.AiAssistant]: window.isAppAIAssistantBetaUser,\n [FEATURE_NAMES.LinkField]: false,\n [FEATURE_NAMES.UserManagement]: window.isPortalUserManagementBetaUser,\n\n // Long terms\n [FEATURE_NAMES.ShareAsTemplate]: window.isTemplateCreatorUser,\n [FEATURE_NAMES.AppFooter]: false,\n [FEATURE_NAMES.ItemDuplicationToPage]: false,\n [FEATURE_NAMES.FullIconUrl]: false,\n [FEATURE_NAMES.PWAEnabled]: false,\n [FEATURE_NAMES.ContactInformation]: true,\n [FEATURE_NAMES.ShareOptions]: true,\n [FEATURE_NAMES.HelpMenu]: false,\n\n [FEATURE_NAMES.CardItem]: true,\n [FEATURE_NAMES.List]: window.isListElementBetaUser,\n [FEATURE_NAMES.BackNavigation]: false\n};\n\nexport const ignoreList = [\n FEATURE_NAMES.AppSubdomain,\n FEATURE_NAMES.FullIconUrl,\n FEATURE_NAMES.ItemDuplicationToPage,\n FEATURE_NAMES.AppFooter,\n FEATURE_NAMES.FormResource,\n FEATURE_NAMES.HelpMenu\n];\n\nexport const sessionStorageEnabledFeatures = [];\n\nexport const localStorageEnabledFeatures = [];\n\nexport const adminOnlyFeatures = [];\n\nconst testFeaturesKeys = {\n [FEATURE_NAMES.AppSubdomain]: 'appSubdomainTester'\n};\n\nexport const isTesterFeatureEnabled = (user, featureName) => {\n return !!user[testFeaturesKeys[featureName]];\n};\n","\n \n\n","\n \n\n","\n \n\n","\n \n \n \n \n \n\n","\n \n \n \n \n \n\n","\n \n \n \n \n \n \n\n","import React from 'react';\nimport { IconDocumentSimpleFilled } from '@jotforminc/svg-icons';\nimport Styled from 'styled-components';\n\nconst ScDocumentPlaceholder = Styled.div`\n background-color: #303339;\n border-radius: 4px;\n width: 120px;\n height: 120px;\n display: flex;\n align-items: center;\n justify-content: center;\n\n svg {\n color: #AEB0B8;\n width: 40px;\n height: 40px;\n }\n`;\nconst CustomPlaceholderIcon = () => (\n \n \n \n);\n\nexport default CustomPlaceholderIcon;\n","import {\n IconProductFormBuilderFilled, IconProductFormBuilderColorBorder, IconProductSignFilled, IconProductSignColorBorder, IconLinkDiagonal, IconDocumentPdfFilled, IconDocumentXlsxFilled,\n IconDocumentDocFilled, IconDocumentImageFilled, IconDocumentSimpleFilled, IconProductTablesFilled, IconProductTablesColorBorder,\n IconProductReportBuilderFilled, IconProductReportBuilderColorBorder, IconProductInboxFilled, IconProductInboxColorBorder\n} from '@jotforminc/svg-icons';\nimport CustomPlaceholderIcon from '../components/CustomPlaceholderIcon';\nimport { DOCUMENT_ITEM_TYPES, ITEM_TYPES } from './itemTypes';\nimport { checkMobilePhone } from '../utils';\nimport { LATEST_VERSION, useAppDefaults, useItemDefaults } from '../properties';\nimport { applyAlpha } from '../utils/styleUtils';\nimport { FEATURE_NAMES } from './features';\nimport { isFeatureEnabled } from '../utils/features/helper';\nimport { ItemVisualPropTypes } from './propTypes';\n\nexport const COLLABORATION = {\n TIMEOUT_SECOND: 15 * 60,\n COUNTDOWN_SECOND: 30\n};\n\nexport const SHOPPING_NOTIFICATION_TYPES = {\n ADD_PRODUCT: 'add',\n DELETE_PRODUCT: 'delete',\n FAVORITE_PRODUCT: 'favorite',\n UNFAVORITE_PRODUCT: 'unfavorite'\n};\n\nexport const 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\nexport const APP_MODES = {\n builder: 'APP_BUILDER',\n public: 'APP_PUBLIC'\n};\n\nexport const PORTAL_ERROR_MAP = {\n FETCH: {\n 404: 'DELETED',\n default: 'UNKNOWN_ERROR',\n FORM_NOT_FOUND: 'FORM_NOT_FOUND',\n builder: 'BUILDER_APP_NOT_FOUND'\n },\n DISABLED_APP: {\n default: 'DISABLED_APP'\n },\n OFFLINE: 'OFFLINE',\n CREATE: {\n CREATE_APP: 'CREATE_APP',\n CREATE_APP_RATE_LIMIT: 'CREATE_APP_RATE_LIMIT',\n CREATE_APP_RATE_LIMIT_GUEST: 'CREATE_APP_RATE_LIMIT_GUEST',\n default: 'CREATE_APP_UNKNOWN'\n },\n DELETED_APP: 'DELETED_APP'\n};\n\n// Values shouldn't be changed. They're persisted in the DB!\nexport const IMAGE_TYPE = {\n icon: 'LOGO/ICON',\n image: 'LOGO/IMAGE'\n};\n\nexport const IMAGE_PREVIEW_REMOVE_BUTTON_TEXTS = {\n [IMAGE_TYPE.icon]: 'Remove Icon',\n [IMAGE_TYPE.image]: 'Remove Image'\n};\n\nexport const FORM_PRODUCTS = { // Values are case sensitive!\n FORM: 'form',\n CONTINUE_DRAFT: 'continue',\n SENTBOX: 'sentbox',\n TABLES: 'tables',\n REPORT: 'report',\n SIGN: 'sign',\n PREVIOUS_ORDERS: 'sentbox_previousOrders',\n PREVIOUS_DONATIONS: 'sentbox_previousDonations'\n};\n\nexport const SCREEN_TYPES = { // Values are case sensitive, using in URL!\n CART: 'cart'\n};\n\nexport const DEFAULT_BUILDER_WIDTHS = {\n rightPanel: 470,\n mobileRightPanel: 360,\n leftPanel: 310,\n mobileLeftPanel: 300,\n main: 672\n};\n\nconst {\n rightPanel, leftPanel, main, mobileLeftPanel, mobileRightPanel\n} = DEFAULT_BUILDER_WIDTHS;\n\nconst rightPanelWidth = checkMobilePhone() ? mobileRightPanel : rightPanel;\nconst leftPanelWidth = checkMobilePhone() ? mobileLeftPanel : leftPanel;\n\nexport const WINDOW_SQUEEZE_VALUE = rightPanelWidth + leftPanelWidth + main + 40;\n\nexport const DESCRIPTION_LIMIT = 240; // TODO Acquire from commonDefinitions.json#/description.maxLength\n\nexport const APP_PREVIEW_URL_HASH = '#preview';\n\nexport const ITEM_ICONS = {\n [ITEM_TYPES.FORM]: {\n Icon: IconProductFormBuilderFilled\n },\n [ITEM_TYPES.LINK]: {\n Icon: IconLinkDiagonal\n },\n [ITEM_TYPES.TABLE_LINK]: {\n Icon: IconProductTablesFilled\n },\n [ITEM_TYPES.REPORT_LINK]: {\n Icon: IconProductReportBuilderFilled\n },\n [ITEM_TYPES.SENTBOX_LINK]: {\n Icon: IconProductInboxFilled\n },\n [ITEM_TYPES.SIGN_LINK]: {\n Icon: IconProductSignFilled\n },\n [ITEM_TYPES.DOCUMENT]: {\n [DOCUMENT_ITEM_TYPES.PDF]: {\n Icon: IconDocumentPdfFilled\n },\n [DOCUMENT_ITEM_TYPES.SHEET]: {\n Icon: IconDocumentXlsxFilled\n },\n [DOCUMENT_ITEM_TYPES.DOC]: {\n Icon: IconDocumentDocFilled\n },\n [DOCUMENT_ITEM_TYPES.IMG]: {\n Icon: IconDocumentImageFilled\n },\n [DOCUMENT_ITEM_TYPES.OTHER]: {\n Icon: IconDocumentSimpleFilled\n },\n [DOCUMENT_ITEM_TYPES.PLACEHOLDER]: {\n Icon: CustomPlaceholderIcon\n }\n }\n};\n\nexport const RESOURCE_SELECTION_ICONS = {\n [ITEM_TYPES.FORM]: {\n Icon: IconProductFormBuilderColorBorder\n },\n [ITEM_TYPES.TABLE_LINK]: {\n Icon: IconProductTablesColorBorder\n },\n [ITEM_TYPES.REPORT_LINK]: {\n Icon: IconProductReportBuilderColorBorder\n },\n [ITEM_TYPES.SENTBOX_LINK]: {\n Icon: IconProductInboxColorBorder\n },\n [ITEM_TYPES.SIGN_LINK]: {\n Icon: IconProductSignColorBorder\n }\n};\n\nexport const APP_LOGO_PROPS = {\n logoType: 'logoType', // svg/png\n logoColor: 'iconColor',\n logoBgColor: 'logoBackground',\n logoImageURL: 'logoURL',\n appLogoSize: 'appLogoSize'\n};\n\nexport const APP_ICON_PROPS = {\n logoType: 'appIconType', // svg/png\n logoColor: 'appIconColor',\n logoBgColor: 'appIconBackground',\n logoImageURL: 'appIconURL',\n svgRef: 'appIconSvgRef'\n};\n\nexport const APP_GRAPHIC_TYPES = {\n appIcon: 'appIcon',\n appLogo: 'appLogo'\n};\n\nexport const APP_HEADER_PROPS = {\n appHeaderBgColor: 'appHeaderBgColor',\n appHeaderBgURL: 'appHeaderBgURL',\n appHeaderBgCropInfo: 'appHeaderBgCropInfo',\n logoURL: 'logoURL',\n name: 'name',\n description: 'description',\n appFontColor: 'appFontColor',\n appHeaderTextAlignment: 'appHeaderTextAlignment',\n appFontFamily: 'appFontFamily'\n};\n\nexport const feedbackModalInfo = {\n JOTFORM_APPS: {\n formID: '201251889947972',\n featureName: 'Jotform Apps'\n },\n COPILOT: {\n formID: '242771576433967',\n featureName: 'Copilot'\n }\n};\n\nexport const APP_ICON_KEYS = [\n 'appIconColor', 'appIconBackground', 'appIconType', 'appIconURL', 'appIconSvgRef'\n];\n\nexport const BRANDING_DEFAULT_UTM_SCHEME = {\n source: 'app',\n medium: 'banner',\n campaign: 'powered-by-jotform-remove-label'\n};\n\nexport const LAYOUT_TYPES = {\n DEFAULT: 'DEFAULT',\n ALL_SHRINKED: 'ALL_SHRINKED',\n NO_ICON: 'NO_ICON',\n ALL_SHRINKED_NO_ICON: 'ALL_SHRINKED_NO_ICON',\n SHOW_ALL_FORMS: 'SHOW_ALL_FORMS',\n // MIXED: 'MIXED',\n PLAIN: 'PLAIN',\n ALL_SHRINKED_NO_HEADER: 'ALL_SHRINKED_NO_HEADER',\n LEFT_ALIGNED: 'LEFT_ALIGNED',\n RIGHT_ALIGNED: 'RIGHT_ALIGNED',\n CENTER_ALIGNED: 'CENTER_ALIGNED',\n ALL_LARGE_ELEMENT: 'ALL_LARGE_ELEMENT'\n};\n\nexport const LAYOUTS_WITH_COLOR_SETTINGS = [\n LAYOUT_TYPES.PLAIN\n];\n\nexport const getLayoutProps = (layoutType = LAYOUT_TYPES.DEFAULT, itemType = ITEM_TYPES.FORM) => {\n const {\n shrink,\n showItemIcon,\n itemBorderColor,\n itemBgColor,\n itemTextAlignment,\n elementSize,\n embeddedForm\n } = useItemDefaults(itemType);\n\n const {\n showAppHeader,\n appHeaderTextAlignment\n } = useAppDefaults(LATEST_VERSION);\n\n const isButtonElement = itemType === ITEM_TYPES.BUTTON;\n\n const relevantDefaultItemProps = {\n ...shrink && { shrink },\n ...showItemIcon && { showItemIcon },\n ...(itemBorderColor && !isButtonElement) && { itemBorderColor },\n ...(itemBgColor && !isButtonElement) && { itemBgColor },\n ...itemTextAlignment && { itemTextAlignment },\n ...elementSize && { elementSize },\n ...embeddedForm && { embeddedForm }\n };\n\n const defaultPortalProps = {\n showAppHeader,\n appHeaderTextAlignment\n };\n\n const LAYOUTS = {\n [LAYOUT_TYPES.DEFAULT]: {\n itemProps: {},\n portalProps: {}\n },\n [LAYOUT_TYPES.ALL_SHRINKED]: {\n portalProps: {},\n itemProps: { shrink: 'Yes' }\n },\n [LAYOUT_TYPES.NO_ICON]: {\n portalProps: {},\n itemProps: { showItemIcon: 'No' }\n },\n [LAYOUT_TYPES.ALL_SHRINKED_NO_ICON]: {\n itemProps: {\n showItemIcon: 'No',\n shrink: 'Yes',\n embeddedForm: 'No'\n }\n },\n [LAYOUT_TYPES.PLAIN]: {\n portalProps: { showAppHeader: 'No' },\n itemProps: {\n itemBorderColor: applyAlpha(itemBorderColor, 0),\n itemBgColor: applyAlpha(itemBgColor, 0),\n showItemIcon: 'No'\n }\n },\n [LAYOUT_TYPES.ALL_SHRINKED_NO_HEADER]: {\n portalProps: { showAppHeader: 'No' },\n itemProps: { shrink: 'Yes', embeddedForm: 'No' }\n },\n [LAYOUT_TYPES.LEFT_ALIGNED]: {\n portalProps: { appHeaderTextAlignment: 'left' },\n itemProps: { itemTextAlignment: 'left' }\n },\n [LAYOUT_TYPES.RIGHT_ALIGNED]: {\n portalProps: { appHeaderTextAlignment: 'right' },\n itemProps: { itemTextAlignment: 'right' }\n },\n [LAYOUT_TYPES.CENTER_ALIGNED]: {\n portalProps: { appHeaderTextAlignment: 'center' },\n itemProps: { itemTextAlignment: 'center' }\n },\n [LAYOUT_TYPES.ALL_LARGE_ELEMENT]: {\n portalProps: {},\n itemProps: { elementSize: 'large' }\n }\n };\n // problem here\n if (isFeatureEnabled(FEATURE_NAMES.EmbeddedForm)) {\n LAYOUTS[LAYOUT_TYPES.SHOW_ALL_FORMS] = {\n portalProps: {},\n itemProps: { embeddedForm: 'Yes', shrink: 'No' }\n };\n }\n\n const { itemProps: layoutItemProps, portalProps: layoutPortalProps } = LAYOUTS[layoutType] || {};\n\n // we only need props that exist in the item's defaults\n const filteredLayoutItemProps = Object.keys(relevantDefaultItemProps).reduce((prev, key) => {\n const value = layoutItemProps[key];\n return { ...prev, ...value && { [key]: value } };\n }, {});\n\n return {\n ...layoutItemProps && { itemProps: { ...relevantDefaultItemProps, ...filteredLayoutItemProps } },\n ...layoutPortalProps && { portalProps: { ...defaultPortalProps, ...layoutPortalProps } }\n };\n};\n\nexport const getProtectedStylingProps = (appLayout, item) => {\n // If layout change is not related with visual props, don't change the visual props.\n const stylingProps = {};\n if (!LAYOUTS_WITH_COLOR_SETTINGS.includes(appLayout)) {\n Object.keys(ItemVisualPropTypes).forEach(prop => {\n if (item[prop]) stylingProps[prop] = item[prop];\n });\n }\n return stylingProps;\n};\n\nexport const ITEM_ADDITION_ORDER_STRATEGY = {\n TO_END_OF_THE_PAGE: -1,\n MULTIPLE_ITEM_DUPLICATION: -2\n};\n\nexport const CHECKOUT_FORM_STATUSES = {\n INITIAL: 'INITIAL',\n OPENED: 'OPENED',\n PAYMENT: 'PAYMENT',\n SUBMITTED: 'SUBMITTED',\n COMPLETED: 'COMPLETED',\n GATEWAY_REDIRECT_INFO: 'GATEWAY_REDIRECT_INFO'\n};\n\nexport const UI_PROPS = {\n isParagraphInlineEditMode: 'isParagraphInlineEditMode',\n mobileContextMenuOpened: 'mobileContextMenuOpened',\n activeProductDetail: 'activeProductDetail',\n activeAccountBoxScreen: 'activeAccountBoxScreen',\n ctxMenuItemClicked: 'ctxMenuItemClicked',\n isGatewaySettingsDisplayed: 'isGatewaySettingsDisplayed',\n addElementButtonPulseCount: 'addElementButtonPulseCount',\n addElementButtonPulseVisible: 'addElementButtonPulseVisible',\n notificationPermissionState: 'notificationPermissionState',\n activePageID: 'activePageID',\n navigationStack: 'navigationStack'\n};\n\nexport const PORTAL_TYPES = {\n APP: 'APP',\n STORE: 'STORE',\n DONATION: 'DONATION'\n};\n\nexport const CHECKOUT_ITEM_PORTAL_TYPE_MAP = {\n [ITEM_TYPES.PRODUCT_LIST]: PORTAL_TYPES.STORE,\n [ITEM_TYPES.DONATION]: PORTAL_TYPES.DONATION\n};\n\nexport const getPortalTypeByItems = items => {\n const item = items.find(({ type }) => [ITEM_TYPES.DONATION, ITEM_TYPES.PRODUCT_LIST].includes(type));\n\n return CHECKOUT_ITEM_PORTAL_TYPE_MAP[item?.type] || PORTAL_TYPES.APP;\n};\n\nexport const ADD_ELELEMT_PULSE_EFFECT_MAX = 2;\nexport const ADD_ELELEMT_PULSE_EFFECT_LC_ST_KEY = 'appBuilderAddElementPulseSeen';\n\nexport const APP_BUILDER_TYPES = {\n DESKTOP: 'DESKTOP',\n MOBILE: 'MOBILE'\n};\n\nexport const NOTIFICATION_PERMISSION_STATES = {\n VISIBLE: 'VISIBLE',\n LOADING: 'LOADING',\n HIDDEN: 'HIDDEN',\n DENIED: 'DENIED',\n ERROR: 'ERROR'\n};\n\nexport const NOTIFICATION_ERROR_MESSAGES = {\n DAILY_LIMIT: 'NOTIFICATION_CAMPAIGN_DAILY_RATE_LIMIT_EXCEEDED',\n HOURLY_LIMIT: 'NOTIFICATION_CAMPAIGN_HOURLY_RATE_LIMIT_EXCEEDED',\n NOT_ALLOWED: 'NOT_ALLOWED'\n};\n\nexport const NOTIFICATION_DISMISS_KEY = 'appPushNotificationDismissed';\n\nexport const APP_PREVIEW_STATES = {\n IDLE: 'IDLE',\n LOADING: 'LOADING',\n READY: 'READY'\n};\n\nexport const LIVE_PREVIEW_SIZE_MODES = {\n FIT_HEIGHT: 'fitHeight',\n ACTUAL_SIZE: 'actualSize'\n};\n","export const ITEM_TYPES = {\n FORM: 'FORM',\n HEADING: 'HEADING',\n PARAGRAPH: 'PARAGRAPH',\n LINK: 'LINK',\n DOCUMENT: 'DOCUMENT',\n DONATION: 'DONATION',\n IMAGE: 'IMAGE',\n BUTTON: 'BUTTON',\n SHARE_BUTTON: 'SHARE_BUTTON',\n WIDGET: 'WIDGET',\n DIVIDER: 'DIVIDER',\n TABLE_LINK: 'TABLE_LINK',\n REPORT_LINK: 'REPORT_LINK',\n SENTBOX_LINK: 'SENTBOX_LINK',\n PRODUCT_LIST: 'PRODUCT_LIST',\n SIGN_LINK: 'SIGN_LINK',\n CONTACT_INFORMATION: 'CONTACT_INFORMATION',\n LIST: 'LIST',\n CARD_ITEM: 'CARD_ITEM'\n};\n\nexport const DATA_SOURCE_ITEMS = [\n ITEM_TYPES.LIST\n];\n\nexport const featurePermissionKeys = {\n [ITEM_TYPES.SIGN_LINK]: 'allowSign'\n};\n\nexport const DOCUMENT_ITEM_TYPES = {\n IMG: 'Image',\n PDF: 'PDF',\n SHEET: 'Sheet',\n DOC: 'Doc',\n OTHER: 'File',\n PLACEHOLDER: 'Placeholder'\n};\n\nexport const RESOURCE_TYPES = {\n FORM: 'FORM',\n SENTBOX: 'SENTBOX',\n TABLE: 'TABLE',\n REPORT: 'REPORT',\n SIGN: 'SIGN'\n};\n\nexport const LINK_BEHAVIOR_ITEMS = [\n ITEM_TYPES.REPORT_LINK,\n ITEM_TYPES.IMAGE\n];\n\nexport const PAGE_TYPE = 'PAGE';\n\nexport const ITEM_PROP_TYPE_VERSION = 2;\n\nexport const DATA_SOURCE_COLUMN_TYPES = {\n IMAGE: 'IMAGE',\n TEXT: 'TEXT',\n BOOLEAN: 'BOOLEAN'\n};\n","export const MODALS = {\n FORM_PICKER_MODAL: 'FORM_PICKER_MODAL',\n APP_IS_DONE_MODAL: 'APP_IS_DONE_MODAL',\n RESTART_PROGRESS_MODAL: 'RESTART_PROGRESS_MODAL',\n RESOURCE_PICKER_MODAL: 'RESOURCE_PICKER_MODAL',\n GUEST_LOGIN_MODAL: 'GUEST_LOGIN_MODAL',\n CLONE_APP_MODAL: 'CLONE_APP_MODAL',\n CHECKOUT_SUCCESS_MODAL: 'CHECKOUT_SUCCESS_MODAL',\n PRODUCT_ITEM_DETAIL_MODAL: 'PRODUCT_ITEM_DETAIL_MODAL',\n SEARCH_IN_PRODUCTS_MODAL: 'SEARCH_IN_PRODUCTS_MODAL',\n DELETE_PAGE_MODAL: 'DELETE_PAGE_MODAL',\n TEAM_STILL_EDITING: 'TEAM_STILL_EDITIN',\n PORTAL_FEEDBACK_MODAL: 'PORTAL_FEEDBACK_MODAL',\n EXIT_INTENT_SURVEY_MODAL: 'EXIT_INTENT_SURVEY_MODAL',\n CHECKOUT_FORM_PREVIEW_MODAL: 'CHECKOUT_FORM_PREVIEW_MODAL',\n WHAT_IS_NEW: 'WHAT_IS_NEW',\n SHARE_APP: 'SHARE_APP',\n PAYMENT_GATEWAY_PICKER_MODAL: 'PAYMENT_GATEWAY_PICKER_MODAL',\n // A/B Test: ctAppNameIconModal\n APP_NAME_ICON_SETTING_MODAL: 'APP_NAME_ICON_SETTING_MODAL',\n DATA_SOURCE_TABLE_PICKER_MODAL: 'DATA_SOURCE_TABLE_PICKER_MODAL',\n TABLE_PRODUCT_MODAL: 'TABLE_PRODUCT_MODAL',\n PREVENT_DETAIL_PAGE_DELETION_MODAL: 'PREVENT_DETAIL_PAGE_DELETION_MODAL'\n};\n\nexport const MODAL_EVENTS = {\n [MODALS.FORM_PICKER_MODAL]: 'formPickerModal',\n [MODALS.APP_IS_DONE_MODAL]: 'appIsDoneModal',\n [MODALS.RESTART_PROGRESS_MODAL]: 'restartProgressModal',\n [MODALS.RESOURCE_PICKER_MODAL]: 'resourcePickerModal',\n [MODALS.DATA_SOURCE_TABLE_PICKER_MODAL]: 'dataSourceTablePickerModal',\n [MODALS.GUEST_LOGIN_MODAL]: 'guestLoginModal',\n [MODALS.CLONE_APP_MODAL]: 'cloneAppModal',\n [MODALS.PRODUCT_ITEM_DETAIL_MODAL]: 'productItemDetailModal',\n [MODALS.SEARCH_IN_PRODUCTS_MODAL]: 'searchInProductsModal',\n [MODALS.DELETE_PAGE_MODAL]: 'deletePageModal',\n [MODALS.TEAM_STILL_EDITING]: 'teamsStillEditingModal',\n [MODALS.PORTAL_FEEDBACK_MODAL]: 'portalFeedbackModal',\n [MODALS.CHECKOUT_FORM_PREVIEW_MODAL]: 'checkoutFormPreviewModal',\n [MODALS.WHAT_IS_NEW]: 'whatsNewModal',\n [MODALS.SHARE_APP]: 'shareAppModal',\n [MODALS.PAYMENT_GATEWAY_PICKER_MODAL]: 'paymentGatewayPickerModal',\n [MODALS.DATA_SOURCE_TABLE_PICKER_MODAL]: 'dataSourceTablePickerModal',\n [MODALS.PREVENT_DETAIL_PAGE_DELETION_MODAL]: 'preventDetailPagedeletionModal'\n};\n","import { FORM_PRODUCTS } from './index';\n\nexport const DESTINATION_TYPES = {\n BACK: 'back',\n SCREEN: 'screen',\n PRODUCT: 'product',\n PAGE: 'page',\n SPECIAL_PAGE: 'specialPage',\n BUILDER_PAGE: 'builderPage'\n};\n\nexport const BUILDER_TABS = {\n BUILD: 'build',\n SETTINGS: 'settings',\n PUBLISH: 'publish'\n};\n\nexport const SETTINGS_SUBTABS = {\n DETAILS: 'details',\n APP_NAME: 'appName',\n SPLASH: 'splash'\n};\n\nexport const PUBLISH_SUBTABS = {\n LINK: 'link',\n EMBED: 'embed'\n};\n\nexport const DEFAULT_SUBTABS = {\n [BUILDER_TABS.BUILD]: '',\n [BUILDER_TABS.SETTINGS]: SETTINGS_SUBTABS.DETAILS,\n [BUILDER_TABS.PUBLISH]: PUBLISH_SUBTABS.LINK\n};\n\nexport const SPECIAL_PAGES = {\n CART: 'cart',\n CHECKOUT: 'checkout',\n PREVIOUS_ORDERS: 'previousOrders',\n PREVIOUS_DONATIONS: 'previousDonations',\n PRODUCT: 'product',\n DETAILS: 'details'\n};\n\nexport const ANIMATION_TYPES = {\n PAGE_CHANGE: 'pageChange',\n LOCATION: 'location',\n INITIAL: 'initial',\n NONE: ''\n};\n\nexport const PRODUCT_SEGMENTS = {\n [FORM_PRODUCTS.FORM]: '',\n [FORM_PRODUCTS.CONTINUE_DRAFT]: '/continue',\n [FORM_PRODUCTS.SENTBOX]: '/sentbox',\n [FORM_PRODUCTS.TABLES]: '/tables',\n [FORM_PRODUCTS.REPORT]: '/report',\n [FORM_PRODUCTS.SIGN]: '/sign'\n};\n\nexport const TRACK_MESSAGE_PREFIX = {\n [FORM_PRODUCTS.FORM]: 'form',\n [FORM_PRODUCTS.CONTINUE_DRAFT]: 'draft',\n [FORM_PRODUCTS.SENTBOX]: 'sentbox',\n [FORM_PRODUCTS.TABLES]: 'tables',\n [FORM_PRODUCTS.REPORT]: 'report',\n [FORM_PRODUCTS.SIGN]: 'sign'\n};\n","import {\n string, oneOfType, arrayOf, node\n} from 'prop-types';\n\nexport const renderable = oneOfType([arrayOf(node), node]);\n\nexport const ItemVisualPropTypes = {\n itemBgColor: string,\n itemBorderColor: string,\n itemFontColor: string,\n itemButtonBgColor: string,\n itemButtonFontColor: string\n};\n\nexport const ItemVisualDefaultProps = {\n itemBgColor: '',\n itemBorderColor: '',\n itemFontColor: '',\n itemButtonBgColor: '',\n itemButtonFontColor: ''\n};\n","export const { teamID: TEAM_ID, isTeamMember } = window;\n","import { StorageHelper } from '@jotforminc/storage-helper';\nimport {\n FETCH_ENVIRONMENT,\n SET_APP_STATUS,\n TOGGLE_RIGHT_PANEL,\n TOGGLE_PREVIEW_PANEL,\n SET_MODE,\n SET_PWA_STATUS,\n TOGGLE_NETWORK_STATUS,\n SET_APP_DESIGN_MODE,\n SELECT_PORTAL_ITEM,\n SET_RIGHT_PANEL_MODE,\n TOGGLE_LEFT_PANEL,\n SET_API_REQUESTS_COMPLETED,\n SHOULD_WINDOW_SQUEEZE,\n APP_PREVIEW_STATUS,\n APP_PREVIEW_DEVICE,\n REMOVE_PORTAL_ITEMS,\n SET_APP_HEADER_CROP_MODE,\n SET_APP_COVER_CROP_MODE,\n SET_ITEM_LOADING_STATUS,\n FETCH_PORTAL,\n FETCH_FORMS,\n SET_DISABLED_APP_SCREEN,\n CREATE_NEW_PORTAL,\n FETCH_APPS,\n TOAST,\n SET_LAST_ADDED_ITEM,\n SELECT_MULTIPLE_PORTAL_ITEM,\n TOGGLE_MOBILE_MULTIPLE_SELECTION_MODE,\n SELECT_PAGES,\n UPDATE_LAST_INTERACTED_PAGE_ID,\n SET_APP_LOCATION,\n FETCH_RESOURCES_ERROR,\n SET_FORCE_TITLE_RENAME,\n ACTIVE_PAGE,\n SET_CHECKOUT_FORM_STATUS,\n SET_CHECKOUT_FORM_VISIBILITY,\n SET_ACTIVE_SCREEN,\n SET_ACTIVE_FORM_PRODUCT,\n SET_ROUTER_ANIMATION_TYPE,\n APP_TOAST,\n APP_TOAST_STACK,\n PREPARE_RIGHT_PANEL,\n TOGGLE_ACCOUNT_BOX,\n SET_ACTIVE_BUILDER_PAGE,\n SHOW_MODAL, REPLACE_FORM_ITEM,\n SET_UI_PROP,\n NAVIGATION_SETTINGS_POPOVER,\n TOGGLE_LIVE_PREVIEW,\n SET_ACTIVE_RIGHT_PANEL_TAB\n} from '../actionTypes';\nimport {\n APP_MODES, CHECKOUT_FORM_STATUSES, WINDOW_SQUEEZE_VALUE, UI_PROPS, NOTIFICATION_PERMISSION_STATES, APP_PREVIEW_STATES\n} from '../../constants';\nimport { APP_DESIGN_MODES } from '../../modules/Builder/constants/designModes';\nimport { isPWA } from '../../modules/PublicApp/utils';\nimport { RightPanelModes } from '../../modules/Builder/components/HomePage/constants';\nimport ANIMATION_TYPES from '../../modules/PublicApp/AnimationTypes';\nimport { getCurrentSubTabFromURL, getCurrentTabFromURL } from '../../utils/navigation';\n\nconst initialState = {\n mode: (window.isBuilder || !window.isStandalone) === true ? APP_MODES.builder : APP_MODES.public,\n isAppReady: false,\n isOpenedInPWA: isPWA(),\n isPWAInstalled: false,\n isOnline: typeof window.navigator.onLine === 'boolean' ? window.navigator.onLine : true,\n environment: window?.JOTFORM_ENV || '',\n isRightPanelOpen: false,\n isPreviewPanelOpen: StorageHelper.getLocalStorageItem({ key: 'appBuilderIsLivePreviewOn', defaultValue: true }),\n isLivePreviewOn: StorageHelper.getLocalStorageItem({ key: 'appBuilderIsLivePreviewOn', defaultValue: true }),\n rightPanelMode: '',\n isLeftPanelOpen: false,\n lastOpenedPanel: null,\n isAiAssistantOpen: false,\n selectedForms: [],\n areAPIRequestsCompleted: true,\n selectedItems: [],\n lastAddedItemID: '',\n appDesignMode: APP_DESIGN_MODES.app,\n currentStep: getCurrentTabFromURL(),\n currentSubTab: getCurrentSubTabFromURL(),\n shouldSqueeze: global.innerWidth <= WINDOW_SQUEEZE_VALUE,\n appPreviewStatus: APP_PREVIEW_STATES.IDLE,\n appPreviewDevice: 'phone',\n isAppHeaderInCropMode: false,\n isAppCoverInCropMode: false,\n loadingItems: {},\n appsFetched: false,\n isUIBlocked: false,\n isMobileMultipleSelectionMode: false,\n selectedPages: [],\n lastInteractedPageID: '',\n appLocation: '',\n isTemplateMode: window.isTemplateMode || false,\n forceTitleRename: false,\n activePageID: '',\n navigationSettingsPopoverId: false,\n checkoutFormStatus: window.location.href.includes('complete=1') ? CHECKOUT_FORM_STATUSES.COMPLETED : CHECKOUT_FORM_STATUSES.INITIAL,\n checkoutFormVisibility: false,\n routerAnimationType: ANIMATION_TYPES.INITIAL,\n appToastStack: [],\n navigationStack: [],\n [UI_PROPS.activeAccountBoxScreen]: '',\n accountBoxStatus: false,\n [UI_PROPS.activeProductDetail]: {},\n [UI_PROPS.mobileContextMenuOpened]: false,\n activeModal: '',\n [UI_PROPS.isParagraphInlineEditMode]: false,\n [UI_PROPS.ctxMenuItemClicked]: false,\n [UI_PROPS.isGatewaySettingsDisplayed]: false,\n [UI_PROPS.addElementButtonPulseCount]: 0,\n [UI_PROPS.addElementButtonPulseVisible]: false,\n [UI_PROPS.isA2HSModalClosed]: false,\n [UI_PROPS.notificationPermissionState]: NOTIFICATION_PERMISSION_STATES.HIDDEN\n};\n\n// eslint-disable-next-line complexity\nconst UIReducer = (state = initialState, action) => {\n switch (action.type) {\n case TOGGLE_ACCOUNT_BOX: {\n const value = action.payload;\n return {\n ...state,\n accountBoxStatus: value\n };\n }\n case FETCH_ENVIRONMENT.SUCCESS: {\n return {\n ...state, environment: action.data\n };\n }\n case SET_APP_STATUS: {\n return {\n ...state, isAppReady: action.payload === 'ready'\n };\n }\n case FETCH_APPS.SUCCESS: {\n return {\n ...state, appsFetched: true\n };\n }\n case TOGGLE_RIGHT_PANEL: {\n const lastPanel = (!action.payload && state.isLeftPanelOpen) ? 'left' : 'right';\n return {\n ...state,\n isRightPanelOpen: action.payload,\n lastOpenedPanel: lastPanel,\n activeRightPanelTab: undefined\n };\n }\n case TOGGLE_LIVE_PREVIEW: {\n return {\n ...state,\n isLivePreviewOn: action.payload\n };\n }\n case TOGGLE_PREVIEW_PANEL: {\n return {\n ...state,\n isPreviewPanelOpen: action.payload\n };\n }\n case SET_APP_DESIGN_MODE: {\n return {\n ...state, appDesignMode: action.payload\n };\n }\n case SET_MODE: {\n return {\n ...state, mode: action.payload\n };\n }\n case REPLACE_FORM_ITEM.SUCCESS: {\n const { form } = action.payload;\n return {\n ...state,\n selectedItems: [form.id]\n };\n }\n case SELECT_PORTAL_ITEM: {\n const selectedItemID = action.payload;\n if (!selectedItemID) { // Cleared\n return { ...state, selectedItems: [], isMobileMultipleSelectionMode: false };\n }\n\n return {\n ...state,\n selectedItems: [selectedItemID],\n selectedPages: []\n };\n }\n case SELECT_MULTIPLE_PORTAL_ITEM: {\n const {\n selection,\n withMouse\n } = action.payload;\n const { rightPanelMode } = state;\n if (withMouse) {\n return {\n ...state,\n selectedItems: selection,\n rightPanelMode: selection.length > 1 ? RightPanelModes.MULTIPLE_ITEM : rightPanelMode,\n selectedPages: []\n };\n }\n\n const newSelecteds = [...state.selectedItems, selection]\n .reduce((prev, cur, ind, originalArr) => {\n const idCount = originalArr.filter(x => x === cur).length;\n if (idCount > 1) { // If any id occurring more than 1, deselect it (TODO unless withRange?)\n return prev;\n }\n return [...prev, cur];\n }, []);\n return {\n ...state,\n selectedItems: newSelecteds,\n rightPanelMode: newSelecteds.length > 1 ? RightPanelModes.MULTIPLE_ITEM : RightPanelModes.APP_ITEM,\n selectedPages: []\n };\n }\n case SET_LAST_ADDED_ITEM: {\n return {\n ...state, lastAddedItemID: action.payload\n };\n }\n case SET_PWA_STATUS: {\n return {\n ...state,\n isPWAInstalled: action.isPWAInstalled,\n isOpenedInPWA: action.isOpenedInPWA\n };\n }\n case TOGGLE_NETWORK_STATUS: {\n const isOnline = !!action.payload;\n return {\n ...state, isOnline\n };\n }\n case SET_RIGHT_PANEL_MODE: {\n return {\n ...state, rightPanelMode: action.payload\n };\n }\n case PREPARE_RIGHT_PANEL: {\n return {\n ...state,\n rightPanelMode: action.payload.mode,\n selectedItems: [action.payload.item],\n selectedPages: []\n };\n }\n case SET_API_REQUESTS_COMPLETED: {\n return {\n ...state, areAPIRequestsCompleted: action.payload\n };\n }\n case TOGGLE_LEFT_PANEL: {\n const lastPanel = (!action.payload && state.isRightPanelOpen) ? 'right' : 'left';\n return {\n ...state, isLeftPanelOpen: action.payload, lastOpenedPanel: lastPanel\n };\n }\n case SHOULD_WINDOW_SQUEEZE: {\n return {\n ...state, shouldSqueeze: action.payload\n };\n }\n case APP_PREVIEW_STATUS: {\n return {\n ...state, appPreviewStatus: action.payload\n };\n }\n case APP_PREVIEW_DEVICE: {\n return {\n ...state, appPreviewDevice: action.payload\n };\n }\n case REMOVE_PORTAL_ITEMS.REQUEST: {\n const [selectedPortalItem] = state.selectedItems; // singular\n return {\n ...state,\n isRightPanelOpen: false,\n rightPanelMode: '',\n loadingItems: Object.entries(state.loadingItems).reduce((prev, [key, value]) => {\n if (key === selectedPortalItem) {\n return { ...prev };\n }\n return { ...prev, [key]: value };\n }, {})\n };\n }\n case SET_APP_HEADER_CROP_MODE: {\n return {\n ...state, isAppHeaderInCropMode: action.payload\n };\n }\n case SET_APP_COVER_CROP_MODE: {\n return {\n ...state, isAppCoverInCropMode: action.payload\n };\n }\n case SET_ITEM_LOADING_STATUS: {\n return {\n ...state,\n loadingItems: { ...state.loadingItems, ...action.payload }\n };\n }\n case FETCH_PORTAL.ERROR:\n case SET_DISABLED_APP_SCREEN:\n case CREATE_NEW_PORTAL.ERROR:\n case FETCH_FORMS.ERROR:\n case FETCH_RESOURCES_ERROR: {\n return {\n ...state,\n error: action.payload,\n customErrorText: action.customErrorText\n };\n }\n case APP_TOAST.SHOPPING_NOTIFICATION:\n case TOAST.NOTIFICATION:\n case TOAST.ERROR: {\n const { backdrop = false } = action.payload;\n return {\n ...state,\n isUIBlocked: !!backdrop\n };\n }\n case TOGGLE_MOBILE_MULTIPLE_SELECTION_MODE: {\n const mode = action.payload;\n return {\n ...state,\n isMobileMultipleSelectionMode: mode\n };\n }\n case SELECT_PAGES:\n const selectedPage = action.payload;\n return {\n ...state,\n selectedPages: [selectedPage],\n selectedItems: []\n };\n case UPDATE_LAST_INTERACTED_PAGE_ID:\n return {\n ...state,\n lastInteractedPageID: action.payload\n };\n case SET_APP_LOCATION:\n const location = action.payload;\n return {\n ...state,\n appLocation: location\n };\n case SET_FORCE_TITLE_RENAME:\n return {\n ...state,\n forceTitleRename: action.payload\n };\n case ACTIVE_PAGE:\n return {\n ...state,\n activePageID: action.payload\n };\n case SET_CHECKOUT_FORM_STATUS:\n return {\n ...state,\n checkoutFormStatus: action.payload\n };\n case SET_CHECKOUT_FORM_VISIBILITY:\n return {\n ...state,\n checkoutFormVisibility: !!action.payload\n };\n case SET_ACTIVE_SCREEN:\n return {\n ...state,\n activeScreen: action.payload\n };\n case SET_ACTIVE_FORM_PRODUCT:\n return {\n ...state,\n activeFormProduct: action.payload\n };\n case SET_ACTIVE_BUILDER_PAGE:\n return {\n ...state,\n currentStep: action.payload.tab,\n currentSubTab: action.payload.subTab\n };\n case SET_ROUTER_ANIMATION_TYPE:\n return {\n ...state,\n routerAnimationType: action.payload\n };\n case APP_TOAST_STACK.SUCCESS:\n return {\n ...state,\n appToastStack: action.payload\n };\n case SHOW_MODAL:\n return { ...state, activeModal: action.payload };\n case NAVIGATION_SETTINGS_POPOVER:\n return { ...state, navigationSettingsPopoverId: action.payload };\n case SET_UI_PROP:\n return { ...state, [action.payload.key]: action.payload.value };\n\n case SET_ACTIVE_RIGHT_PANEL_TAB:\n return { ...state, activeRightPanelTab: action.payload };\n\n default:\n break;\n }\n return state;\n};\n\nexport default UIReducer;\n","import {\n FETCH_USER, UPDATE_USER, SET_USER_SLUG, CONTINUE_AS_USER\n} from '../actionTypes';\n\nconst initialState = {\n ...(window?.__userInfo?.credentials || {}),\n USER_TYPE: window?.__userInfo?.type || '',\n slug: false,\n paymentOverQuotaWarnings: window?.__userInfo?.paymentOverQuotaWarnings || {},\n showContinueAs: window?.__showContinueAs\n};\n\nconst userReducer = (state = initialState, action) => {\n switch (action.type) {\n case FETCH_USER.SUCCESS: {\n const userTypes = { FORM_USER: 'formuser', USER: 'user' };\n const userType = action.payload.type && userTypes[action.payload.type];\n\n return {\n ...action.payload.credentials,\n USER_TYPE: action.payload.type,\n ...userType ? { userType } : {},\n showContinueAs: state.showContinueAs\n };\n }\n case UPDATE_USER.SUCCESS: {\n return {\n ...state,\n ...action.payload\n };\n }\n case SET_USER_SLUG: {\n const { slug } = action;\n return {\n ...state,\n slug\n };\n }\n case CONTINUE_AS_USER.SUCCESS: {\n return {\n ...state,\n showContinueAs: false\n };\n }\n default:\n return state;\n }\n};\n\nexport default userReducer;\n","import {\n takeLatest, put, call, select\n} from 'redux-saga/effects';\nimport { navigate } from '@reach/router';\n\nimport * as NAVIGATION from '../../utils/navigation';\nimport * as NAVIGATION_CONSTANTS from '../../constants/navigation';\n\nimport { safeWorker } from '../utils';\nimport {\n NAVIGATE_BACK, NAVIGATE_TO, SET_ACTIVE_ITEM, NAVIGATION_ITEM_CLICK\n} from '../actionTypes';\nimport * as ACTIONS from '../actionCreators';\nimport SELECTORS from '../selectors';\nimport { RightPanelModes } from '../../modules/Builder/components/HomePage/constants';\nimport { APP_MODES, APP_PREVIEW_URL_HASH, UI_PROPS } from '../../constants';\nimport { getIsHomepage } from '../selectors/portalSelectors';\nimport { isFeatureEnabled } from '../../utils/features/helper';\nimport { FEATURE_NAMES } from '../../constants/features';\n\nconst isTemplatePreviewEnv = (window?.location?.href || '').includes('/app-templates');\n\nconst SET_ACTIVE_ITEM_ACTIONS = {\n [NAVIGATION_CONSTANTS.DESTINATION_TYPES.PAGE]: ACTIONS.setActivePageAction,\n [NAVIGATION_CONSTANTS.DESTINATION_TYPES.SCREEN]: ACTIONS.setActiveScreen,\n [NAVIGATION_CONSTANTS.DESTINATION_TYPES.PRODUCT]: ACTIONS.setActiveFormProduct,\n [NAVIGATION_CONSTANTS.DESTINATION_TYPES.BUILDER_PAGE]: ACTIONS.setActiveBuilderPage\n};\n\nconst ITEM_ANIMATION_TYPES = {\n [NAVIGATION_CONSTANTS.DESTINATION_TYPES.PAGE]: NAVIGATION_CONSTANTS.ANIMATION_TYPES.PAGE_CHANGE,\n [NAVIGATION_CONSTANTS.DESTINATION_TYPES.SCREEN]: NAVIGATION_CONSTANTS.ANIMATION_TYPES.LOCATION,\n [NAVIGATION_CONSTANTS.DESTINATION_TYPES.PRODUCT]: NAVIGATION_CONSTANTS.ANIMATION_TYPES.LOCATION,\n [NAVIGATION_CONSTANTS.DESTINATION_TYPES.BUILDER_PAGE]: NAVIGATION_CONSTANTS.ANIMATION_TYPES.NONE\n};\n\nfunction* handleFormProductNavigation(payload) {\n const destination = NAVIGATION.generateAppURL({\n includeQs: true,\n ...payload\n });\n yield call(navigate, destination, { replace: isTemplatePreviewEnv });\n}\n\nfunction* watchNavigateToFormProduct(payload) {\n const { productType } = payload;\n\n const isPreview = NAVIGATION.getLocationHash() === APP_PREVIEW_URL_HASH;\n const messagePrefix = NAVIGATION_CONSTANTS.TRACK_MESSAGE_PREFIX[productType];\n const trackMessage = `${messagePrefix}Accessed`;\n const trackTarget = NAVIGATION.getTrackTarget(payload);\n\n yield put(ACTIONS.setRouterAnimationTypeAction(NAVIGATION_CONSTANTS.ANIMATION_TYPES.LOCATION));\n if (!isPreview) {\n yield put(ACTIONS.trackEventAction({ action: trackMessage, trackTarget }));\n }\n yield handleFormProductNavigation(payload);\n}\n\nexport function* handleScreenNavigation(payload) {\n const destination = NAVIGATION.generateAppURL({\n includeQs: true,\n ...payload\n });\n // Track event is missing for other screens for now\n yield call(navigate, destination, { replace: isTemplatePreviewEnv });\n}\n\nfunction* watchNavigateToScreen(payload) {\n yield put(ACTIONS.setRouterAnimationTypeAction(NAVIGATION_CONSTANTS.ANIMATION_TYPES.LOCATION));\n yield handleScreenNavigation(payload);\n}\n\nfunction* watchNavigateToPage(payload) {\n const { pageID, animationType = NAVIGATION_CONSTANTS.ANIMATION_TYPES.PAGE_CHANGE } = payload;\n const isHomepage = yield select(getIsHomepage(pageID));\n const activePageID = yield select(SELECTORS.getActivePageID);\n\n const destination = NAVIGATION.generateAppURL({\n pageID: isHomepage ? 'homepage' : pageID\n });\n\n yield put(ACTIONS.setRouterAnimationTypeAction(activePageID === pageID ? NAVIGATION_CONSTANTS.ANIMATION_TYPES.NONE : animationType));\n yield call(navigate, destination, { replace: isTemplatePreviewEnv });\n yield put(ACTIONS.trackEventAction({ action: 'navigatedToPage', target: { page: pageID } }));\n yield put(ACTIONS.trackEventAction({ action: 'pageVisited', target: { pageID } }));\n}\n\nfunction* handleGoBackInPublicApp() {\n const activeFormProduct = yield select(SELECTORS.getActiveFormProduct);\n const activePageID = yield select(SELECTORS.getActivePageID);\n\n const isHomepage = yield select(SELECTORS.getIsHomepage(activePageID));\n\n const returnToPage = activePageID && !isHomepage;\n\n const shouldEraseQueryParams = activeFormProduct && activeFormProduct.includes('/continue');\n\n const destination = NAVIGATION.generateAppURL({\n forLogout: shouldEraseQueryParams, // Also erases other params. Maybe we can keep them.\n ...(returnToPage && { pageID: activePageID })\n });\n\n yield put(ACTIONS.trackEventAction({ action: 'backToApp' }));\n yield call(navigate, destination, { replace: isTemplatePreviewEnv });\n yield put(ACTIONS.setRouterAnimationTypeAction(NAVIGATION_CONSTANTS.ANIMATION_TYPES.NONE));\n}\n\nfunction* handleGoBackInBuilder() {\n const destination = NAVIGATION.getBackURL();\n yield call(navigate, destination, { replace: isTemplatePreviewEnv });\n}\n\nconst BACK_NAVIGATIONS = {\n [APP_MODES.builder]: handleGoBackInBuilder,\n [APP_MODES.public]: handleGoBackInPublicApp\n};\n\nfunction* watchNavigateBack() {\n const appMode = yield select(SELECTORS.getAppModeSelector);\n yield BACK_NAVIGATIONS[appMode]();\n}\n\nfunction* watchNavigateToSpecialPage(payload) {\n const { pageID } = payload;\n const destination = NAVIGATION.getSpecialPageDestination(pageID);\n const newPayload = NAVIGATION.prepareSpecialPageNavigationProps(destination, payload);\n // eslint-disable-next-line no-use-before-define\n yield navigationMethods[destination](newPayload);\n}\n\nfunction* handleBuilderTabNavigation(payload) {\n const { tab, subTab = '' } = payload;\n\n const destination = NAVIGATION.generateBuilderAppURL({ tab, subTab, includeQs: true });\n yield put(ACTIONS.trackEventAction({ action: `${tab}TabClicked` }));\n yield call(navigate, destination, { replace: isTemplatePreviewEnv });\n}\n\nfunction* handleBuilderSubTabNavigation(payload) {\n const { subTab } = payload;\n const isRightPanelOpen = yield select(SELECTORS.isRightPanelOpenSelector);\n const currentSubTab = yield select(SELECTORS.getCurrentSubTab);\n const tab = yield select(SELECTORS.getCurrentStep);\n const destination = NAVIGATION.generateBuilderAppURL({ tab, subTab, includeQs: true });\n if (subTab !== currentSubTab && isRightPanelOpen) {\n const mode = (subTab === NAVIGATION_CONSTANTS.SETTINGS_SUBTABS.SPLASH) ? RightPanelModes.SPLASH_SCREEN : RightPanelModes.APP_ICON;\n if (subTab === NAVIGATION_CONSTANTS.SETTINGS_SUBTABS.DETAILS) {\n yield put(ACTIONS.setRightPanelModeAction(''));\n yield put(ACTIONS.toggleRightPanelAction(false));\n }\n yield put(ACTIONS.setRightPanelModeAction(mode));\n }\n yield put(ACTIONS.trackEventAction({ action: `${subTab}TabClicked` })); // Track event is the same with tab navigation?\n\n yield call(navigate, destination, { replace: isTemplatePreviewEnv });\n}\n\nconst getBuilderNavigationHandler = (tab, subTab) => {\n switch (true) {\n case tab !== '':\n return handleBuilderTabNavigation;\n case subTab !== '':\n return handleBuilderSubTabNavigation;\n default:\n return () => {};\n }\n};\n\nfunction* watchNavigationsInBuilder(payload) {\n const { tab = '', subTab = '' } = payload;\n const handleBuilderNavigation = getBuilderNavigationHandler(tab, subTab);\n yield handleBuilderNavigation(payload);\n}\n\nconst navigationMethods = {\n [NAVIGATION_CONSTANTS.DESTINATION_TYPES.BACK]: watchNavigateBack,\n [NAVIGATION_CONSTANTS.DESTINATION_TYPES.SCREEN]: watchNavigateToScreen,\n [NAVIGATION_CONSTANTS.DESTINATION_TYPES.PRODUCT]: watchNavigateToFormProduct,\n [NAVIGATION_CONSTANTS.DESTINATION_TYPES.PAGE]: watchNavigateToPage,\n [NAVIGATION_CONSTANTS.DESTINATION_TYPES.SPECIAL_PAGE]: watchNavigateToSpecialPage,\n [NAVIGATION_CONSTANTS.DESTINATION_TYPES.BUILDER_PAGE]: watchNavigationsInBuilder\n};\n\nfunction* navigationInterface(action) {\n const { to } = action.payload;\n\n yield navigationMethods[to](action.payload);\n}\n\nfunction* clearPreviousActiveItem(itemType, itemName) {\n const activeScreen = yield select(SELECTORS.getActiveScreen);\n const activeFormProduct = yield select(SELECTORS.getActiveFormProduct);\n const activeProductDetail = yield select(SELECTORS.getActiveProductDetails);\n\n if (activeScreen.length > 0) {\n yield put(ACTIONS.setActiveScreen(''));\n }\n\n if (activeFormProduct.length > 0) {\n yield put(ACTIONS.setActiveFormProduct(''));\n }\n\n if (activeProductDetail?.itemID?.length > 0 && itemName !== NAVIGATION_CONSTANTS.SPECIAL_PAGES.PRODUCT) { // Product list product\n yield put(ACTIONS.setUIProp(UI_PROPS.activeProductDetail, {}));\n }\n}\n\nfunction* watchActiveItem() {\n const item = NAVIGATION.getItemFromURL();\n const { itemType } = item;\n let { itemName } = item;\n if (itemType === NAVIGATION_CONSTANTS.DESTINATION_TYPES.PAGE && itemName === '') {\n const firstPageId = yield select(SELECTORS.getFirstPageID);\n itemName = firstPageId;\n }\n const currentAnimationType = yield select(SELECTORS.getRouterAnimationType);\n const renderer = itemType === NAVIGATION_CONSTANTS.DESTINATION_TYPES.SPECIAL_PAGE\n ? NAVIGATION.getSpecialPageDestination(itemName)\n : itemType;\n const setActiveItem = SET_ACTIVE_ITEM_ACTIONS[renderer];\n const animationType = ITEM_ANIMATION_TYPES[renderer];\n\n yield clearPreviousActiveItem(itemType, itemName);\n yield put(setActiveItem(itemName));\n\n if (currentAnimationType === NAVIGATION_CONSTANTS.ANIMATION_TYPES.INITIAL) { // For the first navigation after refresh.\n yield put(ACTIONS.setRouterAnimationTypeAction(animationType));\n }\n}\n\nfunction* navigateBack() {\n const navigationStack = yield select(SELECTORS.getUIProp(UI_PROPS.navigationStack));\n const newStack = [...navigationStack];\n const page = newStack.pop();\n\n yield put(ACTIONS.setUIProp(UI_PROPS.navigationStack, newStack));\n yield put(ACTIONS.navigateToAction({ to: NAVIGATION_CONSTANTS.DESTINATION_TYPES.PAGE, pageID: page }));\n}\n\nfunction* watchNavigationItemClick({ payload }) {\n if (!isFeatureEnabled(FEATURE_NAMES.BackNavigation)) return;\n\n const { saveToStack, targetPageID } = payload;\n const navigationStack = yield select(SELECTORS.getUIProp(UI_PROPS.navigationStack));\n const activePageID = yield select(SELECTORS.getUIProp(UI_PROPS.activePageID));\n const firstPageID = yield select(SELECTORS.getFirstPageID);\n\n if (saveToStack) {\n let newStack;\n if (targetPageID === firstPageID) {\n newStack = [];\n } else if (targetPageID === navigationStack.at(-1)) {\n newStack = [...navigationStack];\n newStack.pop();\n } else {\n newStack = [...navigationStack, activePageID];\n }\n yield put(ACTIONS.setUIProp(UI_PROPS.navigationStack, newStack));\n }\n}\n\nexport default function* () {\n yield takeLatest(NAVIGATE_TO, navigationInterface);\n yield takeLatest(SET_ACTIVE_ITEM, safeWorker(watchActiveItem));\n yield takeLatest(NAVIGATE_BACK, navigateBack);\n yield takeLatest(NAVIGATION_ITEM_CLICK, watchNavigationItemClick);\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 SvgTryArrow = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 77 53\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.04331 2.78494C6.42666 1.74902 5.89765 0.598484 4.86174 0.215133C3.82583 -0.168217 2.67529 0.36079 2.29194 1.3967L6.04331 2.78494ZM58.0457 29.2585C57.0337 28.8158 55.8544 29.2772 55.4117 30.2892C54.969 31.3011 55.4304 32.4804 56.4424 32.9231L58.0457 29.2585ZM73.244 38.0908L74.7183 39.4423L76.6088 37.3799L74.0457 36.2585L73.244 38.0908ZM60.7697 48.7394C60.0233 49.5536 60.0783 50.8187 60.8926 51.5651C61.7068 52.3115 62.9719 52.2565 63.7183 51.4423L60.7697 48.7394ZM2.29194 1.3967C-0.761403 9.64763 -0.27789 17.1096 2.92864 23.4172C6.10851 29.6724 11.8572 34.5831 18.9767 38.0311C33.1887 44.914 53.3708 46.2322 71.8425 40.4391L70.6455 36.6224C53.0188 42.1505 33.9022 40.8152 20.7203 34.4311C14.1428 31.2456 9.17082 26.8695 6.49435 21.6046C3.84453 16.392 3.33608 10.1006 6.04331 2.78494L2.29194 1.3967ZM56.4424 32.9231L72.4424 39.9231L74.0457 36.2585L58.0457 29.2585L56.4424 32.9231ZM71.7697 36.7394L60.7697 48.7394L63.7183 51.4423L74.7183 39.4423L71.7697 36.7394Z\",\n fill: \"#6F76A7\"\n})));\nexport default SvgTryArrow;","\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 SvgIconNoresult = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 38 48\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M36 1.96533C37.1046 1.96533 38 2.86076 38 3.96533V45.9653C38 47.0699 37.1046 47.9653 36 47.9653H2C0.89543 47.9653 0 47.0699 0 45.9653V3.96533C0 2.86076 0.89543 1.96533 2 1.96533H36ZM12.292 35.9653C12.5764 35.9653 12.8473 35.8442 13.037 35.6323C14.5547 33.9354 16.7234 32.9655 19 32.9655C21.2766 32.9655 23.4453 33.9354 24.963 35.6323C25.2003 35.9024 25.5643 36.0243 25.9163 35.9516C26.2684 35.8789 26.5543 35.6229 26.6653 35.281C26.7763 34.9391 26.6953 34.5639 26.453 34.2983C24.5559 32.1777 21.8453 30.9656 19 30.9656C16.1547 30.9656 13.4441 32.1777 11.547 34.2983C11.2839 34.5922 11.2182 35.0133 11.3791 35.3733C11.54 35.7334 11.8976 35.9653 12.292 35.9653V35.9653ZM32 20.9653C31.4477 20.9653 31 21.413 31 21.9653C31 23.0699 30.1046 23.9653 29 23.9653C27.8954 23.9653 27 23.0699 27 21.9653C27 21.413 26.5523 20.9653 26 20.9653C25.4477 20.9653 25 21.413 25 21.9653C25 24.1745 26.7909 25.9653 29 25.9653C31.2091 25.9653 33 24.1745 33 21.9653C33 21.413 32.5523 20.9653 32 20.9653ZM6 20.9653C5.44772 20.9653 5 21.413 5 21.9653C5 24.1745 6.79086 25.9653 9 25.9653C11.2091 25.9653 13 24.1745 13 21.9653C13 21.413 12.5523 20.9653 12 20.9653C11.4477 20.9653 11 21.413 11 21.9653C11 23.0699 10.1046 23.9653 9 23.9653C7.89543 23.9653 7 23.0699 7 21.9653C7 21.413 6.55228 20.9653 6 20.9653Z\",\n fill: \"#C8CEDD\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M33 14.9652C30.2399 14.9619 28.0033 12.7253 28 9.96524C28 7.60324 31.447 1.63124 32.139 0.458239C32.3319 0.171769 32.6546 0 33 0C33.3454 0 33.6681 0.171769 33.861 0.458239C34.553 1.63124 38 7.60324 38 9.96524C37.9967 12.7253 35.7601 14.9619 33 14.9652Z\",\n fill: \"#43B2EF\"\n})));\nexport default SvgIconNoresult;","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","\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 SvgIconClassicForm = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 121 125\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.417 0h112a4 4 0 014 4v121h-120V4a4 4 0 014-4z\",\n fill: \"#FFF\",\n fillRule: \"nonzero\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(10.417 13)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.001 31.122h79.14a2.858 2.858 0 010 5.716h-79.14a2.858 2.858 0 110-5.716z\",\n fill: \"#DAE2ED\",\n fillRule: \"nonzero\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"#DAE2ED\",\n fillRule: \"nonzero\",\n y: 20.324,\n width: 74.571,\n height: 5.716,\n rx: 2.858\n}), /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"#DAE2ED\",\n fillRule: \"nonzero\",\n width: 99,\n height: 8.257,\n rx: 3\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.001 41.284h79.14a2.858 2.858 0 010 5.716h-79.14a2.858 2.858 0 110-5.716z\",\n fill: \"#DAE2ED\",\n fillRule: \"nonzero\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 30.486)\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"#2F90FF\",\n fillRule: \"nonzero\",\n width: 6.429,\n height: 6.351,\n rx: 2\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.734 4.765a.33.33 0 01-.238-.103L1.304 3.424a.36.36 0 010-.495.328.328 0 01.477 0l.953.99L4.878 1.69a.328.328 0 01.477 0 .36.36 0 010 .496L2.972 4.662a.33.33 0 01-.238.103\",\n fill: \"#FFF\"\n})), /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"#DAE2ED\",\n fillRule: \"nonzero\",\n y: 40.649,\n width: 6.429,\n height: 6.351,\n rx: 2\n})), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(10.417 72)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.036 10.929h79.071a2.893 2.893 0 010 5.785H17.036a2.893 2.893 0 110-5.785zM2.893 0h68.786a2.893 2.893 0 110 5.786H2.893a2.893 2.893 0 010-5.786zM17.036 21.214h79.071a2.893 2.893 0 010 5.786H17.036a2.893 2.893 0 110-5.786z\",\n fill: \"#DAE2ED\",\n fillRule: \"nonzero\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 10.286)\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"#2F90FF\",\n fillRule: \"nonzero\",\n width: 6.429,\n height: 6.429,\n rx: 2\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.734 4.823a.327.327 0 01-.238-.104L1.304 3.465a.367.367 0 010-.5.325.325 0 01.477 0l.953 1.002L4.878 1.71a.325.325 0 01.477 0 .367.367 0 010 .501L2.972 4.72a.328.328 0 01-.238.104\",\n fill: \"#FFF\"\n})), /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"#DAE2ED\",\n fillRule: \"nonzero\",\n y: 20.571,\n width: 6.429,\n height: 6.429,\n rx: 2\n}), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 20.571)\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"#2F90FF\",\n fillRule: \"nonzero\",\n width: 6.429,\n height: 6.429,\n rx: 2\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.734 4.823a.327.327 0 01-.238-.104L1.304 3.465a.367.367 0 010-.5.325.325 0 01.477 0l.953 1.002L4.878 1.71a.325.325 0 01.477 0 .367.367 0 010 .501L2.972 4.72a.328.328 0 01-.238.104\",\n fill: \"#FFF\"\n}))), /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"#2F90FF\",\n fillRule: \"nonzero\",\n x: 77.417,\n y: 109,\n width: 32,\n height: 10,\n rx: 4\n}))));\nexport default SvgIconClassicForm;","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 SvgIconCardForm = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 121 92\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"#FFF\",\n fillRule: \"nonzero\",\n x: 7.934,\n width: 105.131,\n height: 62.153,\n rx: 4\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.934 49.59h105.132v9.224a4 4 0 01-4 4H11.934a4 4 0 01-4-4V49.59z\",\n fill: \"#2A5ACA\",\n fillRule: \"nonzero\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(15.208 11.24)\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"#DAE2ED\",\n fillRule: \"nonzero\",\n x: 10.579,\n y: 11.24,\n width: 80.667,\n height: 5.951,\n rx: 2.975\n}), /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"#DAE2ED\",\n fillRule: \"nonzero\",\n width: 50.913,\n height: 5.951,\n rx: 2.975\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.555 21.82H88.27a2.975 2.975 0 010 5.95H13.555a2.975 2.975 0 010-5.95z\",\n fill: \"#DAE2ED\",\n fillRule: \"nonzero\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 10.58)\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"#2F90FF\",\n fillRule: \"nonzero\",\n width: 6.612,\n height: 6.612,\n rx: 2\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.812 4.96a.337.337 0 01-.245-.107L1.34 3.564a.378.378 0 010-.515.334.334 0 01.49 0l.98 1.031 2.206-2.32a.334.334 0 01.49 0 .378.378 0 010 .515l-2.45 2.578a.337.337 0 01-.245.107\",\n fill: \"#FFF\"\n})), /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"#DAE2ED\",\n fillRule: \"nonzero\",\n y: 21.158,\n width: 6.612,\n height: 6.612,\n rx: 2\n})), /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"#FFF\",\n fillRule: \"nonzero\",\n width: 121,\n height: 62.153,\n rx: 4\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 49.59h121v9.224a4 4 0 01-4 4H4a4 4 0 01-4-4V49.59z\",\n fill: \"#51DCA9\",\n fillRule: \"nonzero\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(9.257 11.24)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.877 11.24H98.85a2.975 2.975 0 010 5.951H14.877a2.975 2.975 0 110-5.95zM2.975 0h50.913a2.975 2.975 0 110 5.95H2.975a2.975 2.975 0 110-5.95zM14.877 21.82H98.85a2.975 2.975 0 010 5.95H14.877a2.975 2.975 0 110-5.95z\",\n fill: \"#DAE2ED\",\n fillRule: \"nonzero\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 10.58)\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"#2F90FF\",\n fillRule: \"nonzero\",\n width: 6.612,\n height: 6.612,\n rx: 2\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.812 4.96a.337.337 0 01-.245-.107L1.34 3.564a.378.378 0 010-.515.334.334 0 01.49 0l.98 1.031 2.206-2.32a.334.334 0 01.49 0 .378.378 0 010 .515l-2.45 2.578a.337.337 0 01-.245.107\",\n fill: \"#FFF\"\n})), /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"#DAE2ED\",\n fillRule: \"nonzero\",\n y: 21.158,\n width: 6.612,\n height: 6.612,\n rx: 2\n})), /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"#319BF3\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M8.596 86.646h104.47\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n stroke: \"#319BF3\",\n strokeWidth: 1.5,\n fill: \"#51DCA9\",\n fillRule: \"nonzero\",\n cx: 60.831,\n cy: 86.646,\n r: 3.967\n}), /*#__PURE__*/React.createElement(\"circle\", {\n fill: \"#319BF3\",\n fillRule: \"nonzero\",\n cx: 9.918,\n cy: 86.646,\n r: 3.967\n}), /*#__PURE__*/React.createElement(\"circle\", {\n fill: \"#319BF3\",\n fillRule: \"nonzero\",\n cx: 111.743,\n cy: 86.646,\n r: 3.967\n}))));\nexport default SvgIconCardForm;","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 xmlns: \"http://www.w3.org/2000/svg\",\n width: 108,\n height: 121,\n fill: \"none\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#noFormsFoundIcon_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 54.5,\n cy: 58.449,\n r: 52.5,\n fill: \"#F3F3FE\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M61.11 58.422a5.76 5.76 0 0 1 5.761-5.761H94.24A5.76 5.76 0 0 1 100 58.422v34.57a5.76 5.76 0 0 1-5.761 5.761H66.87a5.76 5.76 0 0 1-5.761-5.761z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B1C3E9\",\n fillRule: \"evenodd\",\n d: \"M94.239 54.101H66.87a4.32 4.32 0 0 0-4.32 4.321v34.57a4.32 4.32 0 0 0 4.32 4.32H94.24a4.32 4.32 0 0 0 4.32-4.32v-34.57a4.32 4.32 0 0 0-4.32-4.32m-27.368-1.44a5.76 5.76 0 0 0-5.761 5.761v34.57a5.76 5.76 0 0 0 5.761 5.761H94.24A5.76 5.76 0 0 0 100 92.992v-34.57a5.76 5.76 0 0 0-5.761-5.761z\",\n clipRule: \"evenodd\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M69.34 68.3a2.47 2.47 0 0 1 2.47-2.47h18.107a2.47 2.47 0 1 1 0 4.939H71.81a2.47 2.47 0 0 1-2.47-2.47\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M69.34 76.53a2.47 2.47 0 0 1 2.47-2.47h18.107a2.47 2.47 0 0 1 0 4.939H71.81a2.47 2.47 0 0 1-2.47-2.47\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M69.34 84.76a2.47 2.47 0 0 1 2.47-2.469h18.107a2.47 2.47 0 1 1 0 4.939H71.81a2.47 2.47 0 0 1-2.47-2.47\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M37.143 8.137a5.76 5.76 0 0 1 5.762-5.762h27.367a5.76 5.76 0 0 1 5.761 5.762v34.569a5.76 5.76 0 0 1-5.761 5.761H42.905a5.76 5.76 0 0 1-5.762-5.761z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B1C3E9\",\n fillRule: \"evenodd\",\n d: \"M70.272 3.815H42.905a4.32 4.32 0 0 0-4.321 4.322v34.569a4.32 4.32 0 0 0 4.32 4.32h27.368a4.32 4.32 0 0 0 4.321-4.32V8.136a4.32 4.32 0 0 0-4.321-4.32m-27.367-1.44a5.76 5.76 0 0 0-5.762 5.762v34.569a5.76 5.76 0 0 0 5.762 5.761h27.367a5.76 5.76 0 0 0 5.761-5.761V8.136a5.76 5.76 0 0 0-5.761-5.761z\",\n clipRule: \"evenodd\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M45.374 18.013a2.47 2.47 0 0 1 2.469-2.469H65.95a2.47 2.47 0 1 1 0 4.939H47.843a2.47 2.47 0 0 1-2.47-2.47\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M45.374 26.244a2.47 2.47 0 0 1 2.469-2.47H65.95a2.47 2.47 0 1 1 0 4.94H47.843a2.47 2.47 0 0 1-2.47-2.47\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M45.374 34.475a2.47 2.47 0 0 1 2.469-2.47H65.95a2.47 2.47 0 1 1 0 4.94H47.843a2.47 2.47 0 0 1-2.47-2.47\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M12 58.422a5.76 5.76 0 0 1 5.762-5.761h27.367a5.76 5.76 0 0 1 5.761 5.761v34.57a5.76 5.76 0 0 1-5.761 5.761H17.762A5.76 5.76 0 0 1 12 92.992z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B1C3E9\",\n fillRule: \"evenodd\",\n d: \"M45.129 54.101H17.762a4.32 4.32 0 0 0-4.322 4.321v34.57a4.32 4.32 0 0 0 4.322 4.32h27.367a4.32 4.32 0 0 0 4.321-4.32v-34.57a4.32 4.32 0 0 0-4.321-4.32m-27.367-1.44A5.76 5.76 0 0 0 12 58.422v34.57a5.76 5.76 0 0 0 5.762 5.761h27.367a5.76 5.76 0 0 0 5.761-5.761v-34.57a5.76 5.76 0 0 0-5.761-5.761z\",\n clipRule: \"evenodd\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M20.23 68.3a2.47 2.47 0 0 1 2.47-2.47h18.107a2.47 2.47 0 0 1 0 4.939H22.7a2.47 2.47 0 0 1-2.47-2.47\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M20.23 76.53a2.47 2.47 0 0 1 2.47-2.47h18.107a2.47 2.47 0 0 1 0 4.939H22.7a2.47 2.47 0 0 1-2.47-2.47\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M20.23 84.76a2.47 2.47 0 0 1 2.47-2.469h18.107a2.47 2.47 0 0 1 0 4.939H22.7a2.47 2.47 0 0 1-2.47-2.47\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"url(#noFormsFoundIcon_svg__b)\",\n d: \"M53.466 100.228c7.187-1.175 12.06-7.954 10.885-15.14-1.175-7.188-7.954-12.061-15.14-10.886-7.188 1.175-12.061 7.954-10.886 15.14 1.175 7.188 7.954 12.061 15.14 10.886\",\n opacity: 0.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n d: \"m56.688 100.626 2.542-1.316 5.366 10.347-2.54 1.318z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n d: \"M44.649 74.322a14.52 14.52 0 0 0-4.645 21.96 14.518 14.518 0 0 0 25.766-7.47 14.5 14.5 0 0 0-1.54-8.287 14.525 14.525 0 0 0-19.579-6.203zm12.187 23.471a11.934 11.934 0 1 1 5.09-16.085 11.934 11.934 0 0 1-5.09 16.08zM67.435 118.328a2.12 2.12 0 0 1-2.347-.259 2.1 2.1 0 0 1-.518-.648l-7.354-14.16 3.77-1.96 7.356 14.16a2.12 2.12 0 0 1-.258 2.349c-.18.214-.4.39-.649.518\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"noFormsFoundIcon_svg__b\",\n x1: 49.21,\n x2: 53.466,\n y1: 74.202,\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: \"noFormsFoundIcon_svg__a\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M0 .375h108v120H0z\"\n})))));\nexport default SvgNoFormsFoundIcon;","var _circle, _path, _path2, _path3, _path4, _path5, _g, _path6, _path7, _path8, _path9, _path10, _path11, _g2, _path12, _path13, _path14, _path15, _path16, _path17, _g3, _path18, _path19, _path20, _path21, _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 SvgNoSignsFoundIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 105,\n height: 124,\n fill: \"none\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 52.5,\n cy: 56.449,\n r: 52.5,\n fill: \"#F3F3FE\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.415,\n d: \"M67.348 45.292H41.452c-2.586 0-4.744-2.22-4.744-5.042V5.75c0-2.82 2.16-5.042 4.743-5.042h20.48l10.162 10.434V40.25c0 2.821-2.16 5.042-4.745 5.042Z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B1C3E9\",\n d: \"m62.319 0 10.483 10.705h-5.945a4.537 4.537 0 0 1-4.538-4.536z\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M43.077 15.117a2.377 2.377 0 0 1 2.378-2.378h17.434a2.377 2.377 0 0 1 0 4.755H45.455a2.377 2.377 0 0 1-2.378-2.377\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M43.078 23.04a2.377 2.377 0 0 1 2.377-2.377h17.434a2.377 2.377 0 1 1 0 4.755H45.455a2.377 2.377 0 0 1-2.377-2.378\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"noSignsFoundIcon_svg__a\",\n width: 22,\n height: 17,\n x: 44,\n y: 20,\n maskUnits: \"userSpaceOnUse\",\n style: {\n maskType: \"alpha\"\n }\n}, _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#D9D9D9\",\n d: \"M44.034 20.512h21.134v16.362H44.034z\"\n}))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#noSignsFoundIcon_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n stroke: \"#FFB629\",\n strokeWidth: 0.581,\n d: \"M53.99 32.41c.102.013.157.07.124.13l.077.041.02.012c.026.007.051-.012.057-.041l-.008-.02-.008-.024a.2.2 0 0 1 .046-.063l.016-.016.072-.055.03-.055c.02.034.044.046.05.027a.2.2 0 0 1 .069-.072c.028-.02.12.01.127-.004.008-.013.063-.01.07-.036l.026-.012.006-.002a5 5 0 0 1 .172-.09l.092.019.01.002c.01.002.029-.012.042-.03s.074-.054.096-.047.113-.049.155-.065l.04-.007.012-.002c.016.012.047.004.068-.017a.6.6 0 0 1 .117-.094c.023-.007.13-.052.186-.074l.059-.006.045-.004a1 1 0 0 0 .134-.124c.027-.032.142.027.172.018l.02-.02c.021-.021.028-.06.047-.083l.005-.006c.026.016.088.009.139-.015.05-.024.182-.097.2-.076.018.02.111-.04.15-.06l.022-.03.057-.076c.059.04.111.061.116.047l.002-.014.006-.039a.2.2 0 0 0 .09-.037c.019-.017.095-.064.123-.097.027-.032.118.034.126.027.007-.008.067-.046.115-.075.047-.029.174-.108.178-.113a.5.5 0 0 1 .108-.018c.055-.006.198-.075.21-.07.014.007.075-.021.129-.055.054-.033.223-.052.229-.054s.026-.021.01-.03c-.017-.007-.02-.056.022-.093s.177.025.184.017c.007-.007.053-.032.084-.05.03-.02.136-.035.15-.054l.015-.017c.012-.013.028-.033.04-.032l.04.003c.041.011.1-.012.128-.052l.03-.015.043-.02c.056.004.136.017.18.03.043.011.183-.097.236-.134s.254.002.305.015l.043-.045a.2.2 0 0 1 .081-.047l.044-.01c.044.024.11.021.148-.007l.04-.018c.013-.006.039.033.058.031l.062-.005c.066-.019.142-.04.168-.046s.106.036.14.021c.033-.015.155.025.189.025l.03-.004.015-.003a.3.3 0 0 1 .113-.012c.048.002.228.08.315.093.088.013.408.026.517.024l.07.097q.044.067.096.006l.004-.005c.028.02.061.041.074.048s.05 0 .072-.005c.023-.004.073.05.097.074s.119.124.165.16.166.248.21.351l.067.077.004.005c-.01.022.004.09.031.152s.088.241.092.253c.004.011.02.101.033.167l.016.06c.011.04.085.04.053.11l-.033.07c.055.02.109.055.12.077s.061.127.082.183l.034.016.058.03c.072.013.167.028.21.032.045.003.194-.003.233.007l.037.008.03.007a.3.3 0 0 0 .127-.025c.036-.016.215-.007.242-.039l.04.055c.026.036.027-.023.027-.042 0-.069.015-.102.079-.054l.01.007c.016-.003.037-.037.044-.076l.045.043.012.012c.042-.023.084-.031.095-.02.01.013.05.047.061.042l.01-.004.254-.112.05-.023c.054-.03.124-.074.157-.096l.046.026.032.02c.03-.046.068-.082.084-.08l.014.003.02.004a1 1 0 0 0 .174-.05c.007-.009.051.004.077.038.025.035.102-.07.13-.07.026-.001.096-.062.115-.06s.08-.023.092-.053.08.018.087.006.07-.062.118-.062l.05-.002h.026a.5.5 0 0 0 .133-.104l.066.017.05.012a.7.7 0 0 0 .143-.041c.025-.013.1-.067.13-.074l.034.01c.078.025.135-.008.252-.106l.008-.007c.018.005.09 0 .16-.013l.04-.035.011-.01c.023.001.037.017.032.034l-.002.016-.005.039c.009.048.036.044.06-.01l.032-.035.034-.035c.05-.025.08-.025.067.002-.014.026.029.083.113.054s.29-.055.26-.068-.133-.012-.158.012l-.026.014-.018.01c-.027-.002-.048-.017-.047-.032 0-.016.041-.067.076-.091s.164-.022.172-.029c.009-.006.037-.036.047-.018s.101.023.186-.016l.053-.04c.039-.031.057-.03.099-.003.055.035.12.038.174-.03l.018-.023a.5.5 0 0 1 .12-.013c.031.002.145-.022.19.01l.047-.044.04-.037.104-.024h.112c.056 0 .214-.012.227-.025.014-.012.09-.018.134.022s.216-.041.245-.045l.025.006c.028.007.062.043.079.033.022-.012.026-.06.045-.085l.015-.019c.027-.009.062-.007.079.005.016.01.063.004.076-.01.012-.012.06-.035.075-.026l.015.002c.044.004.098.022.13 0 .05-.034.087-.057.137-.01l.007.006c.012.001.038-.018.06-.044s.146.01.18.011c.036.002.128-.026.132-.063.003-.036.103.006.133.03.03.025.177.021.198.036.02.014.076-.037.095-.03.019.009.083.007.105-.02.021-.026.111-.069.16-.047l.028.025.088.079c-.031-.075-.021-.114.022-.086.044.028.177.05.19.062.013.013.06.04.068.024.007-.017.06-.114.092-.177l.076.07c.044.041.127-.012.177.054l.008.011a.3.3 0 0 0 .105-.05c.03-.023.127-.019.183-.01l.05.005.029.004a1 1 0 0 1 .129-.035c.037-.007.216.02.245.015.03-.006.115-.015.12-.001.003.013.044.058.075.055.032-.003.056-.102.064-.103s.093.021.173.044l.07-.023.02-.006c.019-.008.077-.003.129.013s.22.01.275.05l.05-.057c.035-.038.053-.064.063.02.004.04.046.032.076.004l.027-.025a.4.4 0 0 0 .138-.03l.035-.01.009-.002c.014.021.039.05.055.067.016.016.097.017.147.015l.008-.008.049-.051c.037.035.086.055.11.046l.022-.011.033-.017c.086-.01.193-.03.237-.044s.195.02.242.037l.04-.035.037-.032a.5.5 0 0 0 .179.02c.06-.005.217.016.239-.004l.019-.012.005-.004q.012-.01.02.013c.005.014.046.037.075-.005.029-.04.188.008.234-.002s.155.067.157.065.043-.023.083-.043.294-.004.33 0l.03-.012.01-.003c.006-.042.022-.06.036-.04s.072.05.093.051a.6.6 0 0 0 .154-.06c.049-.024.202.006.225.015.024.01.13-.006.172.009l.039-.003.017-.002c.017-.043.05-.059.074-.035s.091.019.11 0c.019-.017.115-.003.162-.043l.039.078c.007-.003.052-.013.099-.024.046-.01.156-.03.181-.04.026-.008.115.005.141.03.027.027.127-.036.163-.021s.161-.023.186-.023.106.031.135.044l.03-.026c.016-.014.047-.017.067-.01l.042.015a.33.33 0 0 0 .167.028l.042-.012.062-.018c.068.009.183.004.255-.012l.05.071.103-.055.008-.008a.5.5 0 0 1 .162-.001c.08.008.294.077.309.08s.1-.03.149-.056c.048-.025.183.038.19.04l.137.02c.061.01.225.103.227.091s.008-.058.014-.078c.005-.02.079.007.118 0 .039-.006.144.005.134.055s.158.069.154.05 0-.079.02-.087.08.013.113.029c.032.016.156-.006.182.003l.145.047c.025.01.101-.014.124-.035.024-.02.1.04.118.04.018.001.085-.012.11-.008.023.005.102.043.132.052l.03-.022.01-.007c.031.027.022.08-.019.115l.09.005c.043.002.08 0 .07-.067l-.006-.044a.24.24 0 0 1 .146.008l.016.045c.016.045-.016.061-.056.061h-.004c-.005.04.015.075.045.079l.012-.014c.03-.032.044-.085.076-.11l.031-.024c.05-.006.093.011.095.037 0 .027.039.122.08.151.042.03.165-.034.168-.034s.055.014.106.031.181-.006.165.007c-.017.014-.042.096-.043.144v.096c0 .056.023.113.05.128.03.014.1.09.099.137-.002.046-.109.094-.109.063s-.013-.13-.029-.11a.3.3 0 0 0-.045.132c.002.04.087.116.124.1.036-.014.139-.033.124.002-.014.034-.004.107.004.132.007.026.03.12.042.15l.014.003c.049.01.052.042.034.075l-.018.033a.4.4 0 0 1-.098-.07c-.003-.01-.025-.04-.029-.009-.004.032-.034.11-.053.072a.4.4 0 0 1-.031-.113c-.003-.022-.04-.066-.054-.042-.015.023-.041.086-.064.101-.023.014-.108.093-.174.105l-.064-.014-.063-.014c-.073.004-.142-.002-.151-.014s-.057-.04-.076-.026a1 1 0 0 0-.1.082c-.013.017-.086-.009-.113.012s-.14-.018-.17.005c-.029.024-.137-.055-.173-.063-.037-.008-.159.037-.208.017l-.05-.002-.035-.002a1 1 0 0 1-.092 0c-.011-.003-.136.007-.256.013-.12.004-.47.024-.509.013s-.211.014-.28.013l-.059-.023-.037-.015a1 1 0 0 1-.102.054l-.016-.01-.108-.078a1.2 1.2 0 0 1-.311.02c-.044-.01-.205.01-.252.01-.046.002-.21.004-.259.002-.049-.001-.17-.03-.186.038l-.07-.037-.053-.026a.4.4 0 0 1-.186 0l-.039.013-.047.016c-.042-.014-.095-.01-.118.01s-.125-.066-.18-.093c-.055-.028-.227.078-.28.077-.052 0-.205-.004-.228-.026s-.136.022-.168.028c-.031.006-.131.01-.154.021a.5.5 0 0 1-.15-.003 1 1 0 0 0-.165-.002c-.029.008-.1-.042-.106-.043a3 3 0 0 0-.213.062c-.108.033-.317.005-.344.006-.028.001-.154.01-.222.023-.068.011-.326-.055-.43-.064s-.38.08-.392.079-.118-.032-.208-.056l-.074.054c-.035.025-.054-.063-.088 0l-.022.04c-.031-.03-.204-.064-.384-.073l-.16.017-.042.004-.18-.028-.017.026c-.039.057-.058-.03-.09 0-.044.044-.085-.017-.129-.023l-.046-.006a.3.3 0 0 0-.13.07c-.025.028-.128-.03-.162-.013-.034.016-.146-.054-.18-.067s-.118.052-.124.054-.1-.015-.204-.03l-.096.021-.048.011a.4.4 0 0 0-.152.027c-.033.015-.146-.053-.205-.047a2 2 0 0 1-.341.003l-.06.061-.012.013a.8.8 0 0 0-.261-.048c-.098-.003-.371.059-.397.043s-.122.031-.148.043-.093-.028-.097-.025l-.099.049-.041.005-.03.004a.4.4 0 0 0-.132-.026l-.025.016-.05.032a.4.4 0 0 0-.137-.03c-.026.003-.113.023-.135.052s-.12-.03-.145-.035c-.026-.005-.11.051-.146.058-.037.008-.17.001-.207.006-.037.004-.206.034-.294.045-.087.012-.36.027-.41.025-.051-.003-.194.055-.23.057-.035.001-.164.032-.208.037s-.194.038-.236.036-.185.066-.236.082c-.052.016-.242.019-.3.022s-.22.068-.241.073-.102.007-.135.008c-.033 0-.123.05-.152.054-.03.003-.162.037-.231.066a3 3 0 0 1-.397.1c-.074.014-.263.11-.288.088s-.092.046-.11.044-.088.031-.113.042c-.026.01-.104.057-.128.065-.023.008-.125.05-.183.07s-.253.102-.311.123a3.4 3.4 0 0 0-.408.182l-.108.023-.045.01a.6.6 0 0 0-.14.058c-.024.016-.11.034-.135.044a.5.5 0 0 1-.164.026c-.04-.01-.249.11-.398.165l-.143.009c-.041.002-.084-.004-.123.007-.047.013-.09.05-.136.057l-.031.005c-.038-.024-.09-.025-.114-.001-.025.023-.134-.023-.16-.036l-.13-.052c-.018-.006-.067.005-.085-.01s-.097.02-.117.031c-.02.012-.147-.018-.245-.055l-.087-.04-.01-.004c-.003-.03-.019-.042-.035-.024-.017.017-.12.043-.185.01-.064-.034-.222-.25-.243-.33l-.092-.027-.045-.013a2 2 0 0 0-.091-.235 2 2 0 0 0-.131-.212c-.038-.043-.046-.21-.053-.216a.4.4 0 0 0-.053-.038 1 1 0 0 1-.11-.18l-.085-.039c-.073-.033-.128-.113-.198-.161-.02-.014-.06.014-.092.02-.051.008-.103.01-.153.022l-.053.014-.147.064c-.024.01-.101-.005-.124-.018s-.083.056-.124.048l-.037-.003c-.049-.003-.1-.015-.146-.001l-.083.026c-.09.03-.193.055-.227.056s-.076.109-.103.118a1 1 0 0 1-.159.041.8.8 0 0 0-.196.068c-.05.027-.203.032-.211.036s-.035.033-.06.054c-.023.021-.13.064-.158.087s-.16.043-.207.062-.19.092-.22.093c-.031.001-.122.035-.18-.003l.016.118c.001.006-.017.022-.028.023l-.059.006a.6.6 0 0 1-.157.103c-.04.015-.182.059-.227.076l-.2.073c-.02.007-.073.054-.108.021-.034-.033-.105.105-.122.121l-.014-.003c-.076-.015-.128.047-.193.068l-.033.01c-.028.023-.06.04-.073.038s-.047.015-.047.042-.07-.008-.083 0a.4.4 0 0 1-.151-.003l-.015.094-.008.047a4 4 0 0 0-.22.034c-.055.01-.186.1-.2.095a1.2 1.2 0 0 0-.278.01l-.037.157-.016.065c-.027-.04-.08-.06-.117-.044a1 1 0 0 0-.208.128l-.038-.074c-.002-.004-.037.005-.05.017l-.068.065a.8.8 0 0 0-.198.085c-.03.022-.153.007-.204.055l-.068-.002c-.04 0 .012.093-.056.07l-.026-.008a.14.14 0 0 0-.086.031c-.017.018-.076-.022-.1-.007a.4.4 0 0 0-.126.145l-.066-.032-.02-.01a.3.3 0 0 1-.136.077l-.027-.004-.037-.005c-.038.005-.17.042-.292.082l-.1.066c-.02.012-.026.047-.058.013l-.036-.038a.4.4 0 0 1-.09.104l-.027.001-.059.002a1 1 0 0 0-.107.074 1 1 0 0 1-.147.045l-.063.044-.058.04c-.077.033-.148.048-.158.032s-.072.002-.094-.015c-.021-.018-.05.073-.073.078h-.022l-.015-.001c-.015-.01-.057.007-.094.038l-.037.025a.25.25 0 0 1-.125.039l-.023.002a1 1 0 0 0-.114.111c-.038.044-.198-.021-.227-.018-.03.003-.108.061-.142.07s-.144.046-.174.039-.082.092-.118.098a.4.4 0 0 1-.155-.04c-.021-.014-.08.075-.11.092a.07.07 0 0 1-.083-.014c-.014-.018-.097.023-.125.042-.029.02-.115.047-.127.02-.012-.028-.1.026-.124.041l-.003-.004c-.057-.068-.083-.003-.118.029l-.005.005c-.012-.002-.037.01-.057.028-.02.017-.078-.033-.083-.046-.006-.014-.044-.032-.07.005-.024.036-.124.002-.12-.01.005-.01-.013-.03-.05-.02s-.156-.031-.181-.038-.121.001-.15 0c-.029 0-.212 0-.343-.006-.13-.006-.44-.103-.455-.137-.014-.033-.164-.06-.222-.089l-.028-.048-.034-.06a1 1 0 0 1-.107-.094.4.4 0 0 0-.088-.06c-.032-.02-.106-.13-.13-.155-.024-.026-.025-.152-.045-.187a.5.5 0 0 1-.044-.184c.008-.027-.062-.054-.063-.066l.003-.01c.025-.066-.007-.11-.054-.136l-.026-.014a.3.3 0 0 1 .062-.07l.005-.044.004-.03c.025-.054.02-.08-.01-.057-.032.023-.103.065-.108.058-.006-.008.024-.1.035-.139.012-.038-.05-.138-.06-.155s-.018-.08-.058-.101l.002-.012.01-.077a2 2 0 0 1-.078-.261c-.015-.074-.116-.283-.126-.327l-.012-.038-.02-.06a2.3 2.3 0 0 1-.111-.391v-.013c.002-.055.016-.114.003-.164l-.048-.178c.023-.195.034-.38.023-.409l.005-.025.007-.032a1.2 1.2 0 0 0 .045-.23l.126-.16.004-.006a.2.2 0 0 1 .012-.07c.009-.026-.017-.093.005-.11.022-.016.07-.162.117-.248l.027-.08c.018-.054.026-.11.07-.144l.065-.051c-.006-.085.006-.16.029-.164.022-.005.08-.03.062-.04s-.055-.04-.04-.046.05-.026.048-.032a.2.2 0 0 0-.05-.05c-.022-.015-.131.02-.175.038-.044.02-.202.097-.262.114s-.2.125-.214.116l-.014-.01-.14.055c-.032.02-.062.044-.096.062l-.022.012a.13.13 0 0 0-.064.08l-.039.006-.023.004a2 2 0 0 1-.16.07c-.065.024-.248.157-.291.175l-.04.017-.034.014a2 2 0 0 0-.182.112 6 6 0 0 1-.35.212c-.064.032-.252.138-.272.168s-.118.077-.149.092a3 3 0 0 1-.182.078c-.039.014-.142.06-.14.07.001.012-.063.086-.147.133l-.506.282-.081.097c-.049.057-.088.127-.147.175l-.056.045c-.06.053-.15.143-.201.2s-.253.159-.277.181c-.023.023-.105.065-.14.05l-.029-.007-.06-.014c-.068-.013-.149-.006-.18.014-.03.02-.11-.037-.115-.03a.3.3 0 0 1-.104.014l.012-.064c.004-.02.016-.037.021-.056.017-.059.051-.114-.045-.142a.14.14 0 0 1-.095-.15c.005-.048-.021-.05-.056-.064l-.027-.01a1.2 1.2 0 0 0-.16-.243l.044-.118.001-.002-.122-.12-.007-.104-.005-.083a1 1 0 0 1-.097-.254.8.8 0 0 1 .032-.248l-.037-.035c-.006-.005-.004-.034.002-.04l.022-.02a.056.056 0 0 0 .019-.077l.03-.031c.016-.017.024-.048.027-.074.004-.026-.014-.057-.005-.077.013-.032.041-.054.062-.082l.043-.06c.049-.063.075-.142.06-.173-.017-.032.084-.067.104-.093s.104-.056.101-.07.037-.072.061-.103c.025-.03.11-.094.121-.106.011-.01.03-.07.038-.085.006-.016.054-.061.092-.101s.189-.095.212-.108c.024-.013.074-.101.1-.123s.083-.09.088-.075.027.037.032-.011c.004-.048.13-.145.183-.204l.077.044c.006.003.024-.011.031-.022q.035-.05.066-.102c.026-.043.041-.017.072 0 .038.02.085.012.03-.055a.2.2 0 0 1 .055-.064c.012-.008.048.02.054.013l.087-.109c.13-.05.245-.11.256-.133l.014-.018.007-.008c.018.004.06.023.095.042l.013-.044.007-.023c-.023-.045-.02-.08.005-.077a.7.7 0 0 0 .138-.02c.027-.009.111-.1.144-.164l.044-.03.023-.016a1 1 0 0 0 .253-.042l.023-.106c0-.004.026-.001.04 0 .022.003.052.017.066.007l.024-.02c-.004-.04.023-.064.06-.055l.03-.009c.035-.01.067-.036.096-.06l.03-.026c.03-.036.064-.061.078-.056s.064-.027.09-.058l.027-.01.026-.007a.3.3 0 0 0 .105.02l.014-.013.026-.022c.024-.03.05-.066.059-.078.007-.013.045-.023.07 0l.016.008.06.028a.6.6 0 0 1 .21-.1l.048-.035.03-.022c.034-.034.079-.048.1-.029.02.019.076-.06.105-.064.03-.004.122-.015.145-.04.023-.024.099.044.117.046s.106-.045.157-.07h.059c.039.002.088 0 .125.005.037.006.038.001.041-.03l.002-.013c.007-.013.032-.01.055.006.023.017.098-.035.117-.036s.174-.004.3-.01c.128-.004.467.086.486.078.019-.009.08.013.106.034l.037-.027c.02-.015.055-.005.083-.008.052-.005.108.038.16-.017l.007-.006c.051.046.097.064.101.038s.11-.03.15-.02.151.11.181.143a.4.4 0 0 0 .155.062c.01 0 .06.04.108.081.049.042.139.204.127.225-.011.02.049.092.062.114.013.021.06.097.076.119a.6.6 0 0 1 .049.168c.005.046.03.183.037.161.009-.021.03-.027.036.02.005.046.041.203.035.255-.006.05.045.225.07.308s.099.31.127.316.129.17.162.182c.034.013-.002.118.018.136.02.017.06.074.052.093-.01.019-.002.078.006.101.007.025.05.251.081.289l-.078-.001h-.005a.3.3 0 0 0-.017.082c-.002.03.005.166.014.234l-.05.061c-.033.04-.042.116-.042.176v.049a.4.4 0 0 0-.1.119l-.016.05-.014.044a.7.7 0 0 1-.057.137.8.8 0 0 0-.062.15c-.006.03-.034.11-.03.155.006.047-.111.1-.123.135s-.076.171-.098.229-.125.285-.163.381l-.04.085c-.04.085-.088.165-.127.25l-.01.023c.004.036.062.052.127.036.066-.017.243.004.27 0l.01-.034.018-.057c.03.026.067.037.08.025a.6.6 0 0 1 .153-.049c.05-.01.163-.075.172-.033.01.043.118-.026.173-.044.056-.018.195-.132.225-.14.03-.007.116-.064.143-.064s.1-.035.117-.048.077.016.088.012.049-.031.067-.043a.3.3 0 0 1 .117-.015c.024.003.168-.099.272-.167l.117-.015.074-.01c.08-.02.167-.047.19-.059l.021-.015.05-.037c.064-.008.122-.027.13-.041.007-.015.04-.054.057-.055.016 0 .073-.007.09-.01a.4.4 0 0 0 .122-.128l.06.076c.003.003.033-.01.04-.022z\"\n}))), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n d: \"M76.131 20.923a1.545 1.545 0 0 0-2.185 0l-9.004 9.004-.83 3.319a.773.773 0 0 0 .937.937l3.32-.83 9.003-9.004a1.545 1.545 0 0 0 0-2.185z\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.415,\n d: \"M43.348 96.292H17.452c-2.586 0-4.744-2.22-4.744-5.042v-34.5c0-2.82 2.16-5.042 4.743-5.042h20.48l10.162 10.434V91.25c0 2.821-2.16 5.042-4.745 5.042Z\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B1C3E9\",\n d: \"m38.319 51 10.483 10.705h-5.945a4.537 4.537 0 0 1-4.538-4.536z\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M19.077 66.117a2.377 2.377 0 0 1 2.378-2.378h17.434a2.377 2.377 0 0 1 0 4.755H21.455a2.377 2.377 0 0 1-2.378-2.377\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M19.078 74.04a2.377 2.377 0 0 1 2.377-2.377h17.434a2.377 2.377 0 1 1 0 4.755H21.455a2.377 2.377 0 0 1-2.377-2.378\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"noSignsFoundIcon_svg__b\",\n width: 22,\n height: 17,\n x: 20,\n y: 71,\n maskUnits: \"userSpaceOnUse\",\n style: {\n maskType: \"alpha\"\n }\n}, _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#D9D9D9\",\n d: \"M20.034 71.512h21.134v16.362H20.034z\"\n}))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#noSignsFoundIcon_svg__b)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n stroke: \"#FFB629\",\n strokeWidth: 0.581,\n d: \"M29.99 83.41c.102.013.157.07.124.13l.077.041.02.012c.026.007.052-.011.057-.041l-.007-.02-.01-.024a.2.2 0 0 1 .047-.063l.016-.016.072-.055.03-.055c.02.034.044.046.05.027a.2.2 0 0 1 .069-.072c.028-.02.12.01.127-.004.008-.013.063-.01.07-.036l.026-.012.006-.002a5 5 0 0 1 .172-.09l.092.019.01.002c.01.002.029-.012.042-.03s.074-.054.096-.047.113-.049.155-.065l.04-.007.012-.002c.016.012.047.004.068-.017a.6.6 0 0 1 .117-.094c.023-.007.13-.052.186-.074l.059-.006.045-.004a1 1 0 0 0 .134-.124c.027-.032.142.027.172.018l.02-.02c.021-.021.028-.06.047-.083l.005-.006c.026.016.088.009.139-.015.05-.024.182-.097.2-.076.018.02.11-.04.15-.06l.022-.03.057-.076c.058.04.111.061.116.047l.002-.014.006-.039a.2.2 0 0 0 .09-.036c.019-.018.095-.065.123-.098.027-.032.118.034.126.027a2 2 0 0 1 .115-.075c.047-.029.174-.108.178-.112a.5.5 0 0 1 .108-.019c.055-.006.198-.075.21-.07.014.007.074-.021.129-.055.054-.033.223-.051.229-.054.006-.002.026-.021.01-.03-.017-.007-.02-.056.022-.093s.177.025.184.017c.007-.007.053-.032.084-.05.03-.02.136-.035.15-.054l.015-.017c.012-.013.028-.033.04-.032l.04.004c.041.01.1-.013.128-.053l.03-.015.043-.02c.056.004.136.017.18.03.043.011.183-.097.236-.134s.254.002.305.015l.043-.045a.2.2 0 0 1 .081-.047l.044-.01c.044.024.11.021.148-.007l.04-.018c.013-.006.039.033.058.031l.061-.005c.067-.019.142-.04.168-.045.026-.006.107.035.14.02s.156.025.19.025l.03-.004.015-.002a.3.3 0 0 1 .113-.013c.047.002.228.08.315.093s.408.026.517.024l.07.098q.044.066.096.005l.004-.005c.028.02.06.041.074.048.012.007.05 0 .072-.004.023-.005.073.05.097.073.025.024.119.124.165.16s.166.248.21.352l.067.076.004.005c-.01.022.004.09.031.153.027.061.088.24.092.252.004.011.02.101.033.167l.016.06c.011.04.085.04.053.11l-.033.07c.055.02.109.056.12.077.011.023.061.127.082.183l.033.016.059.03c.072.013.167.028.21.032.045.003.194-.003.233.007l.037.009.03.006a.3.3 0 0 0 .127-.025c.036-.016.215-.007.242-.039l.04.055c.026.036.027-.023.027-.042 0-.069.015-.102.079-.054l.01.007c.016-.003.037-.037.044-.076l.045.043.012.012c.042-.023.084-.031.095-.02.01.013.05.047.061.042l.01-.004q.127-.055.254-.112l.05-.023c.054-.03.124-.073.157-.096l.046.026.032.02c.03-.046.068-.082.084-.08l.014.003.02.004a1 1 0 0 0 .173-.05c.008-.008.052.004.078.039.025.034.102-.071.13-.072.026 0 .096-.06.115-.058.019.003.08-.024.092-.054s.08.018.087.006c.005-.012.07-.062.118-.062l.05-.002h.025a.5.5 0 0 0 .134-.104l.066.017.05.012a.7.7 0 0 0 .143-.041c.025-.013.1-.067.13-.074l.034.01c.078.025.135-.007.252-.106l.008-.007c.018.005.09 0 .159-.012l.04-.036.012-.01c.023.002.037.017.032.034l-.002.016-.005.039c.009.048.036.044.06-.01l.032-.034.034-.036c.05-.025.08-.024.067.002-.015.026.029.083.113.054s.29-.055.26-.068-.133-.012-.158.012l-.026.014-.018.01c-.027-.002-.048-.017-.048-.032.001-.016.042-.067.077-.091s.164-.022.172-.029c.009-.006.037-.036.047-.018.01.019.1.023.186-.015l.053-.041c.039-.031.057-.03.099-.003.055.035.12.038.174-.03l.018-.023a.5.5 0 0 1 .12-.013c.031.002.145-.022.19.01l.047-.044.04-.037.104-.024h.113c.055 0 .213-.012.226-.024s.09-.019.134.021.216-.041.245-.045l.025.006c.028.007.062.043.079.033.022-.012.026-.06.045-.085l.015-.019c.027-.009.062-.007.079.005.016.01.063.004.076-.01.012-.012.06-.035.075-.026l.015.002c.044.004.098.022.13 0 .05-.034.087-.057.137-.01l.007.006c.011.002.038-.018.06-.044s.146.01.18.011c.036.002.128-.026.132-.063.003-.036.103.006.133.03.03.025.177.021.198.036.02.014.076-.037.095-.03.018.009.083.007.105-.02.021-.026.111-.069.16-.047l.027.025.089.079c-.031-.075-.021-.114.022-.086.044.028.177.05.19.063s.06.04.068.023c.007-.017.06-.114.092-.177l.076.07c.044.041.127-.012.177.055l.008.01a.3.3 0 0 0 .104-.05c.03-.023.128-.019.184-.01l.049.005.03.004c.034-.012.092-.027.129-.035.037-.007.216.02.245.015.03-.006.115-.015.12-.001.003.014.044.058.075.055.032-.003.056-.102.064-.103a2 2 0 0 1 .173.044l.07-.023.02-.006c.019-.008.077-.003.129.013s.22.01.274.05l.052-.057c.034-.038.052-.064.062.02.004.04.046.032.076.004l.027-.025a.4.4 0 0 0 .137-.03l.036-.01.009-.002c.014.021.039.05.054.067.016.016.098.017.148.016l.008-.009.049-.051c.036.035.086.055.11.046l.022-.011.033-.017c.086-.01.193-.029.237-.043.044-.015.194.02.242.036l.04-.034.037-.033a.5.5 0 0 0 .179.02c.06-.005.217.016.239-.004l.019-.012.005-.003q.012-.011.02.012c.005.014.046.037.075-.005.029-.04.188.008.234-.002s.155.067.157.065.042-.023.083-.043c.04-.02.294-.004.33 0l.03-.012.01-.003c.006-.042.022-.06.036-.04s.072.05.093.052a.6.6 0 0 0 .154-.061c.049-.024.201.006.225.015.024.01.13-.006.172.009l.039-.003.017-.002c.017-.043.05-.059.074-.035s.091.019.11 0c.019-.017.115-.002.162-.042l.038.077c.008-.003.052-.013.1-.024.046-.01.156-.03.181-.04.026-.008.115.005.141.03.027.027.127-.036.163-.021s.161-.023.186-.023.106.031.135.044l.03-.026c.016-.014.047-.016.066-.01l.043.015a.33.33 0 0 0 .167.029l.042-.013.062-.018c.068.009.183.004.255-.011l.05.07.103-.055.008-.008a.5.5 0 0 1 .162-.001c.08.008.294.077.309.08a.5.5 0 0 0 .149-.056c.048-.025.183.039.19.04l.137.02c.061.01.225.104.227.091s.008-.058.014-.078c.005-.02.079.007.118 0 .039-.006.144.005.134.055s.158.069.153.05c-.004-.02 0-.078.02-.086s.08.012.114.028c.032.016.156-.006.182.003l.145.047c.025.01.101-.014.124-.034s.1.04.118.04.085-.013.11-.008c.023.004.102.042.131.051l.031-.022.01-.007c.031.027.022.08-.019.115l.09.005c.043.002.08 0 .07-.067l-.006-.044a.24.24 0 0 1 .146.009l.016.044c.016.045-.016.061-.056.061h-.004c-.005.04.015.075.045.079l.012-.013c.03-.033.043-.086.076-.11l.031-.024c.05-.007.093.01.095.036 0 .027.038.122.08.151.042.03.165-.034.168-.034s.055.014.106.031.181-.006.165.007c-.017.014-.042.096-.044.145v.095c0 .056.024.113.052.128s.1.09.098.137c-.002.046-.11.094-.11.063s-.012-.13-.028-.11a.3.3 0 0 0-.045.132c.001.04.087.116.123.1.037-.014.14-.033.125.002-.014.034-.004.107.004.133.007.025.03.12.041.149l.015.003c.049.01.051.042.033.075l-.017.033a.4.4 0 0 1-.098-.07c-.003-.01-.025-.04-.03-.009-.004.032-.033.11-.052.072a.4.4 0 0 1-.031-.113c-.003-.022-.04-.065-.054-.042-.015.023-.041.086-.064.101s-.108.093-.174.105l-.064-.014-.063-.014c-.073.005-.142-.002-.151-.014s-.057-.04-.076-.026a1 1 0 0 0-.1.082c-.013.017-.086-.009-.114.012-.027.02-.14-.018-.17.005-.028.024-.136-.055-.173-.063s-.158.038-.207.017l-.05-.002-.035-.001a1 1 0 0 1-.092-.001c-.011-.002-.136.007-.256.013s-.47.024-.51.013c-.039-.012-.21.014-.28.013l-.058-.023-.038-.015c-.025.016-.07.04-.101.054l-.016-.01-.108-.077c-.128.02-.268.03-.311.02-.044-.01-.205.01-.252.01-.046 0-.21.004-.259.002s-.17-.03-.186.037l-.07-.037-.053-.026a.4.4 0 0 1-.186 0l-.039.013-.047.016c-.042-.014-.095-.01-.118.01s-.125-.066-.18-.093c-.055-.028-.227.078-.28.078-.053-.001-.205-.005-.229-.027-.023-.022-.135.022-.167.028-.031.006-.131.01-.154.021a.5.5 0 0 1-.15-.003 1 1 0 0 0-.165-.002c-.029.008-.1-.042-.106-.043a3 3 0 0 0-.213.062c-.108.033-.317.005-.345.006s-.153.01-.221.023c-.068.011-.326-.055-.43-.064-.105-.008-.38.08-.392.079s-.118-.031-.208-.056l-.074.054c-.035.025-.054-.063-.088 0l-.022.04c-.032-.03-.204-.064-.384-.073l-.16.017-.042.004-.18-.028-.017.026c-.039.057-.058-.03-.09 0-.044.044-.085-.017-.129-.022l-.047-.007a.3.3 0 0 0-.129.07c-.025.028-.128-.03-.162-.013-.035.016-.146-.054-.18-.067s-.118.052-.124.054-.1-.015-.204-.03l-.096.021-.048.011a.4.4 0 0 0-.152.027c-.033.015-.146-.053-.205-.047a2 2 0 0 1-.342.003l-.059.062-.012.012a.8.8 0 0 0-.261-.048c-.098-.003-.372.059-.397.043s-.122.032-.148.043c-.025.012-.093-.028-.098-.025l-.098.049-.041.005-.03.004a.4.4 0 0 0-.132-.026l-.026.016-.05.032a.4.4 0 0 0-.136-.03c-.026.003-.114.023-.135.052s-.12-.03-.145-.035c-.026-.005-.11.051-.146.058-.037.008-.17.001-.208.006-.037.004-.206.034-.293.045-.087.012-.36.027-.41.025-.051-.003-.194.055-.23.057-.035.001-.164.032-.208.037s-.194.038-.236.036-.185.066-.236.082c-.052.016-.242.019-.3.022s-.22.068-.241.073-.102.008-.135.008-.123.05-.153.054-.161.037-.23.066c-.07.03-.323.088-.397.1-.074.014-.263.11-.288.088s-.092.046-.11.044-.088.031-.114.042c-.025.01-.103.057-.127.065-.023.008-.125.05-.183.07s-.253.102-.311.123a3.4 3.4 0 0 0-.408.182l-.108.023-.046.01a.6.6 0 0 0-.14.058c-.024.016-.109.034-.134.044a.5.5 0 0 1-.164.026c-.04-.01-.249.11-.398.165l-.143.009c-.041.002-.084-.004-.123.007-.047.013-.09.05-.136.057l-.031.005c-.038-.024-.09-.025-.114-.001-.025.023-.134-.023-.16-.036l-.13-.052c-.018-.006-.067.005-.086-.01s-.096.02-.116.031c-.02.012-.147-.018-.245-.055l-.088-.04-.01-.004c-.002-.03-.018-.042-.035-.024-.016.017-.12.043-.184.01-.064-.034-.222-.25-.243-.33l-.092-.027-.045-.013a2 2 0 0 0-.091-.235 2 2 0 0 0-.132-.212c-.037-.043-.045-.21-.052-.216a.4.4 0 0 0-.054-.038 1 1 0 0 1-.11-.18l-.084-.039c-.073-.033-.128-.113-.198-.161-.02-.014-.06.014-.092.02-.051.008-.103.01-.153.022l-.053.014-.147.064c-.024.01-.102-.005-.125-.018-.022-.013-.082.056-.123.048l-.037-.003c-.049-.003-.1-.015-.146-.001l-.083.026c-.09.03-.193.055-.227.056s-.076.109-.103.118a1 1 0 0 1-.159.041.8.8 0 0 0-.197.068c-.048.027-.202.032-.21.036s-.035.033-.06.054c-.023.021-.13.064-.159.087-.027.023-.159.043-.206.062s-.19.092-.22.093c-.031.001-.122.035-.18-.003l.016.118c.001.006-.018.022-.028.023l-.059.006a.6.6 0 0 1-.157.103c-.04.015-.182.059-.227.076l-.2.073c-.02.007-.073.054-.108.021-.034-.033-.105.105-.122.121l-.014-.003c-.076-.015-.128.047-.193.068l-.033.01c-.028.023-.06.04-.073.038-.013-.001-.047.015-.047.042s-.07-.008-.083 0a.4.4 0 0 1-.152-.003l-.014.094-.008.047a4 4 0 0 0-.22.034c-.055.01-.186.1-.2.095a1.2 1.2 0 0 0-.278.01l-.038.157-.015.065c-.027-.04-.08-.06-.117-.044a1 1 0 0 0-.208.128l-.038-.074c-.002-.004-.037.005-.05.017l-.068.066a.8.8 0 0 0-.198.084c-.03.022-.153.007-.204.055l-.068-.002c-.04 0 .012.093-.056.07l-.026-.008a.14.14 0 0 0-.086.031c-.017.018-.076-.022-.1-.007a.4.4 0 0 0-.126.145l-.067-.032-.02-.01a.3.3 0 0 1-.135.077l-.027-.004-.037-.005c-.038.005-.17.042-.292.082l-.1.066c-.02.012-.026.047-.058.013l-.036-.038a.4.4 0 0 1-.09.104l-.027.001-.059.002a1 1 0 0 0-.107.074 1 1 0 0 1-.147.045l-.063.043-.058.04c-.077.034-.148.05-.158.033-.01-.016-.072.002-.094-.015-.021-.018-.05.073-.073.078h-.022l-.015-.001c-.015-.01-.057.007-.094.038l-.037.024a.25.25 0 0 1-.125.04l-.023.002a1 1 0 0 0-.114.111c-.038.044-.198-.022-.227-.018-.03.003-.108.061-.142.07s-.144.045-.175.039c-.03-.007-.08.092-.117.097a.4.4 0 0 1-.156-.039c-.02-.014-.079.074-.11.092a.07.07 0 0 1-.082-.014c-.014-.019-.097.023-.125.042-.029.02-.115.047-.127.02-.012-.028-.1.026-.124.041l-.003-.004c-.057-.068-.083-.003-.118.029l-.005.005c-.012-.002-.037.01-.057.028-.02.017-.078-.033-.083-.046-.006-.014-.044-.032-.07.004-.024.037-.124.003-.12-.008s-.013-.032-.05-.021-.156-.031-.181-.038-.121.001-.15 0c-.029 0-.212 0-.343-.006-.13-.006-.44-.103-.455-.137-.014-.033-.164-.06-.222-.089l-.028-.048-.034-.06a1 1 0 0 1-.107-.094.4.4 0 0 0-.088-.06c-.032-.019-.106-.13-.13-.155-.024-.026-.025-.152-.045-.187a.5.5 0 0 1-.044-.184c.008-.027-.062-.054-.063-.066l.003-.01c.024-.066-.007-.11-.054-.136l-.026-.014a.2.2 0 0 1 .062-.07l.005-.044.003-.03c.026-.054.021-.08-.01-.057-.03.022-.102.065-.107.057-.006-.007.024-.1.035-.138s-.05-.138-.06-.155-.018-.08-.058-.101l.001-.012.012-.077a2 2 0 0 1-.08-.261c-.014-.074-.115-.283-.125-.327l-.012-.038-.02-.06a2.3 2.3 0 0 1-.112-.391l.001-.014c.002-.054.016-.113.003-.163l-.048-.178c.023-.195.033-.38.022-.409l.006-.025.007-.033c.014-.034.034-.137.045-.23l.125-.16.005-.005a.2.2 0 0 1 .012-.07c.009-.026-.017-.094.005-.11s.07-.162.117-.248l.027-.08c.018-.054.026-.11.07-.144l.065-.051c-.007-.085.006-.16.029-.164.022-.005.08-.03.062-.04s-.055-.04-.04-.046.05-.026.048-.032a.2.2 0 0 0-.05-.05c-.022-.016-.131.02-.175.038-.044.02-.203.097-.262.114-.06.017-.2.125-.214.116l-.014-.01-.14.055c-.032.02-.063.044-.096.061l-.022.013a.13.13 0 0 0-.064.08l-.039.006-.023.004a2 2 0 0 1-.16.07c-.065.024-.248.157-.291.175l-.04.016-.034.015a2 2 0 0 0-.182.111c-.064.045-.287.18-.35.213-.065.032-.252.138-.272.168s-.118.077-.149.092a3 3 0 0 1-.182.078.5.5 0 0 0-.14.07c.001.012-.063.086-.147.133s-.395.222-.506.282l-.082.097c-.048.057-.087.127-.146.175l-.056.045c-.06.053-.15.143-.202.2-.05.058-.252.159-.276.181-.023.023-.106.065-.14.05l-.029-.007-.061-.014c-.068-.013-.148-.006-.178.014s-.112-.037-.117-.03a.3.3 0 0 1-.103.014l.012-.064c.003-.02.016-.037.021-.056.017-.059.051-.114-.045-.142a.14.14 0 0 1-.096-.15c.006-.048-.02-.05-.055-.064l-.028-.01a1.2 1.2 0 0 0-.16-.244l.045-.117.001-.003-.122-.12-.007-.103-.005-.083a1 1 0 0 1-.097-.254.8.8 0 0 1 .032-.248l-.037-.035c-.006-.005-.004-.034.002-.04l.022-.02a.056.056 0 0 0 .019-.077l.03-.031c.016-.017.024-.048.027-.075.003-.025-.014-.056-.005-.076.013-.032.041-.054.062-.082l.043-.06c.049-.064.075-.142.06-.173-.017-.032.084-.067.104-.093s.104-.056.101-.07.037-.072.061-.103c.025-.03.11-.094.121-.106.011-.01.03-.07.038-.085.006-.017.054-.062.092-.102s.189-.094.212-.107c.024-.014.074-.101.1-.123s.083-.09.088-.075.027.037.032-.011c.004-.048.13-.146.183-.204l.077.044c.006.003.024-.011.031-.022q.035-.05.066-.102c.026-.043.041-.017.072 0 .038.02.085.012.03-.055a.2.2 0 0 1 .055-.064c.012-.008.048.02.054.013l.087-.109c.13-.05.245-.11.256-.134l.014-.017.007-.008c.018.004.06.022.095.042l.013-.044.007-.024c-.023-.044-.02-.078.005-.076a.7.7 0 0 0 .138-.02c.027-.009.111-.1.144-.164l.044-.03.023-.016a1 1 0 0 0 .253-.042l.023-.107c0-.003.026 0 .04.001.022.002.052.017.066.006l.024-.02c-.004-.039.023-.063.06-.054l.03-.009c.035-.01.067-.036.096-.06l.03-.026c.03-.036.064-.061.078-.057.014.005.064-.026.09-.057l.027-.01.026-.007a.3.3 0 0 0 .105.02l.014-.013.026-.022c.024-.03.05-.066.059-.078.007-.013.045-.023.07 0l.016.008.06.028a.6.6 0 0 1 .21-.1l.048-.035.03-.022c.034-.035.079-.048.1-.029.02.019.076-.06.105-.064.03-.004.121-.015.145-.04.023-.024.099.044.117.046s.106-.045.156-.07h.06c.039.001.088 0 .125.005.037.006.038.001.041-.03l.002-.013c.007-.014.032-.01.055.006.023.017.098-.035.117-.036s.174-.004.3-.01c.127-.004.467.086.486.078.019-.009.08.013.106.033l.037-.026c.02-.015.055-.005.082-.008.053-.005.108.038.161-.017l.006-.006c.052.046.098.064.102.038s.11-.03.15-.02.151.11.181.143.146.062.155.062.059.04.108.081c.049.042.139.204.127.225-.011.02.049.092.062.114.013.021.06.097.076.119a.6.6 0 0 1 .049.168c.005.046.03.183.037.161.008-.021.03-.027.035.02.006.046.042.203.036.255-.006.05.045.225.07.308s.099.31.127.316.129.17.162.182c.034.013-.002.118.018.135s.06.075.052.094c-.01.019-.002.077.006.101.007.024.05.251.081.288h-.084a.3.3 0 0 0-.016.082c-.002.03.005.166.014.234l-.05.061c-.033.04-.042.116-.042.176v.049a.4.4 0 0 0-.1.119l-.016.05-.014.044a.7.7 0 0 1-.057.137.8.8 0 0 0-.062.15c-.006.03-.034.11-.03.155.005.047-.111.1-.123.135-.012.034-.076.171-.098.229s-.125.285-.163.381l-.04.085c-.04.085-.088.165-.128.25l-.01.022c.005.037.062.053.128.037.066-.017.243.004.27 0l.01-.034.018-.057c.03.026.067.037.08.025a.6.6 0 0 1 .152-.049c.052-.01.164-.075.173-.033.01.043.118-.026.173-.044s.194-.132.225-.14c.03-.008.116-.064.143-.064s.1-.035.117-.048.077.016.088.012.049-.032.067-.043a.3.3 0 0 1 .117-.015c.024.003.168-.099.272-.167l.117-.016.074-.01c.08-.02.167-.046.19-.058l.021-.015.05-.037c.064-.008.122-.027.13-.042.007-.014.04-.053.057-.054.016 0 .073-.007.09-.01a.4.4 0 0 0 .122-.128l.06.076c.003.003.033-.01.04-.022z\"\n}))), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n d: \"M52.131 71.923a1.545 1.545 0 0 0-2.185 0l-9.004 9.004-.83 3.319a.773.773 0 0 0 .937.937l3.32-.83 9.003-9.004a1.545 1.545 0 0 0 0-2.185z\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.415,\n d: \"M90.348 96.292H64.452c-2.586 0-4.744-2.22-4.744-5.042v-34.5c0-2.82 2.16-5.042 4.743-5.042h20.48l10.162 10.434V91.25c0 2.821-2.16 5.042-4.745 5.042Z\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B1C3E9\",\n d: \"m85.319 51 10.483 10.705h-5.945a4.537 4.537 0 0 1-4.538-4.536z\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M66.077 66.117a2.377 2.377 0 0 1 2.378-2.378h17.434a2.377 2.377 0 0 1 0 4.755H68.455a2.377 2.377 0 0 1-2.378-2.377\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M66.078 74.04a2.377 2.377 0 0 1 2.377-2.377h17.434a2.377 2.377 0 1 1 0 4.755H68.455a2.377 2.377 0 0 1-2.377-2.378\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"noSignsFoundIcon_svg__c\",\n width: 22,\n height: 17,\n x: 67,\n y: 71,\n maskUnits: \"userSpaceOnUse\",\n style: {\n maskType: \"alpha\"\n }\n}, _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#D9D9D9\",\n d: \"M67.034 71.512h21.134v16.362H67.034z\"\n}))), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#noSignsFoundIcon_svg__c)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n stroke: \"#FFB629\",\n strokeWidth: 0.581,\n d: \"M76.99 83.41c.102.013.157.07.124.13l.077.041.02.012c.026.007.051-.011.057-.041l-.008-.02-.008-.024a.2.2 0 0 1 .046-.063l.016-.016.072-.055.03-.055c.02.034.044.046.05.027a.2.2 0 0 1 .069-.072c.028-.02.12.01.127-.004.008-.013.063-.01.07-.036l.026-.012.006-.002a5 5 0 0 1 .172-.09l.092.019.01.002c.01.002.029-.012.042-.03s.074-.054.096-.047.113-.049.155-.065l.04-.007.012-.002c.016.012.047.004.068-.017a.6.6 0 0 1 .117-.094c.023-.007.13-.052.186-.074l.059-.006.045-.004a1 1 0 0 0 .134-.124c.027-.032.142.027.172.018l.02-.02c.021-.021.028-.06.047-.083l.005-.006c.026.016.088.009.139-.015.05-.024.182-.097.2-.076.018.02.111-.04.15-.06l.022-.03.057-.076c.059.04.111.061.116.047l.002-.014.006-.039a.2.2 0 0 0 .09-.036c.019-.018.095-.065.123-.098.027-.032.118.034.126.027.007-.008.067-.046.115-.075.047-.029.174-.108.178-.112a.5.5 0 0 1 .108-.019c.055-.006.198-.075.21-.07.014.007.074-.021.129-.055.054-.033.222-.051.229-.054.006-.002.026-.021.01-.03-.017-.007-.02-.056.022-.093s.177.025.184.017c.007-.007.053-.032.083-.05.031-.02.137-.035.151-.054l.015-.017c.012-.013.028-.033.04-.032l.04.004c.041.01.1-.013.128-.053l.03-.015.043-.02c.055.004.136.017.18.03.043.011.183-.097.236-.134s.254.002.305.015l.043-.045a.2.2 0 0 1 .081-.047l.044-.01c.044.024.11.021.148-.007l.04-.018c.013-.006.039.033.058.031l.062-.005c.066-.019.141-.04.167-.045.026-.006.107.035.14.02s.156.025.19.025l.03-.004.015-.002a.3.3 0 0 1 .113-.013c.047.002.228.08.315.093s.408.026.517.024l.07.098q.043.066.096.005l.004-.005c.028.02.061.041.074.048s.05 0 .072-.004c.023-.005.073.05.097.073.025.024.119.124.165.16s.166.248.21.352l.067.076.004.005c-.01.022.004.09.031.153.027.061.088.24.092.252.004.011.02.101.033.167l.016.06c.011.04.085.04.053.11l-.033.07c.055.02.109.056.12.077.011.023.061.127.082.183l.033.016.059.03c.072.013.167.028.21.032.045.003.194-.003.233.007l.037.009.03.006a.3.3 0 0 0 .127-.025c.036-.016.215-.007.242-.039l.04.055c.026.036.027-.023.027-.042 0-.069.015-.102.079-.054l.01.007c.016-.003.037-.037.044-.076l.045.043.012.012c.042-.023.084-.031.095-.02.01.013.05.047.061.042l.01-.004q.127-.055.254-.112l.05-.023c.054-.03.124-.073.157-.096l.046.026.032.02c.03-.046.068-.082.084-.08l.014.003.02.004a1 1 0 0 0 .174-.05c.007-.008.051.004.077.039.025.034.102-.071.13-.072.026 0 .096-.06.115-.058.019.003.08-.024.092-.054s.08.018.087.006c.005-.012.07-.062.118-.062l.05-.002h.025a.5.5 0 0 0 .134-.104l.066.017.05.012a.7.7 0 0 0 .143-.041c.025-.013.1-.067.13-.074l.034.01c.078.025.135-.007.252-.106l.008-.007c.018.005.09 0 .16-.012l.04-.036.011-.01c.023.002.037.017.032.034l-.002.016-.005.039c.009.048.036.044.06-.01l.032-.034.034-.036c.05-.025.08-.024.067.002-.015.026.029.083.113.054s.29-.055.26-.068-.134-.012-.158.012l-.026.014-.018.01c-.027-.002-.048-.017-.048-.032.001-.016.042-.067.077-.091s.164-.022.172-.029c.009-.006.037-.036.047-.018.01.019.101.023.186-.015l.053-.041c.039-.031.057-.03.099-.003.055.035.12.038.174-.03l.018-.023a.5.5 0 0 1 .12-.013c.031.002.145-.022.19.01l.047-.044.04-.037.104-.024h.112c.056 0 .214-.012.227-.024s.09-.019.134.021.216-.041.245-.045l.025.006c.028.007.062.043.079.033.022-.012.026-.06.045-.085l.015-.019c.027-.009.062-.007.079.005.016.01.063.004.076-.01.012-.012.06-.035.075-.026l.015.002c.044.004.098.022.13 0 .05-.034.087-.057.137-.01l.007.006c.011.002.038-.018.06-.044s.146.01.18.011c.036.002.128-.026.132-.063.003-.036.103.006.133.03.03.025.177.021.198.036.02.014.076-.037.095-.03.018.009.083.007.105-.02.021-.026.111-.069.16-.047l.028.025.088.079c-.031-.075-.021-.114.022-.086.044.028.177.05.19.063s.06.04.068.023c.007-.017.06-.114.092-.177l.076.07c.044.041.127-.012.177.055l.008.01a.3.3 0 0 0 .104-.05c.03-.023.128-.019.184-.01l.05.005.029.004a1 1 0 0 1 .129-.035c.037-.007.216.02.245.015.03-.006.115-.015.12-.001.003.014.044.058.075.055.032-.003.056-.102.064-.103s.092.021.173.044l.07-.023.02-.006c.019-.008.077-.003.129.013s.22.01.274.05l.052-.057c.034-.038.052-.064.062.02.004.04.046.032.076.004l.027-.025a.4.4 0 0 0 .137-.03l.036-.01.009-.002c.014.021.039.05.055.067.015.016.097.017.147.016l.008-.009.049-.051c.037.035.086.055.11.046l.022-.011.033-.017a1.5 1.5 0 0 0 .237-.043c.044-.015.195.02.242.036l.04-.034.037-.033a.5.5 0 0 0 .179.02c.06-.005.217.016.239-.004l.019-.012.005-.003q.012-.011.02.012c.005.014.046.037.075-.005.029-.04.188.008.234-.002s.155.067.157.065l.083-.043c.04-.02.294-.004.33 0l.03-.012.01-.003c.006-.042.022-.06.036-.04s.072.05.093.052a.6.6 0 0 0 .154-.061c.049-.024.201.006.225.015.024.01.13-.006.172.009l.039-.003.017-.002c.017-.043.05-.059.074-.035s.091.019.11 0c.019-.017.115-.002.162-.042l.039.077c.007-.003.052-.013.098-.024.047-.01.157-.03.182-.04.026-.008.115.005.141.03.027.027.127-.036.163-.021s.161-.023.186-.023a.6.6 0 0 1 .135.044l.031-.026c.015-.014.046-.016.066-.01l.042.015a.33.33 0 0 0 .167.029l.042-.013.062-.018c.068.009.183.004.255-.011l.051.07.102-.055.008-.008a.5.5 0 0 1 .162-.001c.08.008.294.077.309.08a.5.5 0 0 0 .149-.056c.048-.025.183.039.19.04l.137.02c.061.01.225.104.227.091s.008-.058.014-.078c.005-.02.079.007.118 0 .039-.006.144.005.134.055s.158.069.153.05c-.004-.02 0-.078.02-.086s.081.012.114.028c.032.016.156-.006.182.003l.145.047c.025.01.101-.014.124-.034.024-.02.1.04.118.04s.085-.013.109-.008.103.042.132.051l.031-.022.011-.007c.03.027.021.08-.02.115l.09.005c.043.002.081 0 .071-.067l-.007-.044a.24.24 0 0 1 .146.009l.016.044c.016.045-.016.061-.056.061h-.004c-.005.04.015.075.045.079l.012-.013c.029-.033.043-.086.076-.11l.031-.024c.051-.007.093.01.095.036.001.027.039.122.08.151.042.03.165-.034.168-.034s.055.014.106.031.181-.006.165.007c-.017.014-.042.096-.043.145v.095c0 .056.023.113.051.128s.1.09.098.137c-.002.046-.109.094-.109.063s-.013-.13-.029-.11a.3.3 0 0 0-.045.132c.002.04.087.116.123.1.037-.014.14-.033.125.002a.3.3 0 0 0 .004.133c.007.025.03.12.042.149l.014.003c.049.01.052.042.034.075l-.018.033a.4.4 0 0 1-.098-.07c-.003-.01-.025-.04-.029-.009-.004.032-.034.11-.053.072a.5.5 0 0 1-.031-.113c-.003-.022-.039-.065-.054-.042s-.041.086-.064.101-.108.093-.174.105l-.064-.014-.063-.014c-.073.005-.142-.002-.151-.014s-.057-.04-.076-.026a1 1 0 0 0-.099.082c-.014.017-.087-.009-.114.012s-.141-.018-.17.005c-.029.024-.137-.055-.174-.063s-.158.038-.207.017l-.05-.002-.035-.001a1 1 0 0 1-.092-.001c-.011-.002-.136.007-.256.013-.121.005-.469.024-.509.013s-.211.014-.281.013l-.058-.023-.037-.015c-.026.016-.072.04-.102.054l-.016-.01-.108-.077c-.128.02-.268.03-.311.02-.044-.01-.205.01-.252.01-.046 0-.21.004-.259.002s-.17-.03-.186.037l-.071-.037-.052-.026a.4.4 0 0 1-.186 0l-.039.013-.047.016c-.042-.014-.095-.01-.118.01s-.125-.066-.18-.093c-.055-.028-.227.078-.28.078-.053-.001-.205-.005-.229-.027-.023-.022-.135.022-.167.028-.031.006-.131.01-.154.021a.5.5 0 0 1-.149-.003 1 1 0 0 0-.166-.002c-.029.008-.1-.042-.106-.043a3 3 0 0 0-.213.062c-.108.033-.317.005-.345.006s-.153.01-.221.023c-.068.011-.326-.055-.43-.064-.105-.008-.38.08-.392.079s-.118-.031-.208-.056l-.074.054c-.035.025-.054-.063-.088 0l-.022.04c-.032-.03-.204-.064-.384-.073l-.16.017-.042.004-.18-.028-.017.026c-.039.057-.058-.03-.09 0-.044.044-.085-.017-.129-.022l-.047-.007a.3.3 0 0 0-.129.07c-.025.028-.128-.03-.162-.013-.035.016-.146-.054-.18-.067s-.118.052-.124.054-.1-.015-.204-.03l-.096.021-.048.011a.4.4 0 0 0-.152.027c-.033.015-.146-.053-.205-.047a2 2 0 0 1-.342.003l-.059.062-.012.012a.8.8 0 0 0-.261-.048c-.098-.003-.372.059-.397.043s-.122.032-.148.043c-.025.012-.093-.028-.098-.025l-.098.049-.041.005-.03.004a.4.4 0 0 0-.132-.026l-.026.016-.05.032a.4.4 0 0 0-.136-.03c-.026.003-.114.023-.135.052s-.12-.03-.145-.035c-.026-.005-.11.051-.146.058-.037.008-.17.001-.208.006-.036.004-.205.034-.293.045-.087.012-.36.027-.41.025-.051-.003-.194.055-.23.057-.035.001-.164.032-.208.037s-.194.038-.236.036-.185.066-.236.082c-.052.016-.242.019-.3.022s-.22.068-.241.073-.102.008-.135.008-.123.05-.153.054-.161.037-.23.066a3 3 0 0 1-.397.1c-.074.014-.263.11-.288.088s-.092.046-.11.044-.088.031-.113.042c-.026.01-.104.057-.128.065-.023.008-.125.05-.183.07s-.253.102-.311.123a3.4 3.4 0 0 0-.408.182l-.108.023-.046.01a.6.6 0 0 0-.14.058c-.024.016-.109.034-.134.044a.5.5 0 0 1-.164.026c-.04-.01-.249.11-.398.165l-.143.009c-.041.002-.084-.004-.123.007-.047.013-.09.05-.136.057l-.031.005c-.038-.024-.09-.025-.114-.001-.025.023-.134-.023-.16-.036l-.13-.052c-.018-.006-.067.005-.086-.01s-.096.02-.116.031c-.02.012-.147-.018-.245-.055l-.088-.04-.01-.004c-.002-.03-.018-.042-.035-.024-.016.017-.12.043-.184.01-.064-.034-.222-.25-.243-.33l-.092-.027-.045-.013a2 2 0 0 0-.091-.235 2 2 0 0 0-.132-.212c-.037-.043-.045-.21-.052-.216a.4.4 0 0 0-.054-.038 1 1 0 0 1-.109-.18l-.085-.039c-.073-.033-.128-.113-.198-.161-.02-.014-.06.014-.092.02-.051.008-.103.01-.153.022l-.053.014-.147.064c-.024.01-.102-.005-.125-.018-.022-.013-.082.056-.123.048l-.037-.003c-.049-.003-.1-.015-.146-.001l-.083.026c-.09.03-.193.055-.227.056s-.076.109-.103.118a1 1 0 0 1-.159.041.8.8 0 0 0-.197.068c-.048.027-.202.032-.21.036s-.035.033-.06.054c-.023.021-.13.064-.158.087s-.16.043-.207.062-.19.092-.22.093c-.031.001-.122.035-.18-.003l.016.118c.001.006-.018.022-.028.023l-.059.006a.6.6 0 0 1-.157.103c-.04.015-.182.059-.227.076l-.2.073c-.02.007-.073.054-.108.021-.034-.033-.105.105-.122.121l-.014-.003c-.076-.015-.128.047-.193.068l-.033.01c-.028.023-.06.04-.073.038-.013-.001-.047.015-.047.042s-.07-.008-.083 0a.4.4 0 0 1-.152-.003l-.014.094-.008.047a4 4 0 0 0-.22.034c-.055.01-.186.1-.2.095a1.2 1.2 0 0 0-.278.01l-.038.157-.015.065c-.027-.04-.08-.06-.117-.044a1 1 0 0 0-.208.128l-.038-.074c-.002-.004-.037.005-.05.017l-.068.066a.8.8 0 0 0-.198.084c-.03.022-.153.007-.204.055l-.068-.002c-.04 0 .012.093-.056.07l-.026-.008a.14.14 0 0 0-.086.031c-.017.018-.076-.022-.1-.007a.4.4 0 0 0-.126.145l-.067-.032-.02-.01a.3.3 0 0 1-.135.077l-.027-.004-.037-.005c-.038.005-.17.042-.292.082l-.1.066c-.02.012-.027.047-.058.013l-.036-.038a.4.4 0 0 1-.09.104l-.027.001-.059.002a1 1 0 0 0-.107.074 1 1 0 0 1-.147.045l-.063.043-.058.04c-.077.034-.148.05-.158.033-.01-.016-.072.002-.094-.015s-.05.073-.073.078h-.022l-.015-.001c-.015-.01-.057.007-.094.038l-.037.024a.25.25 0 0 1-.125.04l-.023.002a1 1 0 0 0-.114.111c-.038.044-.198-.022-.227-.018-.03.003-.108.061-.142.07s-.144.045-.175.039c-.03-.007-.08.092-.117.097a.4.4 0 0 1-.156-.039c-.02-.014-.079.074-.11.092a.07.07 0 0 1-.082-.014c-.014-.019-.097.023-.125.042-.029.02-.115.047-.127.02-.012-.028-.1.026-.124.041l-.004-.004c-.056-.068-.082-.003-.117.029l-.005.005c-.012-.002-.037.01-.057.028-.02.017-.078-.033-.083-.046-.006-.014-.044-.032-.07.004-.024.037-.124.003-.12-.008s-.013-.032-.05-.021-.156-.031-.181-.038c-.026-.007-.121.001-.15 0-.029 0-.212 0-.343-.006-.13-.006-.44-.103-.455-.137-.014-.033-.164-.06-.222-.089l-.028-.048-.034-.06a1 1 0 0 1-.107-.094.4.4 0 0 0-.088-.06c-.032-.019-.106-.13-.13-.155-.024-.026-.025-.152-.045-.187a.5.5 0 0 1-.044-.184c.008-.027-.062-.054-.063-.066l.003-.01c.024-.066-.007-.11-.054-.136l-.026-.014a.3.3 0 0 1 .062-.07l.005-.044.003-.03c.026-.054.021-.08-.01-.057-.03.022-.102.065-.107.057-.006-.007.024-.1.035-.138s-.05-.138-.06-.155-.018-.08-.058-.101l.001-.012.012-.077a2 2 0 0 1-.08-.261c-.014-.074-.115-.283-.125-.327l-.012-.038-.02-.06a2.3 2.3 0 0 1-.111-.391v-.014c.002-.054.016-.113.003-.163l-.048-.178c.023-.195.033-.38.022-.409l.006-.025.007-.033a1.2 1.2 0 0 0 .045-.23l.125-.16.005-.005a.2.2 0 0 1 .012-.07c.009-.026-.017-.094.005-.11s.07-.162.117-.248l.027-.08c.018-.054.026-.11.07-.144l.065-.051c-.007-.085.006-.16.029-.164.022-.005.08-.03.062-.04s-.055-.04-.04-.046.05-.026.048-.032a.2.2 0 0 0-.05-.05c-.022-.016-.131.02-.175.038-.044.02-.203.097-.262.114-.06.017-.2.125-.214.116l-.014-.01-.14.055c-.032.02-.063.044-.096.061l-.022.013a.13.13 0 0 0-.064.08l-.039.006-.023.004a2 2 0 0 1-.16.07c-.065.024-.248.157-.291.175l-.04.016-.034.015a2 2 0 0 0-.182.111 6 6 0 0 1-.35.213c-.065.032-.252.138-.272.168s-.118.077-.149.092a3 3 0 0 1-.182.078c-.039.014-.142.06-.14.07.001.012-.063.086-.147.133l-.506.282-.082.097c-.048.057-.087.127-.146.175l-.056.045c-.06.053-.15.143-.202.2-.05.058-.252.159-.276.181-.023.023-.106.065-.14.05l-.029-.007-.06-.014c-.069-.013-.149-.006-.18.014-.03.02-.11-.037-.116-.03a.3.3 0 0 1-.103.014l.012-.064c.003-.02.016-.037.021-.056.017-.059.051-.114-.045-.142a.14.14 0 0 1-.095-.15c.005-.048-.021-.05-.056-.064l-.028-.01a1.2 1.2 0 0 0-.16-.244l.045-.117.001-.003-.122-.12-.007-.103-.005-.083a1 1 0 0 1-.097-.254.8.8 0 0 1 .032-.248l-.037-.035c-.006-.005-.005-.034.002-.04l.022-.02a.056.056 0 0 0 .019-.077l.03-.031c.016-.017.024-.048.027-.075.003-.025-.014-.056-.005-.076.013-.032.041-.054.062-.082l.043-.06c.049-.064.075-.142.06-.173-.017-.032.084-.067.104-.093s.104-.056.101-.07.037-.072.061-.103c.025-.03.11-.094.121-.106.011-.01.03-.07.037-.085.007-.017.054-.062.093-.102.038-.04.189-.094.212-.107.024-.014.074-.101.1-.123s.083-.09.088-.075.027.037.032-.011c.004-.048.13-.146.183-.204l.077.044c.006.003.024-.011.031-.022q.035-.05.066-.102c.025-.043.041-.017.072 0 .038.02.085.012.03-.055a.2.2 0 0 1 .055-.064c.012-.008.048.02.054.013l.087-.109c.13-.05.245-.11.255-.134l.015-.017.007-.008c.018.004.06.022.095.042l.013-.044.007-.024c-.023-.044-.02-.078.005-.076a.7.7 0 0 0 .138-.02c.027-.009.111-.1.144-.164l.044-.03.023-.016a1 1 0 0 0 .253-.042l.023-.107c0-.003.026 0 .04.001.022.002.052.017.065.006l.025-.02c-.004-.039.023-.063.06-.054l.03-.009c.035-.01.067-.036.096-.06l.03-.026c.03-.036.064-.061.078-.057.014.005.064-.026.09-.057l.027-.01.026-.007a.3.3 0 0 0 .105.02l.014-.013.026-.022c.024-.03.05-.066.059-.078.007-.013.045-.023.07 0l.016.008.06.028a.6.6 0 0 1 .21-.1l.048-.035.03-.022c.034-.035.079-.048.1-.029.02.019.076-.06.105-.064.03-.004.121-.015.145-.04.023-.024.099.044.117.046s.106-.045.157-.07h.059c.039.001.088 0 .125.005.037.006.038.001.041-.03l.002-.013c.007-.014.032-.01.055.006.023.017.098-.035.117-.036s.174-.004.3-.01c.128-.004.467.086.486.078.019-.009.08.013.106.033l.037-.026c.02-.015.055-.005.082-.008.053-.005.108.038.161-.017l.006-.006c.052.046.098.064.102.038s.11-.03.15-.02.151.11.181.143a.4.4 0 0 0 .155.062c.01 0 .06.04.108.081.049.042.139.204.127.225-.011.02.049.092.062.114.013.021.06.097.076.119a.6.6 0 0 1 .049.168c.005.046.03.183.037.161.008-.021.03-.027.035.02.006.046.042.203.036.255-.006.05.045.225.07.308s.098.31.127.316c.027.007.129.17.162.182.034.013-.002.118.018.135s.06.075.052.094c-.01.019-.002.077.006.101.007.024.05.251.081.288h-.084a.3.3 0 0 0-.016.082c-.002.03.005.166.014.234l-.05.061c-.033.04-.042.116-.042.176v.049a.4.4 0 0 0-.1.119l-.016.05-.014.044a.7.7 0 0 1-.057.137.8.8 0 0 0-.062.15c-.006.03-.034.11-.03.155.005.047-.111.1-.123.135-.012.034-.076.171-.098.229s-.125.285-.163.381l-.04.085c-.04.085-.088.165-.128.25l-.01.022c.005.037.062.053.128.037.066-.017.243.004.27 0l.01-.034.018-.057c.03.026.067.037.08.025a.6.6 0 0 1 .152-.049c.052-.01.164-.075.173-.033.01.043.118-.026.173-.044s.194-.132.225-.14c.03-.008.116-.064.143-.064s.1-.035.117-.048.077.016.088.012.049-.032.067-.043a.3.3 0 0 1 .117-.015c.024.003.168-.099.272-.167l.117-.016.074-.01c.08-.02.167-.046.19-.058l.021-.015.05-.037c.064-.008.122-.027.13-.042.007-.014.04-.053.057-.054.016 0 .073-.007.09-.01a.4.4 0 0 0 .122-.128l.06.076c.003.003.033-.01.04-.022z\"\n}))), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n d: \"M99.131 71.923a1.545 1.545 0 0 0-2.185 0l-9.004 9.004-.83 3.319a.773.773 0 0 0 .937.937l3.32-.83 9.003-9.004a1.544 1.544 0 0 0 0-2.185z\"\n})), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"url(#noSignsFoundIcon_svg__d)\",\n d: \"M51.466 98.228c7.187-1.175 12.06-7.954 10.885-15.14s-7.954-12.06-15.141-10.886-12.06 7.954-10.885 15.141 7.954 12.06 15.14 10.885\",\n opacity: 0.5\n})), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n d: \"m54.688 98.626 2.542-1.316 5.365 10.347-2.538 1.318z\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n d: \"M42.649 72.322a14.52 14.52 0 1 0 19.58 6.203 14.525 14.525 0 0 0-19.578-6.203zm12.187 23.471a11.933 11.933 0 1 1 5.09-16.085 11.934 11.934 0 0 1-5.091 16.08zm10.599 20.535a2.12 2.12 0 0 1-2.348-.259c-.213-.18-.389-.4-.517-.648l-7.354-14.16 3.77-1.96 7.356 14.16a2.115 2.115 0 0 1-.258 2.349c-.18.214-.4.39-.65.518\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"noSignsFoundIcon_svg__d\",\n x1: 47.21,\n x2: 51.466,\n y1: 72.202,\n y2: 98.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})))));\nexport default SvgNoSignsFoundIcon;","var _circle, _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _rect, _path9, _path10, _path11, _path12, _path13, _path14, _path15, _path16, _rect2, _path17, _path18, _path19, _path20, _path21, _path22, _path23, _path24, _rect3, _path25, _path26, _path27, _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 xmlns: \"http://www.w3.org/2000/svg\",\n width: 105,\n height: 118,\n fill: \"none\"\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 fill: \"#fff\",\n d: \"M39.587 37.8c-2.03 0-2.585-.547-2.585-2.586-.003-18.29-.003-12.579 0-30.868 0-1.946.585-2.541 2.543-2.542 18.304-.004 12.608-.004 30.911 0 1.93 0 2.541.619 2.541 2.557.004 18.29.004 12.579 0 30.868 0 2.016-.571 2.57-2.608 2.571H39.587m30.19-2.57c.36 0 .652-.292.652-.652v-7.013a.65.65 0 0 0-.652-.651h-7.013a.65.65 0 0 0-.65.651v7.013c0 .36.29.651.65.651zm-18.284 0h7.014c.36 0 .65-.292.65-.652v-7.013a.65.65 0 0 0-.65-.651h-7.014a.65.65 0 0 0-.65.651v7.013c0 .36.29.651.65.651m-11.27 0h7.013c.36 0 .65-.292.65-.652v-7.013a.65.65 0 0 0-.65-.651h-7.013a.65.65 0 0 0-.652.651v7.013c0 .36.292.651.652.651m22.541-11.271h7.013c.36 0 .652-.292.652-.652v-7.013a.65.65 0 0 0-.652-.65h-7.013a.65.65 0 0 0-.65.65v7.013c0 .36.29.652.65.652m-11.27 0h7.013c.36 0 .65-.292.65-.652v-7.013a.65.65 0 0 0-.65-.65h-7.014a.65.65 0 0 0-.65.65v7.013c0 .36.29.652.65.652m-11.271 0h7.013c.36 0 .65-.292.65-.652v-7.013a.65.65 0 0 0-.65-.65h-7.013a.65.65 0 0 0-.652.65v7.013c0 .36.292.652.652.652m11.27-11.271h7.014c.36 0 .65-.177.65-.394V8.06c0-.217-.29-.393-.65-.393h-7.014c-.36 0-.65.176-.65.393v4.235c0 .217.29.394.65.394m11.25 0h7.014c.36 0 .65-.177.65-.394V8.06c0-.217-.29-.393-.65-.393h-7.014c-.36 0-.65.176-.65.393v4.235c0 .217.29.394.65.394m-22.52 0h7.013c.36 0 .65-.177.65-.394V8.06c0-.217-.29-.393-.65-.393h-7.013c-.36 0-.652.176-.652.393v4.235c0 .217.292.394.652.394\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M39 4.801h32v31H39z\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0D953B\",\n d: \"M62 7.8a1 1 0 0 1 1-1h6.408a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H63a1 1 0 0 1-1-1z\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M62 16.8a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zM62 27.8a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1z\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0D953B\",\n d: \"M50.844 7.8a1 1 0 0 1 1-1h6.564a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-6.564a1 1 0 0 1-1-1z\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M51 16.8a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zM51 27.8a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1z\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0D953B\",\n d: \"M39.5 7.8a1 1 0 0 1 1-1H47a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-6.5a1 1 0 0 1-1-1z\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M39.5 16.8a1 1 0 0 1 1-1H47a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6.5a1 1 0 0 1-1-1v-6M39.5 27.8a1 1 0 0 1 1-1H47a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6.5a1 1 0 0 1-1-1v-6\"\n})), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n width: 37.5,\n height: 37.5,\n x: 36.25,\n y: 1.051,\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5,\n rx: 2.75\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M14.587 87.8c-2.03 0-2.585-.547-2.585-2.586-.003-18.29-.003-12.579 0-30.868 0-1.946.585-2.541 2.543-2.542 18.304-.004 12.608-.004 30.911 0 1.93 0 2.541.619 2.541 2.557.004 18.29.004 12.579 0 30.868 0 2.016-.571 2.57-2.608 2.571H14.587m30.19-2.57c.36 0 .652-.292.652-.652v-7.013a.65.65 0 0 0-.652-.651h-7.013a.65.65 0 0 0-.65.651v7.013c0 .36.29.651.65.651zm-18.283 0h7.013c.36 0 .65-.292.65-.652v-7.013a.65.65 0 0 0-.65-.651h-7.013a.65.65 0 0 0-.652.651v7.013c0 .36.292.651.652.651m-11.271 0h7.013c.36 0 .65-.292.65-.652v-7.013a.65.65 0 0 0-.65-.651h-7.013a.65.65 0 0 0-.652.651v7.013c0 .36.292.651.652.651m22.541-11.272h7.013c.36 0 .652-.291.652-.65v-7.014a.65.65 0 0 0-.652-.65h-7.013a.65.65 0 0 0-.65.65v7.013c0 .36.29.651.65.651m-11.27 0h7.013c.36 0 .65-.291.65-.65v-7.014a.65.65 0 0 0-.65-.65h-7.013a.65.65 0 0 0-.652.65v7.013c0 .36.292.651.652.651m-11.271 0h7.013c.36 0 .65-.291.65-.65v-7.014a.65.65 0 0 0-.65-.65h-7.013a.65.65 0 0 0-.652.65v7.013c0 .36.292.651.652.651m11.27-11.27h7.014c.36 0 .65-.177.65-.394V58.06c0-.217-.29-.393-.65-.393h-7.013c-.36 0-.652.176-.652.393v4.235c0 .218.292.394.652.394m11.25 0h7.014c.36 0 .65-.177.65-.394V58.06c0-.217-.29-.393-.65-.393h-7.014c-.36 0-.65.176-.65.393v4.235c0 .218.29.394.65.394m-22.52 0h7.013c.36 0 .65-.177.65-.394V58.06c0-.217-.29-.393-.65-.393h-7.013c-.36 0-.652.176-.652.393v4.235c0 .218.292.394.652.394\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M14 54.801h32v31H14z\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0D953B\",\n d: \"M37 57.8a1 1 0 0 1 1-1h6.408a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H38a1 1 0 0 1-1-1z\"\n})), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M37 66.8a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zM37 77.8a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1z\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0D953B\",\n d: \"M25.844 57.8a1 1 0 0 1 1-1h6.564a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-6.564a1 1 0 0 1-1-1z\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M26 66.8a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zM26 77.8a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1z\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0D953B\",\n d: \"M14.5 57.8a1 1 0 0 1 1-1H22a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-6.5a1 1 0 0 1-1-1z\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M14.5 66.8a1 1 0 0 1 1-1H22a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6.5a1 1 0 0 1-1-1v-6M14.5 77.8a1 1 0 0 1 1-1H22a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6.5a1 1 0 0 1-1-1v-6\"\n})), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 37.5,\n height: 37.5,\n x: 11.25,\n y: 51.051,\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5,\n rx: 2.75\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M63.587 87.8c-2.03 0-2.585-.547-2.585-2.586-.003-18.29-.003-12.579 0-30.868 0-1.946.585-2.541 2.543-2.542 18.304-.004 12.608-.004 30.911 0 1.93 0 2.541.619 2.541 2.557.004 18.29.004 12.579 0 30.868 0 2.016-.571 2.57-2.608 2.571H63.587m30.19-2.57c.36 0 .652-.292.652-.652v-7.013a.65.65 0 0 0-.652-.651h-7.013a.65.65 0 0 0-.65.651v7.013c0 .36.29.651.65.651zm-18.284 0h7.014c.36 0 .65-.292.65-.652v-7.013a.65.65 0 0 0-.65-.651h-7.014a.65.65 0 0 0-.65.651v7.013c0 .36.29.651.65.651m-11.27 0h7.013c.36 0 .65-.292.65-.652v-7.013a.65.65 0 0 0-.65-.651h-7.013a.65.65 0 0 0-.652.651v7.013c0 .36.292.651.652.651m22.541-11.272h7.013c.36 0 .652-.291.652-.65v-7.014a.65.65 0 0 0-.652-.65h-7.013a.65.65 0 0 0-.65.65v7.013c0 .36.29.651.65.651m-11.27 0h7.013c.36 0 .65-.291.65-.65v-7.014a.65.65 0 0 0-.65-.65h-7.014a.65.65 0 0 0-.65.65v7.013c0 .36.29.651.65.651m-11.271 0h7.013c.36 0 .65-.291.65-.65v-7.014a.65.65 0 0 0-.65-.65h-7.013a.65.65 0 0 0-.652.65v7.013c0 .36.292.651.652.651m11.27-11.27h7.014c.36 0 .65-.177.65-.394V58.06c0-.217-.29-.393-.65-.393h-7.014c-.36 0-.65.176-.65.393v4.235c0 .218.29.394.65.394m11.25 0h7.014c.36 0 .65-.177.65-.394V58.06c0-.217-.29-.393-.65-.393h-7.014c-.36 0-.65.176-.65.393v4.235c0 .218.29.394.65.394m-22.52 0h7.013c.36 0 .65-.177.65-.394V58.06c0-.217-.29-.393-.65-.393h-7.013c-.36 0-.652.176-.652.393v4.235c0 .218.292.394.652.394\"\n})), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M63 54.801h32v31H63z\"\n})), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0D953B\",\n d: \"M86 57.8a1 1 0 0 1 1-1h6.408a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H87a1 1 0 0 1-1-1z\"\n})), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M86 66.8a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zM86 77.8a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1z\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0D953B\",\n d: \"M74.844 57.8a1 1 0 0 1 1-1h6.565a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-6.565a1 1 0 0 1-1-1z\"\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M75 66.8a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zM75 77.8a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1z\"\n})), _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0D953B\",\n d: \"M63.5 57.8a1 1 0 0 1 1-1H71a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-6.5a1 1 0 0 1-1-1z\"\n})), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M63.5 66.8a1 1 0 0 1 1-1H71a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6.5a1 1 0 0 1-1-1v-6M63.5 77.8a1 1 0 0 1 1-1H71a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6.5a1 1 0 0 1-1-1v-6\"\n})), _rect3 || (_rect3 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 37.5,\n height: 37.5,\n x: 60.25,\n y: 51.051,\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5,\n rx: 2.75\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"url(#noTablesFoundIcon_svg__a)\",\n d: \"M51.466 94.654c7.187-1.176 12.06-7.954 10.885-15.141s-7.954-12.06-15.14-10.885c-7.188 1.175-12.061 7.954-10.886 15.14 1.175 7.188 7.954 12.06 15.14 10.886\",\n opacity: 0.5\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n d: \"m54.688 95.05 2.542-1.315 5.366 10.347-2.54 1.318z\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n d: \"M42.648 68.748a14.52 14.52 0 0 0 2.305 26.728 14.518 14.518 0 1 0-2.303-26.728zm12.187 23.47a11.932 11.932 0 0 1-16.88-14.189 11.934 11.934 0 0 1 21.97-1.895 11.934 11.934 0 0 1-5.09 16.08zM65.435 112.755a2.12 2.12 0 0 1-2.348-.259 2.1 2.1 0 0 1-.517-.648l-7.354-14.16 3.77-1.96 7.356 14.159a2.13 2.13 0 0 1-.258 2.35c-.18.214-.4.39-.649.518\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"noTablesFoundIcon_svg__a\",\n x1: 47.21,\n x2: 51.466,\n y1: 68.628,\n y2: 94.654,\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, _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 xmlns: \"http://www.w3.org/2000/svg\",\n width: 105,\n height: 119,\n fill: \"none\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 52.5,\n cy: 56.449,\n r: 52.5,\n fill: \"#F3F3FE\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M35.143 6.137A5.76 5.76 0 0 1 40.904.375h27.367a5.76 5.76 0 0 1 5.762 5.762v34.569a5.76 5.76 0 0 1-5.762 5.761H40.904a5.76 5.76 0 0 1-5.761-5.761z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B1C3E9\",\n fillRule: \"evenodd\",\n d: \"M68.271 1.815H40.904a4.32 4.32 0 0 0-4.321 4.322v34.569a4.32 4.32 0 0 0 4.321 4.32h27.367a4.32 4.32 0 0 0 4.322-4.32V6.136a4.32 4.32 0 0 0-4.322-4.32M40.904.375a5.76 5.76 0 0 0-5.761 5.762v34.569a5.76 5.76 0 0 0 5.761 5.761h27.367a5.76 5.76 0 0 0 5.762-5.761V6.136A5.76 5.76 0 0 0 68.27.376z\",\n clipRule: \"evenodd\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M41.688 12.406c0-.863.7-1.562 1.562-1.562h3.125c.863 0 1.563.7 1.563 1.562v23.438h-6.25z\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M51.281 19.438c0-.863.7-1.563 1.563-1.563h3.125c.863 0 1.562.7 1.562 1.563v16.406h-6.25z\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M60.875 13.188c0-.863.7-1.563 1.563-1.563h3.124c.863 0 1.563.7 1.563 1.563v22.656h-6.25z\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M10 56.137a5.76 5.76 0 0 1 5.762-5.762h27.367a5.76 5.76 0 0 1 5.761 5.761v34.57a5.76 5.76 0 0 1-5.761 5.761H15.762A5.76 5.76 0 0 1 10 90.706z\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B1C3E9\",\n fillRule: \"evenodd\",\n d: \"M43.129 51.815H15.762a4.32 4.32 0 0 0-4.322 4.322v34.569a4.32 4.32 0 0 0 4.322 4.32h27.367a4.32 4.32 0 0 0 4.321-4.32v-34.57a4.32 4.32 0 0 0-4.321-4.32m-27.367-1.44A5.76 5.76 0 0 0 10 56.136v34.57a5.76 5.76 0 0 0 5.762 5.761h27.367a5.76 5.76 0 0 0 5.761-5.761v-34.57a5.76 5.76 0 0 0-5.761-5.761z\",\n clipRule: \"evenodd\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M16.545 62.406c0-.863.7-1.562 1.562-1.562h3.125c.863 0 1.563.7 1.563 1.562v23.438h-6.25z\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M26.139 69.438c0-.863.7-1.563 1.562-1.563h3.125c.863 0 1.563.7 1.563 1.563v16.406h-6.25z\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M35.732 63.188c0-.863.7-1.563 1.563-1.563h3.125c.863 0 1.562.7 1.562 1.563v22.656h-6.25z\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M59 56.137a5.76 5.76 0 0 1 5.761-5.762H92.13a5.76 5.76 0 0 1 5.761 5.761v34.57a5.76 5.76 0 0 1-5.761 5.761H64.76A5.76 5.76 0 0 1 59 90.706z\"\n})), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B1C3E9\",\n fillRule: \"evenodd\",\n d: \"M92.129 51.815H64.76a4.32 4.32 0 0 0-4.32 4.322v34.569a4.32 4.32 0 0 0 4.32 4.32H92.13a4.32 4.32 0 0 0 4.321-4.32v-34.57a4.32 4.32 0 0 0-4.321-4.32m-27.368-1.44A5.76 5.76 0 0 0 59 56.136v34.57a5.76 5.76 0 0 0 5.761 5.761H92.13a5.76 5.76 0 0 0 5.761-5.761v-34.57a5.76 5.76 0 0 0-5.761-5.761z\",\n clipRule: \"evenodd\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M65.545 62.406c0-.863.7-1.562 1.562-1.562h3.125c.863 0 1.563.7 1.563 1.562v23.438h-6.25z\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M75.139 69.438c0-.863.7-1.563 1.562-1.563h3.125c.863 0 1.563.7 1.563 1.563v16.406h-6.25z\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M84.732 63.188c0-.863.7-1.563 1.563-1.563h3.125c.863 0 1.562.7 1.562 1.563v22.656h-6.25z\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"url(#noReportsFoundIcon_svg__a)\",\n d: \"M51.466 98.228c7.187-1.175 12.06-7.954 10.885-15.14-1.175-7.188-7.954-12.061-15.14-10.886-7.188 1.175-12.061 7.954-10.886 15.14 1.175 7.188 7.954 12.061 15.14 10.886\",\n opacity: 0.5\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n d: \"m54.688 98.625 2.542-1.316 5.366 10.347-2.54 1.318z\"\n})), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n d: \"M42.648 72.322a14.521 14.521 0 0 0 2.305 26.728 14.52 14.52 0 1 0-2.303-26.728zm12.187 23.471a11.933 11.933 0 1 1 5.09-16.085 11.933 11.933 0 0 1-5.09 16.08zM65.435 116.329a2.12 2.12 0 0 1-2.348-.259 2.1 2.1 0 0 1-.517-.648l-7.354-14.16 3.77-1.96 7.356 14.16a2.12 2.12 0 0 1-.258 2.349c-.18.214-.4.39-.649.518\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"noReportsFoundIcon_svg__a\",\n x1: 47.21,\n x2: 51.466,\n y1: 72.202,\n y2: 98.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})))));\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 SvgNoAppsFoundIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 108 120\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#noAppsFoundIcon_svg__a)\"\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 width: 37.5,\n height: 37.5,\n x: 38.25,\n y: 3.676,\n fill: \"#fff\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5,\n rx: 2.75\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M42 11.176a3.75 3.75 0 0 1 3.75-3.75h22.5a3.75 3.75 0 0 1 3.75 3.75v22.5a3.75 3.75 0 0 1-3.75 3.75h-22.5a3.75 3.75 0 0 1-3.75-3.75z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#97ACDA\",\n stroke: \"#97ACDA\",\n strokeWidth: 0.652,\n d: \"M63.249 24.463a.5.5 0 0 0-.499.498v2.931h-2.93a.499.499 0 0 0 0 .998h2.93v2.93a.499.499 0 0 0 .998 0v-2.93h2.93a.499.499 0 0 0 0-.998h-2.93v-2.93a.5.5 0 0 0-.5-.5Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M58.384 11.994c0-.452.366-.818.818-.818h8.184c.452 0 .818.366.818.818v8.184a.82.82 0 0 1-.818.818h-8.184a.82.82 0 0 1-.818-.818z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M45.751 11.994c0-.452.366-.818.818-.818h8.184c.452 0 .818.366.818.818v8.184a.82.82 0 0 1-.818.818h-8.184a.82.82 0 0 1-.818-.818z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M45.751 24.627c0-.452.366-.819.818-.819h8.184c.452 0 .818.367.818.819v8.183a.82.82 0 0 1-.818.819h-8.184a.82.82 0 0 1-.818-.819z\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n width: 37.5,\n height: 37.5,\n x: 13.25,\n y: 53.676,\n fill: \"#fff\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5,\n rx: 2.75\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M17 61.176a3.75 3.75 0 0 1 3.75-3.75h22.5a3.75 3.75 0 0 1 3.75 3.75v22.5a3.75 3.75 0 0 1-3.75 3.75h-22.5a3.75 3.75 0 0 1-3.75-3.75z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#97ACDA\",\n stroke: \"#97ACDA\",\n strokeWidth: 0.652,\n d: \"M38.249 74.463a.5.5 0 0 0-.499.499v2.93h-2.93a.499.499 0 0 0 0 .998h2.93v2.93a.499.499 0 0 0 .998 0v-2.93h2.93a.499.499 0 0 0 0-.998h-2.93v-2.93a.5.5 0 0 0-.5-.5Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M33.384 61.994c0-.452.366-.818.818-.818h8.184c.452 0 .818.366.818.818v8.184a.82.82 0 0 1-.818.818h-8.184a.82.82 0 0 1-.818-.818z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M20.751 61.994c0-.452.366-.818.818-.818h8.184c.452 0 .818.366.818.818v8.184a.82.82 0 0 1-.818.818h-8.184a.82.82 0 0 1-.818-.818z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M20.751 74.627c0-.452.366-.819.818-.819h8.184c.452 0 .818.367.818.819v8.183a.82.82 0 0 1-.818.819h-8.184a.82.82 0 0 1-.818-.819z\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n width: 37.5,\n height: 37.5,\n x: 62.25,\n y: 53.676,\n fill: \"#fff\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5,\n rx: 2.75\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M66 61.176a3.75 3.75 0 0 1 3.75-3.75h22.5a3.75 3.75 0 0 1 3.75 3.75v22.5a3.75 3.75 0 0 1-3.75 3.75h-22.5a3.75 3.75 0 0 1-3.75-3.75z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#97ACDA\",\n stroke: \"#97ACDA\",\n strokeWidth: 0.652,\n d: \"M87.249 74.463a.5.5 0 0 0-.499.499v2.93h-2.93a.499.499 0 0 0 0 .998h2.93v2.93a.499.499 0 0 0 .998 0v-2.93h2.93a.499.499 0 0 0 0-.998h-2.93v-2.93a.5.5 0 0 0-.5-.5Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M82.384 61.994c0-.452.366-.818.818-.818h8.184c.452 0 .818.366.818.818v8.184a.82.82 0 0 1-.818.818h-8.184a.82.82 0 0 1-.818-.818z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M69.751 61.994c0-.452.366-.818.818-.818h8.184c.452 0 .818.366.818.818v8.184a.82.82 0 0 1-.818.818h-8.184a.82.82 0 0 1-.818-.818z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M69.751 74.627c0-.452.366-.819.818-.819h8.184c.452 0 .818.367.818.819v8.183a.82.82 0 0 1-.818.819h-8.184a.82.82 0 0 1-.818-.819z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"url(#noAppsFoundIcon_svg__b)\",\n d: \"M53.466 97.279c7.187-1.176 12.06-7.954 10.885-15.141s-7.954-12.06-15.14-10.885c-7.188 1.175-12.061 7.954-10.886 15.14 1.175 7.188 7.954 12.06 15.14 10.886\",\n opacity: 0.5\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n d: \"m56.688 97.676 2.542-1.315 5.366 10.347-2.54 1.318z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n d: \"M44.649 71.373A14.52 14.52 0 0 0 46.954 98.1a14.518 14.518 0 1 0-2.303-26.728zm12.187 23.47A11.933 11.933 0 0 1 43.874 74.94a11.933 11.933 0 0 1 18.834 12.913 11.93 11.93 0 0 1-5.873 6.987zM67.435 115.379a2.12 2.12 0 0 1-2.347-.259 2.1 2.1 0 0 1-.518-.648l-7.354-14.16 3.77-1.96 7.356 14.159a2.13 2.13 0 0 1-.258 2.35c-.18.214-.4.39-.649.518\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"noAppsFoundIcon_svg__b\",\n x1: 49.21,\n x2: 53.466,\n y1: 71.253,\n y2: 97.279,\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: \"noAppsFoundIcon_svg__a\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M0 0h108v120H0z\"\n})))));\nexport default SvgNoAppsFoundIcon;","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, _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 xmlns: \"http://www.w3.org/2000/svg\",\n width: 198,\n height: 141,\n fill: \"none\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E6E6F5\",\n d: \"M0 97.437c0-23.633 19.158-42.79 42.79-42.79h112.325c23.632 0 42.79 19.157 42.79 42.79s-19.158 42.79-42.79 42.79H42.79C19.158 140.227 0 121.069 0 97.437\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"noFormsIcon_svg__a\",\n width: 198,\n height: 87,\n x: 0,\n y: 54,\n maskUnits: \"userSpaceOnUse\",\n style: {\n maskType: \"alpha\"\n }\n}, _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E6E6F5\",\n d: \"M0 97.437c0-23.633 19.158-42.79 42.79-42.79h112.325c23.632 0 42.79 19.157 42.79 42.79s-19.158 42.79-42.79 42.79H42.79C19.158 140.227 0 121.069 0 97.437\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#noFormsIcon_svg__a)\"\n}, _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD7448\",\n fillRule: \"evenodd\",\n d: \"M115.336 77.924Q102.684 93.88 94.631 98.503c-8.054 4.622-8.643-.235-38.14-20.745-2.052-.861-3.716-1.09-6.495 2q-2.494 2.773-10.721 1.46a1.014 1.014 0 0 0-1.16.836c-.045.273.025.553.192.772q2.025 2.654 7.01 2.894c6.592.316 7.3-2.157 11.009.757s23.584 26.214 35.57 26.792 27.734-17.227 32.189-18.6q4.455-1.371 7.268-21.678z\",\n clipRule: \"evenodd\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F4F5FE\",\n fillRule: \"evenodd\",\n d: \"M58.954 90.056q4.905-4.684 5.949-8.17Q86.845 98.28 89.741 97.381c2.646-.82 24.003-20.019 31.424-24.56.674-.673.721 5.077 1.257 4.457l-2.407 22.315q-13 9.303-16.565 11.463c-3.566 2.16-12.922 6.115-21.372-.755q-8.45-6.87-23.124-20.246\",\n clipRule: \"evenodd\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M110.638 114.549c1.348 4.697 1.348 10.59 0 21.326l49.541-7.234-3.033-40.263q-3.033-10.065-7.077-14.093c-4.044-4.026-25.276-2.013-30.332 0-5.055 2.014-6.066 11.073-11.121 19.126-5.055 8.052 0 14.092 2.022 21.138\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD7448\",\n fillRule: \"evenodd\",\n d: \"M141.981 72.154q-3.033 24.705-17.047 24.705c-14.014 0-10.728-7.372-8.973-10.828q1.755-3.458 3.859-12.305 7.232-2.308 11.04-2.578t11.121 1.006\",\n clipRule: \"evenodd\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"noFormsIcon_svg__b\",\n width: 110,\n height: 94,\n x: 51,\n y: -1,\n maskUnits: \"userSpaceOnUse\",\n style: {\n maskType: \"alpha\"\n }\n}, _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C4C4C4\",\n d: \"M51.29-.625h109.352v92.712H51.289z\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#noFormsIcon_svg__b)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"noFormsIcon_svg__c\",\n width: 59,\n height: 93,\n x: 106,\n y: 71,\n maskUnits: \"userSpaceOnUse\",\n style: {\n maskType: \"alpha\"\n }\n}, _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M110.638 138.541c1.348-10.737 1.348-19.295 0-23.992-2.022-7.046-7.077-13.086-2.022-21.138s6.066-17.112 11.121-19.126c5.056-2.013 26.288-4.026 30.332 0q4.044 4.027 7.077 14.093l3.033 40.263q7.078 27.177 2.022 33.217c-5.055 6.04-7.077-10.066-29.32-19.125-4.718-2.013-12.133-2.85-22.243-4.192\"\n}))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#noFormsIcon_svg__c)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M110.638 138.539q2.022-16.105 0-23.151c-2.022-7.046-7.077-13.086-2.022-21.138s5.782-17.823 10.838-19.836 25.832-4.914 29.876-.888c2.696 2.684 5.794 8.98 7.816 15.69v13.611l3.033 26.653q7.078 27.178 2.022 33.217c-5.055 6.04-7.077-10.065-29.32-19.125q-7.077-3.019-22.243-5.033\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD7448\",\n fillRule: \"evenodd\",\n d: \"M141.981 72.154q-3.033 24.705-17.047 24.705c-14.014 0-10.728-7.372-8.973-10.828q1.755-3.458 3.859-12.305 7.232-2.308 11.04-2.578t11.121 1.006\",\n clipRule: \"evenodd\"\n}))), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n fillRule: \"evenodd\",\n d: \"M113.82 33.317c-3.39 14.434-4.541 16.13-5.802 19.302a2.15 2.15 0 0 0 .438 2.293q7.2 7.432 19.261 4.644c8.566-1.98 8.525-4.956 3.217-29.137z\",\n clipRule: \"evenodd\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD7448\",\n d: \"M136.285 54c-1.66 12.972 3.905 17.523 5.815 17.555 1.909.033-5.402 8.023-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.672 9.731-6.942 16.997-8.188-3.525.474-9.281.592-3.525.474\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#BD5826\",\n fillRule: \"evenodd\",\n d: \"M122.313 56.526c.792 7.227.769 11.213.687 11.85-.122.953 17.282.147 12.312-15.174s-6.632 1.806-12.999 3.324\",\n clipRule: \"evenodd\",\n opacity: 0.677\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"noFormsIcon_svg__d\",\n width: 38,\n height: 44,\n x: 113,\n y: 24,\n maskUnits: \"userSpaceOnUse\",\n style: {\n maskType: \"alpha\"\n }\n}, _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M145.092 57.05q-6.864 9.169-19.143 10.064c-8.313.605-13.863-10.235-12.793-21.364.511-5.31 1.687-9.997 6.362-14.826q14.477-14.953 27.2 3.949l3.662 9.772z\"\n}))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#noFormsIcon_svg__d)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD7448\",\n d: \"M143.966 56.176q-7.664 8.516-19.978 8.304c-8.336-.144-12.887-11.436-10.817-22.421.988-5.242 2.582-9.804 7.676-14.193q15.77-13.589 26.74 6.374l2.766 10.06z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#A44616\",\n d: \"M131.771 56.39c-2.695-.417-4.642-2.252-4.348-4.1s2.718-3.008 5.413-2.591 4.642 2.252 4.348 4.1-2.718 3.007-5.413 2.59\",\n opacity: 0.423\n}))), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#A5330A\",\n fillRule: \"evenodd\",\n d: \"M125.579 55.978q-3.178 1.358-7.5-1.401 2.034 5.777 4.623 5.258t2.877-3.857\",\n clipRule: \"evenodd\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n fillRule: \"evenodd\",\n d: \"M126.938 38.462c-7.822-1.299-11.005-1.904-13.711-4.047.157-10.06 8.434-15.98 12.27-16.877 8.871-2.163 18.502.543 24.413 8.327a15 15 0 0 1 1.479 2.365q.348.56.688 1.256c3.699 10.658 5.645 26.207 4.59 31.967-2.957 3.801-26.689 4.62-23.717-.143q.25-.397.548-.835c1.396-2.08 3.387-5.046 3.368-11.71-.004-1.614-.47-3.501-.996-5.63-.178-.72-.363-1.466-.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.593.871-2.64-.266-1.223-1.465 1.825-2.025 3.253-2.3 4.373-.157.637-.756 1.077-1.403.97\",\n clipRule: \"evenodd\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M115.165 138.735c5.329-2.997 29.268 3.736 47.509-2.946 10-3.663 2.348-24.999-1.822-42.89-2.639-9.901-7.007-16.464-10.989-18.892l-8.662 6.374 2.205 11.873s-1.37 4.31 1.517 12.143c2.888 7.832 7.375 17.679 7.375 17.679l-42.925 9.005c.155 3.551 1.529 10.052 5.792 7.654\"\n}))), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD7448\",\n fillRule: \"evenodd\",\n d: \"M120.877 137.279c-2.093 1.666-3.098 1.719-5.599 3.641-2.013.964-3.499 1.378-7.866.074q-3.93-1.173-11.104-.601a1.007 1.007 0 0 1-.948-1.515q1.823-3.067 7.103-3.591c6.58-.652 7.399 1.778 10.978-1.318q3.58-3.096 7.436 3.31\",\n clipRule: \"evenodd\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"url(#noFormsIcon_svg__e)\",\n d: \"M116.883 140.747c10.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.988-18.892l-8.662 6.374 2.205 11.873s-1.37 4.31 1.517 12.142 7.375 17.68 7.375 17.68l-42.925 9.005c.154 3.55-1.092 7.283 5.791 7.654\"\n}))), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"noFormsIcon_svg__f\",\n width: 64,\n height: 79,\n x: 96,\n y: 14,\n maskUnits: \"userSpaceOnUse\",\n style: {\n maskType: \"alpha\"\n }\n}, _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C4C4C4\",\n d: \"M96 14.375h64v78H96z\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#noFormsIcon_svg__f)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"noFormsIcon_svg__g\",\n width: 59,\n height: 93,\n x: 106,\n y: 71,\n maskUnits: \"userSpaceOnUse\",\n style: {\n maskType: \"alpha\"\n }\n}, _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M110.349 138.541c1.348-10.737 1.348-19.295 0-23.992-2.022-7.046-7.077-13.086-2.022-21.138s6.066-17.112 11.121-19.126c5.056-2.013 26.288-4.026 30.332 0q4.044 4.027 7.077 14.093l3.033 40.263q7.078 27.177 2.022 33.217c-5.055 6.04-7.077-10.066-29.32-19.125-4.718-2.013-12.133-2.85-22.243-4.192\"\n}))), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#noFormsIcon_svg__g)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M110.349 138.539q2.022-16.105 0-23.151c-2.022-7.046-7.077-13.086-2.022-21.138s5.782-17.823 10.838-19.836 25.832-4.914 29.876-.888c2.696 2.684 5.794 8.98 7.816 15.69v13.611l3.033 26.653q7.078 27.178 2.022 33.217c-5.055 6.04-7.077-10.065-29.32-19.125q-7.078-3.019-22.243-5.033\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD7448\",\n fillRule: \"evenodd\",\n d: \"M141.692 72.154q-3.033 24.705-17.047 24.705c-14.014 0-10.728-7.372-8.973-10.828q1.755-3.458 3.859-12.305 7.232-2.308 11.04-2.578t11.121 1.006\",\n clipRule: \"evenodd\"\n}))), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n fillRule: \"evenodd\",\n d: \"M113.531 33.317c-3.39 14.434-4.542 16.13-5.802 19.302a2.15 2.15 0 0 0 .438 2.293q7.2 7.432 19.261 4.644c8.566-1.98 8.525-4.956 3.217-29.137z\",\n clipRule: \"evenodd\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD7448\",\n d: \"M135.996 54c-1.661 12.972 3.905 17.523 5.815 17.555 1.909.033-5.402 8.023-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.672 9.731-6.942 16.997-8.188-3.525.474-9.281.592-3.525.474\"\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#BD5826\",\n fillRule: \"evenodd\",\n d: \"M122.024 56.526c.792 7.227.769 11.213.687 11.85-.122.953 17.282.147 12.312-15.174s-6.632 1.806-12.999 3.324\",\n clipRule: \"evenodd\",\n opacity: 0.677\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"noFormsIcon_svg__h\",\n width: 39,\n height: 44,\n x: 112,\n y: 24,\n maskUnits: \"userSpaceOnUse\",\n style: {\n maskType: \"alpha\"\n }\n}, _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M144.803 57.05q-6.864 9.169-19.143 10.064c-8.313.605-13.863-10.235-12.793-21.364.51-5.31 1.686-9.997 6.362-14.826q14.477-14.953 27.2 3.949l3.662 9.772z\"\n}))), _g4 || (_g4 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#noFormsIcon_svg__h)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD7448\",\n d: \"M143.677 56.176q-7.665 8.516-19.978 8.304c-8.336-.144-12.887-11.436-10.817-22.421.988-5.242 2.582-9.804 7.676-14.193q15.77-13.589 26.74 6.374l2.766 10.06z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#37120C\",\n fillOpacity: 0.25,\n fillRule: \"evenodd\",\n d: \"M128.904 40.83c1.203.588 2.055 1.53 2.483 2.24a.594.594 0 1 1-1.017.613c-.329-.544-1.02-1.312-1.987-1.785-.945-.462-2.165-.649-3.627-.043a.594.594 0 0 1-.455-1.099c1.802-.746 3.378-.524 4.603.074M117.443 38.857a3.34 3.34 0 0 0-2.266.715.594.594 0 0 0 .746.926 2.15 2.15 0 0 1 1.456-.455c.615.034 1.415.331 2.313 1.269a.594.594 0 1 0 .858-.822c-1.063-1.11-2.134-1.58-3.107-1.633\",\n clipRule: \"evenodd\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#A44616\",\n d: \"M131.482 56.39c-2.695-.417-4.642-2.252-4.348-4.1s2.718-3.008 5.413-2.591 4.642 2.252 4.348 4.1-2.718 3.007-5.413 2.59M109.964 51.93c-2.648-.673-4.48-2.7-4.092-4.53.388-1.828 2.848-2.765 5.496-2.093s4.48 2.7 4.092 4.53c-.388 1.828-2.848 2.766-5.496 2.093\",\n opacity: 0.423\n}))), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#A5330A\",\n fillRule: \"evenodd\",\n d: \"M125.29 55.978q-3.178 1.358-7.5-1.401 2.034 5.777 4.623 5.258t2.877-3.857\",\n clipRule: \"evenodd\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#321907\",\n d: \"M126.298 46.575c-.558-.01-1-.68-.987-1.499.013-.818.476-1.474 1.034-1.464s1 .68.987 1.498c-.013.819-.476 1.474-1.034 1.465M117.699 45.024c-.558-.01-1-.68-.987-1.499.013-.818.475-1.474 1.033-1.464s1 .68.987 1.499c-.012.818-.475 1.473-1.033 1.464\"\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8A3110\",\n fillRule: \"evenodd\",\n d: \"M122.715 43.971a.36.36 0 0 0-.5.07c-.982 1.305-1.621 1.94-2.222 2.378-.302.221-.601.397-.943.587l-.291.16a30 30 0 0 0-.891.501c-1.157.68-1.326 2.249-.802 3.412.271.6.736 1.135 1.394 1.442.661.309 1.483.372 2.434.084a.355.355 0 0 0 .237-.443.36.36 0 0 0-.446-.238c-.809.245-1.446.176-1.923-.047a2.16 2.16 0 0 1-1.044-1.088c-.437-.97-.215-2.08.514-2.509a29 29 0 0 1 .863-.485l.304-.167c.35-.194.68-.387 1.018-.634.679-.497 1.367-1.193 2.37-2.524a.356.356 0 0 0-.072-.499\",\n clipRule: \"evenodd\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n fillRule: \"evenodd\",\n d: \"M126.649 38.462c-7.822-1.299-11.005-1.904-13.711-4.047.157-10.06 8.434-15.98 12.27-16.877 8.871-2.163 18.502.543 24.413 8.327a15 15 0 0 1 1.479 2.365q.348.56.688 1.256c3.699 10.658 5.645 26.207 4.59 31.967-2.957 3.801-26.689 4.62-23.717-.143q.25-.397.548-.835c1.396-2.08 3.387-5.046 3.368-11.71-.004-1.614-.471-3.501-.996-5.63-.178-.72-.363-1.466-.538-2.24l-1.197-.417c-1.692-.588-2.987-1.038-3.79-1.386-.88-.381-.041-2.924.562-4.75.526-1.593.871-2.64-.266-1.223-1.465 1.825-2.025 3.253-2.3 4.373-.157.637-.756 1.077-1.403.97\",\n clipRule: \"evenodd\"\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M114.876 138.735c5.328-2.997 29.268 3.736 47.508-2.946 10.001-3.663 2.348-24.999-1.821-42.89-2.639-9.901-7.007-16.464-10.989-18.892l-8.662 6.374 2.205 11.873s-1.37 4.31 1.517 12.143c2.888 7.832 7.375 17.679 7.375 17.679l-42.925 9.005c.155 3.551 1.528 10.052 5.792 7.654\"\n}))), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M38 4.958A4.583 4.583 0 0 1 42.583.375h21.77a4.583 4.583 0 0 1 4.582 4.583v27.498a4.583 4.583 0 0 1-4.583 4.583H42.583A4.583 4.583 0 0 1 38 32.456z\"\n})), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C8CEED\",\n fillRule: \"evenodd\",\n d: \"M64.352 1.52H42.583a3.437 3.437 0 0 0-3.437 3.438v27.498a3.437 3.437 0 0 0 3.437 3.437h21.77a3.437 3.437 0 0 0 3.437-3.437V4.958a3.437 3.437 0 0 0-3.438-3.437M42.583.376A4.583 4.583 0 0 0 38 4.958v27.498a4.583 4.583 0 0 0 4.583 4.583h21.77a4.583 4.583 0 0 0 4.582-4.583V4.958A4.583 4.583 0 0 0 64.352.375z\",\n clipRule: \"evenodd\"\n})), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M44.547 12.816c0-1.085.88-1.964 1.964-1.964h14.404a1.964 1.964 0 1 1 0 3.928H46.51a1.964 1.964 0 0 1-1.964-1.964\"\n})), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M44.547 19.363c0-1.085.88-1.965 1.964-1.965h14.404a1.964 1.964 0 1 1 0 3.929H46.51a1.964 1.964 0 0 1-1.964-1.964\"\n})), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M44.547 25.91c0-1.085.88-1.965 1.964-1.965h14.404a1.964 1.964 0 1 1 0 3.929H46.51a1.964 1.964 0 0 1-1.964-1.964\"\n})), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M57.065 44.958a4.583 4.583 0 0 1 4.583-4.583h21.769A4.583 4.583 0 0 1 88 44.958v27.498a4.583 4.583 0 0 1-4.583 4.583h-21.77a4.583 4.583 0 0 1-4.582-4.583z\"\n})), _path35 || (_path35 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C8CEED\",\n fillRule: \"evenodd\",\n d: \"M83.417 41.52h-21.77a3.437 3.437 0 0 0-3.437 3.438v27.498a3.437 3.437 0 0 0 3.438 3.437h21.769a3.437 3.437 0 0 0 3.437-3.437V44.958a3.437 3.437 0 0 0-3.437-3.437m-21.77-1.145a4.583 4.583 0 0 0-4.582 4.583v27.498a4.583 4.583 0 0 0 4.583 4.583h21.769A4.583 4.583 0 0 0 88 72.456V44.958a4.583 4.583 0 0 0-4.583-4.583z\",\n clipRule: \"evenodd\"\n})), _path36 || (_path36 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M63.611 52.816c0-1.085.88-1.964 1.965-1.964h14.403a1.964 1.964 0 1 1 0 3.928H65.576a1.964 1.964 0 0 1-1.965-1.964\"\n})), _path37 || (_path37 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M63.611 59.363c0-1.085.88-1.965 1.965-1.965h14.403a1.964 1.964 0 0 1 0 3.929H65.576a1.964 1.964 0 0 1-1.965-1.964\"\n})), _path38 || (_path38 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M63.611 65.91c0-1.085.88-1.965 1.965-1.965h14.403a1.964 1.964 0 0 1 0 3.929H65.576a1.964 1.964 0 0 1-1.965-1.965\"\n})), _path39 || (_path39 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M18 44.958a4.583 4.583 0 0 1 4.583-4.583h21.77a4.583 4.583 0 0 1 4.582 4.583v27.498a4.583 4.583 0 0 1-4.583 4.583H22.583A4.583 4.583 0 0 1 18 72.456z\"\n})), _path40 || (_path40 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C8CEED\",\n fillRule: \"evenodd\",\n d: \"M44.352 41.52H22.583a3.437 3.437 0 0 0-3.437 3.438v27.498a3.437 3.437 0 0 0 3.437 3.437h21.77a3.437 3.437 0 0 0 3.437-3.437V44.958a3.437 3.437 0 0 0-3.438-3.437m-21.769-1.145A4.583 4.583 0 0 0 18 44.958v27.498a4.583 4.583 0 0 0 4.583 4.583h21.77a4.583 4.583 0 0 0 4.582-4.583V44.958a4.583 4.583 0 0 0-4.583-4.583z\",\n clipRule: \"evenodd\"\n})), _path41 || (_path41 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M24.547 52.816c0-1.085.88-1.964 1.964-1.964h14.404a1.964 1.964 0 1 1 0 3.928H26.51a1.964 1.964 0 0 1-1.964-1.964\"\n})), _path42 || (_path42 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M24.547 59.363c0-1.085.88-1.965 1.964-1.965h14.404a1.964 1.964 0 1 1 0 3.929H26.51a1.964 1.964 0 0 1-1.964-1.964\"\n})), _path43 || (_path43 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M24.547 65.91c0-1.085.88-1.965 1.964-1.965h14.404a1.964 1.964 0 1 1 0 3.929H26.51a1.964 1.964 0 0 1-1.964-1.965\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"noFormsIcon_svg__e\",\n x1: 152.19,\n x2: 149.764,\n y1: 93.88,\n y2: 110.89,\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 SvgNoFormsIcon;","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, _g5, _path39, _path40, _path41, _path42, _path43, _path44, _path45, _circle, _path46, _path47, _path48, _path49, _path50, _path51, _path52, _path53, _path54, _path55, _path56, _path57, _path58, _rect, _path59, _path60, _path61, _path62, _path63, _path64, _path65, _path66, _rect2, _path67, _path68, _path69, _path70, _path71, _path72, _path73, _path74, _rect3, _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 xmlns: \"http://www.w3.org/2000/svg\",\n width: 201,\n height: 138,\n fill: \"none\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E6E6F5\",\n d: \"M3 93.812c0-23.633 19.158-42.79 42.79-42.79h112.325c23.632 0 42.79 19.157 42.79 42.79s-19.158 42.79-42.79 42.79H45.79C22.158 136.602 3 117.444 3 93.812\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"noTablesIcon_svg__a\",\n width: 198,\n height: 86,\n x: 3,\n y: 51,\n maskUnits: \"userSpaceOnUse\",\n style: {\n maskType: \"alpha\"\n }\n}, _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E6E6F5\",\n d: \"M3 93.812c0-23.633 19.158-42.79 42.79-42.79h112.325c23.632 0 42.79 19.157 42.79 42.79s-19.158 42.79-42.79 42.79H45.79C22.158 136.602 3 117.444 3 93.812\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#noTablesIcon_svg__a)\"\n}, _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD7448\",\n fillRule: \"evenodd\",\n d: \"M118.336 74.299q-12.652 15.957-20.705 20.579c-8.054 4.622-8.643-.235-38.14-20.745-2.052-.861-3.716-1.09-6.495 2q-2.494 2.773-10.721 1.46a1.014 1.014 0 0 0-1.16.836c-.045.273.025.553.192.772q2.025 2.654 7.01 2.894c6.592.316 7.3-2.157 11.009.757s23.584 26.214 35.57 26.792 27.734-17.227 32.189-18.6q4.455-1.371 7.268-21.678z\",\n clipRule: \"evenodd\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F4F5FE\",\n fillRule: \"evenodd\",\n d: \"M61.954 86.431q4.905-4.684 5.949-8.17 21.942 16.394 24.838 15.496c2.646-.82 24.003-20.019 31.424-24.56.674-.673.721 5.077 1.257 4.457l-2.407 22.315q-13 9.303-16.565 11.463c-3.566 2.16-12.922 6.115-21.372-.755q-8.45-6.87-23.124-20.246\",\n clipRule: \"evenodd\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M113.638 110.924c1.348 4.697 1.348 10.59 0 21.326l49.541-7.234-3.033-40.263q-3.033-10.065-7.077-14.093c-4.044-4.026-25.276-2.013-30.332 0-5.055 2.014-6.066 11.073-11.121 19.126-5.055 8.052 0 14.092 2.022 21.138\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD7448\",\n fillRule: \"evenodd\",\n d: \"M144.981 68.53q-3.033 24.705-17.047 24.704c-14.014 0-10.728-7.372-8.973-10.828q1.755-3.458 3.859-12.305 7.231-2.308 11.04-2.578 3.807-.27 11.121 1.006\",\n clipRule: \"evenodd\"\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"noTablesIcon_svg__b\",\n width: 110,\n height: 94,\n x: 54,\n y: -5,\n maskUnits: \"userSpaceOnUse\",\n style: {\n maskType: \"alpha\"\n }\n}, _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C4C4C4\",\n d: \"M54.29-4.25h109.352v92.712H54.289z\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#noTablesIcon_svg__b)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"noTablesIcon_svg__c\",\n width: 59,\n height: 92,\n x: 109,\n y: 68,\n maskUnits: \"userSpaceOnUse\",\n style: {\n maskType: \"alpha\"\n }\n}, _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M113.638 134.916c1.348-10.737 1.348-19.295 0-23.992-2.022-7.046-7.077-13.086-2.022-21.138s6.066-17.112 11.121-19.126c5.056-2.013 26.288-4.026 30.332 0q4.044 4.027 7.077 14.093l3.033 40.263q7.078 27.177 2.022 33.217c-5.055 6.04-7.077-10.066-29.32-19.125-4.718-2.013-12.133-2.85-22.243-4.192\"\n}))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#noTablesIcon_svg__c)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M113.638 134.914q2.022-16.105 0-23.151c-2.022-7.046-7.077-13.086-2.022-21.138s5.782-17.823 10.838-19.836 25.832-4.914 29.876-.888c2.696 2.684 5.794 8.98 7.816 15.69v13.61l3.033 26.654q7.078 27.178 2.022 33.217c-5.055 6.04-7.077-10.065-29.32-19.125q-7.077-3.019-22.243-5.033\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD7448\",\n fillRule: \"evenodd\",\n d: \"M144.981 68.53q-3.033 24.705-17.047 24.704c-14.014 0-10.728-7.372-8.973-10.828q1.755-3.458 3.859-12.305 7.231-2.308 11.04-2.578 3.807-.27 11.121 1.006\",\n clipRule: \"evenodd\"\n}))), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n fillRule: \"evenodd\",\n d: \"M116.82 29.692c-3.39 14.434-4.541 16.13-5.802 19.302a2.15 2.15 0 0 0 .438 2.293q7.2 7.432 19.261 4.644c8.566-1.98 8.525-4.956 3.217-29.137z\",\n clipRule: \"evenodd\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD7448\",\n d: \"M139.285 50.374c-1.66 12.973 3.905 17.524 5.815 17.556 1.909.033-5.402 8.023-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.672 9.731-6.942 16.997-8.188-3.525.474-9.281.592-3.525.474\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#BD5826\",\n fillRule: \"evenodd\",\n d: \"M125.313 52.9c.792 7.228.769 11.214.687 11.85-.122.954 17.282.148 12.312-15.173s-6.632 1.806-12.999 3.324\",\n clipRule: \"evenodd\",\n opacity: 0.677\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"noTablesIcon_svg__d\",\n width: 38,\n height: 44,\n x: 116,\n y: 20,\n maskUnits: \"userSpaceOnUse\",\n style: {\n maskType: \"alpha\"\n }\n}, _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M148.092 53.424q-6.864 9.17-19.143 10.065c-8.313.605-13.863-10.235-12.793-21.364.511-5.31 1.687-9.997 6.362-14.826q14.477-14.953 27.2 3.949l3.662 9.772z\"\n}))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#noTablesIcon_svg__d)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD7448\",\n d: \"M146.966 52.551q-7.664 8.516-19.978 8.304c-8.336-.144-12.887-11.436-10.817-22.421.988-5.242 2.582-9.804 7.676-14.193q15.77-13.59 26.74 6.375l2.766 10.059z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#A44616\",\n d: \"M134.771 52.765c-2.695-.417-4.642-2.252-4.348-4.1s2.718-3.008 5.413-2.591 4.642 2.252 4.348 4.1-2.718 3.007-5.413 2.59\",\n opacity: 0.423\n}))), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#A5330A\",\n fillRule: \"evenodd\",\n d: \"M128.579 52.353q-3.179 1.358-7.5-1.401 2.034 5.777 4.623 5.258t2.877-3.857\",\n clipRule: \"evenodd\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n fillRule: \"evenodd\",\n d: \"M129.938 34.837c-7.822-1.299-11.005-1.904-13.711-4.047.157-10.06 8.434-15.98 12.27-16.877 8.871-2.163 18.502.543 24.413 8.327a15 15 0 0 1 1.479 2.365q.348.56.688 1.256c3.699 10.658 5.645 26.207 4.59 31.967-2.957 3.801-26.689 4.62-23.717-.143q.25-.397.548-.835c1.396-2.08 3.387-5.046 3.368-11.71-.004-1.614-.47-3.501-.996-5.63-.178-.72-.363-1.466-.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.593.871-2.64-.266-1.223-1.465 1.825-2.025 3.253-2.3 4.373-.157.637-.756 1.077-1.403.97\",\n clipRule: \"evenodd\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M118.165 135.11c5.329-2.997 29.268 3.736 47.509-2.946 10-3.663 2.348-24.999-1.822-42.89-2.639-9.901-7.007-16.464-10.989-18.892l-8.662 6.374 2.205 11.873s-1.37 4.31 1.517 12.143c2.888 7.832 7.375 17.679 7.375 17.679l-42.925 9.005c.155 3.551 1.529 10.052 5.792 7.654\"\n}))), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD7448\",\n fillRule: \"evenodd\",\n d: \"M123.877 133.654c-2.093 1.666-3.098 1.719-5.599 3.641-2.013.964-3.499 1.378-7.866.074q-3.93-1.173-11.104-.601a1.007 1.007 0 0 1-.948-1.515q1.823-3.067 7.103-3.591c6.58-.652 7.399 1.778 10.978-1.318q3.58-3.096 7.436 3.31\",\n clipRule: \"evenodd\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"url(#noTablesIcon_svg__e)\",\n d: \"M119.883 137.122c10.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.988-18.892l-8.662 6.374 2.205 11.873s-1.37 4.31 1.517 12.142 7.375 17.68 7.375 17.68l-42.925 9.005c.154 3.55-1.092 7.283 5.791 7.654\"\n}))), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"noTablesIcon_svg__f\",\n width: 64,\n height: 79,\n x: 99,\n y: 10,\n maskUnits: \"userSpaceOnUse\",\n style: {\n maskType: \"alpha\"\n }\n}, _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C4C4C4\",\n d: \"M99 10.75h64v78H99z\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#noTablesIcon_svg__f)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"noTablesIcon_svg__g\",\n width: 59,\n height: 92,\n x: 109,\n y: 68,\n maskUnits: \"userSpaceOnUse\",\n style: {\n maskType: \"alpha\"\n }\n}, _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M113.349 134.916c1.348-10.737 1.348-19.295 0-23.992-2.022-7.046-7.077-13.086-2.022-21.138s6.066-17.112 11.121-19.126c5.056-2.013 26.288-4.026 30.332 0q4.044 4.027 7.077 14.093l3.033 40.263q7.078 27.177 2.022 33.217c-5.055 6.04-7.077-10.066-29.32-19.125-4.718-2.013-12.133-2.85-22.243-4.192\"\n}))), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#noTablesIcon_svg__g)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M113.349 134.914q2.022-16.105 0-23.151c-2.022-7.046-7.077-13.086-2.022-21.138s5.782-17.823 10.838-19.836 25.832-4.914 29.876-.888c2.696 2.684 5.794 8.98 7.816 15.69v13.61l3.033 26.654q7.078 27.178 2.022 33.217c-5.055 6.04-7.077-10.065-29.32-19.125q-7.077-3.019-22.243-5.033\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD7448\",\n fillRule: \"evenodd\",\n d: \"M144.692 68.53q-3.033 24.705-17.047 24.704c-14.014 0-10.728-7.372-8.973-10.828q1.755-3.458 3.859-12.305 7.231-2.308 11.04-2.578 3.807-.27 11.121 1.006\",\n clipRule: \"evenodd\"\n}))), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n fillRule: \"evenodd\",\n d: \"M116.531 29.692c-3.39 14.434-4.542 16.13-5.802 19.302a2.15 2.15 0 0 0 .438 2.293q7.2 7.432 19.261 4.644c8.566-1.98 8.525-4.956 3.217-29.137z\",\n clipRule: \"evenodd\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD7448\",\n d: \"M138.996 50.374c-1.661 12.973 3.905 17.524 5.815 17.556 1.909.033-5.402 8.023-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.672 9.731-6.942 16.997-8.188-3.525.474-9.281.592-3.525.474\"\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#BD5826\",\n fillRule: \"evenodd\",\n d: \"M125.024 52.9c.792 7.228.769 11.214.687 11.85-.122.954 17.282.148 12.312-15.173s-6.632 1.806-12.999 3.324\",\n clipRule: \"evenodd\",\n opacity: 0.677\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"noTablesIcon_svg__h\",\n width: 39,\n height: 44,\n x: 115,\n y: 20,\n maskUnits: \"userSpaceOnUse\",\n style: {\n maskType: \"alpha\"\n }\n}, _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M147.803 53.424q-6.864 9.17-19.143 10.065c-8.313.605-13.863-10.235-12.793-21.364.51-5.31 1.686-9.997 6.362-14.826q14.477-14.953 27.2 3.949l3.662 9.772z\"\n}))), _g4 || (_g4 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#noTablesIcon_svg__h)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD7448\",\n d: \"M146.677 52.551q-7.665 8.516-19.978 8.304c-8.336-.144-12.887-11.436-10.817-22.421.988-5.242 2.582-9.804 7.676-14.193q15.77-13.59 26.74 6.375l2.766 10.059z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#37120C\",\n fillOpacity: 0.25,\n fillRule: \"evenodd\",\n d: \"M131.904 37.205c1.203.588 2.055 1.53 2.483 2.24a.594.594 0 1 1-1.017.613c-.329-.544-1.02-1.312-1.987-1.785-.945-.462-2.165-.649-3.627-.043a.594.594 0 0 1-.455-1.099c1.802-.746 3.378-.524 4.603.074M120.443 35.232a3.34 3.34 0 0 0-2.266.715.594.594 0 0 0 .746.926 2.15 2.15 0 0 1 1.456-.455c.615.034 1.415.331 2.313 1.269a.594.594 0 1 0 .858-.822c-1.063-1.11-2.134-1.58-3.107-1.633\",\n clipRule: \"evenodd\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#A44616\",\n d: \"M134.482 52.765c-2.695-.417-4.642-2.252-4.348-4.1s2.718-3.008 5.413-2.591 4.642 2.252 4.348 4.1-2.718 3.007-5.413 2.59M112.964 48.305c-2.648-.673-4.48-2.7-4.092-4.53.388-1.828 2.848-2.765 5.496-2.093s4.48 2.7 4.092 4.53c-.388 1.828-2.848 2.766-5.496 2.093\",\n opacity: 0.423\n}))), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#A5330A\",\n fillRule: \"evenodd\",\n d: \"M128.29 52.353q-3.178 1.358-7.5-1.401 2.034 5.777 4.623 5.258t2.877-3.857\",\n clipRule: \"evenodd\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#321907\",\n d: \"M129.298 42.95c-.558-.01-1-.68-.987-1.499.013-.818.476-1.474 1.034-1.464s1 .68.987 1.498c-.013.819-.476 1.474-1.034 1.465M120.699 41.399c-.558-.01-1-.68-.987-1.499.013-.818.475-1.474 1.033-1.464s1 .68.987 1.499c-.012.818-.475 1.473-1.033 1.464\"\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8A3110\",\n fillRule: \"evenodd\",\n d: \"M125.715 40.346a.36.36 0 0 0-.5.07c-.982 1.305-1.621 1.94-2.222 2.378-.302.221-.601.397-.943.587l-.291.16a30 30 0 0 0-.891.501c-1.157.68-1.326 2.249-.802 3.412.271.6.736 1.135 1.394 1.442.661.309 1.483.372 2.434.084a.355.355 0 0 0 .237-.443.36.36 0 0 0-.446-.238c-.809.245-1.446.176-1.923-.047a2.16 2.16 0 0 1-1.044-1.088c-.437-.97-.215-2.08.514-2.509a29 29 0 0 1 .863-.485l.304-.167c.35-.194.68-.387 1.018-.634.679-.497 1.367-1.193 2.37-2.524a.356.356 0 0 0-.072-.499\",\n clipRule: \"evenodd\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n fillRule: \"evenodd\",\n d: \"M129.649 34.837c-7.822-1.299-11.005-1.904-13.711-4.047.157-10.06 8.434-15.98 12.27-16.877 8.871-2.163 18.502.543 24.413 8.327a15 15 0 0 1 1.479 2.365q.348.56.688 1.256c3.699 10.658 5.645 26.207 4.59 31.967-2.957 3.801-26.689 4.62-23.717-.143q.25-.397.548-.835c1.396-2.08 3.387-5.046 3.368-11.71-.004-1.614-.471-3.501-.996-5.63-.178-.72-.363-1.466-.538-2.24l-1.197-.417c-1.692-.588-2.987-1.038-3.79-1.386-.88-.381-.041-2.924.562-4.75.526-1.593.871-2.64-.266-1.223-1.465 1.825-2.025 3.253-2.3 4.373-.157.637-.756 1.077-1.403.97\",\n clipRule: \"evenodd\"\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M117.876 135.11c5.328-2.997 29.268 3.736 47.508-2.946 10.001-3.663 2.348-24.999-1.821-42.89-2.639-9.901-7.007-16.464-10.989-18.892l-8.662 6.374 2.205 11.873s-1.37 4.31 1.517 12.143c2.888 7.832 7.375 17.679 7.375 17.679l-42.925 9.005c.155 3.551 1.528 10.052 5.792 7.654\"\n}))), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E6E6F5\",\n d: \"M0 94.435c0-23.633 19.158-42.79 42.79-42.79h112.325c23.632 0 42.79 19.157 42.79 42.79s-19.158 42.79-42.79 42.79H42.79C19.158 137.225 0 118.067 0 94.435\"\n})), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EFBB9D\",\n d: \"M65.837 81.96a12.65 12.65 0 0 0-9.509-2.973l-5.068-2.293a1.82 1.82 0 0 0-2.216.54 1.56 1.56 0 0 0 .453 2.214l2.755 1.843-1.175-.098a8.8 8.8 0 0 1-5.008-2.073l-3.913-3.385a1.76 1.76 0 0 0-1.662-.33 1.482 1.482 0 0 0-.745 2.44l4.571 5.042a9.93 9.93 0 0 0 7.053 3.203l14.655.45z\"\n})), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#091141\",\n fillRule: \"evenodd\",\n d: \"M114.82 31.317c-3.39 14.435-7.259 48.95-8.519 52.121a2.15 2.15 0 0 0 .438 2.293q7.199 7.432 19.261 4.644c8.565-1.98 11.243-37.775 5.934-61.956z\",\n clipRule: \"evenodd\"\n})), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F4F5FE\",\n fillRule: \"evenodd\",\n d: \"M59.956 88.054q4.905-4.683 5.949-8.17Q87.847 96.276 90.743 95.38c2.646-.82 24.003-20.019 31.424-24.56.674-.673.721 5.077 1.257 4.458l-2.407 22.314q-13 9.303-16.566 11.463c-3.565 2.16-12.921 6.115-21.37-.755q-8.45-6.87-23.125-20.246\",\n clipRule: \"evenodd\"\n})), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M110.592 112.816c1.123 4.756 3.266 8.898 1.408 19.56 10.036 1.817 16.883-1.234 21.5 1l17.5-8 12.5-5.5-5.855-17.414.647-13.594c-1.701-6.798-4.496-13.234-7.061-16.042-3.849-4.212-24.74-2.294-29.885-.522s-6.337 11.497-11.769 19.302c-5.433 7.806-.67 14.077 1.015 21.21\"\n})), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EFBB9D\",\n fillRule: \"evenodd\",\n d: \"M142.981 70.154q-3.033 24.705-17.047 24.705c-14.014 0-10.728-7.372-8.973-10.828q1.755-3.458 3.859-12.305 7.231-2.308 11.04-2.578 3.807-.27 11.121 1.006\",\n clipRule: \"evenodd\"\n})), _path35 || (_path35 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#321907\",\n d: \"M122.004 47.536c-.552.081-1.098-.51-1.219-1.319-.121-.81.228-1.531.78-1.613.552-.081 1.098.51 1.219 1.319.121.81-.228 1.532-.78 1.613M114.453 47.403c-.552.081-1.098-.509-1.219-1.319s.228-1.531.78-1.613c.552-.08 1.098.51 1.219 1.319.121.81-.228 1.532-.78 1.613\"\n})), _path36 || (_path36 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EFBB9D\",\n d: \"M137.285 52c-1.66 12.973 4.305 17.843 6.215 17.876 1.909.032-5.802 7.703-19.433 20.49-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.473\"\n})), _path37 || (_path37 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#DC9F7E\",\n fillRule: \"evenodd\",\n d: \"M123.313 54.526c.792 7.227.769 11.213.687 11.85-.122.953 17.282.147 12.312-15.174s-6.632 1.806-12.999 3.324\",\n clipRule: \"evenodd\",\n opacity: 0.677\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"noTablesIcon_svg__i\",\n width: 38,\n height: 44,\n x: 114,\n y: 22,\n maskUnits: \"userSpaceOnUse\",\n style: {\n maskType: \"alpha\"\n }\n}, _path38 || (_path38 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M146.092 55.05q-6.864 9.169-19.143 10.064c-8.313.605-13.863-10.235-12.793-21.364.511-5.31 1.687-9.997 6.362-14.826q14.477-14.953 27.2 3.949l3.662 9.772z\"\n}))), _g5 || (_g5 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#noTablesIcon_svg__i)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EFBB9D\",\n d: \"M144.966 54.176q-7.664 8.516-19.978 8.304c-8.336-.144-12.887-11.436-10.817-22.421.988-5.242 2.582-9.804 7.676-14.193q15.77-13.589 26.74 6.374l2.766 10.06z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EFA77F\",\n d: \"M132.771 54.39c-2.695-.417-4.642-2.252-4.348-4.1s2.718-3.008 5.413-2.591 4.642 2.252 4.348 4.1-2.718 3.007-5.413 2.59M111.253 49.93c-2.648-.673-4.48-2.7-4.092-4.53.388-1.828 2.848-2.765 5.496-2.093s4.48 2.7 4.092 4.53c-.388 1.828-2.848 2.766-5.496 2.093\"\n}))), _path39 || (_path39 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#A5330A\",\n fillRule: \"evenodd\",\n d: \"M126.024 53.94q-3.177 1.359-7.5-1.4 2.034 5.777 4.624 5.258t2.876-3.857\",\n clipRule: \"evenodd\"\n})), _path40 || (_path40 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n d: \"M127.587 44.575c-.558-.01-1-.68-.987-1.499.013-.818.476-1.474 1.034-1.464s1 .68.987 1.498c-.013.819-.476 1.474-1.034 1.465M118.988 43.024c-.558-.01-1-.68-.987-1.499.013-.818.475-1.474 1.034-1.464.558.01.999.68.987 1.499-.013.818-.476 1.473-1.034 1.464\"\n})), _path41 || (_path41 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EFBB9D\",\n fillRule: \"evenodd\",\n d: \"M142.981 70.154q-3.033 24.705-17.047 24.705c-14.014 0-10.728-7.372-8.973-10.828q1.755-3.458 3.859-12.305 7.231-2.308 11.04-2.578 3.807-.27 11.121 1.006\",\n clipRule: \"evenodd\"\n})), _path42 || (_path42 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"m142.201 78.382 2.205 11.872s-1.37 4.31 1.517 12.143c2.888 7.832 7.375 17.679 7.375 17.679l10.376 13.713c10-3.663 2.348-24.999-1.822-42.89-2.639-9.901-7.007-16.464-10.989-18.892z\"\n})), _path43 || (_path43 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"url(#noTablesIcon_svg__j)\",\n d: \"m144.23 81.388 2.205 11.872s-1.37 4.311 1.517 12.143 7.375 17.679 7.375 17.679l9.172 12.292c10-3.663 3.551-23.577-.618-41.468-2.639-9.903-7.007-16.465-10.989-18.893z\"\n})), _path44 || (_path44 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M142.501 69.375c-11.2 2.4-17.334.667-19-.5-.8.4-2.667 2.5-3.501 3.5-1.5 3.667-4.799 11.7-5.999 14.5-1.5 3.5 1 5.5 4.5 9.5s14.5.5 18.5-.5c3.2-.8 7-17.333 8.5-25.5-2-.4-2.834-.833-3-1\"\n})), _path45 || (_path45 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#091141\",\n fillRule: \"evenodd\",\n d: \"M127.938 36.462c-7.822-1.299-11.005-1.904-13.711-4.047.157-10.06 8.434-15.98 12.27-16.877 8.871-2.163 18.502.543 24.413 8.327a15 15 0 0 1 1.479 2.365q.348.56.688 1.256c3.699 10.658 3.602 50.771 2.546 56.531-2.957 3.801-26.688 4.621-23.716-.143q.25-.397.548-.835c1.395-2.08 5.43-29.61 5.411-36.274-.004-1.614-.47-3.501-.996-5.63-.178-.72-.363-1.466-.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.593.871-2.64-.266-1.223-1.465 1.825-2.025 3.253-2.3 4.373-.157.637-.756 1.077-1.403.97\",\n clipRule: \"evenodd\"\n})), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 145.5,\n cy: 16.875,\n r: 9.5,\n fill: \"#091141\"\n})), _path46 || (_path46 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#091141\",\n d: \"M129.897 38.411s-3.058-.841-3.416.458c0 0-.24.872 2.544 1.573 2.785.7 3.464.624 3.863-.17.4-.795-1.509-1.568-2.991-1.86M118.797 36.46s2.645.156 2.641 1.448c0 0-.01.866-2.331.662s-3-.623-3.096-1.336c-.095-.712 1.541-.963 2.786-.774\"\n})), _path47 || (_path47 = /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"#D97D4A\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 0.92,\n d: \"M121.942 45.389 121 48.285l1.873.494\"\n})), _path48 || (_path48 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EFBB9D\",\n d: \"m124.604 130.031 8.025-.619-.245 8.026h-6.95z\"\n})), _path49 || (_path49 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EFBB9D\",\n d: \"m126.861 129.813.401 1.606.803 6.019H108c.401-4.013 6.019-8.026 10.032-8.026 3.211 0 8.026.268 8.829.401\"\n})), _path50 || (_path50 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F4F6FF\",\n d: \"m161.399 122.431-31.399.941 2 14.003 30-.5c1.085-.146 2.344-.204 3.256-.81 1-.665 2.685-1.934 3.239-2.878a7.22 7.22 0 0 0 .49-6.301 7.216 7.216 0 0 0-7.586-4.455\"\n})), _path51 || (_path51 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M41.134 31.258c-1.63 0-2.074-.439-2.074-2.075-.002-14.674-.002-10.092 0-24.766 0-1.562.47-2.039 2.04-2.04 14.686-.003 10.116-.003 24.801 0 1.55.001 2.039.497 2.04 2.052.002 14.674.002 10.092 0 24.766 0 1.618-.46 2.063-2.093 2.063H41.134m24.223-2.062a.52.52 0 0 0 .522-.523v-5.627a.523.523 0 0 0-.522-.522H59.73a.523.523 0 0 0-.522.522v5.627c0 .289.233.523.522.523zm-14.67 0h5.627a.52.52 0 0 0 .522-.523v-5.627a.523.523 0 0 0-.522-.522h-5.627a.523.523 0 0 0-.522.522v5.627c0 .289.233.523.522.523m-9.043 0h5.627a.523.523 0 0 0 .522-.523v-5.627a.523.523 0 0 0-.522-.522h-5.627a.523.523 0 0 0-.522.522v5.627c0 .289.234.523.522.523m18.086-9.043h5.627a.52.52 0 0 0 .522-.523v-5.626a.523.523 0 0 0-.522-.523H59.73a.523.523 0 0 0-.522.523v5.626c0 .289.233.523.522.523m-9.043 0h5.627a.52.52 0 0 0 .522-.523v-5.626a.523.523 0 0 0-.522-.523h-5.627a.523.523 0 0 0-.522.523v5.626c0 .289.233.523.522.523m-9.043 0h5.627a.523.523 0 0 0 .522-.523v-5.626a.523.523 0 0 0-.522-.523h-5.627a.523.523 0 0 0-.522.523v5.626c0 .289.234.523.522.523m9.043-9.043h5.627c.288 0 .522-.141.522-.316V7.396c0-.174-.234-.316-.522-.316h-5.627c-.288 0-.522.142-.522.316v3.398c0 .175.233.316.522.316m9.026 0h5.627c.288 0 .522-.141.522-.316V7.396c0-.174-.233-.316-.522-.316h-5.627c-.288 0-.522.142-.522.316v3.398c0 .175.234.316.522.316m-18.069 0h5.627c.288 0 .522-.141.522-.316V7.396c0-.174-.234-.316-.522-.316h-5.627c-.288 0-.522.142-.522.316v3.398c0 .175.234.316.522.316\"\n})), _path52 || (_path52 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M40.664 4.781h25.674v24.872H40.664z\"\n})), _path53 || (_path53 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0D953B\",\n d: \"M59.117 7.387a1 1 0 0 1 1-1h4.746a1 1 0 0 1 1 1V10.2a1 1 0 0 1-1 1h-4.746a1 1 0 0 1-1-1z\"\n})), _path54 || (_path54 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M59.117 14.607a1 1 0 0 1 1-1h4.419a1 1 0 0 1 1 1v4.419a1 1 0 0 1-1 1h-4.419a1 1 0 0 1-1-1zM59.117 23.434a1 1 0 0 1 1-1h4.419a1 1 0 0 1 1 1v4.418a1 1 0 0 1-1 1h-4.419a1 1 0 0 1-1-1z\"\n})), _path55 || (_path55 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0D953B\",\n d: \"M50.166 7.387a1 1 0 0 1 1-1h4.872a1 1 0 0 1 1 1V10.2a1 1 0 0 1-1 1h-4.872a1 1 0 0 1-1-1z\"\n})), _path56 || (_path56 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M50.293 14.607a1 1 0 0 1 1-1h4.419a1 1 0 0 1 1 1v4.419a1 1 0 0 1-1 1h-4.42a1 1 0 0 1-1-1zM50.293 23.434a1 1 0 0 1 1-1h4.419a1 1 0 0 1 1 1v4.418a1 1 0 0 1-1 1h-4.42a1 1 0 0 1-1-1z\"\n})), _path57 || (_path57 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0D953B\",\n d: \"M41.065 7.387a1 1 0 0 1 1-1h4.82a1 1 0 0 1 1 1V10.2a1 1 0 0 1-1 1h-4.82a1 1 0 0 1-1-1z\"\n})), _path58 || (_path58 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M41.065 14.607a1 1 0 0 1 1-1h4.82a1 1 0 0 1 1 1v4.419a1 1 0 0 1-1 1h-4.82a1 1 0 0 1-1-1v-4.4190000000000005M41.065 23.434a1 1 0 0 1 1-1h4.82a1 1 0 0 1 1 1v4.418a1 1 0 0 1-1 1h-4.82a1 1 0 0 1-1-1v-4.418\"\n})), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n width: 30.384,\n height: 30.384,\n x: 38.309,\n y: 1.625,\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5,\n rx: 2.75\n})), _path59 || (_path59 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M21.075 71.375c-1.629 0-2.073-.438-2.073-2.075-.003-14.674-.002-10.092 0-24.766 0-1.561.469-2.039 2.04-2.039 14.685-.004 10.115-.004 24.8 0 1.55 0 2.04.496 2.04 2.051.002 14.674.002 10.093 0 24.766 0 1.618-.459 2.063-2.093 2.063H21.075m24.223-2.062a.52.52 0 0 0 .523-.523v-5.626a.523.523 0 0 0-.523-.523h-5.627a.523.523 0 0 0-.522.523v5.626c0 .289.234.523.522.523zm-14.67 0h5.627a.52.52 0 0 0 .523-.523v-5.626a.523.523 0 0 0-.523-.523h-5.627a.523.523 0 0 0-.522.523v5.626c0 .289.234.523.522.523m-9.042 0h5.626a.523.523 0 0 0 .523-.523v-5.626a.523.523 0 0 0-.523-.523h-5.626a.523.523 0 0 0-.523.523v5.626c0 .289.234.523.523.523M39.67 60.27h5.627a.52.52 0 0 0 .523-.523v-5.626a.52.52 0 0 0-.523-.523h-5.627a.523.523 0 0 0-.522.523v5.626c0 .289.234.523.522.523m-9.042 0h5.626a.52.52 0 0 0 .523-.523v-5.626a.52.52 0 0 0-.523-.523h-5.627a.52.52 0 0 0-.522.523v5.626c0 .289.234.523.522.523m-9.043 0h5.626a.523.523 0 0 0 .523-.523v-5.626a.523.523 0 0 0-.523-.523h-5.626a.52.52 0 0 0-.523.523v5.626c0 .289.234.523.523.523m9.043-9.043h5.626c.289 0 .523-.141.523-.316v-3.398c0-.174-.234-.315-.523-.315h-5.627c-.288 0-.522.14-.522.315v3.398c0 .175.234.316.522.316m9.026 0h5.626c.289 0 .523-.141.523-.316v-3.398c0-.174-.234-.315-.523-.315h-5.626c-.289 0-.523.14-.523.315v3.398c0 .175.234.316.523.316m-18.07 0h5.627c.289 0 .523-.141.523-.316v-3.398c0-.174-.234-.315-.523-.315h-5.626c-.289 0-.523.14-.523.315v3.398c0 .175.234.316.523.316\"\n})), _path60 || (_path60 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M20.605 44.898h25.674V69.77H20.605z\"\n})), _path61 || (_path61 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0D953B\",\n d: \"M39.059 47.504a1 1 0 0 1 1-1h4.745a1 1 0 0 1 1 1v2.814a1 1 0 0 1-1 1H40.06a1 1 0 0 1-1-1z\"\n})), _path62 || (_path62 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M39.059 54.725a1 1 0 0 1 1-1h4.418a1 1 0 0 1 1 1v4.418a1 1 0 0 1-1 1H40.06a1 1 0 0 1-1-1zM39.059 63.55a1 1 0 0 1 1-1h4.418a1 1 0 0 1 1 1v4.42a1 1 0 0 1-1 1H40.06a1 1 0 0 1-1-1z\"\n})), _path63 || (_path63 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0D953B\",\n d: \"M30.107 47.504a1 1 0 0 1 1-1h4.872a1 1 0 0 1 1 1v2.814a1 1 0 0 1-1 1h-4.872a1 1 0 0 1-1-1z\"\n})), _path64 || (_path64 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M30.232 54.725a1 1 0 0 1 1-1h4.419a1 1 0 0 1 1 1v4.418a1 1 0 0 1-1 1h-4.419a1 1 0 0 1-1-1zM30.232 63.55a1 1 0 0 1 1-1h4.419a1 1 0 0 1 1 1v4.42a1 1 0 0 1-1 1h-4.419a1 1 0 0 1-1-1z\"\n})), _path65 || (_path65 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0D953B\",\n d: \"M21.006 47.504a1 1 0 0 1 1-1h4.82a1 1 0 0 1 1 1v2.814a1 1 0 0 1-1 1h-4.82a1 1 0 0 1-1-1z\"\n})), _path66 || (_path66 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M21.006 54.725a1 1 0 0 1 1-1h4.82a1 1 0 0 1 1 1v4.418a1 1 0 0 1-1 1h-4.82a1 1 0 0 1-1-1v-4.418M21.006 63.55a1 1 0 0 1 1-1h4.82a1 1 0 0 1 1 1v4.42a1 1 0 0 1-1 1h-4.82a1 1 0 0 1-1-1v-4.42\"\n})), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 30.384,\n height: 30.384,\n x: 18.25,\n y: 41.742,\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5,\n rx: 2.75\n})), _path67 || (_path67 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M60.39 71.375c-1.63 0-2.074-.438-2.074-2.075-.002-14.674-.002-10.092 0-24.766 0-1.561.47-2.039 2.04-2.039 14.686-.004 10.116-.004 24.801 0 1.55 0 2.039.496 2.04 2.051.002 14.674.002 10.093 0 24.766 0 1.618-.46 2.063-2.094 2.063H60.39m24.223-2.062a.523.523 0 0 0 .522-.523v-5.626a.523.523 0 0 0-.522-.523h-5.627a.523.523 0 0 0-.523.523v5.626c0 .289.234.523.523.523zm-14.67 0h5.627a.52.52 0 0 0 .522-.523v-5.626a.523.523 0 0 0-.522-.523h-5.627a.523.523 0 0 0-.522.523v5.626c0 .289.233.523.522.523m-9.043 0h5.627a.52.52 0 0 0 .522-.523v-5.626a.523.523 0 0 0-.522-.523H60.9a.523.523 0 0 0-.522.523v5.626c0 .289.233.523.522.523m18.086-9.043h5.627a.523.523 0 0 0 .522-.523v-5.626a.523.523 0 0 0-.522-.523h-5.627a.52.52 0 0 0-.523.523v5.626c0 .289.234.523.523.523m-9.043 0h5.627a.52.52 0 0 0 .522-.523v-5.626a.52.52 0 0 0-.522-.523h-5.627a.52.52 0 0 0-.522.523v5.626c0 .289.233.523.522.523m-9.043 0h5.627a.52.52 0 0 0 .522-.523v-5.626a.52.52 0 0 0-.522-.523H60.9a.52.52 0 0 0-.522.523v5.626c0 .289.233.523.522.523m9.043-9.043h5.627c.288 0 .522-.141.522-.316v-3.398c0-.174-.234-.315-.522-.315h-5.627c-.289 0-.522.14-.522.315v3.398c0 .175.233.316.522.316m9.026 0h5.627c.288 0 .522-.141.522-.316v-3.398c0-.174-.234-.315-.522-.315h-5.627c-.288 0-.522.14-.522.315v3.398c0 .175.234.316.522.316m-18.069 0h5.627c.288 0 .522-.141.522-.316v-3.398c0-.174-.234-.315-.522-.315H60.9c-.288 0-.522.14-.522.315v3.398c0 .175.233.316.522.316\"\n})), _path68 || (_path68 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M59.92 44.898h25.674V69.77H59.92z\"\n})), _path69 || (_path69 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0D953B\",\n d: \"M78.373 47.504a1 1 0 0 1 1-1h4.746a1 1 0 0 1 1 1v2.814a1 1 0 0 1-1 1h-4.746a1 1 0 0 1-1-1z\"\n})), _path70 || (_path70 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M78.373 54.725a1 1 0 0 1 1-1h4.419a1 1 0 0 1 1 1v4.418a1 1 0 0 1-1 1h-4.419a1 1 0 0 1-1-1zM78.373 63.55a1 1 0 0 1 1-1h4.419a1 1 0 0 1 1 1v4.42a1 1 0 0 1-1 1h-4.419a1 1 0 0 1-1-1z\"\n})), _path71 || (_path71 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0D953B\",\n d: \"M69.422 47.504a1 1 0 0 1 1-1h4.872a1 1 0 0 1 1 1v2.814a1 1 0 0 1-1 1h-4.872a1 1 0 0 1-1-1z\"\n})), _path72 || (_path72 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M69.547 54.725a1 1 0 0 1 1-1h4.419a1 1 0 0 1 1 1v4.418a1 1 0 0 1-1 1h-4.42a1 1 0 0 1-1-1zM69.547 63.55a1 1 0 0 1 1-1h4.419a1 1 0 0 1 1 1v4.42a1 1 0 0 1-1 1h-4.42a1 1 0 0 1-1-1z\"\n})), _path73 || (_path73 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0D953B\",\n d: \"M60.32 47.504a1 1 0 0 1 1-1h4.82a1 1 0 0 1 1 1v2.814a1 1 0 0 1-1 1h-4.82a1 1 0 0 1-1-1z\"\n})), _path74 || (_path74 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M60.32 54.725a1 1 0 0 1 1-1h4.82a1 1 0 0 1 1 1v4.418a1 1 0 0 1-1 1h-4.82a1 1 0 0 1-1-1v-4.418M60.32 63.55a1 1 0 0 1 1-1h4.82a1 1 0 0 1 1 1v4.42a1 1 0 0 1-1 1h-4.82a1 1 0 0 1-1-1v-4.42\"\n})), _rect3 || (_rect3 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 30.384,\n height: 30.384,\n x: 57.565,\n y: 41.742,\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5,\n rx: 2.75\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"noTablesIcon_svg__e\",\n x1: 155.19,\n x2: 152.764,\n y1: 90.255,\n y2: 107.265,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#F3F5FE\"\n})), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"noTablesIcon_svg__j\",\n x1: 159.999,\n x2: 148.27,\n y1: 122.374,\n y2: 68.424,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#F4F5FE\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#fff\"\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, _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 xmlns: \"http://www.w3.org/2000/svg\",\n width: 198,\n height: 145,\n fill: \"none\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E6E6F5\",\n d: \"M0 101.437c0-23.633 19.158-42.79 42.79-42.79h112.325c23.632 0 42.79 19.157 42.79 42.79s-19.158 42.79-42.79 42.79H42.79c-23.632 0-42.79-19.158-42.79-42.79\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M36.932 5.172A4.797 4.797 0 0 1 41.728.375h22.785a4.797 4.797 0 0 1 4.796 4.797v28.78a4.797 4.797 0 0 1-4.796 4.796H41.728a4.797 4.797 0 0 1-4.796-4.796z\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#D3DCEF\",\n fillRule: \"evenodd\",\n d: \"M64.513 1.574H41.728a3.6 3.6 0 0 0-3.597 3.598v28.78a3.6 3.6 0 0 0 3.597 3.597h22.785a3.6 3.6 0 0 0 3.597-3.597V5.172a3.6 3.6 0 0 0-3.597-3.598M41.728.375a4.797 4.797 0 0 0-4.796 4.797v28.78a4.797 4.797 0 0 0 4.796 4.796h22.785a4.797 4.797 0 0 0 4.796-4.796V5.172A4.797 4.797 0 0 0 64.513.375z\",\n clipRule: \"evenodd\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M42.38 10.39a1.3 1.3 0 0 1 1.302-1.3h2.601a1.3 1.3 0 0 1 1.301 1.3v19.513h-5.203z\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M50.367 16.244a1.3 1.3 0 0 1 1.301-1.3h2.602a1.3 1.3 0 0 1 1.3 1.3v13.659h-5.203z\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M58.356 11.041a1.3 1.3 0 0 1 1.3-1.3h2.602a1.3 1.3 0 0 1 1.3 1.3v18.862h-5.203z\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M16 46.799a4.797 4.797 0 0 1 4.797-4.797H43.58a4.797 4.797 0 0 1 4.796 4.797v28.78a4.797 4.797 0 0 1-4.796 4.796H20.797A4.797 4.797 0 0 1 16 75.58z\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#D3DCEF\",\n fillRule: \"evenodd\",\n d: \"M43.58 43.201H20.798a3.597 3.597 0 0 0-3.598 3.598v28.78a3.597 3.597 0 0 0 3.598 3.597H43.58a3.597 3.597 0 0 0 3.597-3.597v-28.78a3.597 3.597 0 0 0-3.597-3.598m-22.783-1.199A4.797 4.797 0 0 0 16 46.799v28.78a4.797 4.797 0 0 0 4.797 4.796H43.58a4.797 4.797 0 0 0 4.796-4.796v-28.78a4.797 4.797 0 0 0-4.796-4.797z\",\n clipRule: \"evenodd\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M21.45 52.018a1.3 1.3 0 0 1 1.3-1.301h2.602a1.3 1.3 0 0 1 1.3 1.3V71.53H21.45z\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M29.438 57.871a1.3 1.3 0 0 1 1.3-1.3h2.602a1.3 1.3 0 0 1 1.3 1.3V71.53h-5.203z\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M37.424 52.668a1.3 1.3 0 0 1 1.3-1.3h2.602a1.3 1.3 0 0 1 1.301 1.3V71.53h-5.203z\"\n})), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M56.795 46.799a4.797 4.797 0 0 1 4.797-4.797h22.784a4.797 4.797 0 0 1 4.796 4.797v28.78a4.797 4.797 0 0 1-4.796 4.796H61.592a4.797 4.797 0 0 1-4.797-4.796z\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#D3DCEF\",\n fillRule: \"evenodd\",\n d: \"M84.376 43.201H61.592a3.597 3.597 0 0 0-3.598 3.598v28.78a3.597 3.597 0 0 0 3.598 3.597h22.784a3.597 3.597 0 0 0 3.597-3.597v-28.78a3.6 3.6 0 0 0-3.597-3.598m-22.784-1.199a4.797 4.797 0 0 0-4.797 4.797v28.78a4.797 4.797 0 0 0 4.797 4.796h22.784a4.797 4.797 0 0 0 4.796-4.796v-28.78a4.797 4.797 0 0 0-4.796-4.797z\",\n clipRule: \"evenodd\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M62.244 52.018a1.3 1.3 0 0 1 1.301-1.301h2.602a1.3 1.3 0 0 1 1.3 1.3V71.53h-5.203z\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M70.23 57.871a1.3 1.3 0 0 1 1.301-1.3h2.602a1.3 1.3 0 0 1 1.3 1.3V71.53H70.23z\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M78.219 52.668a1.3 1.3 0 0 1 1.3-1.3h2.602a1.3 1.3 0 0 1 1.301 1.3V71.53H78.22z\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B46458\",\n d: \"M69.07 103.549a15.57 15.57 0 0 0-11.928-2.869l-6.417-2.399a2.24 2.24 0 0 0-2.678.847 1.924 1.924 0 0 0 .739 2.683l3.537 2.037-1.451-.023a10.85 10.85 0 0 1-6.325-2.135l-5.088-3.836a2.17 2.17 0 0 0-2.068-.267 1.83 1.83 0 0 0-1.2 2.259c.09.304.257.579.485.798l6.033 5.819a12.22 12.22 0 0 0 8.93 3.354l18.044-.654z\"\n})), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"url(#noReportsIcon_svg__a)\",\n d: \"M104.657 85.1a243.6 243.6 0 0 0-18.98 42.682 8 8 0 0 0 1.38 7.48c3.815 4.705 12.347 2.678 15.227-2.341 0 0 21.966-37.8 20.737-39.112-.287-.322-18.364-8.71-18.364-8.71\"\n})), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"m130.469 80.602-23.217 2.997a4.393 4.393 0 0 0-3.837 4.757L117 144.377l49.5-.5-3.298-55.36a4.415 4.415 0 0 0-2.239-4.386 4.4 4.4 0 0 0-1.646-.531z\"\n})), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"url(#noReportsIcon_svg__b)\",\n d: \"M141.807 92.865a401 401 0 0 0 18.418 46.33c1.138 2.353 4.453 3.924 7.011 4.177 5.759.585 9.114-5.404 7.711-10.899 0 0-11.921-46.34-14.358-47.416-.389-.179-18.782 7.808-18.782 7.808\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B46458\",\n d: \"m121.352 68.042 1.157 13.623c.397 4.757 3.473 7.088 8.025 6.66 3.885-.38 7.929-2.633 7.469-6.835l-2.807-21.345z\"\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B46458\",\n d: \"M124.615 72.338c-7.786.666-14.732-5.122-15.51-11.655l-1.585-13.687a15.112 15.112 0 0 1 12.401-16.92c8.088-1.269 17.095 4.25 18.364 12.686l1.094 10.673a17.192 17.192 0 0 1-14.764 18.903\"\n})), _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#091141\",\n d: \"M134.067 46.285c-7.279-5.63-3.616-10.387-3.616-10.387l5.186-2.078c17.349 0 6.248 16.873 6.248 16.873l-2.141 7.185s-1.696 16.381-17.808 15.731c-12.116-.492-12.354-10.768-12.354-10.768 6.914-4.82 21.662-1.792 21.662-1.792 1.586-2.997 2.823-14.764 2.823-14.764\"\n})), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#091141\",\n d: \"M131.103 36.61a200 200 0 0 1-21.599.175s-8.04-3.013-4.757-7.93c2.632-3.853 9.007-.713 9.007-.713s-.111-3.965 2.696-5.043c3.346-1.3 13.147-2.347 21.488 10.942z\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B46458\",\n d: \"m122.381 81.648-4.313.555s-1.919 7.184 8.056 7.93c10.403.745 14.51-3.172 16.509-8.23l-11.45-2.253z\"\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 stroke: \"#893B2F\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 0.92,\n d: \"m116.782 53.594-.048 3.045 1.935-.08\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n d: \"M112.752 51.513c-.588-.01-1.054-.717-1.04-1.578s.501-1.553 1.089-1.543 1.053.717 1.04 1.579c-.014.862-.502 1.552-1.089 1.542M123.752 51.513c-.588-.01-1.054-.717-1.04-1.578s.501-1.553 1.089-1.543 1.053.717 1.04 1.579c-.014.862-.502 1.552-1.089 1.542\"\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#091141\",\n d: \"M124.601 44.4s-3.171 0-3.171 1.349c0 0 0 .904 2.87.84 2.87-.063 3.505-.317 3.679-1.189.175-.872-1.871-1.11-3.378-1M112.816 44.835s2.646-.135 2.783 1.15c0 0 .085.862-2.245.913s-3.051-.292-3.223-.99c-.173-.697 1.426-1.125 2.685-1.074\"\n})), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"m117 64.584 5.555-.413s.244 2.067-2.634 2.201S117 64.584 117 64.584M93.882 119.624l-26.38-20.25-9.744 13.855 28.775 21.853a6.56 6.56 0 0 0 3.576 1.385 8.736 8.736 0 0 0 9.213-7.701 8.705 8.705 0 0 0-5.44-9.142\"\n})), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B46458\",\n d: \"m117.688 135.146 10-.771-.307 10h-8.658z\"\n})), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B46458\",\n d: \"m120.5 134.875.5 2 1 7.5H97c.5-5 7.5-10 12.5-10 4 0 10 .333 11 .5\"\n})), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F4F6FF\",\n d: \"m164.171 126.923-39.122 1.173-.549 16.279 44-.5c1.352-.182.6.141 1.736-.614a8.99 8.99 0 0 0 3.987-6.792 9 9 0 0 0-.6-3.996 8.99 8.99 0 0 0-9.452-5.55\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"noReportsIcon_svg__a\",\n x1: 96.5,\n x2: 156.139,\n y1: 120.875,\n y2: 53.919,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#A1A9EE\"\n})), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"noReportsIcon_svg__b\",\n x1: 173.499,\n x2: 153.836,\n y1: 142.771,\n y2: 84.706,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.307,\n stopColor: \"#F4F6FF\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#fff\"\n})))));\nexport default SvgNoReportsIcon;","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _g, _path11, _path12, _path13, _path14, _path15, _path16, _path17, _circle, _path18, _path19, _path20, _path21, _path22, _rect, _path23, _path24, _path25, _path26, _path27, _rect2, _path28, _path29, _path30, _path31, _path32, _rect3, _path33, _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 SvgNoAppsIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 198 138\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E6E6F5\",\n d: \"M0 94.436c0-23.633 19.158-42.79 42.79-42.79h112.325c23.632 0 42.79 19.157 42.79 42.79s-19.158 42.79-42.79 42.79H42.79C19.158 137.226 0 118.068 0 94.436\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EFBB9D\",\n d: \"M65.837 81.96a12.65 12.65 0 0 0-9.509-2.973l-5.068-2.293a1.82 1.82 0 0 0-2.215.54 1.56 1.56 0 0 0 .452 2.214l2.755 1.843-1.175-.098a8.8 8.8 0 0 1-5.008-2.073l-3.913-3.385a1.76 1.76 0 0 0-1.661-.33 1.484 1.484 0 0 0-.746 2.44l4.572 5.042a9.93 9.93 0 0 0 7.052 3.203l14.655.45z\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#091141\",\n fillRule: \"evenodd\",\n d: \"M114.82 31.317c-3.39 14.435-7.259 48.95-8.519 52.122a2.15 2.15 0 0 0 .438 2.293q7.2 7.432 19.261 4.644c8.566-1.98 11.243-37.776 5.935-61.957z\",\n clipRule: \"evenodd\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F4F5FE\",\n fillRule: \"evenodd\",\n d: \"M59.955 88.055q4.905-4.683 5.949-8.17Q87.846 96.277 90.742 95.38c2.646-.82 24.003-20.019 31.424-24.56.674-.673.721 5.077 1.257 4.458l-2.407 22.314q-13 9.303-16.565 11.463c-3.566 2.16-12.922 6.115-21.372-.755q-8.45-6.87-23.124-20.246\",\n clipRule: \"evenodd\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M110.591 112.816c1.123 4.755 3.266 8.898 1.409 19.559 10.035 1.817 16.883-1.233 21.5 1l17.5-8 12.5-5.5-5.856-17.413.648-13.595c-1.701-6.798-4.496-13.233-7.062-16.042-3.848-4.212-24.74-2.294-29.885-.522s-6.336 11.497-11.769 19.303c-5.432 7.805-.67 14.076 1.015 21.21\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EFBB9D\",\n fillRule: \"evenodd\",\n d: \"M142.981 70.154q-3.034 24.705-17.047 24.705c-14.014 0-10.728-7.372-8.973-10.83q1.755-3.456 3.859-12.304 7.232-2.308 11.039-2.578 3.808-.27 11.122 1.007\",\n clipRule: \"evenodd\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#321907\",\n d: \"M122.003 47.534c-.552.081-1.097-.509-1.218-1.318-.121-.81.228-1.532.78-1.613.552-.082 1.097.509 1.218 1.318.121.81-.228 1.532-.78 1.613M114.454 47.403c-.552.08-1.098-.51-1.219-1.319-.121-.81.229-1.532.78-1.613.552-.081 1.098.509 1.219 1.319s-.228 1.531-.78 1.613\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EFBB9D\",\n d: \"M137.286 52c-1.661 12.973 4.305 17.843 6.214 17.875s-5.802 7.704-19.433 20.49c-4.46-8.598-4.96-16.266-3.566-18.49 2.089-3.336 4.029-.482 3.312-12.161-.47-7.672 9.731-6.943 16.998-8.188-3.525.474-9.282.592-3.525.474\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#DC9F7E\",\n fillRule: \"evenodd\",\n d: \"M123.313 54.526c.792 7.227.769 11.213.687 11.85-.122.953 17.282.147 12.312-15.174s-6.632 1.806-12.999 3.324\",\n clipRule: \"evenodd\",\n opacity: 0.677\n})), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"noAppsIcon_svg__a\",\n width: 38,\n height: 44,\n x: 114,\n y: 22,\n maskUnits: \"userSpaceOnUse\",\n style: {\n maskType: \"alpha\"\n }\n}, _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M146.092 55.049q-6.862 9.17-19.143 10.064c-8.313.606-13.863-10.234-12.793-21.363.511-5.31 1.687-9.997 6.363-14.827q14.475-14.952 27.2 3.95l3.662 9.771z\"\n}))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#noAppsIcon_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EFBB9D\",\n d: \"M144.967 54.176q-7.665 8.514-19.978 8.303c-8.336-.144-12.887-11.436-10.817-22.421.988-5.242 2.582-9.803 7.676-14.193q15.77-13.59 26.74 6.375l2.766 10.06z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EFA77F\",\n d: \"M132.771 54.39c-2.696-.416-4.642-2.252-4.348-4.1s2.718-3.007 5.413-2.59c2.695.416 4.642 2.251 4.348 4.099s-2.718 3.008-5.413 2.591M111.252 49.93c-2.647-.672-4.479-2.7-4.092-4.529s2.849-2.766 5.497-2.093 4.479 2.7 4.092 4.53c-.388 1.828-2.849 2.765-5.497 2.092\"\n}))), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#A5330A\",\n fillRule: \"evenodd\",\n d: \"M126.024 53.94q-3.178 1.359-7.501-1.4 2.035 5.778 4.624 5.258t2.877-3.857\",\n clipRule: \"evenodd\"\n})), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#0A1551\",\n d: \"M127.588 44.576c-.558-.01-1-.68-.987-1.499.012-.818.475-1.474 1.033-1.464s1 .68.987 1.498c-.012.819-.475 1.474-1.033 1.465M118.988 43.024c-.558-.01-1-.68-.987-1.499.013-.818.476-1.474 1.034-1.464s1 .68.987 1.499c-.013.818-.476 1.473-1.034 1.464\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EFBB9D\",\n fillRule: \"evenodd\",\n d: \"M142.981 70.154q-3.034 24.705-17.047 24.705c-14.014 0-10.728-7.372-8.973-10.829q1.755-3.457 3.859-12.304 7.232-2.309 11.039-2.578 3.808-.27 11.122 1.006\",\n clipRule: \"evenodd\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"m142.201 78.382 2.206 11.872s-1.371 4.31 1.516 12.143c2.888 7.832 7.375 17.679 7.375 17.679l10.376 13.713c10-3.663 2.348-24.999-1.822-42.89-2.639-9.901-7.006-16.464-10.989-18.892z\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"url(#noAppsIcon_svg__b)\",\n d: \"m144.231 81.388 2.205 11.873s-1.37 4.31 1.517 12.143c2.888 7.831 7.375 17.679 7.375 17.679l9.172 12.292c10-3.663 3.551-23.578-.619-41.469-2.638-9.902-7.006-16.464-10.988-18.892z\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M142.501 69.375c-11.2 2.4-17.333.667-19-.5-.799.4-2.667 2.5-3.501 3.5-1.5 3.667-4.799 11.7-5.999 14.5-1.5 3.5 1 5.5 4.5 9.5s14.5.5 18.5-.5c3.2-.8 7-17.333 8.5-25.5-2-.4-2.833-.833-3-1\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#091141\",\n fillRule: \"evenodd\",\n d: \"M127.938 36.463c-7.821-1.299-11.004-1.904-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 15 0 0 1 1.479 2.365q.349.56.689 1.256c3.698 10.658 3.601 50.771 2.546 56.531-2.957 3.801-26.689 4.621-23.717-.143q.25-.397.548-.835c1.396-2.08 5.43-29.61 5.411-36.274-.004-1.614-.47-3.501-.996-5.63-.178-.72-.362-1.467-.538-2.24l-1.197-.417c-1.691-.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.223-1.465 1.825-2.025 3.253-2.3 4.373-.157.637-.755 1.077-1.403.97\",\n clipRule: \"evenodd\"\n})), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 145.5,\n cy: 16.875,\n r: 9.5,\n fill: \"#091141\"\n})), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#091141\",\n d: \"M129.897 38.41s-3.058-.84-3.416.459c0 0-.24.872 2.545 1.572 2.784.7 3.463.624 3.863-.17.399-.795-1.51-1.568-2.992-1.86M118.797 36.46s2.646.157 2.641 1.449c0 0-.009.865-2.331.662-2.322-.204-3-.624-3.096-1.336-.095-.712 1.542-.963 2.786-.774\"\n})), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"#D97D4A\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 0.92,\n d: \"M121.942 45.389 121 48.285l1.873.494\"\n})), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EFBB9D\",\n d: \"m124.604 130.031 8.026-.619-.246 8.026h-6.949z\"\n})), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EFBB9D\",\n d: \"m126.861 129.813.401 1.605.803 6.02H108c.402-4.013 6.02-8.026 10.033-8.026 3.21 0 8.025.267 8.828.401\"\n})), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F4F6FF\",\n d: \"m161.399 122.431-31.399.941 2 14.003 30-.5c1.085-.146 2.344-.204 3.256-.81 1-.665 2.685-1.934 3.239-2.878a7.22 7.22 0 0 0 .49-6.301 7.216 7.216 0 0 0-7.586-4.455\"\n})), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n width: 30.384,\n height: 30.384,\n x: 38.303,\n y: 1.625,\n fill: \"#fff\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5,\n rx: 2.75\n})), _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M41.47 7.793a3.01 3.01 0 0 1 3.008-3.01h18.053a3.01 3.01 0 0 1 3.009 3.01v18.052a3.01 3.01 0 0 1-3.01 3.009H44.479a3.01 3.01 0 0 1-3.008-3.009z\"\n})), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#97ACDA\",\n stroke: \"#97ACDA\",\n strokeWidth: 0.652,\n d: \"M58.51 18.453a.4.4 0 0 0-.4.4v2.351h-2.352a.4.4 0 0 0 0 .8h2.351v2.352a.4.4 0 0 0 .8 0v-2.352h2.352a.4.4 0 0 0 0-.8H58.91v-2.351a.4.4 0 0 0-.4-.4Z\"\n})), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M54.613 8.445c0-.362.294-.656.656-.656h6.566c.363 0 .657.294.657.656v6.566a.657.657 0 0 1-.657.657H55.27a.656.656 0 0 1-.656-.657z\"\n})), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M44.476 8.445c0-.362.294-.656.657-.656h6.566c.362 0 .656.294.656.656v6.566a.657.657 0 0 1-.656.657h-6.566a.657.657 0 0 1-.657-.657z\"\n})), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M44.476 18.582c0-.363.294-.657.656-.657h6.566c.363 0 .657.294.657.657v6.566a.657.657 0 0 1-.657.656h-6.566a.657.657 0 0 1-.656-.656z\"\n})), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 30.384,\n height: 30.384,\n x: 18.25,\n y: 41.741,\n fill: \"#fff\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5,\n rx: 2.75\n})), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M21.403 47.908A3.01 3.01 0 0 1 24.41 44.9h18.053a3.01 3.01 0 0 1 3.009 3.008v18.053a3.01 3.01 0 0 1-3.01 3.009H24.412a3.01 3.01 0 0 1-3.008-3.01z\"\n})), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#97ACDA\",\n stroke: \"#97ACDA\",\n strokeWidth: 0.652,\n d: \"M38.441 58.568a.4.4 0 0 0-.4.4v2.352H35.69a.4.4 0 0 0 0 .8h2.35v2.351a.4.4 0 0 0 .801 0V62.12h2.352a.4.4 0 0 0 0-.8H38.84v-2.352a.4.4 0 0 0-.4-.4Z\"\n})), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M34.547 48.563c0-.363.294-.657.657-.657h6.566c.362 0 .656.294.656.657v6.566a.657.657 0 0 1-.656.656h-6.566a.657.657 0 0 1-.657-.656z\"\n})), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M24.412 48.564c0-.362.294-.656.657-.656h6.566c.363 0 .656.294.656.656v6.566a.657.657 0 0 1-.656.657h-6.566a.657.657 0 0 1-.657-.657z\"\n})), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M24.407 58.697c0-.363.294-.657.657-.657h6.566c.362 0 .656.294.656.657v6.566a.657.657 0 0 1-.656.657h-6.566a.656.656 0 0 1-.657-.657z\"\n})), _rect3 || (_rect3 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 30.384,\n height: 30.384,\n x: 57.567,\n y: 41.741,\n fill: \"#fff\",\n stroke: \"#B1C3E9\",\n strokeWidth: 1.5,\n rx: 2.75\n})), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M60.723 47.908a3.01 3.01 0 0 1 3.009-3.008h18.052a3.01 3.01 0 0 1 3.009 3.008v18.053a3.01 3.01 0 0 1-3.009 3.009H63.732a3.01 3.01 0 0 1-3.009-3.01z\"\n})), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#97ACDA\",\n stroke: \"#97ACDA\",\n strokeWidth: 0.652,\n d: \"M77.771 58.568a.4.4 0 0 0-.4.4v2.352H75.02a.4.4 0 0 0 0 .8h2.351v2.351a.4.4 0 0 0 .8 0V62.12h2.352a.4.4 0 0 0 0-.8H78.17v-2.352a.4.4 0 0 0-.4-.4Z\"\n})), _path35 || (_path35 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FF6100\",\n d: \"M73.87 48.563c0-.363.294-.657.656-.657h6.566c.363 0 .657.294.657.657v6.566a.657.657 0 0 1-.657.656h-6.566a.657.657 0 0 1-.656-.656z\"\n})), _path36 || (_path36 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#09F\",\n d: \"M63.727 48.564c0-.363.294-.657.657-.657h6.566c.362 0 .656.294.656.657v6.566a.657.657 0 0 1-.656.657h-6.566a.657.657 0 0 1-.657-.657z\"\n})), _path37 || (_path37 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFB629\",\n d: \"M63.728 58.697c0-.363.294-.657.656-.657h6.566c.363 0 .657.294.657.657v6.566a.657.657 0 0 1-.657.657h-6.566a.656.656 0 0 1-.656-.657z\"\n})), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"noAppsIcon_svg__b\",\n x1: 160,\n x2: 148.271,\n y1: 122.375,\n y2: 68.425,\n gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#F4F5FE\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#fff\"\n})))));\nexport default SvgNoAppsIcon;","\n \n\n","\n \n \n\n","\n \n\n","\n \n\n","","","\n \n\n","\n \n\n","","","\n \n\n","","","","","","","","","","","\n \n \n \n \n \n \n\n","\n \n \n \n \n \n\n","\n \n\n","\n \n\n","\n \n\n","\n \n\n","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 { useState, useEffect, useRef } from 'react';\n\nexport const useKeyboardEvent = (keyArray, callback) => {\n useEffect(() => {\n const handler = e => {\n const { key = '', keyCode } = e;\n if ((key && keyArray.indexOf(key) > -1) || (keyArray.indexOf(keyCode) > -1)) callback();\n };\n global.window.addEventListener('keydown', handler);\n return () => global.window.removeEventListener('keydown', handler);\n }, []);\n};\n\nexport const useOfflineMode = ({ onOffline: onOfflineFn = f => f, onOnline: onOnlineFn = f => f } = {}) => {\n const onOfflineRef = useRef(onOfflineFn);\n const onOnlineRef = useRef(onOnlineFn);\n if (onOfflineRef.current !== onOfflineFn) onOfflineRef.current = onOfflineFn;\n if (onOnlineRef.current !== onOnlineRef) onOnlineRef.current = onOnlineFn;\n\n const { current: onOffline } = onOfflineRef;\n const { current: onOnline } = onOnlineRef;\n\n const handleOfflineState = () => onOffline();\n const handleOnlineState = () => onOnline();\n\n useEffect(() => {\n window.addEventListener('offline', handleOfflineState);\n window.addEventListener('online', handleOnlineState);\n\n return () => {\n window.removeEventListener('offline', handleOfflineState);\n window.removeEventListener('online', handleOnlineState);\n };\n }, []);\n};\n\nexport const useMediaQuery = mediaQuery => {\n if (typeof window !== 'object' || !('matchMedia' in window)) {\n return null;\n }\n\n const [isVerified, setIsVerified] = useState(!!window.matchMedia(mediaQuery).matches);\n\n useEffect(() => {\n const mediaQueryList = window.matchMedia(mediaQuery);\n const documentChangeHandler = () => setIsVerified(!!mediaQueryList.matches);\n\n try {\n mediaQueryList.addEventListener('change', documentChangeHandler);\n } catch (e) {\n // Safari isn't supporting mediaQueryList.addEventListener\n mediaQueryList.addListener(documentChangeHandler);\n }\n\n documentChangeHandler();\n return () => {\n try {\n mediaQueryList.removeEventListener('change', documentChangeHandler);\n } catch (e) {\n // Safari isn't supporting mediaQueryList.removeEventListener\n mediaQueryList.removeListener(documentChangeHandler);\n }\n };\n }, [mediaQuery]);\n\n return isVerified;\n};\n\nexport const useDidUpdateEffect = (fn, inputs) => {\n const isMountingRef = useRef(false);\n\n useEffect(() => {\n isMountingRef.current = true;\n }, []);\n\n useEffect(() => {\n if (!isMountingRef.current) {\n return fn();\n }\n isMountingRef.current = false;\n }, inputs);\n};\n","/* eslint-disable no-param-reassign */\n\nconst injectGetStyle = () => {\n function getStyle(el, styleProp) {\n var value; var\n { defaultView } = el.ownerDocument || document;\n // W3C standard way:\n if (defaultView && defaultView.getComputedStyle) {\n // sanitize property name to css notation\n // (hypen separated words eg. font-Size)\n styleProp = styleProp.replace(/([A-Z])/g, '-$1').toLowerCase();\n return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);\n } if (el.currentStyle) { // IE\n // sanitize property name to camelCase\n styleProp = styleProp.replace(/-(\\w)/g, (str, letter) => {\n return letter.toUpperCase();\n });\n value = el.currentStyle[styleProp];\n // convert other units to pixels on IE\n if (/^\\d+(em|pt|%|ex)?$/i.test(value)) {\n return (function (val) {\n var oldLeft = el.style.left;\n var oldRsLeft = el.runtimeStyle.left;\n el.runtimeStyle.left = el.currentStyle.left;\n el.style.left = val || 0;\n val = `${el.style.pixelLeft}px`;\n el.style.left = oldLeft;\n el.runtimeStyle.left = oldRsLeft;\n return val;\n }(value));\n }\n return value;\n }\n }\n\n if (!window.getStyle) {\n window.getStyle = getStyle;\n }\n};\n\nexport default injectGetStyle;\n","/* eslint-disable camelcase */\nconst injectPostMessage = () => {\n if (window.getIframeWindow === undefined) {\n window.getIframeWindow = function getIframeWindow(iframeObject) {\n var doc;\n if (iframeObject.contentWindow) {\n return iframeObject.contentWindow;\n }\n if (iframeObject.window) {\n return iframeObject.window;\n }\n if (!doc && iframeObject.contentDocument) {\n doc = iframeObject.contentDocument;\n }\n if (!doc && iframeObject.document) {\n doc = iframeObject.document;\n }\n if (doc && doc.defaultView) {\n return doc.defaultView;\n }\n if (doc && doc.parentWindow) {\n return doc.parentWindow;\n }\n };\n }\n\n // postMessage utility function\n if (typeof window.XD === 'undefined') {\n window.XD = (function () {\n var interval_id;\n var last_hash;\n var cache_bust = 1;\n var attached_callback;\n return {\n postMessage: function (message, target_url, _target) {\n if (!target_url) {\n return;\n }\n\n let target = _target || window.parent; // default to parent\n if (window.postMessage) {\n var postMessageTarget = target_url.replace(/([^:]+:\\/\\/[^/]+).*/, '$1');\n // the browser supports window.postMessage, so call it with a targetOrigin\n // set appropriately, based on the target_url parameter.\n if (!('postMessage' in target)) {\n // we have a problem, update target\n target = window.getIframeWindow(target);\n }\n if (!target) {\n return;\n }\n if (postMessageTarget.indexOf('file://') === 0) { // This means we are using file locally. (like offline forms)\n postMessageTarget = '*';\n }\n target.postMessage(message, postMessageTarget);\n } else if (target_url) {\n // the browser does not support window.postMessage, so use the window.location.hash fragment hack\n target.location = `${target_url.replace(/#.*$/, '')}#${+new Date()}${cache_bust++}&${message}`;\n }\n },\n receiveMessage: function (callback, source_origin) {\n // browser supports window.postMessage\n if (window.postMessage) {\n // bind the callback to the actual event associated with window.postMessage\n\n if (callback) {\n attached_callback = function (e) {\n var params = window.location.search.split('?').join('');\n var isOfflineForms = params.indexOf('offline_forms=true') > -1 || params.indexOf('offline_forms=si') > -1;\n\n // eslint-disable-next-line max-len\n if (!isOfflineForms && ((typeof source_origin === 'string' && e.origin !== source_origin) || (Object.prototype.toString.call(source_origin) === '[object Function]' && source_origin(e.origin) === !1))) {\n return !1;\n }\n callback(e);\n };\n }\n if (window.addEventListener) {\n window[callback ? 'addEventListener' : 'removeEventListener']('message', attached_callback, !1);\n } else {\n window[callback ? 'attachEvent' : 'detachEvent']('onmessage', attached_callback);\n }\n } else {\n // a polling loop is started & callback is called whenever the location.hash changes\n if (interval_id) {\n clearInterval(interval_id);\n }\n interval_id = null;\n if (callback) {\n interval_id = setInterval(() => {\n var { hash } = document.location;\n var re = /^#?\\d+&/;\n if (hash !== last_hash && re.test(hash)) {\n last_hash = hash;\n callback({\n data: hash.replace(re, '')\n });\n }\n }, 100);\n }\n }\n }\n };\n }());\n }\n};\nexport default injectPostMessage;\n","/* Widget Constants */\nconst widgetTranlatebles = {\n '533946093c1ad0c45d000070' /* Configurable List */: {\n SHOW_HIDE_CALENDAR: 'Show/hide calendar'\n }\n};\n\n/* TRANSLATABLE WORDS PARSER (Field Declarations) */\n\n// Configurable List : 533946093c1ad0c45d000070\n\nconst parseConfigurableListFieldDeclarations = declaration => {\n /*\n Text: [label]:text[:placeholder]\n Number: [label]:number[:placeholder:step,min,max]\n Textarea: [label]:textarea[:placeholder]\n Dropdown: [label]:dropdown:option1[,option2,...:placeholder]\n Radio: [label]:radio:option1[,option2,...]\n Checkbox: [label]:checkbox:option1[,option2,...]\n Date Input: [label]:dateInput[:format]\n Time Input: [label]:timeInput:format[,now]\n Date: [label]:date[:format:range:today]\n Time: [label]:time[:format,now]\n Static Text: [label]:static:[text]\n */\n\n function moveAsteriskToEnd(input = '') {\n if (input.startsWith('*')) {\n return `${input.substring(1).trim()}`;\n }\n return input;\n }\n if (declaration) {\n const translatables = [];\n const lines = declaration.split('\\n');\n lines.forEach(line => {\n const type = line.split(':')[1]?.trim();\n switch (type) {\n case 'number':\n case 'textarea':\n case 'static':\n case 'text':\n // label\n translatables.push(moveAsteriskToEnd(line.split(':')[0]));\n // placeholder or text (static)\n translatables.push(moveAsteriskToEnd(line.split(':')[2]));\n break;\n case 'radio':\n case 'checkbox':\n case 'dropdown':\n // label\n translatables.push(moveAsteriskToEnd(line.split(':')[0]));\n // options\n const options = line.split(':')[2] ? line.split(':')[2].split(',') : [];\n translatables.push([...translatables, ...options]);\n // placeholder (dropdown)\n if (line.split(':')[3]) {\n translatables.push(line.split(':')[3]);\n }\n break;\n case 'dateInput':\n case 'timeInput':\n case 'time':\n case 'date':\n // only label\n translatables.push(moveAsteriskToEnd(line.split(':')[0]));\n break;\n default:\n break;\n }\n });\n return translatables;\n }\n\n return [];\n};\n\nconst parseMatrixDynamiqueDeclations = declaration => {\n // ex: head1:60,head2:120\n\n if (declaration) {\n const columns = declaration.split(',');\n return columns.map(column => column && column.split(':')[0]);\n }\n\n return [];\n};\n\nconst getWidgetFieldParser = widgetID => {\n switch (widgetID) {\n case '533946093c1ad0c45d000070': /* Configurable List */\n return parseConfigurableListFieldDeclarations;\n case '5299b58aba554b7e24000007': /* Matrix Dynamique */\n return parseMatrixDynamiqueDeclations;\n default:\n return null;\n }\n};\n\nconst getWidgetTranslatebleTexts = (widgetID, fieldDeclaration) => {\n if (fieldDeclaration) {\n const parser = getWidgetFieldParser(widgetID);\n return [...new Set([\n ...(Object.values(widgetTranlatebles[widgetID]) || []),\n ...parser(fieldDeclaration).flat(Infinity)\n ])];\n }\n return Object.values(widgetTranlatebles[widgetID]);\n};\n\nexport {\n widgetTranlatebles,\n getWidgetTranslatebleTexts,\n parseConfigurableListFieldDeclarations\n};\n","export const loadWidgetImageInParentWindow = imageUrl => {\n let url;\n try {\n url = new URL(imageUrl, window.location.origin);\n url.hostname = window.location.hostname;\n url = url.toString();\n } catch (e) {\n url = imageUrl;\n }\n return new Promise((resolve, reject) => {\n var xhr = new window.XMLHttpRequest();\n\n xhr.open('GET', url, true);\n xhr.withCredentials = true;\n xhr.responseType = 'blob';\n xhr.onerror = reject;\n xhr.onload = function () {\n var reader = new global.FileReader();\n reader.onloadend = function () {\n if (typeof reader.result === 'string' && (reader.result.substr(0, 10) === 'data:image' || reader.result.substr(0, 29) === 'data:application/octet-stream')) {\n resolve(reader.result.replace('data:application/octet-stream', 'data:image/png'));\n } else {\n reject(new Error('Blob is not an image'));\n }\n };\n reader.readAsDataURL(xhr.response);\n };\n xhr.send();\n });\n};\n\nexport const isBase64LoadedField = (msg, clientId) => (!!msg.enterprise || msg.isHipaa) && [\n '529467003477f3512000001f', // Smooth Signature\n '533a8c19a3f5fec35d00009a', // Initials\n '5d493b3b3ecd623d69000045', // Annotate Picture\n '535a49d40a05fdff5200002b' // Draw on Image\n].includes(clientId);\n","/* eslint-disable */\n/**\n * WidgetsServerBuilder.js 1.5.2\n *\n * (c) 2013 JotForm Easiest Form Builder\n */\nimport { getActiveApp, getEnv, getBaseURL, isEU, isHIPAA } from '@jotforminc/router-bridge';\nimport { getWidgetTranslatebleTexts } from '../translations';\nimport { StorageHelper } from '@jotforminc/storage-helper';\nimport { loadWidgetImageInParentWindow, isBase64LoadedField } from '../utils/loadWidgetImageAsBase64';\n\nfunction widgetFrameLoaded(id, formProps, value, questionProps) {\n formProps = typeof formProps === 'undefined' ? {} : formProps;\n questionProps = typeof questionProps === 'undefined' ? {} : questionProps;\n\n var enableLog = false;\n\n enableLog && console.log('SERVER: widget frame onload for', id);\n\n var frameObj = document.getElementById(`customFieldFrame_${id}`);\n var { src } = frameObj;\n\n // because we are changing iframe src dynamically\n if (src.match('/form/')) {\n return;\n }\n\n var refererArr = src.match(/^(ftp:\\/\\/|https?:\\/\\/)?(.+@)?([a-zA-Z0-9\\.\\-]+).*$/);\n var referer = refererArr[1] + refererArr[3];\n // var thisForm = (JotForm.forms[0] == undefined || typeof JotForm.forms[0] == \"undefined\" ) ? $($$('.jotform-form')[0].id) : JotForm.forms[0];\n\n // check a valid json string\n function IsValidJsonString(str) {\n try {\n JSON.parse(str);\n } catch (e) {\n return false;\n }\n return true;\n }\n\n function sendMessage(msg, id) {\n try {\n if (navigator.userAgent.indexOf('Firefox') != -1) {\n XD.postMessage(msg, referer, getIframeWindow(window.frames[`customFieldFrame_${id}`]));\n } else {\n XD.postMessage(msg, referer, window.frames[`customFieldFrame_${id}`]);\n }\n } catch (e) {\n console.log(e);\n }\n }\n\n // note that we are binding receiveMessage on iframe load\n XD.receiveMessage(message => {\n // don't parse some unknown text from third party api of widgets like google recapthca\n if (!IsValidJsonString(message.data)) {\n return;\n }\n\n // parse message\n var data = JSON.parse(message.data);\n\n enableLog && console.log('SERVER: message coming form client type ', data.type);\n // sendSubmit\n if (data.type === 'submit') {\n if (typeof data.value === 'number') {\n data.value = `${data.value}`;\n }\n var required = $(document.getElementById(`input_${data.qid}`)).hasClassName('widget-required');\n if (!(required)) {\n if (data.valid === false) {\n document.getElementById(`input_${data.qid}`).value = 'widget not used';\n } else if (data.value !== undefined) {\n document.getElementById(`input_${data.qid}`).value = data.value;\n } else {\n document.getElementById(`input_${data.qid}`).value = '';\n }\n } else if (data.valid === false) {\n JotForm.errored(document.getElementById(`input_${data.qid}`), 'Please fill this field');\n } else {\n JotForm.corrected(document.getElementById(`input_${data.qid}`));\n if (data.value !== undefined) {\n document.getElementById(`input_${data.qid}`).value = data.value;\n } else {\n document.getElementById(`input_${data.qid}`).value = '';\n }\n }\n\n // if no value was set, dont show it to submission data\n if (typeof data.value === 'undefined' || data.value == false) {\n var el = document.getElementById(`input_${data.qid}`);\n el.value = '';\n el.removeAttribute('name');\n }\n\n var allInputs = document.getElementsByClassName('widget-required');\n var sendSubmit = true;\n for (var i = -0; i < allInputs.length; i++) {\n if (allInputs[i].value.length === 0) {\n sendSubmit = false;\n }\n }\n }\n\n // sendData\n if (data.type === 'data' && document.getElementById(`input_${data.qid}`)) {\n document.getElementById(`input_${data.qid}`).value = data.value;\n }\n\n // requestFrameSize\n if (data.type === 'size') {\n var { width } = data;\n var { height } = data;\n\n enableLog && console.log('SERVER: resizing widget width', width, 'height', height);\n if (width !== undefined && width !== null) {\n document.getElementById(`customFieldFrame_${data.qid}`) ? document.getElementById(`customFieldFrame_${data.qid}`).style.width = `${width}px` : null;\n }\n if (height !== undefined && height !== null) {\n document.getElementById(`customFieldFrame_${data.qid}`) ? document.getElementById(`customFieldFrame_${data.qid}`).style.height = `${height}px` : null;\n }\n }\n\n // Translatable text (from IFrame widget)\n if (data.type === 'translation') {\n if (data.data.length > 0) {\n // Check if there is already data for this form\n var wtData = window.widgetTranslatables[formProps.formID];\n if (typeof wtData === 'undefined') {\n wtData = {};\n }\n wtData[`qid_${data.qid}`] = data.data;\n window.widgetTranslatables[formProps.formID] = wtData;\n\n try {\n StorageHelper.setLocalStorageItem({key:'wStorage', value:JSON.stringify(window.widgetTranslatables)});\n } catch (e) {\n console.log(e);\n }\n }\n }\n\n if (data.type === 'fields:capture') {\n sendMessage(JSON.stringify({\n eventID: data.eventID,\n type: 'event:receiver',\n data: []\n }), data.qid);\n }\n }, `${document.location.protocol}//${frameObj.src.match(/^(ftp:\\/\\/|https?:\\/\\/)?(.+@)?([a-zA-Z0-9\\.\\-]+).*$/)[3]}`);\n\n // function that gets the widget settings from data-settings attribute of the iframe\n function getWidgetSettings() {\n var el = document.getElementById(`widget_settings_${id}`);\n return (el) ? el.value : null;\n }\n\n //get form environment\n var env = getEnv();\n var baseUrl = getBaseURL();\n var isApp = getActiveApp();\n var isEu = isEU();\n var isHipaa = isHIPAA();\n var enterprise = env === \"ENTERPRISE\" ? baseUrl.replace('https://', '') : false;\n\n function isOnFormBuilder() {\n return isApp === 'form-builder';\n }\n\n // function to check if a widget is required\n function isWidgetRequired() {\n var classNames = document.getElementById(`id_${id}`)?.className;\n return classNames?.includes('jf-required') || classNames?.includes('isRequired');\n }\n\n function isWidgetLabelEnabled() {\n var labelElement = document.getElementById(`label_${id}`);\n if (labelElement) {\n return labelElement.className.indexOf('form-label') > -1;\n }\n return false;\n }\n\n function getWidgetLabel(id) {\n var labelElement = document.getElementById(`label_${id}`);\n if (labelElement && labelElement.textContent) {\n return labelElement.textContent;\n }\n return '';\n }\n\n // send auto ready message to widget\n // do not call v3 functions when inside v4\n var isCardForm = (window.FORM_MODE == 'cardform' || window.buildermode === 'card');\n\n // Check theme version\n var themeVersion = (window && window.newDefaultTheme) || '';\n var isOpenedInPortal = src.match('isOpenedInPortal=true');\n var isOpenedInAgent = src.match('isOpenedInAgent=true');\n if (isOpenedInPortal || isOpenedInAgent) {\n sendMessage(JSON.stringify({type: 'theme', themeVersion: 'v2', isExtendedTheme: false}), id);\n }\n\n var formBackgroundv3 = (typeof getAllProperties === 'function') ? getAllProperties().form_background : '#fff';\n var formFontv3 = (typeof getAllProperties === 'function') ? getAllProperties().form_font : '';\n var msg = {\n type: 'ready',\n qid: `${id}`,\n background: formProps.formBackground || formBackgroundv3,\n fontFamily: formProps.formFont || formFontv3,\n formID: formProps.formID || BuildSource.formID,\n cardform: isCardForm,\n jotformNext: window.location.href.indexOf('jotformNext=1') > -1 || window.isComingFromJotFormNext == 1,\n onWizard: isOnFormBuilder(),\n settings: getWidgetSettings(),\n required: isWidgetRequired(),\n origin: window.location.origin || (`${window.location.protocol}//${window.location.hostname}${window.location.port ? `:${window.location.port}` : ''}`),\n themeVersion: themeVersion,\n isWidgetLabelEnabled: isWidgetLabelEnabled(),\n qlabel: getWidgetLabel(id),\n value,\n isApp,\n isEu,\n isHipaa,\n enterprise,\n lang: document.documentElement.lang\n };\n\n // include initial width and height of the widget\n var fwidth = frameObj.getAttribute('data-width') || frameObj.style.width;\n var fheight = frameObj.getAttribute('data-height') || frameObj.style.height;\n msg.width = parseInt(fwidth);\n msg.height = parseInt(fheight);\n // data-value attribute is set if form is in editMode.\n if (isCardForm && frameObj && typeof frameObj.up === 'function') {\n var jfFieldDiv = frameObj.up('.jfField') || false;\n var widgetID = jfFieldDiv && typeof jfFieldDiv.getAttribute === 'function' ? jfFieldDiv.getAttribute('data-widget-id') : false;\n if (widgetID) {\n msg.widgetID = widgetID;\n }\n }\n\n if (isBase64LoadedField(msg, questionProps.selectedField)) {\n loadWidgetImageInParentWindow(msg.value)\n .then((base64Image) => sendMessage(JSON.stringify({ ...msg, value: base64Image }), `${id}`))\n .catch(() => sendMessage(JSON.stringify(msg), `${id}`))\n } else {\n sendMessage(JSON.stringify(msg), `${id}`);\n }\n\n // Request IFrame widget for translatable text (if there is any)\n var translatableRequest = {\n type: 'translatable',\n formID: formProps.formID || BuildSource.formID,\n qid: `${id}`\n };\n sendMessage(JSON.stringify(translatableRequest), `${id}`);\n}\n\nfunction getWidgetTranslatables(widgetID, options = {}) {\n\n const { fieldDeclaration, fid, qid } = options;\n\n var response = {\n isTranslatable: false,\n data: []\n };\n\n const parsableWidgets = ['5299b58aba554b7e24000007'/* Configurable List */, '533946093c1ad0c45d000070'/* Matrix Dynamique */];\n if(parsableWidgets.includes(widgetID)) {\n const texts = getWidgetTranslatebleTexts(widgetID, fieldDeclaration);\n if(texts && texts.length > 0){\n response.isTranslatable = true;\n response.data = texts;\n }\n return response;\n }\n\n if (typeof fid !== 'undefined' && typeof qid !== 'undefined' && !isNaN(fid) && !isNaN(qid) && fid !== '' && qid !== '') {\n var widgetTranslatables = StorageHelper.getLocalStorageItem({key:'wStorage'});\n\n if (widgetTranslatables !== undefined && widgetTranslatables !== null) {\n var widgetTranslatables = JSON.parse(widgetTranslatables);\n if (typeof widgetTranslatables[fid] !== 'undefined') {\n var widgetTranslatables = widgetTranslatables[fid];\n if (typeof widgetTranslatables[`qid_${qid}`] !== 'undefined') {\n var translatable = widgetTranslatables[`qid_${qid}`];\n if (typeof translatable !== 'undefined') {\n if (translatable.length > 0) {\n response.isTranslatable = true;\n response.data = translatable;\n }\n }\n }\n }\n }\n }\n\n return response;\n}\n\nexport {\n widgetFrameLoaded,\n getWidgetTranslatables\n}\n","import createWidgetTranslations from './customfield/language';\nimport createCustomWidget from './customfield/customWidget';\nimport createWidgetUtils from './customfield/utils';\n\nimport injectGetStyle from './utils/getStyle';\nimport injectPostMessage from './utils/postmessage';\nimport makeJCFServerCommonChecks from './utils/makeJCFServerCommonChecks';\nimport clientWidgetFrameLoaded from './widgetsServer/client';\nimport JFExternalWidgetParamsServer from './external/server';\nimport JFExternalWidgetParamsClient from './external/client';\nimport {\n widgetFrameLoaded as builderWidgetFrameLoaded,\n getWidgetTranslatables as builderGetWidgetTranslatables\n} from './widgetsServer/builder';\n\nconst initWidgetsBuilder = () => {\n // good to go\n // Replaces the old behaviour of WidgetsServerBuilder.js\n if (window.JCFServerCommon === undefined) {\n window.JCFServerCommon = {\n frames: {}\n };\n }\n\n if (window.widgetTranslatables === undefined) {\n window.widgetTranslatables = {};\n }\n injectPostMessage();\n injectGetStyle();\n window.widgetFrameLoaded = builderWidgetFrameLoaded;\n window.getWidgetTranslatables = builderGetWidgetTranslatables;\n // eslint-disable-next-line no-undef\n if (!Element.prototype.addClassName) {\n // eslint-disable-next-line no-undef\n Element.prototype.addClassName = function (className) {\n if (this.className.includes(className)) return;\n this.className += `${this.className.length ? ' ' : ''}${className}`;\n };\n }\n};\n\nexport {\n createWidgetTranslations,\n createCustomWidget,\n createWidgetUtils,\n clientWidgetFrameLoaded,\n builderWidgetFrameLoaded,\n builderGetWidgetTranslatables,\n injectGetStyle,\n injectPostMessage,\n makeJCFServerCommonChecks,\n JFExternalWidgetParamsServer,\n initWidgetsBuilder,\n JFExternalWidgetParamsClient\n};\n","import React, { memo } from 'react';\nimport { func, string } from 'prop-types';\nimport {\n Location, Router, LocationProvider, globalHistory\n} from '@reach/router';\nimport { renderable } from './constants/propTypes';\n\n// Reach router's ref blocker to prevent focus:\n// https://github.com/reach/router/blob/d2c9ad06715c9d48c2d16f55f7cd889b626d2521/src/index.js#L342\nconst Comp = props =>
    ;\n\nLocationProvider.prototype.componentDidMount = function componentDidMount() {\n const { state: { refs } } = this;\n refs.unlisten = globalHistory.listen(() => {\n this.setState(() => ({ context: this.getContext() }));\n });\n};\n\nconst CoreAppRouter = ({ basepath, children, onLocationChange }) => {\n return (\n \n {({ location }) => {\n onLocationChange(location.pathname);\n return (\n \n {children}\n \n );\n }}\n \n );\n};\n\nCoreAppRouter.propTypes = {\n basepath: string,\n children: renderable.isRequired,\n onLocationChange: func\n};\n\nCoreAppRouter.defaultProps = {\n basepath: '',\n onLocationChange: f => f\n};\n\nexport default memo(CoreAppRouter);\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { CREATE_NEW_PORTAL } from '../../store/actionTypes';\nimport BuilderLoading from '../../components/BuilderLoading';\nimport { ErrorScreen } from '../PublicApp/ErrorScreen';\nimport SELECTORS from '../../store/selectors';\n\nconst CreateNewPortal = () => {\n const dispatch = useDispatch();\n const isAppFailed = useSelector(SELECTORS.isAppFailedSelector);\n\n useEffect(() => { dispatch({ type: CREATE_NEW_PORTAL.REQUEST }); }, []);\n\n return isAppFailed ? : ;\n};\n\nexport default CreateNewPortal;\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 { Moment } from '@jotforminc/jotform-common';\nimport { updateTitleWithNewResourceName } from '@jotforminc/utils';\n\nimport {\n FETCH_PORTAL,\n UPDATE_PORTAL,\n UPDATE_ORDER,\n UPDATE_ITEM_PROP,\n ADD_PORTAL_ITEMS,\n REMOVE_PORTAL_ITEMS,\n SET_API_REQUESTS_COMPLETED,\n UPDATE_MULTIPLE_ITEM, ADD_NEW_PAGE, DELETE_PAGE, UPDATE_PAGE, CHANGE_PAGE_ORDER, REPLACE_FORM_ITEM, APP_UPDATED\n} from '../actionTypes';\nimport { FEATURE_NAMES } from '../../constants/features';\nimport { isFeatureEnabled } from '../../utils/features/helper';\nimport { ITEM_TYPES } from '../../constants/itemTypes';\nimport { getPortalTypeByItems } from '../../constants';\n\nconst initialState = {\n items: [],\n pages: []\n};\n\n// todo ?\n// eslint-disable-next-line complexity\nconst PortalReducer = (state = initialState, action) => {\n switch (action.type) {\n case FETCH_PORTAL.SUCCESS:\n case UPDATE_PORTAL.REQUEST:\n case UPDATE_PORTAL.SUCCESS: {\n // Update document title\n // TODO: find a better way 🥲\n // When building with form, app name in the reducer is overrided\n // via the backend request response after fetching the newly created app.\n // Thats why this document update is here 😣\n // Maybe we can use directly the form title instead of 'New App' default\n // if the user comes to the app with buildWith param.\n if (\n action.payload?.title\n // This condition is needed otherwise the standalone app's title becomes\n // \"My neat app - My neat app\"\n && window.document.title !== action.payload?.title\n ) {\n updateTitleWithNewResourceName(action.payload.title);\n }\n\n // for username changes\n // temporarily disabled\n // if (window.JOTFORM_ENV !== 'ENTERPRISE') {\n // normalizeIconURLs(action.payload);\n // }\n\n return {\n ...state,\n ...action.payload\n };\n }\n case UPDATE_ORDER.REQUEST: {\n return {\n ...state,\n items: action.payload.map(({ id, ...rest }) => {\n const origItem = state.items.find(f => f.id === id);\n return { ...origItem, ...rest };\n })\n };\n }\n case UPDATE_ITEM_PROP.WITHOUT_DEBOUNCE:\n case UPDATE_ITEM_PROP.WITH_DEBOUNCE:\n case UPDATE_ITEM_PROP.REQUEST: {\n return {\n ...state,\n items: state.items?.map(item => {\n return (item.id === action.payload.itemID ? { ...item, ...action.payload.prop } : item);\n })\n };\n }\n case UPDATE_ITEM_PROP.SUCCESS:\n case UPDATE_MULTIPLE_ITEM.REQUEST:\n case UPDATE_MULTIPLE_ITEM.SUCCESS: {\n const updatedItems = action.payload;\n return {\n ...state,\n items: [...state.items].map(currentItem => {\n const { id: currentID } = currentItem;\n const updatedItem = updatedItems[currentID] || {};\n return {\n ...currentItem,\n ...updatedItem\n };\n })\n };\n }\n case ADD_PORTAL_ITEMS.REQUEST: {\n const { newItems } = action.payload;\n return {\n ...state,\n items: newItems\n };\n }\n case REPLACE_FORM_ITEM.SUCCESS: {\n const { itemID, form } = action.payload;\n\n return {\n ...state,\n items: state.items.map(item => (item.id === itemID ? form : item))\n };\n }\n case ADD_PORTAL_ITEMS.SUCCESS: {\n const addedItems = action.payload;\n const items = [...state.items].map(currentItem => {\n const { id: currentID, tempID: currentTempID, type: currentType } = currentItem;\n\n const finderFn = isFeatureEnabled(FEATURE_NAMES.FormResource)\n ? ({ tempID }) => tempID === currentTempID\n : ({ id, tempID }) => {\n return !currentID && tempID && currentType !== ITEM_TYPES.FORM\n ? tempID === currentTempID // Non-form app item, they have predefined tempIDs.\n : parseInt(id, 10) === parseInt(currentID, 10);\n };\n const newItem = addedItems.find(finderFn);\n\n const finalItem = { ...currentItem, ...newItem };\n return {\n ...finalItem,\n // next line is added to prevent consecutive adding elements success collision\n ...{ portalOrder: finalItem.portalOrder ? finalItem.portalOrder.toString() : '' }\n };\n });\n\n const presentationItems = addedItems.filter(addedItem => !!items.find(item => item.presentationItemID === addedItem.id));\n\n return {\n ...state,\n items: [...items, ...presentationItems],\n type: getPortalTypeByItems(addedItems)\n };\n }\n case REMOVE_PORTAL_ITEMS.SUCCESS: {\n const itemIDList = action.payload;\n return {\n ...state,\n items: itemIDList,\n type: getPortalTypeByItems(itemIDList)\n };\n }\n case SET_API_REQUESTS_COMPLETED: {\n const date = Moment.formatDate(new Date(), 'YYYY-MM-DD HH:mm ZZ', 'YYYY-MM-DD HH:mm:ss');\n return {\n ...state, updated_at: date, appUpdatedAt: date\n };\n }\n\n case APP_UPDATED: {\n return { ...state, appUpdatedAt: Date.now() };\n }\n\n case ADD_NEW_PAGE.REQUEST: {\n const { pages } = action.payload; // has tempID\n return {\n ...state,\n pages: [\n ...state.pages,\n ...pages\n ]\n };\n }\n case ADD_NEW_PAGE.SUCCESS: {\n const { pages } = action.payload;\n return {\n ...state,\n pages\n };\n }\n case CHANGE_PAGE_ORDER.SUCCESS: {\n return {\n ...state,\n pages: action.payload\n };\n }\n case DELETE_PAGE.REQUEST: {\n const { pageID } = action.payload;\n const newPages = state.pages.filter(p => p.id !== pageID);\n return {\n ...state,\n pages: newPages\n };\n }\n case DELETE_PAGE.SUCCESS: {\n const {\n items, pages\n } = action.payload;\n return {\n ...state,\n pages,\n items\n };\n }\n case UPDATE_PAGE.SUCCESS: {\n const updatedPages = action.payload;\n return {\n ...state,\n pages: [...state.pages].map(page => {\n const { id: pageID } = page;\n const updated = updatedPages[pageID] || {};\n return {\n ...page,\n ...updated\n };\n })\n };\n }\n default:\n break;\n }\n return state;\n};\n\nexport default PortalReducer;\n","import { FETCH_FORMS } from '../actionTypes';\n\nconst initialState = [];\n\nconst FormsReducer = (state = initialState, action) => {\n switch (action.type) {\n case FETCH_FORMS.SUCCESS: {\n return [...action.payload];\n }\n default:\n break;\n }\n return state;\n};\n\nexport default FormsReducer;\n","import { FETCH_SIGNS } from '../actionTypes';\n\nconst initialState = [];\n\nconst SignsReducer = (state = initialState, action) => {\n switch (action.type) {\n case FETCH_SIGNS.SUCCESS: {\n return [...action.payload];\n }\n default:\n break;\n }\n return state;\n};\n\nexport default SignsReducer;\n","import {\n FETCH_SHARE_LIST, SET_TEMPLATE_CATEGORIES, SET_TEMPLATE_LANGUAGES, UPDATE_RESOURCE_SHARE_URL\n} from '../actionTypes';\n\nconst initialState = {\n resourceShareURL: '',\n shareList: [],\n templateLanguages: [],\n templateCategories: []\n};\n\nconst ShareReducer = (state = initialState, action) => {\n switch (action.type) {\n case FETCH_SHARE_LIST.SUCCESS: {\n return {\n ...state,\n shareList: [...action.payload]\n };\n }\n case UPDATE_RESOURCE_SHARE_URL.SUCCESS: {\n return {\n ...state,\n resourceShareURL: action.payload\n };\n }\n case SET_TEMPLATE_CATEGORIES: {\n return {\n ...state,\n templateCategories: action.payload\n };\n }\n case SET_TEMPLATE_LANGUAGES: {\n return {\n ...state,\n templateLanguages: action.payload\n };\n }\n default:\n break;\n }\n return state;\n};\n\nexport default ShareReducer;\n","import { FETCH_APPS } from '../actionTypes';\n\nconst initialState = [];\n\nconst AppsReducer = (state = initialState, action) => {\n switch (action.type) {\n case FETCH_APPS.SUCCESS: {\n return [...action.payload\n .map(({ disableOnDateProps = {}, ...app }) => ({\n ...app,\n ...disableOnDateProps\n }))\n ];\n }\n default:\n break;\n }\n return state;\n};\n\nexport default AppsReducer;\n","import {\n ADD_TO_STACK, REDO, RESET_STACK, UNDO\n} from '../actionTypes';\n\nconst initialState = {\n stack: [], // LastInFirstOut!\n head: -1\n};\n\nconst UndoRedoReducer = (state = initialState, action) => {\n switch (action.type) {\n case ADD_TO_STACK:\n const { command } = action.payload;\n const newStack = [...state.stack, command];\n const newHead = newStack.length - 1; // Last in\n return {\n ...state,\n stack: newStack,\n head: newHead\n };\n case RESET_STACK:\n const currentHead = state.head;\n const clearedStack = [...state.stack.slice(0, currentHead + 1)];\n return {\n ...state,\n stack: clearedStack\n };\n case UNDO:\n return { ...state, head: state.head - 1 };\n case REDO:\n return { ...state, head: state.head + 1 };\n default:\n return state;\n }\n};\n\nexport default UndoRedoReducer;\n","import {\n SET_DONE_COUNT, SET_TODO_COUNT, SET_IS_APP_DONE, SET_LAST_ANIMATED_DONE_COUNT\n} from '../actionTypes';\n\nconst initialState = {\n todoCount: 0,\n doneCount: 0,\n isAppDone: false,\n lastAnimatedDoneCount: null\n};\n\nconst ProgressReducer = (state = initialState, action) => {\n switch (action.type) {\n case SET_TODO_COUNT:\n return {\n ...state,\n todoCount: action.payload\n };\n case SET_DONE_COUNT:\n return {\n ...state,\n doneCount: action.payload\n };\n case SET_IS_APP_DONE:\n return {\n ...state,\n isAppDone: action.payload\n };\n case SET_LAST_ANIMATED_DONE_COUNT:\n return {\n ...state,\n lastAnimatedDoneCount: action.payload\n };\n default:\n return state;\n }\n};\n\nexport default ProgressReducer;\n","import { FETCH_WIDGETS } from '../actionTypes';\n\nconst initialState = [];\n\nconst WidgetsReducer = (state = initialState, action) => {\n switch (action.type) {\n case FETCH_WIDGETS.SUCCESS: {\n return [...action.payload];\n }\n default:\n break;\n }\n return state;\n};\n\nexport default WidgetsReducer;\n","import { safeJSONParse } from '@jotforminc/utils';\nimport * as ACTION_TYPES from '../actionTypes';\n\nconst initialState = {\n products: {},\n cartProducts: {},\n activeProduct: '',\n filteredProducts: {},\n favoriteProducts: {},\n checkoutKey: '',\n isChangedPriceInCart: false\n};\n\nconst Products = (state = initialState, action) => {\n switch (action.type) {\n case ACTION_TYPES.SET_ACTIVE_PRODUCT: {\n const { itemID, productID } = action.payload;\n const activeProduct = itemID ? { itemID, productID } : {};\n return {\n ...state,\n activeProduct\n };\n }\n case ACTION_TYPES.FILTER_PRODUCTS: {\n return {\n ...state,\n filteredProducts: action.payload\n };\n }\n case ACTION_TYPES.SET_CART_PRODUCTS: {\n return {\n ...state,\n cartProducts: action.payload\n };\n }\n case ACTION_TYPES.SET_FAVORITE_PRODUCTS: {\n return {\n ...state,\n favoriteProducts: action.payload\n };\n }\n case ACTION_TYPES.SET_CHECKOUT_KEY: {\n return {\n ...state,\n checkoutKey: action.payload\n };\n }\n case ACTION_TYPES.SET_IS_CHANGED_PRICE_IN_CART: {\n return {\n ...state,\n isChangedPriceInCart: action.payload\n };\n }\n case ACTION_TYPES.FETCH_STORE_PROPERTIES.SUCCESS: {\n const { checkoutKey = '' } = action.payload;\n\n const cartProducts = safeJSONParse(action.payload.cartProducts);\n const favoriteProducts = safeJSONParse(action.payload.favoriteProducts);\n return {\n ...state,\n cartProducts,\n checkoutKey,\n favoriteProducts\n };\n }\n default:\n break;\n }\n return state;\n};\n\nexport default Products;\n","import { FETCH_CDN_CONFIG } from '../actionTypes';\n\nconst initialState = {};\n\nconst CDNConfigReducer = (state = initialState, action) => {\n switch (action.type) {\n case FETCH_CDN_CONFIG.SUCCESS: {\n return action.payload;\n }\n default:\n break;\n }\n return state;\n};\n\nexport default CDNConfigReducer;\n","import {\n FETCH_USER_TEAMS\n} from '../actionTypes';\nimport * as ACTION_TYPES from '../actionTypes';\nimport { isTeamMember } from '../../constants/team';\n\nconst initialState = {\n userTeams: [],\n userTeamPermissions: {},\n isTeamMember\n};\n\nconst teamReducer = (state = initialState, action) => {\n switch (action.type) {\n case FETCH_USER_TEAMS.SUCCESS: {\n return {\n ...state,\n userTeams: action.payload\n };\n }\n case ACTION_TYPES.FETCH_USER_TEAM_PERMISSIONS.SUCCESS:\n return {\n ...state,\n userTeamPermissions: action.payload\n };\n default:\n break;\n }\n return state;\n};\n\nexport default teamReducer;\n","import { Variables } from '@jotforminc/payment-settings-editor';\nimport * as ACTION_TYPES from '../actionTypes';\n\nconst initialState = {\n questions: {},\n paymentModalFlowType: 'ELEMENT_TO_GATEWAY',\n paymentModalFlowStep: 'select-gateway'\n};\n\nconst CheckoutFormReducer = (state = initialState, action) => {\n switch (action.type) {\n case ACTION_TYPES.SET_PAYMENT_MODAL_FLOW_TYPE:\n case ACTION_TYPES.SET_PAYMENT_MODAL_FLOW_SELECTED_GATEWAY:\n case ACTION_TYPES.SET_PAYMENT_MODAL_FLOW_STEP: {\n return {\n ...state,\n ...action.payload\n };\n }\n case ACTION_TYPES.FETCH_CHECKOUT_FORM_QUESTIONS.SUCCESS: {\n return { ...state, questions: action.payload };\n }\n case ACTION_TYPES.UPDATE_CHECKOUT_FORM_QUESTION.SUCCESS: {\n const questionID = action.payload.id;\n return {\n ...state,\n questions: {\n ...state.questions,\n [questionID]: {\n ...state.questions[questionID],\n ...action.payload.prop\n }\n }\n };\n }\n case ACTION_TYPES.CHECKOUT_FORM_SETTINGS_CHANGE.SUCCESS:\n case ACTION_TYPES.CHECKOUT_FORM_GATEWAY_SETTINGS_CHANGE.SUCCESS: {\n return {\n ...state,\n questions: {\n ...state.questions,\n [Variables.CHECKOUT_FORM_QUESTIONS.GATEWAY]: action.payload\n }\n };\n }\n case ACTION_TYPES.ADD_CHECKOUT_FORM_QUESTION.SUCCESS: {\n return {\n ...state,\n questions: {\n ...state.questions,\n [action.payload.qid]: action.payload\n }\n };\n }\n case ACTION_TYPES.REMOVE_CHECKOUT_FORM_QUESTION.REQUEST: {\n const { [action.payload]: _, ...questions } = state.questions;\n return {\n ...state,\n questions\n };\n }\n case ACTION_TYPES.SORT_CHECKOUT_FORM_QUESTION.SUCCESS: {\n return {\n ...state,\n questions: action.payload\n };\n }\n default:\n break;\n }\n return state;\n};\n\nexport default CheckoutFormReducer;\n","import {\n FETCH_NOTIFICATION_STATS,\n FETCH_NOTIFICATON_HISTORY, SEND_PUSH_NOTIFICATION\n} from '../actionTypes';\nimport { getDefaultPermissionRequestTexts } from '../../modules/Builder/components/Settings/constants';\n\nconst initialState = {\n consentMessage: getDefaultPermissionRequestTexts(),\n notificationHistory: [],\n sendNotificationLoading: false,\n stats: {}\n};\n\nconst PushNotificationReducer = (state = initialState, action) => {\n switch (action.type) {\n case FETCH_NOTIFICATON_HISTORY.SUCCESS: {\n return {\n ...state,\n notificationHistory: action.notificationHistory\n };\n }\n case FETCH_NOTIFICATION_STATS.SUCCESS: {\n return {\n ...state,\n stats: action.stats\n };\n }\n case SEND_PUSH_NOTIFICATION.REQUEST: {\n return {\n ...state,\n sendNotificationLoading: true\n };\n }\n case SEND_PUSH_NOTIFICATION.SUCCESS: {\n return {\n ...state,\n sendNotificationLoading: false,\n notificationHistory: action.payload\n };\n }\n case SEND_PUSH_NOTIFICATION.ERROR: {\n return {\n ...state,\n sendNotificationLoading: false\n };\n }\n default:\n break;\n }\n return state;\n};\n\nexport default PushNotificationReducer;\n","import { APP_PREVIEW_STATES, LIVE_PREVIEW_SIZE_MODES } from '../../constants';\nimport { SET_LIVE_PREVIEW_STATUS, SET_LIVE_PREVIEW_SIZE_MODE } from '../actionTypes';\n\nconst initialState = {\n livePreviewSizeMode: LIVE_PREVIEW_SIZE_MODES.FIT_HEIGHT,\n livePreviewStatus: APP_PREVIEW_STATES.IDLE\n};\n\nconst LivePreviewReducer = (state = initialState, action) => {\n switch (action.type) {\n case SET_LIVE_PREVIEW_SIZE_MODE: {\n return {\n ...state,\n livePreviewSizeMode: action.payload\n };\n }\n case SET_LIVE_PREVIEW_STATUS: {\n return {\n ...state,\n livePreviewStatus: action.payload\n };\n }\n default:\n break;\n }\n return state;\n};\n\nexport default LivePreviewReducer;\n","import {\n AI_ADD_ASSISTANT_CHAT_MESSAGE,\n AI_ADD_CHAT_MESSAGE,\n AI_SET_MESSAGES,\n AI_SHOW_ASSISTANT,\n AI_SHOW_ERROR_MESSAGE\n} from '../actionTypes';\n\nconst initialState = {\n messages: [],\n showAssistant: false,\n isWaitingForResponse: false,\n isDirty: false,\n isOpened: false,\n isDefaultOpen: false\n};\n\nconst AssistantReducer = (state = initialState, action) => {\n switch (action.type) {\n case AI_SET_MESSAGES:\n return {\n ...state,\n messages: action.payload,\n isWaitingForResponse: false\n };\n case AI_SHOW_ASSISTANT:\n return {\n ...state,\n showAssistant: action.payload.aiIsShow\n };\n case AI_ADD_CHAT_MESSAGE:\n return {\n ...state,\n messages: [\n ...state.messages,\n {\n message_id: new Date().valueOf(),\n content: action.payload.prompt,\n message_type: 'USER_MESSAGE'\n }\n ],\n isWaitingForResponse: true\n };\n case AI_ADD_ASSISTANT_CHAT_MESSAGE:\n return {\n ...state,\n messages: [...state.messages, {\n content: action.data,\n message_type: 'ASSISTANT',\n message_id: new Date().valueOf()\n }]\n };\n case AI_SHOW_ERROR_MESSAGE:\n return {\n ...state,\n messages: [\n ...state.messages,\n {\n message_id: new Date().valueOf(),\n content: action.payload,\n message_type: 'ERROR'\n }\n ],\n isWaitingForResponse: false\n };\n default:\n return state;\n }\n};\n\nexport default AssistantReducer;\n","/* eslint-disable complexity */\nimport isEmpty from 'lodash/isEmpty';\nimport * as ACTION_TYPES from '../../actionTypes';\nimport { DS_ITEM_LOAD_TYPES, DS_ITEM_OFFSET } from './constants';\n\nconst initialState = {\n items: {},\n resources: {},\n pages: {}\n // items: {\n // [itemID]: {\n // data: {\n\n // },\n // isLoading:\n // },\n // },\n // }\n // }\n // resources: {\n // [resourceID]: {\n // columns: [],\n // }\n // }\n};\nconst DataSourceReducer = (state = initialState, action) => {\n switch (action.type) {\n case ACTION_TYPES.DS_SET_LOADING: {\n const { itemID, isLoading, loadType = DS_ITEM_LOAD_TYPES.DEFAULT } = action.payload;\n return {\n ...state,\n items: {\n ...state.items,\n [itemID]: {\n ...(state.items[itemID] ?? []),\n [loadType]: isLoading\n }\n }\n };\n }\n\n case ACTION_TYPES.DS_FETCH_RESOURCE_ROW.REQUEST: {\n const { itemID } = action.payload;\n return {\n ...state,\n items: {\n ...state.items,\n [itemID]: {\n ...(state.items[itemID] ?? {}),\n isLoading: true\n }\n }\n };\n }\n\n case ACTION_TYPES.DS_LIST_SET_ACTIVE_ROW_ID.REQUEST:\n case ACTION_TYPES.DS_FETCH_RESOURCE_ROW.SUCCESS: {\n const {\n itemID, itemData\n } = action.payload;\n return {\n ...state,\n items: {\n ...state.items,\n [itemID]: {\n ...(state.items[itemID] ?? {}),\n data: itemData,\n isLoading: false\n }\n }\n };\n }\n\n case ACTION_TYPES.DS_FETCH_SOURCE_ITEM_DATA.REQUEST: {\n const { itemID } = action.payload;\n return {\n ...state,\n items: {\n ...state.items,\n [itemID]: {\n ...(state.items[itemID] ?? {}),\n isLoading: true\n }\n }\n };\n }\n\n case ACTION_TYPES.DS_FETCH_SOURCE_ITEM_DATA.ERROR: {\n const { itemID } = action.payload;\n return {\n ...state,\n items: {\n ...state.items,\n [itemID]: {\n ...(state.items[itemID] ?? {}),\n [DS_ITEM_LOAD_TYPES.DEFAULT]: false,\n [DS_ITEM_LOAD_TYPES.INIT]: false\n }\n }\n };\n }\n\n case ACTION_TYPES.DS_FETCH_SOURCE_ITEM_DATA.SUCCESS: {\n const { itemID, itemData } = action.payload;\n const currentItem = state.items[itemID];\n return {\n ...state,\n items: {\n ...state.items,\n [itemID]: {\n ...(currentItem ?? {}),\n data: [...currentItem?.data ?? [], ...itemData],\n [DS_ITEM_LOAD_TYPES.DEFAULT]: false,\n [DS_ITEM_LOAD_TYPES.TABLE_CLONE]: false,\n hasMore: !isEmpty(itemData) && itemData.length === DS_ITEM_OFFSET,\n offset: (currentItem.offset ?? 0) + DS_ITEM_OFFSET\n }\n }\n };\n }\n\n case ACTION_TYPES.DS_LIST_SET_ACTIVE_ROW_ID.SUCCESS: {\n const { id: itemID, rowID } = action.payload;\n return {\n ...state,\n items: {\n ...state.items,\n [itemID]: {\n ...(state.items[itemID] ?? {}),\n isLoading: false,\n activeRowID: rowID\n }\n }\n };\n }\n\n case ACTION_TYPES.DS_FETCH_RESOURCE_COLUMNS.SUCCESS: {\n const {\n resourceID, viewID, columns, title\n } = action.payload;\n\n const key = viewID ? viewID : resourceID;\n\n return {\n ...state,\n resources: {\n ...state.resources,\n [key]: {\n ...(state.resources[resourceID] ?? {}),\n columns,\n title\n }\n }\n };\n }\n\n case ACTION_TYPES.DS_FETCH_DETAIL_PAGE.REQUEST: {\n const { pageID } = action.payload;\n return {\n ...state,\n pages: {\n ...state.pages,\n [pageID]: {\n isLoading: true\n }\n }\n };\n }\n\n case ACTION_TYPES.DS_FETCH_DETAIL_PAGE.SUCCESS: {\n const { pageID, data: arrData, divideByItemID = false } = action.payload;\n\n if (divideByItemID) {\n const newItems = arrData.reduce((prev, itemData) => ({\n ...prev,\n [itemData.id]: {\n data: itemData,\n isLoading: false\n }\n }), {});\n\n return {\n ...state,\n items: {\n ...state.items,\n ...newItems\n }\n };\n }\n\n const data = arrData.reduce((acc, itemData) => ({ ...acc, [itemData.id]: { ...itemData } }), {});\n\n return {\n ...state,\n pages: {\n ...state.pages,\n [pageID]: {\n data,\n isLoading: false\n }\n }\n };\n }\n\n default: {\n return state;\n }\n }\n};\n\nexport default DataSourceReducer;\n","import { SET_USER_MANAGEMENT_USERS } from '../actionTypes';\n\nconst initialState = {\n users: [],\n sheetID: null,\n sheetViewID: null\n};\n\nconst UserManagementReducer = (state = initialState, action) => {\n switch (action.type) {\n case SET_USER_MANAGEMENT_USERS:\n const { users, sheetID, sheetViewID } = action.payload;\n return {\n ...state,\n users,\n sheetID,\n sheetViewID\n };\n default:\n return state;\n }\n};\n\nexport default UserManagementReducer;\n","export const PERMISSION = {\n DEFAULT: 'default',\n GRANTED: 'granted',\n DENIED: 'denied'\n};\n\nexport const SUBSCRIPTION_ID_KEY = 'push-notification-subscription-id';\n\nexport const DEVICE_REGISTRATION = {\n KEY: 'push-notification-device-registration-status',\n STATUS: {\n DEFAULT: 'default',\n REGISTERED: 'registered',\n UNREGISTERED: 'unregistered'\n }\n};\n","export function base64ToArray(base64String: string): Uint8Array {\n const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n const base64 = (base64String + padding)\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n const rawData = atob(base64);\n const outputArray = new Uint8Array(rawData.length);\n\n for (let i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n}\n","import { RequestLayer, ResponseResult } from '@jotforminc/request-layer';\nimport { PostSubscriptionRequest, ProjectConfig, PushManagerConfig } from '../types';\nimport { WebPushNotificationEvent } from '../service-worker/types';\n\nconst requestLayer = new RequestLayer('/API');\n\nexport default class Api {\n private readonly resourceId: string;\n\n private readonly resourceType: string;\n\n constructor(config: PushManagerConfig) {\n this.resourceType = config.resourceType;\n this.resourceId = config.resourceId;\n }\n\n private basePath() {\n return `web-push/${this.resourceType}/${this.resourceId}`;\n }\n\n getConfig(): Promise> {\n return requestLayer.get(`${this.basePath()}/config`);\n }\n\n postSubscription(subscription: PostSubscriptionRequest): Promise> {\n return requestLayer.post(`${this.basePath()}/subscribe`, subscription);\n }\n\n checkSubscription(subscriptionID: string): Promise> {\n return requestLayer.post(`${this.basePath()}/check-subscription`, { subscriptionID });\n }\n\n updateSubscription(subscription: PushSubscription, subscriptionID: string): Promise> {\n return requestLayer.post(`${this.basePath()}/update-subscription`, { subscription, subscriptionID });\n }\n\n saveEvent(campaignID: string, notificationID: string, event: WebPushNotificationEvent): Promise> {\n return requestLayer.post(`${this.basePath()}/save-event`, { campaignID, notificationID, event });\n }\n}\n","export class ErrorBase extends Error {\n name: T;\n\n message: string;\n\n cause: any;\n\n constructor({ name, message, cause }: { name: T, message: string, cause?: any}) {\n super();\n this.name = name;\n this.message = message;\n this.cause = cause;\n }\n}\n","import { ErrorBase } from './utils/error-base';\n\nexport type SubscriptionErrorName =\n | 'DeviceNotSupported'\n | 'NoVapidKey'\n | 'NoSwRegistration'\n | 'PermissionDenied'\n | 'PermissionDefault'\n\nexport class SubscriptionError extends ErrorBase {}\n","import { StorageHelper } from '@jotforminc/storage-helper';\nimport { ResponseResult } from '@jotforminc/request-layer';\n\nimport { PERMISSION, SUBSCRIPTION_ID_KEY } from './constants';\nimport { ProjectConfig, PushManagerConfig } from './types';\nimport { base64ToArray } from './utils';\nimport Api from './api';\nimport { SubscriptionError } from './SubscriptionError';\n\nexport class PushManager {\n public readonly resourceId: string;\n\n public readonly resourceType: string;\n\n public readonly api: Api;\n\n public subscription: PushSubscription | null;\n\n constructor(config: PushManagerConfig) {\n this.resourceType = config.resourceType;\n this.resourceId = config.resourceId;\n this.subscription = null;\n this.api = new Api(config);\n }\n\n async subscribe(payload?: Record): Promise> {\n if (!PushManager.isSupported()) {\n throw new SubscriptionError({\n name: 'DeviceNotSupported',\n message: 'Device does not support push messaging'\n });\n }\n\n const registration = await window.navigator.serviceWorker.getRegistration();\n\n if (!registration) {\n throw new SubscriptionError({\n name: 'NoSwRegistration',\n message: 'Cannot get service worker registration'\n });\n }\n\n let permission = this.getPermission();\n\n if (permission === PERMISSION.DEFAULT) {\n permission = await Notification.requestPermission();\n }\n\n if (permission === PERMISSION.GRANTED) {\n let vapidPublicKey;\n try {\n const config = await this.api.getConfig() as ProjectConfig;\n vapidPublicKey = config.vapidKey;\n } catch (err) {\n throw new SubscriptionError({\n name: 'NoVapidKey',\n message: 'Can not obtain vapid public key'\n });\n }\n this.subscription = await registration.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: base64ToArray(vapidPublicKey)\n });\n const subscriptionId = await this.api.postSubscription({\n subscription: this.subscription,\n payload\n }) as string;\n this.persistSubscriptionId(subscriptionId);\n return subscriptionId;\n }\n\n if (permission === PERMISSION.DENIED) {\n // TODO: handle permission deny case\n throw new SubscriptionError({\n name: 'PermissionDenied',\n message: 'Permission denied'\n });\n }\n\n throw new SubscriptionError({\n name: 'PermissionDefault',\n message: 'Permission default'\n });\n }\n\n private persistSubscriptionId(subscriptionId: string) {\n const key = this.subscriptionIdKey();\n StorageHelper.setLocalStorageItem({ key, value: subscriptionId });\n }\n\n get subscriptionId(): string {\n const key = this.subscriptionIdKey();\n return StorageHelper.getLocalStorageItem({ key });\n }\n\n private subscriptionIdKey() {\n return `${SUBSCRIPTION_ID_KEY}-${this.resourceType}-${this.resourceId}`;\n }\n\n public getPermission(): NotificationPermission {\n return Notification.permission;\n }\n\n async isSubscribed(): Promise {\n const subscriptionStatus = await this.checkDeviceSubscription();\n if (subscriptionStatus === false) {\n return false;\n }\n if (this.subscription !== null) {\n return true;\n }\n const subscription = await this.getSubscription();\n return !!subscription;\n }\n\n private async checkDeviceSubscription(): Promise> {\n if (this.subscriptionId === null) {\n return false;\n }\n\n // TODO: consider caching the subscription response\n const status = await this.api.checkSubscription(this.subscriptionId);\n return status;\n }\n\n async getSubscription(): Promise {\n if (this.subscription !== null) {\n return this.subscription;\n }\n const registration = await navigator.serviceWorker.getRegistration();\n if (!registration) return null;\n this.subscription = await registration.pushManager.getSubscription();\n return this.subscription;\n }\n\n static isSupported(): boolean {\n return (\n 'PushManager' in window\n && 'serviceWorker' in navigator\n && 'Notification' in window\n && Object.prototype.hasOwnProperty.call(ServiceWorkerRegistration.prototype, 'showNotification')\n && StorageHelper.isSupported\n );\n }\n}\n","import {\n put, take, select\n} from 'redux-saga/effects';\n\nimport {\n ADD_PORTAL_ITEMS,\n ADD_TO_STACK,\n REDO,\n REMOVE_PORTAL_ITEMS,\n UNDO,\n UPDATE_PORTAL,\n UPDATE_ITEM_PROP,\n RESET_STACK,\n UPDATE_ORDER,\n UPDATE_MULTIPLE_ITEM,\n ADD_NEW_PAGE,\n DELETE_PAGE,\n DUPLICATE_ITEM\n} from '../actionTypes';\nimport {\n addPortalItemAction,\n changeOrderAction,\n removePortalItems, trackEventAction,\n updateItemPropAction,\n updatePortalAction,\n updateMultipleItemAction,\n deletePageAction, addNewPageAction\n} from '../actionCreators';\nimport SELECTORS from '../selectors';\nimport { ITEM_ADDITION_ORDER_STRATEGY } from '../../constants';\n\nconst ACTION_DEFINITIONS = {\n 'ADD_PORTAL_ITEMS/REQUEST': 'itemsAdded',\n 'REMOVE_PORTAL_ITEMS/REQUEST': 'itemsRemoved',\n 'UPDATE_PORTAL/UNDOABLE': 'appUpdated',\n 'UPDATE_ITEM_PROP/UNDOABLE': 'itemUpdated',\n 'UPDATE_ORDER/UNDOABLE': 'itemOrdersUpdated',\n 'UPDATE_MULTIPLE_ITEM/UNDOABLE': 'multipleItemsUpdated',\n 'ADD_NEW_PAGE/UNDOABLE': 'newPageAdded',\n 'DELETE_PAGE/UNDOABLE': 'pageDeleted'\n};\n\nfunction generateCommand(requestAction, successAction) {\n const { type: requestType, payload: requestPayload } = requestAction;\n const { type: successType, payload: successPayload, currentData } = successAction;\n let undoAction;\n switch (successType) {\n case ADD_PORTAL_ITEMS.SUCCESS:\n const addedItemIDs = successPayload.map(i => i.id);\n undoAction = removePortalItems(addedItemIDs);\n break;\n case REMOVE_PORTAL_ITEMS.SUCCESS:\n const { itemIDs: removingPortalItems } = requestPayload;\n const location = currentData.length && currentData[0] ? currentData[0].portalOrder : ITEM_ADDITION_ORDER_STRATEGY.TO_END_OF_THE_PAGE;\n // for now first location is enough, if it is not enough collect every undo action seperately\n undoAction = {\n ...addPortalItemAction(removingPortalItems.map(removingItemID => currentData.find(({ id }) => id === removingItemID)),\n location),\n isUndo: true\n };\n break;\n case UPDATE_PORTAL.SUCCESS:\n const ignoreProps = ['appVersion'];\n const undoProps = Object.keys(currentData).filter(prop => !ignoreProps.includes(prop)).reduce((pre, next) => {\n return { ...pre, [next]: currentData[next] };\n }, {});\n undoAction = updatePortalAction(undoProps);\n break;\n case UPDATE_ITEM_PROP.SUCCESS:\n const { itemID } = requestPayload;\n const props = Object.keys(currentData).reduce((pre, next) => {\n return { ...pre, [next]: currentData[next] };\n }, {});\n undoAction = updateItemPropAction({\n itemID,\n prop: {\n ...props\n }\n });\n break;\n case UPDATE_ORDER.SUCCESS:\n undoAction = changeOrderAction({ allItems: currentData });\n break;\n case UPDATE_MULTIPLE_ITEM.SUCCESS:\n undoAction = updateMultipleItemAction(currentData);\n break;\n case ADD_NEW_PAGE.SUCCESS:\n const { pageID: addedID } = successPayload;\n const { deleteItems = false } = requestPayload || {};\n undoAction = deletePageAction(addedID, deleteItems);\n break;\n case DELETE_PAGE.SUCCESS:\n const { pageID, deleteItems: _deleteItems } = requestPayload;\n const pageToAdd = currentData.pages.find(_page => _page.id === pageID);\n const requestData = { pages: pageToAdd, newPageOrder: pageToAdd.pageOrder };\n if (_deleteItems) {\n const deletedItems = currentData.items.filter(item => item.page === pageID);\n requestData.items = deletedItems;\n } else {\n requestData.items = currentData.items;\n }\n undoAction = addNewPageAction(requestData);\n break;\n default:\n throw new Error('Unknown Action: Can not create undo action', successType);\n }\n\n return {\n undoAction: { ...undoAction, dontStack: true },\n redoAction: { type: requestType, payload: requestPayload, dontStack: true }\n };\n}\n\nfunction* addToStack(action) {\n const { requestAction, dontStack = false } = action;\n if (dontStack) {\n return;\n }\n try {\n const command = generateCommand(requestAction, action);\n const hasRedo = yield select(SELECTORS.hasRedoSelector);\n if (hasRedo) {\n yield put({ type: RESET_STACK });\n }\n yield put({ type: ADD_TO_STACK, payload: { command } });\n } catch (e) {\n console.warn('Action couldn\\'t added to undo stack!', e);\n }\n}\n\n// Takes care of the stack\nexport function* watchUndoableActions() {\n const actionsToTrack = [\n REMOVE_PORTAL_ITEMS,\n ADD_PORTAL_ITEMS,\n UPDATE_PORTAL,\n UPDATE_ITEM_PROP,\n UPDATE_ORDER,\n UPDATE_MULTIPLE_ITEM,\n ADD_NEW_PAGE,\n DELETE_PAGE,\n DUPLICATE_ITEM\n ].map(a => a.SUCCESS); // Listen success actions so there wont be any undo for an operation hasn't done yet at any time.. Also we have the genuine ids..\n while (true) {\n const undoable = yield take(props => {\n const { type, requestAction: { dontStack = false } = {} } = props;\n return actionsToTrack.includes(type) && !dontStack;\n });\n yield addToStack(undoable);\n }\n}\n\nfunction* doUndo() {\n const currentHeadPosition = yield select(SELECTORS.getUndoStackHeadSelector);\n const actionToHandleIdx = currentHeadPosition + 1; // prev value\n const { undoAction } = yield select(SELECTORS.getCommandSelector(actionToHandleIdx));\n const { type } = undoAction;\n yield put(trackEventAction({\n action: 'undoAction',\n target: { action: ACTION_DEFINITIONS[type] }\n }));\n yield put(undoAction);\n}\n\nfunction* doRedo() {\n const currentHeadPosition = yield select(SELECTORS.getUndoStackHeadSelector);\n const { redoAction } = yield select(SELECTORS.getCommandSelector(currentHeadPosition));\n const { type } = redoAction;\n yield put(trackEventAction({\n action: 'redoAction',\n target: { action: ACTION_DEFINITIONS[type] }\n }));\n yield put(redoAction);\n}\n\n// Takes care of the head\nexport function* watchUndoRedoActions() {\n while (true) {\n const action = yield take(({ type }) => [UNDO, REDO].includes(type));\n const worker = action.type === UNDO ? doUndo : doRedo;\n yield worker(action);\n }\n}\n","// A/B Test: ctAppNameIconModal\nimport { StorageHelper } from '@jotforminc/storage-helper';\n\nexport const abTestUrlParam = 'ctanim';\nconst key = 'appNameIconModalSeen';\n\nexport const getHasAbTestParam = () => {\n const searchParams = new URLSearchParams(window.location.search);\n return searchParams.has(abTestUrlParam);\n};\n\nconst getSeenList = () => {\n const seenListJSON = StorageHelper.getLocalStorageItem({ key });\n return JSON.parse(seenListJSON) || [];\n};\n\nexport const getIsModalSeen = appID => {\n if (getHasAbTestParam()) return false;\n return getSeenList()?.includes(appID);\n};\n\nexport const setIsModalSeen = appID => {\n const currentList = getSeenList();\n const nextSeenList = currentList.includes(appID) ? currentList : [...currentList, appID];\n const value = JSON.stringify(nextSeenList);\n StorageHelper.setLocalStorageItem({ key, value });\n};\n","import {\n call, put, select, takeEvery\n} from 'redux-saga/effects';\nimport { ABTestManager, ActionManager } from '@jotforminc/abtest-manager';\nimport { StorageHelper } from '@jotforminc/storage-helper';\nimport range from 'lodash/range';\nimport { navigate } from '@reach/router';\nimport SELECTORS from '../selectors';\nimport * as ACTION_TYPES from '../actionTypes';\nimport * as ACTION_CREATORS from '../actionCreators';\nimport {\n APP_MODES, UI_PROPS, ADD_ELELEMT_PULSE_EFFECT_LC_ST_KEY\n} from '../../constants';\nimport { isYes } from '../../utils';\nimport { generateAppURL } from '../../utils/navigation';\nimport { RightPanelModes } from '../../modules/Builder/components/HomePage/constants';\nimport { FEATURE_NAMES } from '../../constants/features';\nimport { isFeatureEnabled } from '../../utils/features/helper';\nimport { MODALS } from '../../constants/modals';\nimport { abTestActionLoggerSingleton, AB_TEST_NAMES } from '../../utils/AbTestActionLoggerSingleton';\nimport { getHasAbTestParam, getIsModalSeen } from '../../modules/Builder/components/Modals/AppNameIconSettingsModal/seenManager';\n\nfunction* closeUIPanelsIfOpen() {\n const isRightPanelOpen = yield select(SELECTORS.isRightPanelOpenSelector);\n const isLeftPanelOpen = yield select(SELECTORS.isLeftPanelOpenSelector);\n if (isRightPanelOpen) {\n yield put(ACTION_CREATORS.toggleRightPanelAction(false));\n }\n if (isLeftPanelOpen) {\n yield put(ACTION_CREATORS.toggleLeftPanelAction(false));\n }\n}\n\nfunction* handleAppLocation() {\n const pathName = yield select(SELECTORS.getAppLocation);\n const appID = yield select(SELECTORS.getAppID);\n\n if (!(pathName.includes('/sentbox'))) { return; } // return if path is no sentbox\n\n const {\n loginable, assigneeProtected, ssoProtected, organizationAccess, requireLogin\n } = yield select(SELECTORS.getAppInfoWithDefaults);\n\n let isAppLoginable = isYes(loginable);\n if (window.JOTFORM_ENV === 'ENTERPRISE') {\n const isAppPrivate = isYes(assigneeProtected) || isYes(ssoProtected) || !!organizationAccess;\n const isAppRequireLogin = isYes(requireLogin);\n isAppLoginable = isAppPrivate || isAppRequireLogin;\n }\n\n // Dont show submissions if app is not Loginable\n if (!isAppLoginable) {\n return navigate(generateAppURL({ appID }));\n }\n}\n\nexport function* watchUIupdates(props) {\n const { type, payload } = props;\n const appMode = yield select(SELECTORS.getAppModeSelector);\n\n if (appMode === APP_MODES.public) {\n switch (type) {\n case ACTION_TYPES.SET_APP_LOCATION:\n yield handleAppLocation();\n return;\n default:\n return;\n }\n }\n\n if (type === ACTION_TYPES.SELECT_PORTAL_ITEM && payload) {\n const pageID = yield select(SELECTORS.getPageIDByItemID(payload));\n yield put(ACTION_CREATORS.updateLastInteractedPageIDAction(pageID || ''));\n } else if (type === ACTION_TYPES.SELECT_PAGES && payload) {\n yield put(ACTION_CREATORS.updateLastInteractedPageIDAction(payload));\n yield put(ACTION_CREATORS.setRightPanelModeAction(RightPanelModes.PAGE_SETTINGS));\n }\n\n const isAppCoverCropperActive = yield select(SELECTORS.getAppCoverCropState);\n const isAppHeaderCropperActive = yield select(SELECTORS.getAppHeaderCropState);\n\n if ((/.*(APP_COVER|APP_HEADER)/.test(type)) && payload) {\n yield closeUIPanelsIfOpen();\n }\n\n if (!isAppCoverCropperActive && !isAppHeaderCropperActive) { return; }\n\n if (/(.*TOGGLE)(.*PANEL)/.test(type) && !payload) { return; }\n\n if (/(.*SET_STAGE_CLICK)/.test(type)) { return; }\n\n if (isAppHeaderCropperActive && !(/.*(APP_HEADER)/.test(type)) && !(/.*(APP_HEADER)/.test(payload))) yield put({ type: ACTION_TYPES.SET_APP_HEADER_CROP_MODE, payload: false });\n if (isAppCoverCropperActive && !(/.*(APP_COVER|APP_HEADER|API_REQUEST)/.test(type))) yield put({ type: ACTION_TYPES.SET_APP_COVER_CROP_MODE, payload: false });\n}\n\nfunction* watchRightPanelActions({ payload: isRightPanelOpen }) {\n const shouldSqueeze = yield select(SELECTORS.shouldSqueezeSelector);\n const isLeftPanelOpen = yield select(SELECTORS.isLeftPanelOpenSelector);\n const isLivePreviewOn = yield select(SELECTORS.getIsLivePreviewOn);\n if (shouldSqueeze && isRightPanelOpen && isLeftPanelOpen) {\n yield put(ACTION_CREATORS.toggleLeftPanelAction(false));\n }\n\n if (isLivePreviewOn) {\n const shouldOpen = shouldSqueeze ? !isRightPanelOpen && !isLeftPanelOpen : !isRightPanelOpen;\n yield put(ACTION_CREATORS.togglePreviewPanelAction(shouldOpen));\n }\n\n const isShoppingApp = yield select(SELECTORS.getIsShoppingApp);\n const activeProductInfo = yield select(SELECTORS.getActiveProduct);\n const hasActiveProduct = !!activeProductInfo?.productID;\n if (isFeatureEnabled(FEATURE_NAMES.ProductList) && isShoppingApp && !isRightPanelOpen && hasActiveProduct) {\n yield put(ACTION_CREATORS.setActiveProduct('', ''));\n }\n}\n\nfunction* watchLeftPanelActions({ payload: isLeftPanelOpen }) {\n const shouldSqueeze = yield select(SELECTORS.shouldSqueezeSelector);\n const isRightPanelOpen = yield select(SELECTORS.isRightPanelOpenSelector);\n const isLivePreviewOn = yield select(SELECTORS.getIsLivePreviewOn);\n if (shouldSqueeze && isRightPanelOpen && isLeftPanelOpen) {\n yield put(ACTION_CREATORS.toggleRightPanelAction(false));\n }\n\n if (isLivePreviewOn && shouldSqueeze) {\n yield put(ACTION_CREATORS.togglePreviewPanelAction(!isRightPanelOpen && !isLeftPanelOpen));\n }\n\n if (isLeftPanelOpen) {\n yield put(ACTION_CREATORS.trackEventAction({ action: 'leftPanelOpened' }));\n }\n}\n\nfunction* watchLivePreviewActions({ payload: isLivePreviewOn }) {\n const shouldSqueeze = yield select(SELECTORS.shouldSqueezeSelector);\n\n if (isLivePreviewOn) {\n yield put(ACTION_CREATORS.toggleRightPanelAction(false));\n if (shouldSqueeze) {\n yield put(ACTION_CREATORS.toggleLeftPanelAction(false));\n }\n }\n}\n\nexport function* watchUIPanelsChanges() {\n yield takeEvery(ACTION_TYPES.TOGGLE_RIGHT_PANEL, watchRightPanelActions);\n yield takeEvery(ACTION_TYPES.TOGGLE_LEFT_PANEL, watchLeftPanelActions);\n yield takeEvery(ACTION_TYPES.TOGGLE_LIVE_PREVIEW, watchLivePreviewActions);\n}\n\nexport function* watchWindowSqueeze({ payload: shouldSqueeze }) {\n const isLeftPanelOpen = yield select(SELECTORS.isLeftPanelOpenSelector);\n const isRightPanelOpen = yield select(SELECTORS.isRightPanelOpenSelector);\n if (shouldSqueeze && isLeftPanelOpen && isRightPanelOpen) {\n yield put(ACTION_CREATORS.toggleLeftPanelAction(false));\n }\n}\n\nexport function* keepClosedUIPanels() {\n // cases left and right panel should be closed\n // TODO: handle ui panels in another way\n yield takeEvery([ACTION_TYPES.APP_PREVIEW_STATUS], closeUIPanelsIfOpen);\n}\n\nexport function* watchMultipleSelection({ payload: { withRange, withMouse } }) {\n const selectedItems = yield select(SELECTORS.getSelectedMultipleItems);\n const appItems = yield select(SELECTORS.getPortalItems);\n const isMobileMultipleSelectMode = yield select(SELECTORS.getMobileMultipleSelectionMode);\n\n const isRightPanelOpen = yield select(SELECTORS.isRightPanelOpenSelector);\n\n const isThereAnySelectedItem = selectedItems.length > 0;\n\n // close right panel when any items are not selected\n if (!isThereAnySelectedItem && isRightPanelOpen) {\n yield put(ACTION_CREATORS.toggleRightPanelAction(false));\n }\n\n if (!isThereAnySelectedItem && isMobileMultipleSelectMode) {\n yield put(ACTION_CREATORS.toggleMultipleSelectionModeAction(false));\n }\n\n if (withRange && selectedItems.length >= 2 && !withMouse) {\n const rangeEnd = selectedItems[selectedItems.length - 1];\n const rangeStart = selectedItems[selectedItems.length - 2];\n\n const rangePortalOrders = appItems.filter(item => [rangeEnd, rangeStart].includes(item?.id)).map(el => el?.portalOrder);\n\n const portalOrderRange = range(Math.min(...rangePortalOrders), Math.max(...rangePortalOrders) + 1);\n\n const willBeSelectedAppItems = appItems.filter(item => portalOrderRange.includes(parseInt(item?.portalOrder, 10))).map(el => el?.id);\n\n //! prevent selection of app header on multiple selection mode\n // eslint-disable-next-line max-len\n yield put(ACTION_CREATORS.selectMultipleItemAction({ selection: Array.from(new Set([...selectedItems, ...willBeSelectedAppItems])), withMouse: true }));\n }\n}\n\nexport function* watchSelectAllItems() {\n const allItems = yield select(SELECTORS.getPortalItems);\n const itemIDs = allItems.map(i => i.id);\n yield put(ACTION_CREATORS.selectMultipleItemAction({ selection: itemIDs, withMouse: true }));\n}\n\n// A/B Test: ctAppNameIconModal\n// note: this a/b test distributed from backend with the name ctAppNameIconModalTwo\nexport function* initAppNameIconModalAbTest() {\n const user = yield select(SELECTORS.getUser);\n const appID = yield select(SELECTORS.getAppID);\n const isBuilder = yield select(SELECTORS.getIsBuilder);\n const isModalAvailable = yield select(SELECTORS.getAppNameIconSettingsModalAvailable);\n const hasUrlParam = getHasAbTestParam();\n const actionManager = new ActionManager({ user, projectName: AB_TEST_NAMES.CT_APP_NAME_ICON_MODAL_TWO });\n\n abTestActionLoggerSingleton[AB_TEST_NAMES.CT_APP_NAME_ICON_MODAL_TWO] = actionManager.registerJotformAction;\n\n const showModal = (isModalAvailable || hasUrlParam) && isBuilder && !getIsModalSeen(appID);\n\n if (showModal) {\n yield put(ACTION_CREATORS.showGenericModalAction({ name: MODALS.APP_NAME_ICON_SETTING_MODAL }));\n }\n}\n\nexport function* initAppElementPanelAbTest() {\n const apps = yield select(SELECTORS.getAllApps);\n const user = yield select(SELECTORS.getUser);\n const firstTimeAppCreation = apps.length === 1;\n\n const abTestManager = new ABTestManager({\n user,\n isTestEnabled: true,\n testName: AB_TEST_NAMES.ELEMENT_PANEL_VISIBILITY,\n controlVariantCode: '17121',\n testVariantCode: '17131',\n urlParam: 'aepdfv',\n customUserChecks: {\n firstTimeAppCreation\n }\n // debugMode: {\n // logTestState: true,\n // forceTestVariant: true\n // }\n });\n\n const isTestVariant = yield call(abTestManager.isTestVariant.bind(abTestManager));\n abTestActionLoggerSingleton[AB_TEST_NAMES.ELEMENT_PANEL_VISIBILITY] = abTestManager.registerABTestAction;\n\n if (isTestVariant) {\n yield put(ACTION_CREATORS.toggleLeftPanelAction(true));\n }\n}\n\nexport function* checkAddElementPulseVisible() {\n const isBuilder = yield select(SELECTORS.getIsBuilder);\n if (!isBuilder) return;\n const pulseStorage = StorageHelper.getLocalStorageItem({ key: ADD_ELELEMT_PULSE_EFFECT_LC_ST_KEY });\n if (!pulseStorage) {\n yield put(ACTION_CREATORS.setUIProp(UI_PROPS.addElementButtonPulseVisible, true));\n }\n}\n","import Styled from 'styled-components';\nimport { mainFont } from '../../styles/global';\n\nconst ScToast = Styled.div`\n display: flex;\n align-items: center;\n line-height: 1.6;\n font-size: 14px;\n cursor: default;\n font-family: ${mainFont};\n padding: 16px;\n\n .icon {\n flex: 0 0 auto;\n margin-right: 20px;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .context {\n flex: 1 1 100%;\n color: #fff;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n\n .message {\n flex: 1 1 100%;\n }\n\n .description {\n flex: 1 1 100%;\n font-size: 12px;\n color: #6F76A7;\n display: block;\n\n @media screen and (max-width: 480px) {\n display: none;\n }\n }\n }\n`;\n\nexport default ScToast;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { string, func, bool } from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { Button } from '@jotforminc/magnet';\nimport { CSSTransition } from 'react-transition-group';\nimport {\n IconCheckCircleFilled, IconXmark, IconInfoCircleFilled, IconExclamationTriangleFilled\n} from '@jotforminc/svg-icons';\nimport ScToast from './ScToast';\n\nconst ICON_MAP = {\n notification: () => ,\n warning: () => ,\n success: () => ,\n error: () => ,\n default: () => \n};\n\n// todo :: get icon type from constant, not string\n\nconst Notification = ({\n message,\n description,\n type,\n buttonText,\n onButtonClick,\n backdrop\n}) => {\n const Icon = ICON_MAP[type] || ICON_MAP.default;\n\n return (\n <>\n { backdrop && ReactDOM.createPortal(\n \n
    \n , document.getElementById('toast-root')\n )}\n \n
    \n
    \n
    {t(message)}
    \n { description && (
    {t(description)}
    ) }\n
    \n { buttonText && (\n \n {t(buttonText)}\n \n )}\n { 1 && (\n \n )}\n
    \n \n );\n};\n\nNotification.propTypes = {\n message: string,\n description: string,\n type: string,\n buttonText: string,\n onButtonClick: func,\n backdrop: bool\n};\n\nNotification.defaultProps = {\n message: '',\n type: 'default',\n buttonText: '',\n description: '',\n onButtonClick: f => f,\n backdrop: false\n};\n\nexport default Notification;\n","import { checkMacOSx } from '../../../utils';\n\nexport const getUndoRedoBindings = () => {\n const isMacOSx = checkMacOSx();\n const metaKey = isMacOSx ? 'command' : 'ctrl';\n return [\n `${metaKey} + z`,\n isMacOSx ? `${metaKey} + shift + z` : `${metaKey} + y`\n ];\n};\n","import React from 'react';\nimport { string } from 'prop-types';\nimport { useDispatch } from 'react-redux';\nimport { t } from '@jotforminc/translation';\n\nimport Notification from './Notification';\nimport { undoAction } from '../../store/actionCreators';\nimport { getUndoRedoBindings } from '../../modules/Builder/constants/undoRedo';\nimport { checkMobileOrTablet } from '../../utils';\n\nconst UndoNotification = ({ message }) => {\n const dispatch = useDispatch();\n const isDesktop = !checkMobileOrTablet();\n\n const onUndoClick = () => dispatch(undoAction());\n const [undoBinding] = getUndoRedoBindings();\n return (\n \n );\n};\n\nUndoNotification.propTypes = {\n message: string.isRequired\n};\n\nexport default UndoNotification;\n","import React from 'react';\nimport { take } from 'redux-saga/effects';\nimport { toast } from 'react-toastify';\nimport Notification from '../../components/Toaster/Notification';\nimport UndoNotification from '../../components/Toaster/UndoNotification';\nimport { TOAST } from '../actionTypes';\n\nconst toastIt = ({ payload, type }) => {\n const { backdrop, options: _options } = payload;\n\n let options = { autoClose: 3e3, ..._options };\n\n if (backdrop) {\n options = {\n autoClose: false,\n closeOnClick: false,\n draggable: false\n };\n }\n\n let NotificationComponent;\n\n switch (type) {\n case TOAST.UNDO_NOTIFICATION:\n NotificationComponent = UndoNotification;\n break;\n default:\n NotificationComponent = Notification;\n break;\n }\n\n toast(, options);\n};\n\nexport function* watchToastActions() {\n while (true) {\n const action = yield take(({ type }) => type.startsWith('@TOAST'));\n toastIt(action);\n }\n}\n","import { put, select, take } from 'redux-saga/effects';\nimport { toast } from 'react-toastify';\nimport { TOGGLE_NETWORK_STATUS } from '../actionTypes';\nimport SELECTORS from '../selectors';\nimport { APP_MODES } from '../../constants';\nimport { toastAction } from '../actionCreators';\n\nfunction* toastIt({ payload: status }) {\n const appMode = yield select(SELECTORS.getAppModeSelector);\n if (appMode !== APP_MODES.builder) return;\n const message = status ? 'You\\'re back online!' : 'Internet connection is lost, you\\'ll be able to continue when you restore the connection.';\n if (status) {\n toast.dismiss();\n }\n yield put(toastAction({\n message,\n type: status ? 'success' : 'warning',\n backdrop: !status\n }));\n}\n\nexport function* watchNetworkStatus() {\n while (true) {\n const action = yield take(TOGGLE_NETWORK_STATUS);\n yield toastIt(action);\n }\n}\n","import { put, select } from 'redux-saga/effects';\nimport { addPortalItemAction, trackEventAction } from '../actionCreators';\nimport SELECTORS from '../selectors';\nimport { ITEM_TYPES } from '../../constants/itemTypes';\nimport { ITEM_ADDITION_ORDER_STRATEGY } from '../../constants';\n\nexport function* watchItemDuplication() {\n const selectedItems = yield select(SELECTORS.getSelectedMultipleItems);\n const selectedItemsProps = (yield select(SELECTORS.getSelectedPortalItemsWithInfo))\n .filter(item => item.type !== ITEM_TYPES.FORM); // Currently, forms can't be duplicated\n\n if (selectedItemsProps.length === 1) {\n const [selectedItem] = selectedItemsProps;\n const {\n portalOrder, id,\n ...rest\n } = selectedItem;\n\n const orderFreeItemProps = { ...rest };\n\n const newPortalOrder = parseInt(portalOrder, 10) + 1;\n\n yield put(addPortalItemAction([orderFreeItemProps], newPortalOrder, true, true));\n } else {\n const duplicatedItems = selectedItemsProps.reduce((prev, item, index) => {\n const { id, portalOrder, ...rest } = item;\n return [\n ...prev,\n { ...rest, portalOrder: parseInt(portalOrder, 10) + index + 1 }\n ];\n }, []);\n\n yield put(addPortalItemAction(duplicatedItems, ITEM_ADDITION_ORDER_STRATEGY.MULTIPLE_ITEM_DUPLICATION, true, true));\n }\n yield put(trackEventAction({ action: 'itemsDuplicated', target: { count: selectedItems.length } }));\n}\n","/* eslint-disable camelcase */\nimport { put, select, call } from 'redux-saga/effects';\nimport { UPDATE_PORTAL } from '../actionTypes';\nimport SELECTORS from '../selectors';\nimport { APP_MODES } from '../../constants';\nimport {\n calculateDoneItemCount, setDoneItemCount, setIsAppDone, setTodoItemCount\n} from '../actionCreators';\n\nimport { restartProgressManually } from '../../modules/api';\nimport { getFormCompletion } from '../../utils';\n\nexport function* watchDoneItemProgress() {\n const appMode = yield select(SELECTORS.getAppModeSelector);\n if (appMode !== APP_MODES.public) return;\n\n const todoItems = yield select(SELECTORS.getTodoItems);\n const { progressManualRestartDate } = yield select(SELECTORS.getPortalInfoSelector);\n const { time_zone: timeZone } = yield select(SELECTORS.getUser);\n const completedTodoItems = todoItems.filter(item => {\n const {\n lastSubmitted,\n completed_showBadge,\n completed_clearBadgeOn,\n completed_clearBadgePeriod,\n required_showBadge\n } = item;\n\n return getFormCompletion({\n lastSubmitted,\n showBadge: completed_showBadge,\n clearBadgeOn: completed_clearBadgeOn,\n clearBadgePeriod: completed_clearBadgePeriod,\n required_showBadge,\n timeZone,\n progressRestartDate: progressManualRestartDate\n });\n });\n yield put(setDoneItemCount(completedTodoItems.length));\n\n if (completedTodoItems.length === todoItems.length) {\n yield put(setIsAppDone(true));\n }\n\n const { isAppDone } = yield select(SELECTORS.getTodoItemsProgress);\n\n if (isAppDone && (completedTodoItems.length !== todoItems.length)) {\n yield put(setIsAppDone(false));\n }\n}\n\nexport function* watchTodoItemProgress() {\n const todoItems = yield select(SELECTORS.getTodoItems);\n yield put(setTodoItemCount(todoItems.length));\n}\n\nexport function* watchRestartProgress() {\n const portalID = yield select(SELECTORS.getPortalIDSelector);\n try {\n const { progressManualRestartDate } = yield call(restartProgressManually, portalID);\n yield put({ type: UPDATE_PORTAL.REQUEST, payload: { progressManualRestartDate } });\n yield put(calculateDoneItemCount());\n } catch (e) {\n console.log('Error on restarting progress: ', e);\n }\n}\n","import { call, put, select } from 'redux-saga/effects';\nimport SELECTORS from '../selectors';\nimport {\n bulkSharePortal, bulkDeleteSharePortal, generateNewResourceShareLink, getShareList\n} from '../../modules/api';\nimport { FETCH_SHARE_LIST, UPDATE_RESOURCE_SHARE_URL } from '../actionTypes';\nimport { trackEventAction } from '../actionCreators';\n\nexport function* watchFetchShareList() {\n const portalID = yield select(SELECTORS.getPortalIDSelector);\n const shareList = yield call(getShareList, portalID);\n yield put({ type: FETCH_SHARE_LIST.SUCCESS, payload: shareList });\n}\n\nexport function* watchSharePortal({ payload: { emails, message } }) {\n const portalID = yield select(SELECTORS.getPortalIDSelector);\n yield call(bulkSharePortal, portalID, emails, message);\n yield put(trackEventAction({ action: 'appShared', target: { count: emails.length } }));\n yield put({ type: FETCH_SHARE_LIST.REQUEST });\n}\n\nexport function* watchShareDeletePortal({ payload: { resourceShareIDList } }) {\n yield call(bulkDeleteSharePortal, resourceShareIDList);\n yield put(trackEventAction({ action: 'appUnshared', target: { count: resourceShareIDList.length } }));\n yield put({ type: FETCH_SHARE_LIST.REQUEST });\n}\n\nexport function* watchResourceShareURLUpdate() {\n const portalID = yield select(SELECTORS.getPortalIDSelector);\n const resourceShareURL = yield call(generateNewResourceShareLink, portalID);\n yield put(trackEventAction({ action: 'resourceShareURLGenerated' }));\n yield put({ type: UPDATE_RESOURCE_SHARE_URL.SUCCESS, payload: resourceShareURL });\n}\n","import {\n take, call, put, select\n} from 'redux-saga/effects';\nimport { APPLY_COLOR_SCHEME_TO_APP, APPLY_COLOR_SCHEME_TO_ITEM } from '../actionTypes';\nimport { updateItemPropAction, updateMultipleItemAction, updatePortalAction } from '../actionCreators';\nimport {\n BUTTON_STYLING_LIST, getAppStylingColors, getColoredPropertiesBySchemeID, getItemStylingColors, ITEM_STYLING_LIST\n} from '../../properties/styling';\nimport SELECTORS from '../selectors';\n\nfunction* applyColorSchemeToApp(action) {\n const { payload } = action;\n const { schemeID } = payload;\n const appColors = getAppStylingColors(schemeID);\n const itemOverridingColors = getItemStylingColors(ITEM_STYLING_LIST, schemeID);\n const buttonOverridingColors = getItemStylingColors(BUTTON_STYLING_LIST, schemeID);\n const allItems = yield select(SELECTORS.getPortalItems);\n const version = yield select(SELECTORS.getAppVersionSelector);\n const { itemsToChange: properties } = getColoredPropertiesBySchemeID(allItems, schemeID, version);\n\n yield put(updatePortalAction({ ...appColors, overridingItemProps: JSON.stringify({ itemColors: itemOverridingColors, buttonColors: buttonOverridingColors }) }));\n if (allItems.length) yield put(updateMultipleItemAction(properties));\n}\n\nfunction* applyColorSchemeToItem(action) {\n const { payload } = action;\n const { schemeID, itemID, colorList } = payload;\n const itemColors = getItemStylingColors(colorList, schemeID);\n yield put(updateItemPropAction({ itemID, prop: { ...itemColors } }));\n}\n\nexport function* watchStylingActions() {\n while (true) {\n const action = yield take([\n APPLY_COLOR_SCHEME_TO_APP,\n APPLY_COLOR_SCHEME_TO_ITEM\n ]);\n const { type } = action;\n switch (type) {\n case APPLY_COLOR_SCHEME_TO_APP:\n yield call(applyColorSchemeToApp, action);\n break;\n case APPLY_COLOR_SCHEME_TO_ITEM:\n yield call(applyColorSchemeToItem, action);\n break;\n default:\n break;\n }\n }\n}\n","import { put, select } from 'redux-saga/effects';\nimport { navigate } from '@reach/router';\nimport SELECTORS from '../selectors';\nimport { toastAction } from '../actionCreators';\nimport { generateAppURL } from '../../utils/navigation';\nimport { isYes } from '../../utils';\n\nconst sessionStorageKey = 'progressBarAvailabiltyNotification';\n\nexport function* watchProgressBarAvailability() {\n const appID = yield select(SELECTORS.getPortalIDSelector);\n const requiredAppItems = yield select(SELECTORS.getTodoItems);\n const { showProgressBar } = yield select(SELECTORS.getAppInfoWithDefaults);\n if (requiredAppItems.length >= 2 && !isYes(showProgressBar)) {\n if (!window.sessionStorage.getItem(sessionStorageKey)) {\n yield put(toastAction({\n message: 'You can now enable Progress Bar on the app',\n buttonText: 'Go to Settings',\n onButtonClick: () => {\n const settingsURL = `${generateAppURL({ forBuilder: true, appID })}/settings`;\n navigate(settingsURL);\n }\n }));\n window.sessionStorage.setItem(sessionStorageKey, true);\n }\n }\n}\n","import {\n all,\n call, put, select\n} from 'redux-saga/effects';\nimport { t } from '@jotforminc/translation';\nimport { arrayMoveImmutable } from 'array-move';\nimport omitBy from 'lodash/omitBy';\nimport isNil from 'lodash/isNil';\n\nimport isEmpty from 'lodash/isEmpty';\nimport {\n ADD_NEW_PAGE, CHANGE_PAGE_ORDER, DELETE_PAGE, UPDATE_PAGE, UPDATE_MULTIPLE_ITEM\n} from '../actionTypes';\nimport SELECTORS from '../selectors';\nimport * as API from '../../modules/api';\nimport {\n selectPageAction, updateLastInteractedPageIDAction, updatePageAction, trackEventAction, updateMultipleItemAction, undoableToastAction, toggleRightPanelAction\n} from '../actionCreators';\nimport { DATA_SOURCE_ITEMS, ITEM_TYPES } from '../../constants/itemTypes';\nimport { isPageHomepage } from '../../modules/PublicApp/utils';\nimport { BUTTON_ROLE_TYPES } from '../../modules/Builder/components/HomePage/RightPanel/ButtonActions/buttonRoleTypes';\nimport { usePageDefaults } from '../../properties';\nimport { FEATURE_NAMES } from '../../constants/features';\nimport { isFeatureEnabled } from '../../utils/features/helper';\nimport { sanitizeSVGIconURLs } from '../utils';\nimport * as ACTION_CREATORS from '../actionCreators';\nimport { APP_PREVIEW_STATES } from '../../constants';\nimport { DELETE_PAGE_TYPES } from '../../modules/Builder/components/HomePage/constants';\n\nexport function* pageActions(action) {\n const { type, payload = {}, dontStack = false } = action;\n const portalID = yield select(SELECTORS.getPortalIDSelector);\n switch (type) {\n case ADD_NEW_PAGE.UNDOABLE:\n const pageDefaults = usePageDefaults();\n const pages = yield select(SELECTORS.getPages);\n const {\n items,\n pages: oldPage = {},\n newPageOrder,\n dontSelect = false,\n name = '',\n pageType,\n detailPageProps = {},\n pageProps\n } = payload;\n\n const { linkedItemID = undefined } = detailPageProps;\n\n // BUGFIX #3828720 :: App should restore the old page settings when user undos the page deletion.\n const oldPageProps = {\n name: oldPage.name, pageIcon: oldPage.pageIcon, showPageIcon: oldPage.showPageIcon, showPageOnNavigation: oldPage.showPageOnNavigation, linkedItemID: oldPage.linkedItemID\n };\n const cleanOldPageProps = omitBy(oldPageProps, isNil); // This line removes the undefined and null fields just in case.\n\n const tempID = Date.now().toString();\n const pageOrder = newPageOrder ? newPageOrder : pages.length + 1;\n\n const page = {\n ...isFeatureEnabled(FEATURE_NAMES.MultipageImps) && pageDefaults,\n linkedItemID,\n ...cleanOldPageProps,\n tempID,\n pageOrder,\n name,\n type: pageType,\n ...pageProps\n };\n\n yield put({ type: ADD_NEW_PAGE.REQUEST, payload: { pages: [{ ...page, pageOrder: pageOrder - 1 }] } });\n\n // actual api request\n const result = yield call(API.addPageToPortal, portalID, page);\n // !! (use a shimmer + prevent consecutive request action on UI (areAPIRequestsCompletedSelector) IF NECESSARY)\n yield put({\n type: ADD_NEW_PAGE.SUCCESS,\n payload: result,\n requestAction: action,\n currentData: { page }\n });\n\n const { pageID } = result;\n\n if (!linkedItemID) {\n yield put(ACTION_CREATORS.updateLastInteractedPageIDAction(pageID));\n }\n\n if (items) { // Restoring page with items\n const restoredItems = items.map(item => {\n const id = item.type === ITEM_TYPES.FORM ? item.id : undefined;\n return {\n ...item, page: pageID, id, portalOrder: undefined\n };\n });\n yield put(ACTION_CREATORS.addPortalItemAction(restoredItems));\n }\n\n yield put(trackEventAction({ action: 'pageAdded', target: { id: pageID, order: pageOrder } }));\n if (!dontSelect) {\n yield put(selectPageAction(pageID));\n }\n\n break;\n case UPDATE_PAGE.UNDOABLE:\n const { pageID: updatedID, prop } = payload;\n\n if (prop?.pageIcon) {\n prop.pageIcon = sanitizeSVGIconURLs(prop.pageIcon);\n }\n\n yield put({\n type: UPDATE_PAGE.REQUEST,\n payload\n });\n const updatedProps = yield call(API.updatePage, portalID, updatedID, prop);\n yield put(trackEventAction({ action: 'pageUpdated', target: { id: updatedID, prop } }));\n yield put({\n type: UPDATE_PAGE.SUCCESS,\n payload: updatedProps\n });\n break;\n case DELETE_PAGE.UNDOABLE:\n const {\n deleteItems = false, pageID: removedPageID, type: removeUseType = ''\n } = payload;\n const currentPortalItems = yield select(SELECTORS.getPortalItems);\n const currentPages = yield select(SELECTORS.getPages);\n\n if (deleteItems && currentPages) {\n const removingItems = currentPortalItems.filter(({ page: itemPageID }) => String(itemPageID) === String(removedPageID));\n const removingListItemIDs = removingItems.reduce((acc, { type: itemType, id }) => {\n if (itemType !== ITEM_TYPES.LIST) {\n return acc;\n }\n return [...acc, id];\n }, []);\n\n if (!isEmpty(removingListItemIDs)) {\n const linkedPages = currentPages.filter(p => removingListItemIDs.includes(p?.linkedItemID));\n yield all(\n linkedPages.map(linkedPage => put({ ...ACTION_CREATORS.deletePageAction(linkedPage.id, true, DELETE_PAGE_TYPES.pageItem), dontStack: true }))\n );\n }\n }\n\n if (removeUseType !== 'RIGHT_PANEL') {\n // Close it's right panel\n yield put(toggleRightPanelAction(false));\n }\n\n yield put({ type: DELETE_PAGE.REQUEST, payload: { pageID: removedPageID } });\n yield put(ACTION_CREATORS.setLivePreviewStatus(APP_PREVIEW_STATES.LOADING));\n const response = yield call(API.removePageFromPortal, portalID, removedPageID, deleteItems);\n const {\n pages: newPages,\n items: newItems\n } = response;\n\n // Clear selected and lastInteractedPages\n yield put(updateLastInteractedPageIDAction(''));\n yield put(selectPageAction());\n\n // Removing page may be a buttonValue, lets update them too..\n const buttonsNavigatingToRemovedPage = currentPortalItems.filter(i => i.type === ITEM_TYPES.BUTTON && i.buttonRole === BUTTON_ROLE_TYPES.NAVIGATION && i.buttonValue === removedPageID);\n const updatingButtons = buttonsNavigatingToRemovedPage.map(b => ({\n id: b.id, buttonValue: ''\n }));\n yield put(updateMultipleItemAction(updatingButtons, { dontStack: true }));\n\n const currentData = {\n pages: currentPages,\n items: currentPortalItems\n };\n\n yield put(trackEventAction({ action: 'pageDeleted', target: { id: removedPageID } }));\n yield put({\n type: DELETE_PAGE.SUCCESS,\n payload: {\n items: newItems,\n pages: newPages\n },\n requestAction: action,\n currentData,\n dontStack\n });\n if (!dontStack) {\n yield put(undoableToastAction(t('Page is deleted.')));\n }\n break;\n default:\n break;\n }\n}\n\nexport function* watchHeadingItemToPageNaming(action) {\n const { payload: { itemID, prop: { title, newPage } } } = action;\n if (!title) return; // we need title to change the page name\n\n const headingItem = yield select(SELECTORS.getPortalItemByIDSelector(itemID));\n const currentTitle = headingItem.title;\n const itemPageID = yield select(SELECTORS.getPageIDByItemID(itemID));\n const items = yield select(SELECTORS.getPortalItems);\n\n // pageID may be the page item was moved or the current itemPage\n const pageID = newPage || itemPageID;\n const isHomePage = !pageID || isPageHomepage(pageID); // check the homepage or not\n\n // get the page items\n const pageItems = isHomePage ? [\n ...items.filter(item => !item.page || isPageHomepage(item.page))\n ] : [...items.filter(item => item.page === pageID)];\n\n // get the Heading items that actionable heading item is located\n const pageHeadingItems = pageItems.filter(item => item.type === ITEM_TYPES.HEADING);\n const moreThanOneHeading = pageHeadingItems.length > 1;\n\n // for the other pages\n const page = yield select(SELECTORS.getPageByID(pageID));\n const pageName = page.name;\n const doesCurrentTitleEqualPageName = currentTitle === pageName;\n const shouldChangePageName = !moreThanOneHeading && (!pageName || doesCurrentTitleEqualPageName);\n if (shouldChangePageName) {\n yield put(updatePageAction({ pageID: pageID, prop: { name: title } }));\n }\n}\n\nexport function* watchPageUpdate(action) {\n const { payload } = action;\n const { oldIndex, newIndex: _newIndex, skipDetailPages = false } = payload;\n const pages = yield select(SELECTORS.getPages);\n const items = yield select(SELECTORS.getPortalItems);\n const dsItems = items.filter(({ type }) => DATA_SOURCE_ITEMS.includes(type));\n\n const portalID = yield select(SELECTORS.getPortalIDSelector);\n\n const dsPages = dsItems.reduce((acc, { id: dsItemID, page }) => {\n const detailPageID = pages.find(({ linkedItemID }) => linkedItemID === dsItemID)?.id;\n if (!detailPageID) {\n return acc;\n }\n\n return { ...acc, [page]: [...acc?.[page] ?? [], detailPageID] };\n }, {});\n\n const newIndex = skipDetailPages\n // eslint-disable-next-line func-names\n ? (function () {\n let indx = _newIndex;\n\n if (indx === oldIndex) {\n return indx;\n }\n\n const shouldIncrement = _newIndex > oldIndex;\n while (indx > -1 && indx < pages.length && Object.values(dsPages).flat()?.includes(pages?.[indx]?.id)) {\n if (shouldIncrement) {\n indx++;\n } else {\n indx--;\n }\n }\n\n return indx;\n }())\n : _newIndex;\n\n const movedPages = arrayMoveImmutable(pages, oldIndex, newIndex).map((item, index) => ({ ...item, pageOrder: `${index}` }));\n const movedPagesWithoutDetailPages = movedPages.filter(({ id }) => !Object.values(dsPages).flat().includes(id));\n\n const pageMap = new Map();\n const movedPagesWithDetailPages = [];\n\n // Created a map for quick access\n pages.forEach(page => {\n pageMap.set(page.id, page);\n });\n\n movedPagesWithoutDetailPages.forEach(page => {\n movedPagesWithDetailPages.push(page);\n\n if (dsPages[page.id]) {\n dsPages[page.id].forEach(childPageID => {\n const childPage = pageMap.get(childPageID);\n\n if (childPage) {\n movedPagesWithDetailPages.push(childPage);\n }\n });\n }\n });\n\n const orderedPages = movedPagesWithDetailPages.map((item, index) => ({ ...item, pageOrder: String(index) }));\n\n yield put({ type: CHANGE_PAGE_ORDER.SUCCESS, payload: orderedPages });\n const { reOrderedPortalItems = {} } = yield call(API.bulkUpdatePages, portalID, orderedPages);\n yield put({ type: UPDATE_MULTIPLE_ITEM.SUCCESS, payload: reOrderedPortalItems });\n}\n","import { call, select } from 'redux-saga/effects';\n\nimport SELECTORS from '../selectors';\nimport { getAsset } from '../../modules/Builder/components/AssetGenerator/utils';\nimport { APP_ICON_KEYS, APP_MODES, IMAGE_TYPE } from '../../constants';\nimport * as API from '../../modules/api';\nimport { sanitizeSVGIconURLs } from '../utils';\n\nexport function* handleInstallableAppIcon(updatedProps = {}) {\n const currentApp = yield select(SELECTORS.getAppInfoWithDefaults);\n const isIconUpdating = APP_ICON_KEYS.some(key => updatedProps[key]);\n let iconProps = { ...updatedProps };\n\n if (isIconUpdating) {\n // current app icon values of the app\n const currentValues = APP_ICON_KEYS.reduce((pre, next) => (currentApp[next] ? { ...pre, [next]: currentApp[next] } : pre), {});\n // merged app icon props\n const finalInstallableProps = Object.keys(currentValues).reduce((prev, next) => {\n const nextValue = updatedProps[next] ? updatedProps[next] : currentValues[next];\n return { ...prev, [next]: nextValue };\n }, {});\n\n const asset = yield call(getAsset, finalInstallableProps);\n\n iconProps = { ...iconProps, asset };\n }\n\n if (updatedProps.appIconURL && updatedProps.appIconType === IMAGE_TYPE.icon) {\n iconProps = { ...iconProps, appIconURL: sanitizeSVGIconURLs(updatedProps.appIconURL) };\n }\n if (updatedProps.logoURL && updatedProps.logoType === IMAGE_TYPE.icon) {\n iconProps = { ...iconProps, logoURL: sanitizeSVGIconURLs(updatedProps.logoURL) };\n }\n\n return yield call(API.updateAppLogo, { appID: currentApp.id, iconProps });\n}\n\nexport function* watchInstallableIconBuilderFlow() {\n const appMode = yield select(SELECTORS.getAppModeSelector);\n if (appMode !== APP_MODES.builder) return;\n\n try {\n const { installableIconURL, appIconURL } = yield select(SELECTORS.getAppIconProperties);\n if (!installableIconURL) {\n yield call(handleInstallableAppIcon, { appIconURL });\n }\n } catch (error) {\n console.error(error);\n }\n}\n","/* eslint-disable max-statements */\nimport sortBy from 'lodash/sortBy';\nimport max from 'lodash/max';\nimport { all, put, select } from 'redux-saga/effects';\nimport { ADD_PORTAL_ITEMS } from '../actionTypes';\nimport SELECTORS from '../selectors';\nimport { ITEM_ADDITION_ORDER_STRATEGY } from '../../constants';\nimport { AVAILABLE_DETAIL_PAGE_ITEMS } from '../../modules/Builder/components/HomePage/RightPanel/dataSourceHelpers';\nimport * as ACTION_CREATORS from '../actionCreators';\n\n// method for calculating item orders for single item adding\nconst calculateItemOrders = (items, addedItemOrder) => {\n let nextOrder = addedItemOrder;\n const newItems = [];\n items.forEach(({ portalOrder, ...props }) => {\n const shouldUpdate = parseInt(portalOrder, 10) >= addedItemOrder;\n if (shouldUpdate) nextOrder++;\n const newOrder = shouldUpdate ? nextOrder.toString() : portalOrder.toString();\n newItems.push({ ...props, ...{ portalOrder: newOrder } });\n });\n return newItems;\n};\n\nconst generateNewItems = ({ order, currentItems, items }) => {\n let newItems;\n if (order === ITEM_ADDITION_ORDER_STRATEGY.TO_END_OF_THE_PAGE) {\n newItems = [...currentItems, ...items];\n } else {\n const rounded = Math.round(order);\n let newItemOrder = rounded;\n newItems = currentItems;\n const orderedNewItems = sortBy(items, p => parseInt(p.portalOrder, 10));\n orderedNewItems.forEach(item => {\n const newOrder = item.portalOrder ? item.portalOrder : newItemOrder.toString();\n newItems = calculateItemOrders(newItems, newOrder);\n newItems.push({ ...item, ...{ portalOrder: newOrder } });\n newItemOrder++;\n });\n newItems = sortBy(newItems, p => parseInt(p.portalOrder, 10));\n }\n return newItems;\n};\n\nexport function* watchPortalOrderInItemAddition(action) {\n const { dontStack = false, isUndo = false } = action;\n const {\n items,\n order: _order,\n withClicking,\n isDuplicate,\n focusItemID\n } = action.payload;\n\n let order = _order;\n const pages = yield select(SELECTORS.getPages);\n const firstPageID = yield select(SELECTORS.getFirstPageID);\n const currentItems = yield select(SELECTORS.getPortalItems);\n const isHomepage = items[0]?.page === firstPageID;\n const currentPageID = items[0]?.page; // todo @ for resat\n const currentPage = pages.find(page => (parseInt(page.id, 10) === parseInt(currentPageID, 10) || parseInt(page.tempID, 10) === parseInt(currentPageID, 10)));\n if (currentPageID && !withClicking && !isHomepage) {\n const { pageOrder: currentPageOrder } = currentPage;\n const previousPages = pages.filter(page => parseInt(page.pageOrder, 10) < parseInt(currentPageOrder, 10));\n const previousPageIDs = previousPages.map(page => page.id);\n const itemsInPreviousPages = currentItems.filter(item => previousPageIDs.includes(item.page));\n if (itemsInPreviousPages.length > 0) {\n const prevPagesItemOrders = itemsInPreviousPages.map(item => parseInt(item.portalOrder, 10));\n const maxOrderBefore = max(prevPagesItemOrders);\n order = maxOrderBefore + _order;\n }\n }\n\n const [filteredItems, unsupportedItems] = items.reduce((prev, item) => {\n if (currentPage.linkedItemID && !AVAILABLE_DETAIL_PAGE_ITEMS.includes(item.type)) {\n return [[...prev[0]], [...prev[1], item]];\n }\n return [[...prev[0], item], [...prev[1]]];\n }, [[], []]);\n\n if (unsupportedItems.length > 0) {\n yield all(unsupportedItems.map(unsupportedItem => {\n console.error('detail page unsupported element addition try: ', unsupportedItem.type);\n return put(ACTION_CREATORS.toastAction({\n message: 'Element is not supported for detail page'\n }));\n }));\n\n yield all(unsupportedItems.map(\n unsupportedItem => put(ACTION_CREATORS.trackEventAction({ action: 'detailPageUnsupportedItemAddition', target: { itemType: unsupportedItem.type, pageID: currentPage.id } }))));\n }\n\n if (order !== ITEM_ADDITION_ORDER_STRATEGY.MULTIPLE_ITEM_DUPLICATION) {\n const newItems = generateNewItems({\n order,\n currentItems,\n items: filteredItems\n });\n yield put({\n type: ADD_PORTAL_ITEMS.REQUEST,\n payload: {\n items: filteredItems,\n order,\n newItems,\n isDuplicate,\n focusItemID\n },\n dontStack,\n isUndo\n });\n } else {\n let newDuplicatedItems = currentItems;\n filteredItems.forEach(item => {\n const { portalOrder, ...itemProps } = item;\n newDuplicatedItems = generateNewItems({\n order: portalOrder,\n items: [itemProps],\n currentItems: newDuplicatedItems\n });\n });\n yield put({ type: ADD_PORTAL_ITEMS.REQUEST, payload: { items, newItems: newDuplicatedItems, isDuplicate }, dontStack });\n }\n}\n","import { arrayMoveImmutable } from 'array-move';\nimport max from 'lodash/max';\nimport { put, select } from 'redux-saga/effects';\nimport { UPDATE_ORDER } from '../actionTypes';\nimport SELECTORS from '../selectors';\n\nexport function* watchItemSorting(action) {\n const {\n oldIndex, newIndex, page = 'homepage', elementID, oldpage, allItems\n } = action.payload;\n\n if (allItems) {\n // resat&irem will handle this, this is temporary\n yield put({\n type: UPDATE_ORDER.UNDOABLE,\n payload: {\n data: allItems\n },\n dontStack: true\n });\n return;\n }\n\n const appItems = yield select(SELECTORS.getPortalItems);\n const pages = yield select(SELECTORS.getPages);\n\n const sortingItem = appItems.find(item => parseInt(item.id, 10) === parseInt(elementID, 10));\n const _oldIndex = parseInt(sortingItem.portalOrder, 10) - 1;\n let _newIndex = newIndex;\n\n const newPage = pages.find(pg => parseInt(pg.id, 10) === parseInt(page, 10));\n\n if (page && page !== 'homepage') {\n const oldPage = pages.find(pg => parseInt(pg.id, 10) === parseInt(sortingItem.page, 10));\n // _oldIndex = parseInt(sortingItem.portalOrder, 10) - 1;\n\n const pageItems = appItems.filter(item => parseInt(item.page, 10) === parseInt(page, 10));\n const sortedPageItems = pageItems.sort((x, y) => parseInt(x.portalOrder, 10) - parseInt(y.portalOrder, 10));\n if (sortedPageItems.length === 0) {\n const newPageOrder = parseInt(newPage.pageOrder, 10);\n const minPagesIDs = pages.filter(pg => parseInt(pg.pageOrder, 10) < newPageOrder).map(pg => parseInt(pg.id, 10));\n const minPagesItems = appItems.filter(item => minPagesIDs.includes(parseInt(item.page, 10)) || !item.page);\n const minPagesItemsPortalOrders = minPagesItems.map(item => parseInt(item.portalOrder, 10));\n const maxPortalOrder = max(minPagesItemsPortalOrders);\n\n _newIndex = maxPortalOrder - 1;\n } else {\n const lastItem = sortedPageItems[newIndex] || sortedPageItems[sortedPageItems.length - 1];\n const actualNewIndex = parseInt(lastItem.portalOrder, 10);\n\n if (sortedPageItems[newIndex] && (!oldPage || (parseInt(newPage.pageOrder, 10) > parseInt(oldPage.pageOrder, 10)))) {\n _newIndex = actualNewIndex - 2;\n } else {\n _newIndex = actualNewIndex - 1;\n }\n }\n }\n\n const ordered = arrayMoveImmutable(appItems, _oldIndex, _newIndex).map((item, index) => ({ ...item, index }));\n const apiObj = ordered.map(({ id, type }, index) => {\n const moveToPage = elementID && parseInt(id, 10) === parseInt(elementID, 10);\n const props = {\n id,\n type,\n portalOrder: `${index + 1}` // 1 based portalOrders\n };\n return moveToPage ? { ...props, page: (page || '') } : props;\n });\n\n const sortedItem = ordered.find(x => x.index === newIndex);\n const { id: sortedItemID } = sortedItem;\n const sortInfo = { sortedItemID, _oldIndex, _newIndex }; // For event tracking\n\n yield put({\n type: UPDATE_ORDER.UNDOABLE,\n payload: {\n data: apiObj, sortInfo, oldIndex, newIndex, page, elementID, oldpage\n }\n });\n}\n","import React, { useCallback, Suspense } from 'react';\nimport PropTypes from 'prop-types';\nimport { getAPIURL } from '@jotforminc/request-layer';\nimport { safeLazy } from '@jotforminc/safe-lazy-import';\n\nconst LoginFlowWithStyles = safeLazy(() => import(/* webpackChunkName: \"LoginFlowWithStyles\" */'../../../../../components/LoginFlowWithStyles'));\n\nconst GuestLoginModal = ({\n user,\n onConfirm,\n onCancel\n}) => {\n const handleUserLogin = useCallback(loggedInUser => {\n onConfirm(loggedInUser);\n }, []);\n\n return (\n }>\n \n \n );\n};\n\nGuestLoginModal.propTypes = {\n user: PropTypes.shape({}),\n onCancel: PropTypes.func,\n onConfirm: PropTypes.func\n};\n\nGuestLoginModal.defaultProps = {\n user: {},\n onCancel: f => f,\n onConfirm: f => f\n};\n\nexport default GuestLoginModal;\n","import { call, put, select } from 'redux-saga/effects';\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport GuestLoginModal from '../../../modules/Builder/components/Modals/GuestLoginModal';\nimport SELECTORS from '../../selectors';\nimport { fetchPortalAction, setUserAction } from '../../actionCreators';\n\nexport const showGuestModal = user => {\n return new Promise((resolve, reject) => {\n const container = document.getElementById('modal-root');\n const root = createRoot(container);\n const handleClose = () => {\n reject();\n root.unmount();\n };\n const handleConfirm = selection => {\n resolve(selection);\n root.unmount();\n };\n\n root.render();\n });\n};\n\nexport function* handleShowGuestLoginModal({\n payload: {\n onCancel = f => f\n }\n}) {\n try {\n const { id: appID } = yield select(SELECTORS.getAppInfoWithDefaults);\n const user = yield select(SELECTORS.getUser);\n const newUser = yield call(showGuestModal, user);\n\n // if new user logs in\n yield put(setUserAction(newUser));\n yield put(fetchPortalAction(appID));\n } catch {\n yield call(onCancel);\n }\n}\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","export const pushDataLayer = ({ event, ...rest }) => {\n const { dataLayer, JOTFORM_ENV } = window || {};\n\n if (JOTFORM_ENV !== 'PRODUCTION' || !event) return false;\n if (!dataLayer || !Array.isArray(dataLayer)) return false;\n\n return dataLayer.push({ event, ...rest }) > 0;\n};\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 baseLayer = new RequestLayer('/', {\n interceptorConfig: {\n teamID: global.teamID,\n customResponseInterceptors: [Interceptors.requestManagerResponseNormalizer]\n }\n});\n","import { isEnterprise } from '@jotforminc/enterprise-utils';\n\nimport { openFormLimitDialog } from '@jotforminc/limit-dialog';\nimport { handleCustomNavigation, pushDataLayer } from '@jotforminc/utils';\n\nimport { layer } from '../../../utils';\n\nconst cloneApp = (id, newAppTitle, withForm, teamID) => {\n const headers = teamID ? { headers: { 'jf-team-id': teamID } } : {};\n return layer.post(`listings/portal/${id}/clone?cloneForms=${withForm ? '1' : '0'}`, {\n appProperties: {\n title: newAppTitle\n }\n }, headers);\n};\n\nexport const handleCloneApp = ({\n id,\n appTitle,\n withForm,\n user: userData,\n portalRoot,\n formCount = 0,\n actionLogger,\n teamID,\n logJotformAction\n}) => {\n if (withForm) {\n const user = userData?.credentials || userData;\n const isFormLimitReached = window.userFormCountLimit;\n\n const currentUsage = user?.usage?.form_count || 0;\n const userLimit = user?.account_type?.limits?.formCount || 5;\n const willFormLimitBeReached = parseInt(formCount, 10) + parseInt(currentUsage, 10) > parseInt(userLimit, 10);\n const showFormLimitDialog = isFormLimitReached || willFormLimitBeReached;\n\n if (showFormLimitDialog && !isEnterprise()) {\n openFormLimitDialog({ user, portalRoot, dispatchedFrom: 'listings-cloneApp' });\n return;\n }\n }\n\n return cloneApp(id, appTitle, withForm, teamID).then(res => {\n const {\n id: newID\n } = res;\n\n if (actionLogger) {\n actionLogger({\n action: `portalCloned${withForm ? 'withForms' : 'withoutForms'}`,\n target: id\n });\n\n // Also track for portal-app\n // Pls don't change the action obj.\n const portalAppsAction = { action: 'appCreated', target: JSON.stringify({ portalID: newID }) };\n actionLogger(portalAppsAction, 'portal-app');\n }\n\n if (logJotformAction) {\n logJotformAction({ action: 'appCreated', target: { portalID: newID, from: 'create_app_from_clone_existing_app' } });\n }\n\n pushDataLayer({ event: 'create_app_clone_existing_app' });\n handleCustomNavigation(`/app/build/${newID}`, '_self');\n });\n};\n","import { t } from '@jotforminc/translation';\n\nexport const CLONE_APP_SETTINGS = {\n WITH_FORMS: 'withForms',\n WITHOUT_FORMS: 'withoutForms'\n};\n\nexport const DEFAULT_CLONE_APP_SETTING = CLONE_APP_SETTINGS.WITH_FORMS;\n\nexport const CLONE_APP_OPTIONS = [\n {\n showWhenSelected: t('Clone app and forms'),\n text: t('Clone app and forms'),\n desc: t('Create a copy of the app and the forms it includes.'),\n value: CLONE_APP_SETTINGS.WITH_FORMS\n }, {\n showWhenSelected: t('Clone app and keep existing forms'),\n text: t('Clone app and keep existing forms'),\n desc: t('Create a copy of the app without cloning your forms.'),\n value: CLONE_APP_SETTINGS.WITHOUT_FORMS\n }\n];\n\nexport const CLONE_MODAL_PROPERTIES = {\n header: {\n text: 'Clone App',\n description: 'Duplicate your app, including all app elements and settings.'\n },\n buttonText: 'Clone App',\n appName: 'apps',\n defaultSetting: DEFAULT_CLONE_APP_SETTING,\n settingsProps: {\n options: CLONE_APP_OPTIONS,\n inputLabel: 'App Name',\n settingLabel: 'App Settings',\n inputPlaceholder: 'Enter an app name'\n }\n};\n","import React from 'react';\nimport {\n string, func, bool, array\n} from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { FormControl, FormLabel, InputText } from '@jotforminc/magnet';\nimport { OptionGroup } from '@jotforminc/option-group';\n\nconst CloneSettings = ({\n title,\n onTitleChange,\n cloneSetting,\n onCloneSettingChange,\n isThereAnyForm,\n options,\n settingLabel,\n inputLabel,\n inputPlaceholder\n}) => {\n return (\n <>\n \n \n {t(inputLabel)}\n \n {\n const { value } = e.target;\n onTitleChange(value);\n }}\n />\n \n {isThereAnyForm && (\n \n {t(settingLabel)}\n \n \n )}\n \n );\n};\n\nCloneSettings.propTypes = {\n title: string,\n onTitleChange: func,\n cloneSetting: string,\n onCloneSettingChange: func,\n isThereAnyForm: bool,\n options: array,\n settingLabel: string,\n inputLabel: string,\n inputPlaceholder: string\n};\n\nCloneSettings.defaultProps = {\n title: '',\n onTitleChange: f => f,\n cloneSetting: '',\n onCloneSettingChange: f => f,\n isThereAnyForm: false,\n options: [],\n settingLabel: '',\n inputLabel: '',\n inputPlaceholder: 'pls enter one...'\n};\n\nexport default CloneSettings;\n","import React, { useState } from 'react';\nimport {\n string, func, bool, shape\n} from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { IconCopyFilled } from '@jotforminc/svg-icons';\nimport {\n Modal, ModalHeader, ModalBody, ModalActions, Button\n} from '@jotforminc/magnet';\n\nimport CloneSettings from './CloneSettings';\nimport './styles/CloneModal.scss';\n\nconst CloneModal = ({\n title,\n appName,\n onClone,\n onClose,\n isThereAnyForm,\n defaultSetting,\n header: {\n text, description\n },\n buttonText,\n settingsProps,\n ...props\n}) => {\n const defaultClonedTitle = t(`Clone of ${title}`);\n const [clonedTitle, setClonedTitle] = useState(defaultClonedTitle);\n const [cloning, setCloning] = useState(false);\n\n const [cloneSetting, setCloneSetting] = useState(defaultSetting);\n\n const handleClone = () => {\n setCloning(true);\n onClone({\n title: clonedTitle,\n cloneSetting\n }).finally(() => setCloning(false));\n };\n\n return (\n \n \n \n \n \n \n \n {t(buttonText)}\n \n \n \n );\n};\n\nCloneModal.propTypes = {\n title: string,\n onClone: func,\n onClose: func,\n defaultSetting: string,\n isThereAnyForm: bool,\n header: shape({ text: string, description: string }),\n buttonText: string,\n appName: string,\n settingsProps: shape({})\n};\n\nCloneModal.defaultProps = {\n title: '',\n onClone: f => f,\n onClose: f => f,\n defaultSetting: '',\n isThereAnyForm: false,\n header: { text: '', description: '' },\n buttonText: string,\n appName: '',\n settingsProps: {}\n};\n\nexport default CloneModal;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { handleCloneApp } from '../../core/handleCloneApp';\nimport { CLONE_APP_SETTINGS, CLONE_MODAL_PROPERTIES } from './constants';\nimport CloneModal from '../../../CloneModal';\nimport withActions from '../../core/jotformActions';\n\nconst CloneAppModal = withActions(CloneModal, 'portal');\n\nconst openCloneAppModal = ({\n id,\n title,\n portalRoot,\n user,\n portalItems,\n teamID\n}) => {\n const formItems = portalItems.filter(({ type, buttonRole, buttonValue }) => (type === 'FORM')\n || (type === 'BUTTON' && buttonRole === 'form' && !!buttonValue));\n const isThereAnyForm = formItems.length > 0;\n\n const onClone = ({ title: changedTitle, cloneSetting, actionLogger }) => {\n return handleCloneApp({\n id,\n appTitle: changedTitle,\n withForm: !isThereAnyForm ? false : cloneSetting === CLONE_APP_SETTINGS.WITH_FORMS,\n portalRoot,\n user,\n formCount: formItems.length,\n actionLogger,\n teamID\n });\n };\n return new Promise((resolve, reject) => {\n const handleClose = () => {\n reject();\n ReactDOM.unmountComponentAtNode(portalRoot);\n };\n ReactDOM.render((\n \n ), portalRoot);\n });\n};\n\nexport default openCloneAppModal;\n","import React, { Component } from 'react';\n\nfunction withActions(WrappedComponent, actionsProjectName, additionalProjects = []) {\n return class extends Component {\n constructor(props) {\n super(props);\n\n this.JotFormActions = null;\n this.additionalActionLoggers = {};\n\n this.setupJotFormActions = this.setupJotFormActions.bind(this);\n this.registerJotFormAction = this.registerJotFormAction.bind(this);\n\n this.setupJotFormActions();\n }\n\n get shouldLogActions() {\n const { disableActionLogger } = this.props; // eslint-disable-line\n return global.location.href.indexOf('.jotform.pro') < 0 && global.location.href.indexOf('.jotform.biz') < 0 && disableActionLogger !== true;\n }\n\n setupJotFormActions() {\n const { JotFormActions } = global;\n if (typeof JotFormActions === 'function') {\n this.JotFormActions = JotFormActions(actionsProjectName);\n\n // Register additional loggers too.\n additionalProjects.forEach(projectName => {\n this.additionalActionLoggers[projectName] = JotFormActions(projectName);\n });\n }\n }\n\n registerJotFormAction({ action, target }, forAdditionalProject = '') {\n const { user: { username: actor = null } } = global;\n if (!this.shouldLogActions) {\n return;\n }\n const mainLogger = this.JotFormActions;\n const additionalLogger = this.additionalActionLoggers[forAdditionalProject];\n if (!!forAdditionalProject && !additionalLogger) {\n console.info('No additional project found, falling back to main');\n }\n const logger = additionalLogger || mainLogger;\n\n if (actor && logger) {\n logger.tick({ actor, action, target });\n }\n }\n\n render() {\n return (\n { this.componentHandle = r; }}\n actionLogger={this.registerJotFormAction}\n />\n );\n }\n };\n}\n\nexport default withActions;\n","import { openCloneAppModal } from '@jotforminc/create-new-wizards';\nimport { call, select } from 'redux-saga/effects';\nimport SELECTORS from '../../selectors';\n\nexport function* handleCloneApp({\n payload: {\n root,\n onCancel = f => f\n }\n}) {\n const appInfo = yield select(SELECTORS.getPortalInfoSelector);\n const user = yield select(SELECTORS.getUser);\n const {\n id, title, items\n } = appInfo;\n\n try {\n yield call(openCloneAppModal, {\n id, title, portalRoot: root, user, portalItems: items\n });\n } catch {\n onCancel();\n }\n}\n","import Styled from 'styled-components';\n\nexport const ScRF = Styled.div`\n display: flex;\n justify-content: space-between;\n`;\n\nexport const ScContainer = Styled.div`\n display: flex;\n align-items: center;\n\n .error {\n color: #dc2626;\n font-size: 14px;\n margin-right: 16px;\n }\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 > svg {\n color: #DC2626;\n display: unset;\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: 24px;\n line-height: 32px;\n color: #141E46;\n font-weight: 700;\n margin-top: 18px;\n }\n\n .subtitle {\n font-size: 15px;\n line-height: 16px;\n color: #252F58;\n font-weight: 500;\n margin-top: 12px;\n }\n\n p {\n font-size: 16px;\n line-height: 24px;\n color: #343C6A;\n }\n\n p, .custom-content { font-weight: 400; margin-bottom: 24px; }\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 string, func, node, bool, elementType, oneOfType\n} from 'prop-types';\nimport { t } from '@jotforminc/translation';\n\nimport { Button } from '@jotforminc/magnet';\nimport { IconExclamationTriangleFilled } from '@jotforminc/svg-icons';\nimport { StyledModal as Modal } from '@jotforminc/styled-modal';\n\nimport { ScRF, ScRB, ScContainer } from './scRevokeAccess';\n\nconst ConfirmationModal = forwardRef(({\n icon,\n title,\n subtitle,\n description,\n backText,\n children,\n onBack,\n showDontShowAgain,\n dontShowAgainText,\n confirmText,\n onConfirm,\n ButtonRenderer,\n confirmButtonColor,\n BackButtonRenderer: PropBackButtonRenderer,\n ConfirmButtonRenderer: PropConfirmButtonRenderer,\n confirmationDisable,\n backDisable,\n errorMessage,\n ...modalProps\n}, ref) => {\n const [dontShowAgain, setDontShowAgain] = useState(false);\n const BackButtonRenderer = PropBackButtonRenderer || ButtonRenderer;\n const ConfirmButtonRenderer = PropConfirmButtonRenderer || ButtonRenderer;\n return (\n \n \n {backText}\n \n \n {errorMessage ?
    {errorMessage}
    : null}\n onConfirm({ dontShowAgain })}\n aria-label={confirmText}\n >\n {confirmText}\n \n
    \n \n )}\n >\n \n
    \n {icon}\n
    {title}
    \n
    {subtitle}
    \n {children && (\n
    \n {children}\n
    \n )}\n {description &&

    {description}

    }\n {showDontShowAgain ? (\n \n ) : null}\n
    \n
    \n \n );\n});\n\nConfirmationModal.propTypes = {\n icon: node,\n title: string,\n subtitle: oneOfType([string, elementType]),\n description: oneOfType([string, elementType]),\n backText: string,\n confirmText: string,\n confirmButtonColor: string,\n showDontShowAgain: bool,\n dontShowAgainText: string,\n children: node,\n ButtonRenderer: elementType,\n BackButtonRenderer: elementType,\n ConfirmButtonRenderer: elementType,\n onBack: func,\n onConfirm: func,\n confirmationDisable: bool,\n backDisable: bool,\n errorMessage: string\n};\n\nConfirmationModal.defaultProps = {\n title: 'Title',\n subtitle: 'Subtitle',\n description: 'Description',\n icon: ,\n backText: t('Back'),\n confirmText: t('Confirm'),\n confirmButtonColor: 'error',\n showDontShowAgain: false,\n dontShowAgainText: t('Don\\'t show this message again'),\n children: null,\n ButtonRenderer: Button,\n BackButtonRenderer: undefined,\n ConfirmButtonRenderer: undefined,\n onBack: f => f,\n onConfirm: f => f,\n confirmationDisable: false,\n backDisable: false,\n errorMessage: ''\n};\n\nexport default ConfirmationModal;\n","import styled from 'styled-components';\n\nexport const ScCircularProgressBar = styled.div`\n display: flex;\n width: 100%;\n justify-content: center;\n margin-bottom: 20px;\n\n .circular-progress-bar {\n width: 80px;\n height: 80px;\n }\n`;\n","import {\n bool, func, node, number, string\n} from 'prop-types';\nimport React, { forwardRef, useEffect, useState } from 'react';\n\nimport { CircularProgressbar, buildStyles } from 'react-circular-progressbar';\nimport ConfirmationModal from '../ConfirmationModal';\n\nimport 'react-circular-progressbar/dist/styles.css';\nimport { ScCircularProgressBar } from './ScCircularProgressBar';\n\nconst StillEditingModal = forwardRef(({\n backText,\n confirmText,\n onReject,\n onResolve,\n title,\n description,\n defaultVisible,\n timeout,\n content,\n onClose\n}, ref) => {\n const [remainingTime, setRemainingTime] = useState(timeout);\n\n const progressValue = remainingTime / 1000;\n\n const maxProgressValue = timeout / 1000; // second\n const icon = (\n \n \n \n );\n\n useEffect(() => {\n const interval = setInterval(() => {\n setRemainingTime(remainingTime - 1000);\n }, 1000);\n\n return () => clearInterval(interval);\n }, [remainingTime]);\n\n useEffect(() => {\n if (remainingTime === 0) {\n onReject();\n }\n }, [remainingTime]);\n\n return (\n \n {content}\n \n );\n});\n\nStillEditingModal.propTypes = {\n backText: string,\n confirmText: string,\n onReject: func,\n onResolve: func,\n title: string,\n description: string,\n defaultVisible: bool,\n timeout: number,\n content: node,\n onClose: func\n};\n\nStillEditingModal.defaultProps = {\n backText: '',\n confirmText: '',\n onReject: f => f,\n onResolve: f => f,\n title: '',\n description: '',\n defaultVisible: true,\n timeout: 30 * 1000, // 30 second,\n content: null,\n onClose: f => f\n};\n\nexport default StillEditingModal;\n","import Styled from 'styled-components';\nimport { ScRB } from '@jotforminc/modals';\n\nexport const ScStillEditingModal = Styled(ScRB)`\n.title {\n margin-bottom: 22px;\n font-size: 22px;\n font-weight: 700;\n}\n\n.custom-content {\n margin-bottom: unset;\n color: #0A1551;\n font-weight: 400;\n\n &-second-line {\n margin-top: 30px;\n }\n}\n`;\n","import React from 'react';\nimport { StillEditingModal } from '@jotforminc/modals';\nimport { call, put } from 'redux-saga/effects';\nimport { t } from '@jotforminc/translation';\nimport { handleCustomNavigation } from '@jotforminc/utils';\nimport { createRoot } from 'react-dom/client';\nimport { ScStillEditingModal } from './ScStillEditingModal';\nimport { updatePortalAction } from '../../../actionCreators';\n\nconst stillEditingModal = () => {\n return new Promise(resolve => {\n const container = document.getElementById('modal-root');\n const root = createRoot(container);\n\n const handleResolve = () => {\n resolve(true);\n root.unmount();\n };\n const handleReject = () => {\n resolve(true);\n handleCustomNavigation('/myapps', '_self');\n root.unmount();\n };\n\n const handleClose = () => {\n resolve(true);\n root.unmount();\n };\n\n root.render((\n \n \n
    \n {t('To continue editing this app, let us know you\\'re still active by clicking the button below.')}\n
    \n
    \n {t('Otherwise, you\\'ll be redirected to the Apps page.')}\n
    \n \n )}\n />\n
    \n ));\n });\n};\n\nexport function* handleStillEditing() {\n const isClosed = yield call(stillEditingModal);\n\n // dummy update for the activity log\n if (isClosed) {\n yield put(updatePortalAction({}));\n }\n}\n","import React, { useCallback, useMemo } from 'react';\nimport { bool, func, number } from 'prop-types';\n\nconst DefaultItemRenderer = ({\n index, covered, onChange, hovered,\n onMouseEnter\n}) => {\n const handleMouseEnter = useCallback(() => onMouseEnter(index), []);\n const shouldColor = useMemo(() => (covered || hovered), [covered, hovered]);\n return (\n onChange(index)}\n style={{ textDecoration: shouldColor ? 'underline' : 'none' }}\n >\n {index}\n \n );\n};\n\nDefaultItemRenderer.propTypes = {\n index: number.isRequired,\n covered: bool,\n hovered: bool,\n onMouseEnter: func,\n onChange: func\n};\n\nDefaultItemRenderer.defaultProps = {\n covered: false,\n hovered: false,\n onMouseEnter: f => f,\n onChange: f => f\n};\n\nexport default DefaultItemRenderer;\n","import React from 'react';\nimport { func, node } from 'prop-types';\n\nconst DefaultContainerRenderer = ({ children, onMouseLeave }) =>
    {children}
    ;\n\nDefaultContainerRenderer.propTypes = {\n children: node.isRequired,\n onMouseLeave: func\n};\n\nDefaultContainerRenderer.defaultProps = {\n onMouseLeave: f => f\n};\n\nexport default DefaultContainerRenderer;\n","import React, { useCallback, useMemo, useState } from 'react';\nimport {\n elementType, func, number, oneOfType, string\n} from 'prop-types';\nimport DefaultItemRenderer from './defaults/DefaultItemRenderer';\nimport DefaultContainerRenderer from './defaults/DefaultContainerRenderer';\n\nconst Rating = ({\n scale,\n value,\n onChange,\n ItemRenderer,\n ContainerRenderer\n}) => {\n const [hoveredIndex, setHoveredIndex] = useState();\n\n const items = useMemo(() => Array.from(new Array(scale), f => f), [scale]); // eslint-disable-line prefer-spread\n\n const valueCoversIndex = useCallback(itemIndex => { // itemIndices are 1 based!\n if (!value) return false;\n\n const numericVal = Number(value);\n return !Number.isNaN(value) && itemIndex <= numericVal;\n }, [value]);\n\n const handleMouseEnter = useCallback(hoveredIdx => setHoveredIndex(hoveredIdx), []);\n const handleMouseLeave = useCallback(() => setHoveredIndex(), []);\n\n return (\n \n {items.map((nothing, index) => {\n const itemIndex = index + 1;\n\n return (\n \n );\n })}\n \n );\n};\n\nRating.propTypes = {\n scale: number.isRequired,\n value: oneOfType([string, number]),\n onChange: func,\n ItemRenderer: elementType,\n ContainerRenderer: elementType\n};\n\nRating.defaultProps = {\n value: '',\n onChange: f => f,\n ItemRenderer: DefaultItemRenderer,\n ContainerRenderer: DefaultContainerRenderer\n};\n\nexport default Rating;\n","import React, {\n useCallback, useMemo, useState\n} from 'react';\nimport { Modal, Rating } from '@jotforminc/uikit';\nimport { t } from '@jotforminc/translation';\nimport {\n Button,\n FormControl,\n FormLabel,\n InputText,\n Textarea,\n Flex\n} from '@jotforminc/magnet';\nimport { func, object, string } from 'prop-types';\nimport { IconStarFilled, IconXmark } from '@jotforminc/svg-icons';\nimport { ScPortalFeedbackModal } from './ScPortalFeedbackModal';\nimport DialogRenderer from './DialogRenderer';\nimport ContentRenderer from './ContentRenderer';\nimport { isGuestUser } from '../../../../../store/utils';\n\nconst PortalFeedbackModal = ({\n onCancel, onSend, user, feedbackInfo\n}) => {\n const [feedbackText, setFeedbackText] = useState('');\n const [stars, setStars] = useState();\n const [feedbackEmail, setFeedbackEmail] = useState(null);\n const [feedbackSent, setFeedbackSent] = useState(false);\n const isGuest = isGuestUser(user);\n const { featureName, formID } = feedbackInfo;\n const handleHideButtonClick = useCallback(() => {\n setFeedbackText('');\n setFeedbackEmail(null);\n setStars();\n setFeedbackSent(false);\n onCancel();\n }, []);\n\n const handleSendFeedback = useCallback(() => {\n onSend({\n stars, feedbackText, feedbackEmail, formID\n });\n setFeedbackSent(true);\n }, [feedbackText, stars, feedbackEmail]);\n\n const handlleTextareaValueChange = value => {\n setFeedbackText(value);\n if (value.length === 0) {\n setFeedbackEmail(null);\n }\n };\n\n const HeaderRenderer = () => {\n return feedbackSent\n ? null\n : (\n
    \n
    \n

    {t('Give Feedback')}

    \n

    {t('Help us provide you with a better experience.')}

    \n
    \n \n
    \n );\n };\n\n // eslint-disable-next-line no-unused-vars\n const FooterRenderer = () => (\n
    \n {\n feedbackSent\n ? \n : (\n <>\n \n {t('Cancel')}\n \n \n {t('Send')}\n \n \n )\n }\n
    \n );\n\n // eslint-disable-next-line react/prop-types\n const ContainerRenderer = ({ children, onMouseLeave }) => {\n return (\n
    {children}
    \n );\n };\n\n const ItemRenderer = ({\n // eslint-disable-next-line react/prop-types\n index, covered, hovered, onChange, onMouseEnter\n }) => {\n const handleMouseEnter = useCallback(() => onMouseEnter(index), [index]);\n return (\n onChange(index)} onMouseEnter={handleMouseEnter}\n >\n {(covered || hovered) ? : }\n
    \n );\n };\n\n const feedbackTextLabel = useMemo(() => {\n switch (true) {\n case stars < 3:\n return \"We're sorry to hear that. What can we do to improve your experience?\";\n case stars > 3:\n return `Great! What did you like most about the ${featureName}?`; // App Builder?\n default:\n return 'What can we do to improve your experience?';\n }\n }, [stars]);\n\n return (\n \n \n
    \n {!feedbackSent\n ? (\n \n \n {t(`How would you rate your experience with ${featureName}?`)}\n setStars(newRating)}\n />\n \n\n \n {t(feedbackTextLabel)}\n handlleTextareaValueChange(e.target.value)}\n />\n \n\n {isGuest && feedbackText.length > 0 && (\n \n {`${t('Email')} (${t('optional')})`}\n setFeedbackEmail(e.target.value)}\n />\n \n )}\n \n )\n : (\n <>\n \n

    {t('Thank You!')}

    \n

    {t('Your feedback has been received!')}

    \n \n )}\n
    \n \n
    \n\n );\n};\n\nPortalFeedbackModal.propTypes = {\n onCancel: func.isRequired,\n onSend: func.isRequired,\n user: object.isRequired,\n feedbackInfo: {\n featureName: string,\n formID: string\n }\n};\n\nexport default PortalFeedbackModal;\n","import { call } from 'redux-saga/effects';\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport PortalFeedbackModal from '../../../modules/Builder/components/Modals/PortalFeedbackModal';\n\nexport const portalFeedbackModal = ({ onSend, user, feedbackInfo }) => {\n return new Promise((resolve, reject) => {\n const container = document.getElementById('modal-root');\n const root = createRoot(container);\n const handleClose = () => {\n reject();\n root.unmount();\n };\n const handleConfirm = selection => {\n resolve(selection);\n root.unmount();\n };\n\n root.render();\n });\n};\n\nexport function* handlePortalFeedbackModal({\n payload: {\n onCancel = f => f,\n onSend = f => f,\n user = {},\n feedbackInfo\n }\n}) {\n try {\n yield call(portalFeedbackModal, { onSend, user, feedbackInfo });\n } catch {\n yield call(onCancel);\n }\n}\n","import { call, put, take } from 'redux-saga/effects';\nimport { MODALS, MODAL_EVENTS } from '../../../constants/modals';\nimport { SHOW_MODAL } from '../../actionTypes';\nimport { handleShowGuestLoginModal } from './guestLoginModal';\nimport { handleCloneApp } from './cloneApp';\nimport { trackEventAction } from '../../actionCreators';\nimport { handleStillEditing } from './StillEditingModal';\nimport { handlePortalFeedbackModal } from './portalFeedbackModal';\n\nexport function* watchModals() {\n while (true) {\n const action = yield take(SHOW_MODAL);\n const { payload } = action;\n const { name, resourceType } = payload;\n switch (name) {\n case MODALS.GUEST_LOGIN_MODAL:\n yield call(handleShowGuestLoginModal, action);\n break;\n case MODALS.CLONE_APP_MODAL:\n yield call(handleCloneApp, action);\n break;\n case MODALS.TEAM_STILL_EDITING:\n yield call(handleStillEditing, action);\n break;\n case MODALS.PORTAL_FEEDBACK_MODAL:\n yield call(handlePortalFeedbackModal, action);\n break;\n default:\n console.log('Unknown modal', name);\n }\n\n if (MODAL_EVENTS[name]) {\n yield put(trackEventAction({ action: `${MODAL_EVENTS[name]}Opened`, ...resourceType ? { target: { resourceType } } : {} }));\n }\n }\n}\n","import {\n call, put, select, take\n} from 'redux-saga/effects';\nimport { StorageHelper } from '@jotforminc/storage-helper';\nimport {\n ADD_NEW_PAGE,\n ADD_PORTAL_ITEMS,\n DELETE_PAGE,\n REMOVE_PORTAL_ITEMS,\n TOGGLE_LEFT_PANEL,\n TOGGLE_RIGHT_PANEL,\n UPDATE_ITEM_PROP,\n UPDATE_MULTIPLE_ITEM,\n UPDATE_ORDER, UPDATE_PAGE,\n UPDATE_PORTAL\n} from '../actionTypes';\nimport SELECTORS from '../selectors';\nimport { isGuestUser } from '../utils';\nimport { APP_MODES } from '../../constants';\nimport { showGenericModalAction } from '../actionCreators';\nimport { MODALS } from '../../constants/modals';\n\nexport const SIGNUP_ACTION_COUNTER_KEY = 'appBuilderSignupActionCount';\nconst SIGNUP_ACTION_LIMIT = 20;\nlet isModalFirstOpened = false;\nlet currentActionCount = 0;\n\nexport function* watchSignupActions() {\n const actionsToTrack = [\n UPDATE_PORTAL.SUCCESS,\n\n ADD_PORTAL_ITEMS.SUCCESS,\n UPDATE_ITEM_PROP.SUCCESS,\n UPDATE_MULTIPLE_ITEM.SUCCESS,\n UPDATE_ORDER.SUCCESS,\n REMOVE_PORTAL_ITEMS.SUCCESS,\n\n ADD_NEW_PAGE.SUCCESS,\n UPDATE_PAGE.SUCCESS,\n DELETE_PAGE.SUCCESS,\n\n TOGGLE_LEFT_PANEL,\n TOGGLE_RIGHT_PANEL\n ];\n\n const appMode = yield select(SELECTORS.getAppModeSelector);\n const isBuilder = appMode === APP_MODES.builder;\n\n const user = yield select(SELECTORS.getUser);\n const isGuest = isGuestUser(user);\n\n while (isBuilder && isGuest) {\n yield take(props => {\n const { type } = props;\n return actionsToTrack.includes(type);\n });\n\n if (!isModalFirstOpened) {\n currentActionCount = yield call(StorageHelper.incrementCounter, { key: SIGNUP_ACTION_COUNTER_KEY });\n }\n\n if (currentActionCount === SIGNUP_ACTION_LIMIT && !isModalFirstOpened) {\n // Show signup modal\n yield put(showGenericModalAction({ name: MODALS.GUEST_LOGIN_MODAL }));\n isModalFirstOpened = true;\n StorageHelper.removeLocalStorageItem({ key: SIGNUP_ACTION_COUNTER_KEY });\n }\n }\n}\n","import { put, select, takeLatest } from 'redux-saga/effects';\nimport * as ACTION_TYPES from '../actionTypes';\nimport * as ACTION_CREATORS from '../actionCreators';\nimport { safeWorker } from '../utils';\nimport { checkMobilePhone } from '../../utils';\nimport { MODALS } from '../../constants/modals';\nimport { DESTINATION_TYPES } from '../../constants/navigation';\nimport { getFormIDByItemID, getProductsOfProductListByID } from '../selectors/productSelectors';\nimport { UI_PROPS } from '../../constants';\n\nfunction* watchProductItemDetails({ payload: { itemID, productProps } }) {\n const formID = yield select(getFormIDByItemID(itemID));\n const products = yield select(getProductsOfProductListByID(formID));\n const { productID, optionsValue, quantity } = productProps;\n let finalQuantity;\n const product = products.find(_product => _product.pid === productID);\n const { options = [] } = product;\n const quantityOptionIndex = options.findIndex(option => option.type === 'quantity');\n if (quantityOptionIndex !== -1) {\n if (optionsValue && optionsValue[quantityOptionIndex]) {\n finalQuantity = optionsValue[quantityOptionIndex];\n } else {\n finalQuantity = quantity;\n }\n }\n yield put(ACTION_CREATORS.addOrUpdateCartAction(formID, productID, { options: optionsValue, ...finalQuantity && { quantity: finalQuantity } }));\n}\n\nfunction* watchOpenProductDetail({ payload: { productID, itemID } }) {\n if (!checkMobilePhone()) {\n yield put(ACTION_CREATORS.showGenericModalAction({ name: MODALS.PRODUCT_ITEM_DETAIL_MODAL, itemID, productID }));\n } else {\n yield put(ACTION_CREATORS.setUIProp(UI_PROPS.activeProductDetail, { itemID, productID }));\n yield put(ACTION_CREATORS.navigateToAction({\n to: DESTINATION_TYPES.SPECIAL_PAGE, pageID: 'product', itemID, productID\n }));\n }\n}\n\nexport default function* () {\n yield takeLatest(ACTION_TYPES.PRODUCT_ITEM_DETAIL.REQUEST, safeWorker(watchProductItemDetails));\n yield takeLatest(ACTION_TYPES.OPEN_PRODUCT_DETAIL, watchOpenProductDetail);\n}\n","import {\n takeEvery, put, select, call, spawn\n} from 'redux-saga/effects';\nimport { t } from '@jotforminc/translation';\nimport { PaymentActions } from '@jotforminc/payment-settings-editor';\nimport * as ACTION_TYPES from '../actionTypes';\nimport SELECTORS from '../selectors';\nimport { safeWorker } from '../utils';\nimport productDetailsAction from './productDetails';\n\nconst PAYMENT_SETTINGS_EDITOR = {\n PRODUCT: '@PRODUCTS/UPDATE_PRODUCT',\n PAYMENT_SETTINGS: '@PRODUCT_LIST/UPDATE_PRODUCT_LIST_SETTINGS'\n};\n\nfunction* watchProductListActions({ payload }) {\n const {\n products = [],\n itemID: targetItemID\n } = payload;\n\n const [selectedItemID] = yield select(SELECTORS.getSelectedPortalItems);\n\n let itemID = targetItemID || selectedItemID;\n if (!itemID) {\n const allProductList = yield select(SELECTORS.getProductListItems);\n const firstProductItemEl = document.querySelector('div[type=\"PRODUCT_LIST\"]');\n\n if (firstProductItemEl) {\n firstProductItemEl.scrollIntoView({ behavior: 'smooth', block: 'center' });\n itemID = allProductList[0]?.id;\n }\n }\n\n const itemProps = yield select(SELECTORS.getItemWithDefaults(itemID));\n const prop = {\n ...itemProps,\n products\n };\n\n yield put({ type: ACTION_TYPES.UPDATE_ITEM_PROP.WITHOUT_DEBOUNCE, payload: { itemID, prop } });\n}\n\nfunction* watchAddProductListItem({ payload }) {\n const { itemID, formID, data = {} } = payload;\n\n const { products: _products = [] } = yield select(SELECTORS.getItemWithDefaults(itemID));\n\n // Please don't spread. Talk to burak@phx\n const getDefaultProductData = () => ({\n name: t('Product Name'),\n description: t('Product Description'),\n images: JSON.stringify(['https://cdn.jotfor.ms/assets/img/payments/sample_image-4.png']),\n options: JSON.stringify([{\n type: 'quantity', properties: '1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n9\\n10', name: 'Quantity', defaultQuantity: '', specialPricing: false, specialPrices: '', expanded: false\n }]),\n price: 10,\n fitImageToCanvas: 'Yes'\n });\n\n const productData = { ...getDefaultProductData(), ...data };\n const product = yield call(PaymentActions.createProduct, formID, productData);\n\n const products = [..._products, product];\n\n yield put({ type: ACTION_TYPES.PRODUCT_LIST_CHANGE, payload: { itemID, products, type: PAYMENT_SETTINGS_EDITOR.PRODUCT } });\n\n yield put({ type: ACTION_TYPES.ADD_PRODUCT_LIST_ITEM.SUCCESS });\n}\n\nfunction* watchUpdateProductListItem({ payload }) {\n const {\n itemID, formID, productIndex, prop, value, productID: _productID\n } = payload;\n\n const { products: _products = [] } = yield select(SELECTORS.getItemWithDefaults(itemID));\n\n const productID = _productID || _products[productIndex].pid;\n\n const products = _products.map(p => {\n return parseInt(p.pid, 10) === parseInt(productID, 10) ? ({ ...p, [prop]: value }) : p;\n });\n\n yield put({ type: ACTION_TYPES.PRODUCT_LIST_CHANGE, payload: { itemID, products } });\n\n yield call(PaymentActions.updateProduct, formID, productID, { [prop]: value });\n\n yield put({ type: ACTION_TYPES.UPDATE_PRODUCT_LIST_ITEM.SUCCESS });\n}\n\nfunction* watchDeleteProductListItem({ payload }) {\n const {\n itemID, formID, productID\n } = payload;\n\n // delete active product\n yield put({ type: ACTION_TYPES.SET_ACTIVE_PRODUCT, payload: {} });\n\n const response = yield call(PaymentActions.removeProduct, formID, productID);\n\n yield put({ type: ACTION_TYPES.PRODUCT_LIST_CHANGE, payload: { itemID, products: response } });\n\n yield put({ type: ACTION_TYPES.UPDATE_PRODUCT_LIST_ITEM.SUCCESS });\n}\n\nexport default function* () {\n yield takeEvery(ACTION_TYPES.PRODUCT_LIST_CHANGE, watchProductListActions);\n yield takeEvery(ACTION_TYPES.ADD_PRODUCT_LIST_ITEM.UNDOABLE, safeWorker(watchAddProductListItem));\n yield takeEvery(ACTION_TYPES.UPDATE_PRODUCT_LIST_ITEM.UNDOABLE, safeWorker(watchUpdateProductListItem));\n yield takeEvery(ACTION_TYPES.DELETE_PRODUCT_LIST_ITEM.UNDOABLE, safeWorker(watchDeleteProductListItem));\n yield spawn(productDetailsAction);\n}\n","import {\n call, take, takeLatest, delay, race, put\n} from 'redux-saga/effects';\nimport { SET_API_REQUESTS_COMPLETED } from '../actionTypes';\nimport { COLLABORATION } from '../../constants';\nimport { showGenericModalAction } from '../actionCreators';\nimport { MODALS } from '../../constants/modals';\n\nfunction* collaborationFlow() {\n yield takeLatest(SET_API_REQUESTS_COMPLETED, function* () {\n yield race({\n task: call(function* () {\n yield delay((COLLABORATION.TIMEOUT_SECOND - COLLABORATION.COUNTDOWN_SECOND) * 1000);\n yield put(showGenericModalAction({ name: MODALS.TEAM_STILL_EDITING }));\n }),\n cancel: take(SET_API_REQUESTS_COMPLETED)\n });\n });\n}\n\nexport default collaborationFlow;\n","import Styled from 'styled-components';\nimport { mainFontColor } from '../../../styles/colors';\nimport ScToast from '../ScToast';\n\nconst ScShoppingNotification = Styled(ScToast)`\n background-color: #fff;\n flex-wrap: wrap;\n\n .title {\n display: flex;\n flex: 0 0 100%;\n font-weight: 700;\n\n .message {\n ${({ color }) => {\n switch (color) {\n case 'green':\n return 'color: #78BB07;';\n case 'red':\n return 'color: #FC0000;';\n case 'pink':\n return 'color: #FF68B0;';\n case 'grey':\n return 'color: #6F76A7;';\n default:\n return 'color: #6F76A7';\n }\n }\n}\n }\n\n .icon {\n flex: 0 0 auto;\n margin-right: 8px;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n }\n\n .product {\n display: flex;\n flex: 0 0 100%;\n color: ${mainFontColor};\n margin-top: 13px;\n\n .simple-product-item {\n display: flex;\n }\n\n .product-image {\n display: flex;\n border: 1px solid #D3DCEF;\n border-radius: 4px;\n flex: 0 0 auto;\n margin-right: 16px;\n\n img {\n width: 90px;\n height: 48px;\n border-radius: 3px;\n }\n }\n\n .product-content {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n align-content: center;\n\n &-name {\n flex: 1 1 100%;\n }\n\n &-amount {\n flex: 1 1 100%;\n text-transform: capitalize;\n }\n }\n\n .info {\n flex: 1 1 100%;\n }\n }\n`;\n\nexport default ScShoppingNotification;\n","import React from 'react';\nimport { shape, string } from 'prop-types';\nimport { navigate } from '@reach/router';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { t } from '@jotforminc/translation';\nimport { IconCheckCircleFilled, IconHeartCircleFilled, IconTrashFilled } from '@jotforminc/svg-icons';\nimport { Button } from '@jotforminc/magnet';\nimport ScShoppingNotification from './ScShoppingNotification';\nimport { SHOPPING_NOTIFICATION_TYPES } from '../../../constants';\nimport { generateAppURL } from '../../../utils/navigation';\nimport SELECTORS from '../../../store/selectors';\nimport SimpleProductItem from '../../../modules/PublicApp/SimpleProductItem';\nimport { navigateToAction } from '../../../store/actionCreators';\nimport { DESTINATION_TYPES } from '../../../constants/navigation';\nimport { useFormattedPrice } from '../../../utils/hooks';\n\nconst {\n ADD_PRODUCT, DELETE_PRODUCT, FAVORITE_PRODUCT, UNFAVORITE_PRODUCT\n} = SHOPPING_NOTIFICATION_TYPES;\n\nconst MAP = {\n [ADD_PRODUCT]: { Icon: () => , message: 'Item added to your cart', color: 'green' },\n [DELETE_PRODUCT]: {\n Icon: () => (\n
    \n \n
    \n ),\n message: 'Item deleted from your cart',\n color: 'red'\n },\n [FAVORITE_PRODUCT]: { Icon: () => , message: 'Item added to your favorites', color: 'pink' },\n [UNFAVORITE_PRODUCT]: { Icon: () => , message: 'Item removed from your favorites', color: 'grey' }\n};\n\n// todo :: get icon type from constant, not string\n\nconst ShoppingNotification = ({ type, product }) => {\n const { Icon, message, color } = MAP[type];\n\n const dispatch = useDispatch();\n const appID = useSelector(SELECTORS.getAppID);\n\n const getFormattedPrice = useFormattedPrice();\n\n const cartUrl = generateAppURL({\n appID,\n pageID: 'cart',\n absolutePath: false\n });\n\n const handleViewCart = () => {\n dispatch(navigateToAction({ to: DESTINATION_TYPES.SPECIAL_PAGE, pageID: 'cart' }));\n };\n\n const handleViewFavorites = () => navigate(cartUrl, { state: { activeTab: 'Fav' } });\n\n const { price = '' } = product || {};\n\n const handleOrderNow = () => {\n dispatch(navigateToAction({ to: DESTINATION_TYPES.SPECIAL_PAGE, pageID: 'checkout' }));\n };\n\n return (\n \n
    \n
    \n
    {t(message)}
    \n
    \n\n {product && (\n <>\n
    \n \n
    \n
    \n {type === FAVORITE_PRODUCT ? (\n \n {t('View My Favorites')}\n \n ) : (\n <>\n \n {t('View My Cart')}\n \n \n \n )}\n
    \n \n )}\n
    \n );\n};\n\nShoppingNotification.propTypes = {\n type: string,\n product: shape({})\n};\n\nShoppingNotification.defaultProps = {\n type: 'default',\n product: null\n};\n\nexport default ShoppingNotification;\n","import React from 'react';\nimport {\n call, put, select, spawn, take, takeEvery\n} from 'redux-saga/effects';\nimport { toast } from 'react-toastify';\nimport ShoppingNotification from '../../components/Toaster/ShoppingNotification/ShoppingNotification';\nimport { APP_TOAST, APP_TOAST_STACK } from '../actionTypes';\nimport SELECTORS from '../selectors';\nimport { checkMobilePhone } from '../../utils';\n\nconst toastIt = ({\n payload, type, currentStack\n}) => new Promise((resolve, reject) => {\n const { backdrop, product = null } = payload;\n\n let options = {\n autoClose: 3e3,\n delay: 150,\n newestOnTop: true\n };\n\n if (backdrop) {\n options = {\n ...options,\n autoClose: false,\n closeOnClick: false,\n draggable: false\n };\n }\n\n // may be different notification type?\n let NotificationComponent;\n\n switch (type) {\n case APP_TOAST.SHOPPING_NOTIFICATION:\n NotificationComponent = ShoppingNotification;\n\n if (product) {\n options = {\n ...options,\n autoClose: 6e3,\n pauseOnHover: true\n };\n }\n break;\n default:\n break;\n }\n\n try {\n const currentActiveStack = currentStack.filter(id => toast.isActive(id));\n const isStackOverFlow = (currentActiveStack.length + 1) >= 2;\n\n if (isStackOverFlow) {\n const willBeUnmountID = currentActiveStack.pop();\n toast.dismiss(willBeUnmountID);\n }\n\n if (isStackOverFlow) {\n setTimeout(() => {\n const toastID = toast(, options);\n resolve(toastID);\n }, 210);\n } else {\n const toastID = toast(, options);\n resolve(toastID);\n }\n } catch (e) {\n reject(e);\n }\n});\n\nfunction* watchToastStackChange({ payload }) {\n const toastID = payload;\n const currentStack = yield select(SELECTORS.getAppToastStack);\n const currentActiveStack = currentStack.filter(id => toast.isActive(id));\n\n const newStack = [toastID, ...currentActiveStack];\n const isStackOverFlow = newStack.length >= 3;\n if (isStackOverFlow) {\n newStack.pop();\n }\n\n yield put({ type: APP_TOAST_STACK.SUCCESS, payload: newStack });\n}\n\nfunction* watchAppToastActions() {\n const isMobile = checkMobilePhone();\n if (!isMobile) {\n while (true) {\n const action = yield take(({ type }) => type.startsWith('@APP_TOAST'));\n const currentStack = yield select(SELECTORS.getAppToastStack);\n const toastID = yield call(toastIt, { ...action, currentStack });\n yield put({ type: APP_TOAST_STACK.REQUEST, payload: toastID });\n }\n }\n}\n\nexport default function* () {\n yield spawn(watchAppToastActions);\n yield takeEvery(APP_TOAST_STACK.REQUEST, watchToastStackChange);\n}\n","import { select, takeEvery, put } from 'redux-saga/effects';\nimport { SEARCH_IN_PRODUCTS } from '../actionTypes';\nimport SELECTORS from '../selectors';\nimport { showGenericModalAction } from '../actionCreators';\nimport { MODALS } from '../../constants/modals';\n\nfunction* watchSearchInputClicked() {\n const productLists = yield select(SELECTORS.getProductListItems);\n const areMultiProductListsExist = productLists.length > 0;\n\n if (areMultiProductListsExist) {\n yield put(showGenericModalAction({ name: MODALS.SEARCH_IN_PRODUCTS_MODAL }));\n }\n}\n\nexport default function* () {\n yield takeEvery(SEARCH_IN_PRODUCTS, watchSearchInputClicked);\n}\n","import KeyboardJS from 'keyboardjs';\nimport { us } from 'keyboardjs/locales/us';\n\nconst Keyboard = new KeyboardJS.Keyboard();\n\nKeyboard.setLocale('us', us);\n\nexport default Keyboard;\n","import {\n takeEvery, select, put, call\n} from 'redux-saga/effects';\nimport { eventChannel } from 'redux-saga';\nimport isEmpty from 'lodash/isEmpty';\nimport SELECTORS from './selectors';\nimport * as ACTION_CREATORS from './actionCreators';\nimport keyboard from '../keyboard';\nimport { checkMacOSx, getTeamID } from '../utils';\nimport { getUndoRedoBindings } from '../modules/Builder/constants/undoRedo';\nimport { teamLog } from '../modules/api';\n\nconst keyboardEventChannel = (keys, preventDefault = false) => eventChannel(emitter => {\n const handlePress = e => {\n if (\n !(document.activeElement instanceof global.HTMLInputElement)\n && !(document.activeElement instanceof global.HTMLTextAreaElement)\n && !document.activeElement?.hasAttribute('contentEditable')\n ) {\n if (preventDefault) e.preventDefault();\n emitter(e);\n }\n };\n keyboard.bind(keys, handlePress);\n return () => {\n keyboard.unbind(keys, handlePress);\n };\n});\n\nconst globalEventChannel = event => eventChannel(emitter => {\n global.addEventListener(event, emitter);\n return () => {\n global.removeEventListener(event, emitter);\n };\n});\n\nfunction* watchDeletePressed() {\n const isUIBlocked = yield select(SELECTORS.isUIBlockedSelector);\n const isBuildTab = yield select(SELECTORS.getIsBuildTab);\n const selectedPortalItem = yield select(SELECTORS.getSelectedPortalItem);\n const activeModal = yield select(SELECTORS.getActiveModal);\n const isModalOpen = !!activeModal && activeModal.name !== '';\n\n if (selectedPortalItem && !isUIBlocked && isBuildTab && !isModalOpen) {\n yield put(ACTION_CREATORS.removeSelectedItemsAction());\n }\n}\n\nfunction* watchSelectAllPressed() {\n const isUIBlocked = yield select(SELECTORS.isUIBlockedSelector);\n const isBuildTab = yield select(SELECTORS.getIsBuildTab);\n if (!isUIBlocked && isBuildTab) {\n yield put(ACTION_CREATORS.trackEventAction({ action: 'selectAllViaKeyboard' }));\n yield put(ACTION_CREATORS.selectAllItemsAction());\n }\n}\n\nfunction* watchUndoPressed() {\n const isUIBlocked = yield select(SELECTORS.isUIBlockedSelector);\n const hasUndo = yield select(SELECTORS.hasUndoSelector);\n if (!isUIBlocked && hasUndo) {\n yield put(ACTION_CREATORS.trackEventAction({ action: 'undoRequestViaKeyboard' }));\n yield put(ACTION_CREATORS.undoAction());\n }\n}\n\nfunction* watchRedoPressed() {\n const isUIBlocked = yield select(SELECTORS.isUIBlockedSelector);\n const hasRedo = yield select(SELECTORS.hasRedoSelector);\n if (!isUIBlocked && hasRedo) {\n yield put(ACTION_CREATORS.trackEventAction({ action: 'redoRequestViaKeyboard' }));\n yield put(ACTION_CREATORS.redoAction());\n }\n}\n\nfunction* watchOnStageClick(e) {\n const excludedPaymentSelectors = `#headlessui-portal-root,\n #detach-connection-dialog, .magnet-colorpicker, #gateway-connection-modal-container,\n #connection-switch-dialog\n `;\n const excludedSelectors = `.select-formCont li, [data-uikit-modal-container=true], .rightPanelContainer, .toolbox,\n .appHeader, .appLogo-cont, .addButton, .mce-container, .mce-reset, .mce-ico, .mce-window-head, .leftPanelContainer,\n .subheaderActions, .multipleSelectionSubHeader, .itemListWrapper, .pageInlineEdit, .dashedLineButton, .forAddIcon, .payment-modal-container, .portal-new-dropdown-wrapper, \n #navigation-settings-button, .previewToggleWrapper, label.togglePreview, #CookieBannerNotice, ${excludedPaymentSelectors}`;\n const excludedElements = excludedSelectors ? global.document.querySelectorAll(excludedSelectors) : [];\n const isExcludedElement = [...excludedElements].find(el => el.contains(e.target));\n if (!isExcludedElement) {\n yield put(ACTION_CREATORS.onStageClick());\n }\n}\n\nfunction* watchOnTeamBeforeUnload() {\n const appID = yield select(SELECTORS.getAppID);\n const editingResourceInfo = yield select(SELECTORS.getEditingResourceInfo);\n if (isEmpty(editingResourceInfo)) yield call(teamLog, appID, 'editingReleased');\n}\n\nfunction* watchArrowUpDownPressed(e) {\n const activeElement = document?.activeElement;\n if (activeElement?.className?.includes('builderItem')) {\n switch (e.keyCode) {\n case 40:\n activeElement?.nextSibling?.focus();\n break;\n case 38:\n activeElement?.previousSibling?.focus();\n break;\n default:\n break;\n }\n }\n yield;\n}\n\nexport default function* eventsFlow() {\n const isBuilder = yield select(SELECTORS.getIsBuilder);\n if (isBuilder) {\n const [undoBinding, redoBinding] = getUndoRedoBindings();\n yield takeEvery(keyboardEventChannel(['delete', 'del']), watchDeletePressed);\n yield takeEvery(keyboardEventChannel([`${checkMacOSx() ? 'command' : 'ctrl'} + a`], true), watchSelectAllPressed);\n yield takeEvery(keyboardEventChannel([undoBinding], true), watchUndoPressed);\n yield takeEvery(keyboardEventChannel([redoBinding], true), watchRedoPressed);\n yield takeEvery(keyboardEventChannel(['up', 'down']), watchArrowUpDownPressed);\n yield takeEvery(globalEventChannel('mousedown'), watchOnStageClick);\n if (getTeamID()) {\n yield takeEvery(globalEventChannel('beforeunload'), watchOnTeamBeforeUnload);\n }\n }\n}\n","import TrackingManager from '@jotforminc/tracking';\nimport { select, take } from 'redux-saga/effects';\nimport { StorageHelper } from '@jotforminc/storage-helper';\nimport * as ACTION_TYPES from '../actionTypes';\nimport SELECTORS from '../selectors';\nimport { MODALS } from '../../constants/modals';\nimport { isYes } from '../../utils';\n\nconst activateFullStory = (user, customProps = {}) => {\n const {\n account_type: accountType,\n email,\n identifier,\n isAppFirstUser,\n username,\n name\n } = user;\n\n if (\n TrackingManager.FSisInitialized()\n || ['ADMIN', 'SUPPORT', 'INTERN', 'HELPDESK'].includes(accountType?.name)\n ) {\n return;\n }\n\n const userParams = {\n displayName: name,\n accountType: accountType?.name,\n email,\n ...customProps,\n isAppFirstUser,\n appBuilder_bool: true\n };\n\n TrackingManager.enableFS();\n TrackingManager.identify(identifier || username, userParams);\n};\n\nexport function* activateFullStoryOnTheFly() {\n const isBuilder = yield select(SELECTORS.getIsBuilder);\n\n while (isBuilder) {\n const action = yield take([\n ACTION_TYPES.ADD_PORTAL_ITEMS.SUCCESS,\n ACTION_TYPES.FETCH_PORTAL.SUCCESS,\n ACTION_TYPES.CREATE_NEW_PORTAL.SUCCESS,\n ACTION_TYPES.CREATE_PORTAL_WITH_DONATION,\n ACTION_TYPES.CREATE_PORTAL_WITH_STORE,\n ACTION_TYPES.SHOW_MODAL,\n ACTION_TYPES.ENABLE_PUSH_NOTIFICATION,\n ACTION_TYPES.NAVIGATE_TO,\n ACTION_TYPES.SEND_FEEDBACK.REQUEST,\n ACTION_TYPES.AI_SHOW_ASSISTANT,\n ACTION_TYPES.AI_ADD_CHAT_MESSAGE\n ]);\n\n const user = yield select(SELECTORS.getUser);\n const { payload: items = [] } = action;\n\n const isShoppingApp = yield select(SELECTORS.getIsShoppingApp);\n const isDonationApp = yield select(SELECTORS.getIsDonationApp);\n const { pushNotification } = yield select(SELECTORS.getAppInfoWithDefaults);\n\n const customProps = {\n isStoreApp: isShoppingApp,\n isDonationApp: isDonationApp\n };\n\n const startTracking = props => activateFullStory(user, props);\n const enableTracking = isShoppingApp || isDonationApp || user.isAppFirstUser;\n\n const appEventsToBeSent = [];\n\n const appCreationSourceMap = {\n [ACTION_TYPES.CREATE_NEW_PORTAL.SUCCESS]: 'from-scratch',\n [ACTION_TYPES.CREATE_PORTAL_WITH_DONATION]: 'with-donation',\n [ACTION_TYPES.CREATE_PORTAL_WITH_STORE]: 'with-store',\n [ACTION_TYPES.FETCH_PORTAL.SUCCESS]: 'unknown'\n };\n\n let appCreationSource = appCreationSourceMap[action.type];\n\n switch (appCreationSource) {\n case 'from-scratch':\n if (action.payload.formIDs) {\n appCreationSource = 'with-form';\n break;\n }\n if (action.payload.widgetDefaults) {\n appCreationSource = 'with-element';\n break;\n }\n break;\n case 'unknown':\n appCreationSource = StorageHelper.getSessionStorageItem({\n key: 'app-creation-source'\n }) || undefined;\n\n StorageHelper.removeSessionStorageItem({ key: 'app-creation-source' });\n break;\n default:\n break;\n }\n\n if (appCreationSource) {\n appEventsToBeSent.push(() => TrackingManager.event('app-creation', { source_str: appCreationSource }));\n }\n\n const isExitIntentSurvey = items.name === MODALS.EXIT_INTENT_SURVEY_MODAL;\n\n if (isExitIntentSurvey) {\n appEventsToBeSent.push(() => TrackingManager.event('exit-intent-survey'));\n }\n\n if (isYes(items.enabledPushNotification)) {\n appEventsToBeSent.push(() => TrackingManager.event('push-notification-enabled'));\n }\n\n if (items.subTab === 'pushNotification' && isYes(pushNotification)) {\n appEventsToBeSent.push(() => TrackingManager.event('clicked-push-notification-with-enabled'));\n }\n\n if (action.type === ACTION_TYPES.SEND_FEEDBACK.REQUEST) {\n appEventsToBeSent.push(() => TrackingManager.event('sent-feedback', { stars: items.stars }));\n }\n\n if (isYes(items.aiIsShow)) {\n appEventsToBeSent.push(() => TrackingManager.event('app-builder-copilot', { from: 'app-builder', action: 'click-copilot-button' }));\n }\n\n if (isYes(items.prompt)) {\n appEventsToBeSent.push(() => TrackingManager.event('app-builder-copilot', { from: 'app-builder', action: 'send-prompt-message' }));\n }\n\n if (!enableTracking && !appEventsToBeSent.length) {\n return;\n }\n\n startTracking(customProps);\n appEventsToBeSent.forEach(event => event());\n }\n}\n","import {\n call, put, select, takeEvery\n} from 'redux-saga/effects';\nimport { getCorrectedQuantity } from '../../utils/paymentUtils';\nimport * as ACTION_TYPES from '../actionTypes';\nimport SELECTORS from '../selectors';\nimport * as ACTION_CREATORS from '../actionCreators';\nimport { SHOPPING_NOTIFICATION_TYPES } from '../../constants';\nimport { DESTINATION_TYPES } from '../../constants/navigation';\nimport * as API from '../../modules/api';\n\nfunction* watchAddOrUpdateCart({ payload: { formID, productID, data } }) {\n const { options: payloadOptions, quantity: payloadQuantity } = data;\n const defaultProduct = yield select(SELECTORS.getProduct(formID, productID));\n const isFastCheckoutActive = yield select(SELECTORS.getIsFastCheckoutActive);\n const currentCartProducts = yield select(SELECTORS.getCart);\n const appID = yield select(SELECTORS.getPortalIDSelector);\n let productListCartProducts = currentCartProducts[formID] || [];\n const correctedQuantity = getCorrectedQuantity(payloadQuantity, defaultProduct);\n const productInCart = productListCartProducts.find(_product => _product.pid === productID);\n const itemID = yield select(SELECTORS.getItemIDByFormID(formID));\n\n const newProduct = productInCart || defaultProduct;\n const { options = [] } = newProduct;\n const quantityOptionIndex = options.findIndex(option => option.type === 'quantity');\n const hasQuantityOption = quantityOptionIndex !== -1;\n\n if (payloadOptions) { // It includes quantity option as well when we have one\n newProduct.options = newProduct.options.map((option, index) => (\n { ...option, selected: payloadOptions[index] }\n ));\n } else if (hasQuantityOption) {\n newProduct.options[quantityOptionIndex].selected = correctedQuantity;\n }\n newProduct.quantity = correctedQuantity;\n\n if (productInCart) {\n if (correctedQuantity === 0) { // Item deletion\n productListCartProducts = productListCartProducts.filter(product => product.pid !== productID);\n } else {\n productListCartProducts = productListCartProducts.map(product => (\n product.pid === productID ? newProduct : product\n ));\n }\n } else { // First addition\n if (!isFastCheckoutActive) {\n yield put(ACTION_CREATORS.shoppingToastAction({\n type: SHOPPING_NOTIFICATION_TYPES.ADD_PRODUCT,\n product: newProduct,\n itemID\n }));\n }\n productListCartProducts.push(newProduct);\n }\n const allCartProducts = !isFastCheckoutActive\n ? { ...currentCartProducts, [formID]: productListCartProducts }\n // Add selected item only, it will be cleared when another product is selected.\n : { [formID]: [newProduct] };\n\n if (correctedQuantity === 0) {\n yield put(ACTION_CREATORS.shoppingToastAction({\n type: SHOPPING_NOTIFICATION_TYPES.DELETE_PRODUCT\n }));\n }\n\n const result = yield call(API.updateCart, appID, JSON.stringify(allCartProducts));\n const { checkoutKey } = result;\n\n yield put(ACTION_CREATORS.setCartProductsAction(allCartProducts));\n\n if (checkoutKey) {\n yield put(ACTION_CREATORS.setCheckoutKeyAction(checkoutKey));\n }\n\n if (isFastCheckoutActive) {\n yield put(ACTION_CREATORS.navigateToAction({ to: DESTINATION_TYPES.SPECIAL_PAGE, pageID: 'checkout' }));\n }\n}\n\nfunction* watchFavoriteProduct({ payload: { itemID, productID, noNotification = false } }) {\n const allFavoriteProducts = yield select(SELECTORS.getAllFavoriteProducts);\n const portalID = yield select(SELECTORS.getPortalIDSelector);\n const product = yield select(SELECTORS.getFormProductListProduct(itemID, productID));\n\n const currentItemFavoriteProducts = allFavoriteProducts[itemID] || [];\n\n const isProductInFavorites = currentItemFavoriteProducts.find(id => id === productID);\n\n const notificationType = isProductInFavorites ? SHOPPING_NOTIFICATION_TYPES.UNFAVORITE_PRODUCT : SHOPPING_NOTIFICATION_TYPES.FAVORITE_PRODUCT;\n\n // Toggle favorite products\n const itemFavoriteProducts = isProductInFavorites ? currentItemFavoriteProducts.filter(id => id !== productID) : [...currentItemFavoriteProducts, productID];\n\n const favoriteProducts = { ...allFavoriteProducts, [itemID]: itemFavoriteProducts };\n\n yield call(API.updatePortalUserProperty, portalID, { favoriteProducts: JSON.stringify(favoriteProducts) });\n yield put(ACTION_CREATORS.setFavoriteProductsAction(favoriteProducts));\n\n if (!noNotification) {\n yield put(ACTION_CREATORS.shoppingToastAction({\n type: notificationType,\n ...notificationType === SHOPPING_NOTIFICATION_TYPES.FAVORITE_PRODUCT && { product }\n }));\n }\n}\n\nfunction* watchAddToCart({ payload: { productID, itemID, action } }) {\n const itemProps = yield select(SELECTORS.getItemWithDefaults(itemID));\n const { products, formID } = itemProps;\n\n const { options = [] } = products.find(product => product.pid === productID);\n\n const hasCustomOptions = options.find(option => option?.type !== 'quantity');\n\n if (hasCustomOptions) {\n yield put(ACTION_CREATORS.openProductDetailAction({ productID, itemID }));\n return;\n }\n\n yield put(ACTION_CREATORS.addOrUpdateCartAction(formID, productID, action));\n}\n\nfunction* watchProductListItemSelections() {\n const activeProduct = yield select(SELECTORS.getActiveProduct);\n if (activeProduct?.productID) {\n yield put(ACTION_CREATORS.setActiveProduct('', ''));\n }\n}\n\nexport default function* () {\n yield takeEvery(ACTION_TYPES.FAVORITE_PRODUCT, watchFavoriteProduct);\n yield takeEvery(ACTION_TYPES.ADD_OR_UPDATE_CART, watchAddOrUpdateCart);\n yield takeEvery(ACTION_TYPES.ON_PRODUCT_ADD_TO_CART, watchAddToCart);\n yield takeEvery(ACTION_TYPES.SELECT_PORTAL_ITEM, watchProductListItemSelections);\n}\n","/* eslint-disable no-param-reassign */\nimport { eventChannel } from 'redux-saga';\nimport { ITEM_PROP_TYPE_VERSION, ITEM_TYPES } from '../../constants/itemTypes';\nimport { CARD_ACTION_VALUES } from '../../modules/Builder/components/HomePage/RightPanel/constants';\n\nexport const shouldUpdatePropFromResponse = (type, updatingProps) => {\n let shouldUpdate = false;\n switch (type) {\n case ITEM_TYPES.HEADING:\n case ITEM_TYPES.WIDGET:\n updatingProps = { ...updatingProps, version: ITEM_PROP_TYPE_VERSION };\n break;\n case ITEM_TYPES.CARD_ITEM: {\n const { buttonValue = null, buttonRole = '' } = updatingProps;\n if (buttonRole === CARD_ACTION_VALUES.FORM && buttonValue) {\n shouldUpdate = true;\n }\n\n break;\n }\n case ITEM_TYPES.BUTTON:\n if ('buttonValue' in updatingProps) {\n shouldUpdate = true;\n }\n break;\n\n default:\n break;\n }\n\n return shouldUpdate;\n};\n\nexport const resultMutaters = currentItem => ({\n [ITEM_TYPES.CARD_ITEM]: result => {\n const {\n formTitle, buttonRole, buttonValue, title\n } = result[currentItem?.id];\n return {\n [currentItem.id]: {\n formTitle,\n buttonRole,\n buttonValue,\n title\n }\n };\n }\n});\n\nexport const eventChannelRegistry = () => {\n const channels = [];\n\n const register = fn => {\n const channel = eventChannel(fn);\n channels.push(channel);\n return channel;\n };\n\n const closeAll = () => {\n channels.forEach(channel => channel.close());\n };\n\n return {\n register,\n closeAll\n };\n};\n\nexport const AiChangesdList = (messages = {}, changes = {}) => {\n const changesInPages = changes.create.pages;\n\n if (changesInPages.length === 0) return false;\n\n const formatString = element => {\n const elementValue = element.type === 'WIDGET' ? element.widgetSlug : element.type;\n return elementValue.toLowerCase().split('_').join(' ');\n };\n\n const newMessages = [...messages];\n let lastMessage = { ...messages[messages.length - 1] };\n let messageContent = lastMessage.content;\n\n messageContent += `\n
    \n Created\n `;\n\n changesInPages.forEach(change => {\n let messageItem = `
    ${change.name}:`;\n messageItem += '
      ';\n change.elements.forEach(element => {\n messageItem += `
    • ${formatString(element)}
    • `;\n });\n messageContent += `${messageItem}
    `;\n });\n\n messageContent += '
    ';\n\n lastMessage = {\n ...lastMessage,\n content: `${messageContent}`\n };\n\n newMessages[newMessages.length - 1] = lastMessage;\n\n return newMessages;\n};\n","import {\n call, put, select, takeEvery\n} from 'redux-saga/effects';\nimport * as ACTION_TYPES from '../actionTypes';\nimport SELECTORS from '../selectors';\nimport * as API from '../../modules/api';\nimport { isFeatureEnabled } from '../../utils/features/helper';\nimport { FEATURE_NAMES } from '../../constants/features';\nimport { AiChangesdList } from './helper';\nimport { AB_TESTS, logAbTestActionFor } from '../../utils/abtests';\n\nconst AIMessages = {\n SOMETHING_WENT_WRONG: 'Sorry, something went wrong. Please try again later.'\n};\n\nfunction* fetchAIChatMessages() {\n const appID = yield select(SELECTORS.getAppID);\n\n try {\n const { messages } = yield call(API.aiFetchChatMessages, appID);\n if (!messages) {\n console.error('Expected messages on fetch chat messages but received: ', messages);\n return;\n }\n yield put({ type: ACTION_TYPES.AI_SET_MESSAGES, payload: messages });\n } catch (err) {\n console.log(err);\n }\n}\n\nfunction* addChatMessage({ payload }) {\n const appID = yield select(SELECTORS.getAppID);\n const { prompt: message } = payload;\n\n try {\n const { messages, portal, changes } = yield call(API.aiAddChatMessage, { appID, message });\n if (!messages) {\n console.error('Expected messages on add chat message but received: ', messages);\n yield put({ type: ACTION_TYPES.AI_SHOW_ERROR_MESSAGE, payload: AIMessages.SOMETHING_WENT_WRONG });\n return;\n }\n yield put({ type: ACTION_TYPES.AI_SET_MESSAGES, payload: messages });\n if (portal) {\n yield put({ type: ACTION_TYPES.UPDATE_PORTAL.SUCCESS, payload: portal });\n }\n if (changes) {\n const newMessages = AiChangesdList(messages, changes);\n if (newMessages) {\n yield put({ type: ACTION_TYPES.AI_SET_MESSAGES, payload: newMessages });\n }\n }\n document.querySelector('.ai-chat-input')?.focus();\n } catch (err) {\n console.error({ err });\n yield put({ type: ACTION_TYPES.AI_SHOW_ERROR_MESSAGE, payload: AIMessages.SOMETHING_WENT_WRONG });\n }\n}\n\nfunction* aiAssistantFlow({ payload }) {\n const { aiIsShow } = payload;\n const isBuilder = yield select(SELECTORS.getIsBuilder);\n const isAsisstantEnabledUser = isFeatureEnabled(FEATURE_NAMES.AiAssistant);\n if (isAsisstantEnabledUser && isBuilder && aiIsShow) {\n yield fetchAIChatMessages();\n }\n}\n\nfunction logAbTestAction(params) {\n return function* logActionFor() {\n yield call(logAbTestActionFor, AB_TESTS.AiAssistant, params);\n };\n}\n\nexport default function* aiAssistant() {\n yield takeEvery(ACTION_TYPES.AI_SHOW_ASSISTANT, aiAssistantFlow);\n yield takeEvery(ACTION_TYPES.AI_ADD_CHAT_MESSAGE, addChatMessage);\n\n yield takeEvery(ACTION_TYPES.AI_SHOW_ASSISTANT, logAbTestAction({ action: 'click', target: 'copilot-button' }));\n yield takeEvery(ACTION_TYPES.ADD_PORTAL_ITEMS.REQUEST, logAbTestAction({ action: 'click', target: 'add-element' }));\n yield takeEvery(ACTION_TYPES.REMOVE_PORTAL_ITEMS.REQUEST, logAbTestAction({ action: 'click', target: 'remove-element' }));\n yield takeEvery(ACTION_TYPES.ADD_NEW_PAGE.REQUEST, logAbTestAction({ action: 'click', target: 'add-page' }));\n yield takeEvery(ACTION_TYPES.AI_ADD_CHAT_MESSAGE, logAbTestAction({ action: 'click', target: 'send-message' }));\n}\n","import { t } from '@jotforminc/translation';\nimport { addressHintObjectToString } from '@jotforminc/utils';\n\n// TODO: use from constants when question properties are moved to constants\nexport const getDefaultQuestionValues = () => ({\n control_textbox: {\n text: t('Type a question'),\n labelAlign: 'Auto',\n required: 'No',\n size: 20,\n validation: 'None',\n maxsize: '',\n inputTextMask: '',\n defaultValue: '',\n subLabel: '',\n hint: '',\n description: '',\n readonly: 'No'\n },\n control_phone: {\n text: t('Phone Number'),\n labelAlign: 'Auto',\n required: 'No',\n countryCode: 'No',\n inputMask: 'enable',\n inputMaskValue: '(###) ###-####',\n validation: 'None',\n description: '',\n sublabels: {\n country: t('Country Code'),\n area: t('Area Code'),\n phone: t('Phone Number'),\n full: t('Phone Number'),\n masked: ''\n },\n readonly: 'No',\n compoundHint: ''\n },\n control_address: {\n text: t('Address'),\n labelAlign: 'Auto',\n required: 'No',\n requiredInputs: 'st1|state|city|zip|country',\n selectedCountry: '',\n states: 'textbox',\n description: '',\n subfields: 'state|zip|st1|city|st2',\n sublabels: {\n addr_line1: t('Street Address'),\n addr_line2: t('Street Address Line 2'),\n city: t('City'),\n state: t('State / Province'),\n postal: t('Postal / Zip Code'),\n country: t('Country')\n },\n compoundHint: addressHintObjectToString({\n state_select: t('Please Select'),\n country_select: t('Please Select')\n }),\n countryDropdownDefaultText: t('Please Select'),\n customCountryDropdown: 'No',\n customCountryOptions: '',\n hasAutocomplete: 'No',\n hasGeolocation: 'No',\n customStateOptions: ''\n },\n control_textarea: {\n text: t('Type a question'),\n labelAlign: 'Auto',\n required: 'No',\n cols: 40,\n rows: 6,\n validation: 'None',\n entryLimitMin: 'None-0',\n entryLimit: 'None-0',\n maxsize: '',\n defaultValue: '',\n subLabel: '',\n hint: '',\n description: '',\n readonly: 'No',\n wysiwyg: 'Disable',\n mde: 'No',\n enableSentiment: 'No'\n },\n control_checkbox: {\n text: t('Type a question'),\n labelAlign: 'Auto',\n required: 'No',\n options: `${t('Type option 1')}|${t('Type option 2')}|${t('Type option 3')}|${t('Type option 4')}`,\n special: 'None',\n calcValues: '',\n allowOther: 'No',\n otherText: t('Other'),\n spreadCols: '1',\n selected: '',\n minSelection: '',\n maxSelection: '',\n description: '',\n shuffle: 'No',\n readonly: 'No'\n },\n control_radio: {\n text: t('Type a question'),\n labelAlign: 'Auto',\n required: 'No',\n options: `${t('Type option 1')}|${t('Type option 2')}|${t('Type option 3')}|${t('Type option 4')}`,\n special: 'None',\n calcValues: '',\n allowOther: 'No',\n otherText: t('Other'),\n selected: '',\n spreadCols: '1',\n description: '',\n shuffle: 'No',\n readonly: 'No'\n }\n});\n","import {\n put, take, takeEvery, select, call\n} from 'redux-saga/effects';\nimport { PaymentActions, Variables, checkIsGatewayConnectedAndTestMode } from '@jotforminc/payment-settings-editor';\nimport { arrayMove } from '@jotforminc/utils';\nimport { FEATURE_NAMES } from '../../constants/features';\nimport { isFeatureEnabled } from '../../utils/features/helper';\nimport * as ACTION_TYPES from '../actionTypes';\nimport SELECTORS from '../selectors';\nimport * as ACTION_CREATORS from '../actionCreators';\nimport { isYes } from '../../utils';\nimport { getDefaultQuestionValues } from '../../constants/questions';\nimport * as API from '../../modules/api';\n\nfunction* watchFetchQuestions({ payload: checkoutFormID }) {\n const result = yield call(PaymentActions.getQuestionProps, checkoutFormID);\n\n yield put({ type: ACTION_TYPES.FETCH_CHECKOUT_FORM_QUESTIONS.SUCCESS, payload: result });\n}\n\nfunction* watchFetchQuestionsSuccess() {\n const { connectedGateway, isGatewayConfigured, isGatewayTestMode } = yield select(SELECTORS.getGatewayProperties);\n const gatewaySettings = yield select(SELECTORS.getCheckoutFormActiveGatewaySettings);\n const checkoutFormPaymentQuestion = yield select(SELECTORS.getCheckoutFormPaymentQuestion);\n if (!checkoutFormPaymentQuestion) {\n const appID = yield select(SELECTORS.getAppID);\n try {\n const questions = yield call(API.createPaymentQuestion, appID);\n yield put({ type: ACTION_TYPES.ADD_CHECKOUT_FORM_QUESTION.SUCCESS, payload: questions[Variables.CHECKOUT_FORM_QUESTIONS.GATEWAY] });\n } catch (e) {\n console.error('Error while creating payment question', e);\n }\n }\n const { type = '' } = gatewaySettings;\n const [isConnected, isTestMode] = checkIsGatewayConnectedAndTestMode(gatewaySettings);\n if (connectedGateway !== type || isYes(isGatewayConfigured) !== isConnected || isYes(isGatewayTestMode) !== isTestMode) {\n yield put(ACTION_CREATORS.updatePortalAction({ connectedGateway: type, isGatewayConfigured: isConnected, isGatewayTestMode: isTestMode }));\n }\n}\n\nfunction* watchPaymentGatewayChanges({ payload }) {\n const { gatewaySettings, itemDeleted = 0, ...others } = payload;\n if (!isFeatureEnabled(FEATURE_NAMES.NewPaymentModal)) {\n const [isConnected, isTestMode] = checkIsGatewayConnectedAndTestMode(payload);\n const { type = '' } = payload;\n yield put(ACTION_CREATORS.updatePortalAction({ connectedGateway: type, isGatewayConfigured: isConnected, isGatewayTestMode: isTestMode }));\n yield put({ type: ACTION_TYPES.CHECKOUT_FORM_GATEWAY_SETTINGS_CHANGE.SUCCESS, payload });\n } else {\n const [isConnected, isTestMode] = checkIsGatewayConnectedAndTestMode({ ...others, ...gatewaySettings });\n const { type = '' } = payload;\n const checkoutFormID = yield select(SELECTORS.getCheckoutFormIDSelector);\n const result = yield call(PaymentActions.switchPaymentGateway, checkoutFormID, others, itemDeleted);\n if (type === 'control_iyzico' && isConnected) {\n yield put(ACTION_CREATORS.addCheckoutFormQuestion({\n type: 'control_address', name: 'address', required: 'Yes', subfields: 'state|zip|st1|city|st2|country'\n }));\n const { payload: { qid } } = yield take(ACTION_TYPES.ADD_CHECKOUT_FORM_QUESTION.SUCCESS);\n yield put(ACTION_CREATORS.updateCheckoutFormQuestion(Variables.CHECKOUT_FORM_QUESTIONS.GATEWAY.toString(), { billingAdd: qid }));\n }\n yield put(ACTION_CREATORS.updatePortalAction({ connectedGateway: type, isGatewayConfigured: isConnected, isGatewayTestMode: isTestMode }));\n yield put({ type: ACTION_TYPES.CHECKOUT_FORM_GATEWAY_SETTINGS_CHANGE.SUCCESS, payload: { ...result[0], ...(others.paymentType && { paymentType: others.paymentType }) } });\n if (gatewaySettings) {\n yield put(ACTION_CREATORS.updateCheckoutFormSettings(gatewaySettings));\n }\n }\n}\nfunction* watchCheckoutFormSettingsChanges({ payload: settings }) {\n const paymentQuestion = yield select(SELECTORS.getCheckoutFormPaymentQuestion);\n const questionFormattedSettings = Object.entries(settings).reduce((prev, [property, PropertyValue]) => {\n return { ...prev, [`question[${property}]`]: PropertyValue };\n }, {});\n const checkoutFormID = yield select(SELECTORS.getCheckoutFormIDSelector);\n const result = yield call(PaymentActions.updateActiveGatewaySettings, checkoutFormID, Variables.CHECKOUT_FORM_QUESTIONS.GATEWAY, questionFormattedSettings);\n yield put({ type: ACTION_TYPES.CHECKOUT_FORM_SETTINGS_CHANGE.SUCCESS, payload: { ...paymentQuestion, ...result[0] } });\n}\n\nfunction* watchAddQuestion({ payload: question }) {\n const checkoutFormID = yield select(SELECTORS.getCheckoutFormIDSelector);\n const lastVisibleQuestionOrder = yield select(SELECTORS.getLastVisibleQuestionOrder);\n const lastQuestionID = yield select(SELECTORS.getLastQuestionID);\n\n const { type } = question;\n\n const defaultQuestionValues = getDefaultQuestionValues()[type];\n\n // TODO: extract default props getter from form-builder\n const { questions } = yield call(PaymentActions.addCheckoutFormQuestion, checkoutFormID, {\n ...defaultQuestionValues,\n ...question,\n name: `${type.replace('control_', '')}${lastQuestionID + 1}`,\n order: lastVisibleQuestionOrder + 1\n });\n\n yield put({ type: ACTION_TYPES.ADD_CHECKOUT_FORM_QUESTION.SUCCESS, payload: questions });\n}\n\nfunction* watchRemoveQuestion({ payload: questionID }) {\n const checkoutFormID = yield select(SELECTORS.getCheckoutFormIDSelector);\n\n yield call(PaymentActions.removeCheckoutFormQuestion, checkoutFormID, questionID);\n\n yield put({ type: ACTION_TYPES.REMOVE_CHECKOUT_FORM_QUESTION.SUCCESS, payload: questionID });\n}\n\nfunction* watchSortQuestion({ payload: { oldIndex, newIndex } }) {\n const checkoutFormID = yield select(SELECTORS.getCheckoutFormIDSelector);\n const questions = yield select(SELECTORS.getCheckoutFormVisibleQuestionsArray);\n const hiddenQuestions = yield select(SELECTORS.getCheckoutFormHiddenQuestionsArray);\n\n const sortedQuestions = arrayMove([...questions, ...hiddenQuestions], oldIndex, newIndex).map((question, index) => ({ ...question, order: index + 1 }));\n\n const questionsObject = Object.fromEntries(sortedQuestions.map(question => [question.qid, question]));\n\n yield put({ type: ACTION_TYPES.SORT_CHECKOUT_FORM_QUESTION.SUCCESS, payload: questionsObject });\n\n const nakedQuestions = sortedQuestions.map(({ qid, order }) => ({ qid, order }));\n\n yield call(PaymentActions.updateCheckoutFormQuestions, checkoutFormID, nakedQuestions);\n}\n\nfunction* watchUpdateQuestion({ payload: { id, prop } }) {\n const checkoutFormID = yield select(SELECTORS.getCheckoutFormIDSelector);\n\n yield call(PaymentActions.updateCheckoutFormQuestionProp, checkoutFormID, id, prop);\n\n yield put({ type: ACTION_TYPES.UPDATE_CHECKOUT_FORM_QUESTION.SUCCESS, payload: { id, prop } });\n}\n\nexport default function* () {\n yield takeEvery(ACTION_TYPES.FETCH_CHECKOUT_FORM_QUESTIONS.REQUEST, watchFetchQuestions);\n yield takeEvery(ACTION_TYPES.FETCH_CHECKOUT_FORM_QUESTIONS.SUCCESS, watchFetchQuestionsSuccess);\n yield takeEvery(ACTION_TYPES.ADD_CHECKOUT_FORM_QUESTION.REQUEST, watchAddQuestion);\n yield takeEvery(ACTION_TYPES.REMOVE_CHECKOUT_FORM_QUESTION.REQUEST, watchRemoveQuestion);\n yield takeEvery(ACTION_TYPES.UPDATE_CHECKOUT_FORM_QUESTION.REQUEST, watchUpdateQuestion);\n yield takeEvery(ACTION_TYPES.SORT_CHECKOUT_FORM_QUESTION.REQUEST, watchSortQuestion);\n yield takeEvery(ACTION_TYPES.CHECKOUT_FORM_GATEWAY_SETTINGS_CHANGE.REQUEST, watchPaymentGatewayChanges);\n yield takeEvery(ACTION_TYPES.CHECKOUT_FORM_SETTINGS_CHANGE.REQUEST, watchCheckoutFormSettingsChanges);\n}\n","import isUndefined from 'lodash/isUndefined';\nimport { DATA_SOURCE_COLUMN_TYPES, ITEM_TYPES } from '../../../constants/itemTypes';\n\nexport const strToDsFormat = str => {\n if (!str) {\n return '';\n }\n return `{${str}}`;\n};\n\nexport const detailsPageDefaultFuncsMap = {\n [DATA_SOURCE_COLUMN_TYPES.TEXT]: ({ text, qid, ...rest }) => ({\n title: text,\n cardLayout: 'horizontal',\n description: `{${qid}}`,\n itemBgColor: '#ffffff',\n itemBorderColor: '#d8dae9',\n itemFontColor: '#2c3345',\n start: {\n type: 'none',\n data: null\n },\n end: {\n type: 'none',\n data: null\n },\n ...rest,\n type: 'CARD_ITEM'\n }),\n\n [DATA_SOURCE_COLUMN_TYPES.IMAGE]: ({ text, qid, ...rest }) => ({\n imageURL: `{${qid}}`,\n itemTextAlignment: 'center',\n shrink: 'No',\n ...rest,\n type: 'IMAGE'\n }),\n\n [ITEM_TYPES.HEADING]: ({ text, qid, ...rest }) => ({\n title: `{${qid}}`,\n description: '',\n headingSize: 'default',\n itemTextAlignment: 'left',\n shrink: 'No',\n ...rest,\n type: 'HEADING'\n })\n};\n\n// {\n// \"start\": {\n// \"type\": \"image\",\n// \"data\": {\n// \"url\": \"https://www.jotform.com/uploads/erencam/form_files/Blank-Avatar.6666c07f7603c4.07905215.png\"\n// }\n// },\n// \"version\": 2\n// }\n\nconst divideColumnsByType = columns => {\n return columns.reduce((prev, column, order) => {\n switch (column.type) {\n case DATA_SOURCE_COLUMN_TYPES.IMAGE:\n return { ...prev, images: [...prev.images, { ...column, order }] };\n case DATA_SOURCE_COLUMN_TYPES.TEXT:\n return { ...prev, texts: [...prev.texts, { ...column, order }] };\n default:\n return prev;\n }\n }, { images: [], texts: [] });\n};\n\nexport const generateDetailDefaultElements = ({ columns, pageID }) => {\n const { images, texts } = divideColumnsByType(columns);\n const orderedColumns = [...images, ...texts].toSorted((({ order: o1 }, { order: o2 }) => o1 - o2));\n const headingOrder = texts?.[0].order;\n\n if (!isUndefined(headingOrder)) {\n orderedColumns[headingOrder] = { ...orderedColumns[headingOrder], type: ITEM_TYPES.HEADING };\n }\n\n return orderedColumns.map(({ order, ...col }) => detailsPageDefaultFuncsMap[col.type]?.({ ...col, page: pageID }));\n};\n\nexport const generateNewPropsForPresentationItem = columns => {\n const { images, texts } = divideColumnsByType(columns);\n const [titleCol, descriptionCol] = texts;\n const [imageURLCol] = images;\n\n return {\n ...(titleCol ? { title: strToDsFormat(titleCol.qid) } : {}),\n ...(descriptionCol ? { description: strToDsFormat(descriptionCol.qid) } : {}),\n ...(imageURLCol ? { start: { type: 'image', data: { url: strToDsFormat(imageURLCol.qid) } } } : {})\n };\n};\n","import {\n all,\n call, put, putResolve, select, take, takeEvery, takeLatest, throttle\n} from 'redux-saga/effects';\nimport { t } from '@jotforminc/translation';\nimport isEmpty from 'lodash/isEmpty';\nimport * as ACTION_CREATORS from '../../actionCreators';\nimport SELECTORS from '../../selectors';\nimport * as ACTION_TYPES from '../../actionTypes';\nimport * as API from '../../../modules/api';\nimport { DESTINATION_TYPES } from '../../../constants/navigation';\nimport { generateDetailDefaultElements, generateNewPropsForPresentationItem } from './constants';\nimport { CARD_ACTION_VALUES, CARD_LAYOUT } from '../../../modules/Builder/components/HomePage/RightPanel/constants';\nimport { ITEM_TYPES } from '../../../constants/itemTypes';\nimport { DS_ITEM_LOAD_TYPES, DS_ITEM_OFFSET } from '../../reducers/dataSource/constants';\nimport { pageActions } from '../../watchers/pageActions';\nimport { safeWorker } from '../../utils';\nimport { checkMobilePhone } from '../../../utils';\nimport { MODALS } from '../../../constants/modals';\n\nfunction* fetchColumns({ payload: { resourceID, viewID } }) {\n if (!resourceID) {\n return;\n }\n\n try {\n const { columns, title } = yield call(API.fetchColumns, {\n resourceID,\n viewID\n });\n\n if (columns) {\n yield put(ACTION_CREATORS.dsFetchColumnsSuccess({\n resourceID, viewID, columns, title\n }));\n }\n } catch (err) {\n console.error('NOT IMPLEMENTED', err);\n }\n}\n\nfunction* fetchSourceItemData({\n payload: {\n itemID,\n offset,\n isButtonRoleUpdate = false\n }\n}) {\n try {\n const item = yield select(SELECTORS.getPortalItemByIDSelector(itemID));\n if (!itemID || !item) {\n return;\n }\n\n const appID = yield select(SELECTORS.getAppID);\n const isBuilder = yield select(SELECTORS.getIsBuilder);\n const isMobile = checkMobilePhone();\n const { cardLayout = CARD_LAYOUT.HORIZONTAL } = yield select(SELECTORS.getPortalItemByIDSelector(item.presentationItemID));\n\n const limit = (() => {\n if (!isBuilder) {\n return DS_ITEM_OFFSET;\n }\n\n if (isMobile && cardLayout === CARD_LAYOUT.HORIZONTAL) {\n return 3;\n }\n\n return 4;\n })();\n\n const itemData = yield call(API.fetchRow, {\n appID, itemID, limit, offset\n });\n\n if (isBuilder) {\n yield putResolve(ACTION_CREATORS.dsFetchRowSuccess({\n itemID, itemData\n }));\n\n if (isButtonRoleUpdate) {\n yield put(ACTION_CREATORS.dsSetLoading({ itemID, loadType: DS_ITEM_LOAD_TYPES.INIT, isLoading: false }));\n }\n } else {\n yield put(ACTION_CREATORS.dsFetchSourceItemDataSuccess({\n itemID, itemData\n }));\n }\n } catch (err) {\n yield put(ACTION_CREATORS.dsFetchSourceItemDataError({ itemID }));\n console.error('NOT IMPLEMENTED', err);\n }\n}\n\nfunction* fetchRow({\n payload: {\n itemID, rowID\n }\n}) {\n const item = yield select(SELECTORS.getPortalItemByIDSelector(itemID));\n\n if (!itemID || !item) {\n return;\n }\n\n try {\n const appID = yield select(SELECTORS.getAppID);\n const itemData = yield call(API.fetchRow, {\n appID, itemID, rowID\n });\n\n yield put(ACTION_CREATORS.dsFetchRowSuccess({\n itemID, itemData: itemData?.[0]\n }));\n } catch (err) {\n console.error('NOT IMPLEMENTED', err);\n }\n}\n\nfunction* fetchDetailPage({\n payload: {\n pageID,\n divideByItemID\n }\n}) {\n try {\n const { linkedItemID } = yield select(SELECTORS.getPageByID(pageID)) ?? {};\n\n if (!linkedItemID) {\n return;\n }\n const appID = yield select(SELECTORS.getAppID);\n const rowID = yield select(SELECTORS.dsGetActiveListRowID(linkedItemID));\n const data = yield call(API.fetchRow, { appID, itemID: pageID, rowID });\n yield put(ACTION_CREATORS.dsFetchPageDetailSuccess({ pageID, data, divideByItemID }));\n } catch (err) {\n console.error('NOT IMPLEMENTED', err);\n }\n}\n\nfunction* setActiveRowAndNavigateToDetailsPage({ payload: { id, rowID } }) {\n yield put(ACTION_CREATORS.dsSetActiveListRowIDSuccess({ id, rowID }));\n const dsPageProps = yield select(SELECTORS.getDataSourcePage(id));\n if (!dsPageProps) {\n return;\n }\n\n const isBuilder = yield select(SELECTORS.getIsBuilder);\n\n const { id: detailsPageID = null } = dsPageProps;\n if (!isBuilder && detailsPageID) {\n yield put(ACTION_CREATORS.navigateToAction({ to: DESTINATION_TYPES.SPECIAL_PAGE, pageID: `details/${detailsPageID}/${rowID}` }));\n }\n}\n\nfunction* createAndLinkDetailsPage({\n payload: {\n itemID, columns, resourceID, viewID\n }\n}) {\n yield take(ACTION_TYPES.DS_FETCH_RESOURCE_COLUMNS.SUCCESS);\n const { page } = yield select(SELECTORS.getPortalItemByIDSelector(itemID));\n const { title = '' } = yield select(SELECTORS.dsGetColumnsByResourceID({ resourceID, viewID }));\n const oldDetailPage = yield select(SELECTORS.getDataSourcePage(itemID));\n\n if (oldDetailPage?.id) {\n yield call(pageActions, { type: ACTION_TYPES.DELETE_PAGE.UNDOABLE, payload: { pageID: oldDetailPage.id, deleteItems: true }, dontStack: true });\n }\n\n const { pageOrder } = yield select(SELECTORS.getPageByID(page));\n yield call(pageActions, {\n type: ACTION_TYPES.ADD_NEW_PAGE.UNDOABLE,\n payload: {\n newPageOrder: Number(pageOrder) + 1,\n dontSelect: true,\n pageProps: {\n showPageOnNavigation: false,\n name: t(title ? `${title} Detail Page` : 'Details Page')\n },\n detailPageProps: {\n linkedItemID: itemID\n }\n }\n });\n\n yield put(ACTION_CREATORS.dsInitializeItems({\n itemID,\n columns,\n oldDetailPage\n }));\n}\n\nfunction* initializeDsItemsWatcher(action) {\n const { itemID, columns: selectedColumns } = action.payload;\n\n const { resourceID, viewID } = yield select(SELECTORS.getPortalItemByIDSelector(itemID));\n const { columns: resourceColumns } = yield select(SELECTORS.dsGetColumnsByResourceID({ resourceID, viewID }));\n const { id: pageID } = yield select(SELECTORS.getDataSourcePage(itemID));\n\n const columns = selectedColumns ?? resourceColumns ?? [];\n\n yield putResolve(ACTION_CREATORS.dsInitializePropsWithColumns({ ...action.payload, columns, pageID }));\n yield putResolve(ACTION_CREATORS.dsCreateDetailPageDefaults({ ...action.payload, columns, pageID }));\n}\n\nfunction* initializeDsItemWithColumns({ payload: { itemID, columns, pageID } }) {\n const { presentationItemID } = yield select(SELECTORS.getPortalItemByIDSelector(itemID));\n\n const defaultPresentationItemProps = generateNewPropsForPresentationItem(columns);\n\n yield put(ACTION_CREATORS.updateItemPropAction({\n itemID: presentationItemID,\n prop: {\n ...defaultPresentationItemProps,\n buttonRole: CARD_ACTION_VALUES.NAVIGATION,\n buttonValue: pageID\n },\n bypassDebounce: true,\n linkedItemID: itemID\n }));\n\n yield put({ type: ACTION_TYPES.DS_INITIALIZE_PROPS_WITH_COLUMNS.SUCCESS });\n}\n\nfunction* createDefaultElements({ payload: { pageID, columns, itemID } }) {\n yield take(ACTION_TYPES.DS_INITIALIZE_PROPS_WITH_COLUMNS.SUCCESS);\n\n yield put(ACTION_CREATORS.toastAction({\n message: t('The detail page has been prepared automatically. You can click any item to see how the dynamic values change on the detail page'),\n options: {\n autoClose: 4e3\n }\n }));\n\n if (columns.length < 1) {\n return;\n }\n\n const newItems = generateDetailDefaultElements({ columns, pageID });\n\n // Unfortunately i have passed undefined to not to lose default parameters (because it is written in this way)\n // This action could be refactored to accept object instead of args like this\n yield put(ACTION_CREATORS.addPortalItemAction(newItems, 1, undefined, undefined, itemID));\n}\n\nfunction* handleDetailPageDeletionOnListRemoval({ payload: { item } }) {\n const detailPage = yield select(SELECTORS.getDataSourcePage(item.id));\n if (detailPage?.id) {\n yield call(pageActions, { type: ACTION_TYPES.DELETE_PAGE.UNDOABLE, payload: { pageID: detailPage.id, deleteItems: true }, dontStack: true });\n }\n}\n\nfunction* watchViewDefaultTable({ payload: { itemID } }) {\n try {\n const isLoading = yield select(SELECTORS.dsGetItemIsLoading(itemID, DS_ITEM_LOAD_TYPES.TABLE_CLONE));\n if (isLoading) {\n return;\n }\n\n const appID = yield select(SELECTORS.getAppID);\n yield put(ACTION_CREATORS.dsSetLoading({ itemID, isLoading: true, loadType: DS_ITEM_LOAD_TYPES.TABLE_CLONE }));\n const {\n sheetID: newResourceID, viewId: viewID, isClone = false, updatedAt\n } = yield call(API.viewTable, { appID, itemID });\n\n if (isClone) {\n yield put(ACTION_CREATORS.updateItemPropAction({\n itemID: itemID,\n prop: {\n resourceID: newResourceID\n }\n }));\n }\n\n yield put(ACTION_CREATORS.showGenericModalAction({\n name: MODALS.TABLE_PRODUCT_MODAL,\n resourceID: newResourceID,\n viewID: viewID !== newResourceID ? viewID : null,\n updatedAt\n }));\n } catch (err) {\n console.error('not implemented', err);\n } finally {\n yield put(ACTION_CREATORS.dsSetLoading({ itemID, isLoading: false, loadType: DS_ITEM_LOAD_TYPES.TABLE_CLONE }));\n }\n}\n\nexport function* dsFetchColumnsFlow() {\n const isBuilder = yield select(SELECTORS.getIsBuilder);\n if (!isBuilder) {\n return;\n }\n\n const items = yield select(SELECTORS.getPortalItems);\n const listItems = items.filter(item => item.type === ITEM_TYPES.LIST);\n if (!isEmpty(listItems)) {\n yield all(listItems.reduce((prev, { resourceID, viewID }) => {\n if (!resourceID) {\n return prev;\n }\n\n return [...prev, put(ACTION_CREATORS.dsFetchColumnsRequest({ resourceID, viewID }))];\n }, []));\n }\n}\n\n// TODO: TEMPORARY FIX for mobile builder version c, instead of improve the update iframe logic\nfunction* setUpdatedAtOnRowSuccess() {\n yield put(ACTION_CREATORS.setAppUpdatedAt(true));\n}\n\nfunction* createTable({ payload: { setFetchKey } }) {\n yield call(API.createTable);\n setFetchKey(prev => prev + 1);\n}\n\nfunction* detailPageOrderNormalizer({ payload }) {\n const { data = [] } = payload;\n\n const pages = yield select(SELECTORS.getPortalPages);\n\n yield all(\n data.reduce((acc, item) => {\n if (item.type === ITEM_TYPES.LIST && item.page) {\n const { pageOrder } = pages.find(({ id }) => id === item.page);\n if (pageOrder) {\n return [...acc, put(ACTION_CREATORS.changePageOrderAction({ oldIndex: pageOrder, newIndex: pageOrder }))];\n }\n return acc;\n }\n\n return acc;\n }, [])\n );\n}\n\nfunction* fetchAllResourceLinkedItems({ payload }) {\n const { resourceID, viewID } = payload;\n const items = yield select(SELECTORS.getPortalItems);\n const listItems = items.filter(({ type }) => type === ITEM_TYPES.LIST);\n const resourceLinkedItems = listItems.filter(listItem => (listItem.resourceID === resourceID && viewID ? listItem.viewID === viewID : true));\n const pages = yield select(SELECTORS.getPortalPages);\n const linkedPages = pages.filter(({ linkedItemID }) => listItems.some(({ id }) => id === linkedItemID));\n\n const fetchSourceItemActions = resourceLinkedItems.map(({ id }) => put(ACTION_CREATORS.dsFetchSourceItemData({ itemID: id })));\n const fetchPageActions = linkedPages.map(({ id }) => put(ACTION_CREATORS.dsFetchDetailPage({ pageID: id, divideByItemID: true })));\n\n yield all([...fetchSourceItemActions, ...fetchPageActions]);\n}\n\n// eslint-disable-next-line func-names\nexport default function* () {\n yield takeEvery(ACTION_TYPES.DS_CREATE_DETAIL_PAGE, safeWorker(createAndLinkDetailsPage));\n yield takeEvery(ACTION_TYPES.DS_FETCH_RESOURCE_COLUMNS.REQUEST, fetchColumns);\n yield throttle(5000, ACTION_TYPES.DS_FETCH_RESOURCE_COLUMNS.WITH_THROTTLE, fetchColumns);\n yield takeEvery(ACTION_TYPES.DS_FETCH_SOURCE_ITEM_DATA.REQUEST, fetchSourceItemData);\n yield takeEvery(ACTION_TYPES.DS_FETCH_RESOURCE_ROW.REQUEST, fetchRow);\n yield takeEvery(ACTION_TYPES.DS_LIST_SET_ACTIVE_ROW_ID.REQUEST, safeWorker(setActiveRowAndNavigateToDetailsPage));\n yield takeEvery(ACTION_TYPES.DS_DELETE_DETAIL_PAGE, safeWorker(handleDetailPageDeletionOnListRemoval));\n\n // initialize ds item & detail page\n yield takeEvery(ACTION_TYPES.DS_INITIALIZE_ITEMS, initializeDsItemsWatcher);\n yield takeEvery(ACTION_TYPES.DS_CREATE_DETAIL_PAGE_DEFAULTS, safeWorker(createDefaultElements));\n yield takeEvery(ACTION_TYPES.DS_INITIALIZE_PROPS_WITH_COLUMNS.REQUEST, initializeDsItemWithColumns);\n\n // detail page data for preview\n yield takeLatest(ACTION_TYPES.DS_FETCH_DETAIL_PAGE.REQUEST, fetchDetailPage);\n\n yield takeLatest(ACTION_TYPES.DS_VIEW_DEFAULT_TABLE.REQUEST, watchViewDefaultTable);\n\n yield takeLatest([ACTION_TYPES.DS_FETCH_SOURCE_ITEM_DATA.SUCCESS, ACTION_TYPES.DS_FETCH_RESOURCE_ROW.SUCCESS], safeWorker(setUpdatedAtOnRowSuccess));\n yield takeLatest(ACTION_TYPES.DS_CREATE_TABLE.REQUEST, safeWorker(createTable));\n yield takeLatest(ACTION_TYPES.UPDATE_ORDER.UNDOABLE, safeWorker(detailPageOrderNormalizer));\n yield takeLatest(ACTION_TYPES.DS_FETCH_ALL_RESOURCE_LINKED_ITEMS, safeWorker(fetchAllResourceLinkedItems));\n}\n","import { StorageHelper } from '@jotforminc/storage-helper';\nimport Moment from 'moment';\nimport { NOTIFICATION_DISMISS_KEY } from '../../../constants';\n\nexport const isPushPermissionRecentlyDismissed = appID => {\n const notificationDismissKey = `${NOTIFICATION_DISMISS_KEY}_${appID}`;\n const dismissedAt = StorageHelper.getLocalStorageItem({ key: notificationDismissKey });\n if (dismissedAt === null) return false;\n return Moment(dismissedAt).isAfter(Moment().subtract(1, 'month'));\n};\n","/* eslint-disable jsx-a11y/media-has-caption */\n/* eslint-disable react/jsx-no-comment-textnodes */\n/* eslint-disable @jotforminc/no-native-button */\nimport {\n Modal, ModalHeader, ModalBody, ModalActions, Button, Flex, Badge\n} from '@jotforminc/magnet';\nimport { t } from '@jotforminc/translation';\nimport { func, object } from 'prop-types';\nimport React, { useState } from 'react';\nimport {\n IconChevronLeft, IconChevronRight\n} from '@jotforminc/svg-icons';\n\nexport const SOURCE_TYPE = {\n IMAGE: 'IMAGE',\n VIDEO: 'VIDEO'\n};\n\nconst WhatsNewModalDialogue = ({\n onClose, contents\n}) => {\n const [index, setIndex] = useState(0);\n const {\n title = `${t(\"What's New\")} 🔥`,\n description = 'Get the latest changes, updates and beta features',\n featureName,\n specs,\n src: { type = SOURCE_TYPE.IMAGE, url = '', alt = '' } = {},\n date,\n disableNewFeatureBadge = false\n } = contents[index];\n\n const Visual = () => {\n switch (type) {\n case SOURCE_TYPE.VIDEO: {\n return (\n
    \n \n \n \n
    \n );\n }\n\n default: {\n return {t(alt)};\n }\n }\n };\n\n return (\n \n \n \n \n \n \n

    {t(featureName)}

    \n {date &&

    {date}

    }\n
    \n {\n !disableNewFeatureBadge\n && (\n \n {t('NEW FEATURE')}\n \n )\n }\n
    \n {\n url && \n }\n {\n specs\n && (\n
      \n {\n specs.map(feature =>
    • {t(feature)}
    • )\n }\n
    \n )\n }\n
    \n {\n index > 0 && (\n { setIndex(prev => prev - 1); }}\n title={t('Back')}\n size=\"medium\"\n colorStyle='apps'\n className='radius-full absolute top-2/4 xs:-left-5 left-1'\n startIcon={IconChevronLeft}\n />\n )\n }\n {\n index + 1 < contents.length && (\n { setIndex(prev => prev + 1); }}\n title={t('Next')}\n size=\"medium\"\n colorStyle='apps'\n className='radius-full absolute top-2/4 xs:-right-5 right-1'\n startIcon={IconChevronRight}\n />\n )\n }\n
    \n \n {\n contents.length > 1 && (\n

    \n {`${index + 1}/${contents.length}`}\n

    \n )\n }\n \n {t('Ok, Got it!')}\n \n
    \n \n );\n};\n\nWhatsNewModalDialogue.propTypes = {\n onClose: func,\n contents: object.isRequired\n};\n\nWhatsNewModalDialogue.defaultProps = {\n onClose: f => f\n};\n\nexport default WhatsNewModalDialogue;\n","import React from 'react';\nimport {\n func, array\n} from 'prop-types';\nimport Moment from 'moment';\nimport WhatsNewModalDialogue, { SOURCE_TYPE } from './WhatsNewModalDialogue';\nimport { FEATURE_NAMES } from '../../../../../constants/features';\n\nexport const WHATS_NEW_MODAL_FEATURES = {\n [FEATURE_NAMES.List]: {\n content: [\n {\n featureName: 'List Element - Connecting with Table Data',\n disableNewFeatureBadge: true,\n src: {\n type: SOURCE_TYPE.VIDEO,\n url: 'https://cdn.jotfor.ms/assets/img/apps/list-item/whats-new-1.mp4',\n alt: 'List Element Feature'\n\n },\n specs: [\n 'Add the List element to the App Builder for dynamic content integration.',\n 'In the Properties panel, map the Title, Description, and Image fields to your table columns.',\n 'Use the View Table option to edit data directly.',\n 'Any changes made in the table are instantly reflected in the app.',\n 'Manage content dynamically through the table to keep your app up-to-date.'\n ]\n },\n {\n featureName: 'List Element - Edit Dynamic Detail Page',\n disableNewFeatureBadge: true,\n src: {\n type: SOURCE_TYPE.VIDEO,\n url: 'https://cdn.jotfor.ms/assets/img/apps/list-item/whats-new-2.mp4',\n alt: 'List Element Feature'\n },\n specs: [\n 'The List element displays items as rows from your data table.',\n 'It shows summary information like text and images.',\n 'Create a Detail Page to display more information when a user clicks on an item.',\n 'Click Edit Detail Page to open the builder.',\n 'Drag and drop elements to the Detail Page, similar to other pages.',\n 'Link elements to specific data columns for dynamic visualization.',\n 'Dynamically visualize and manipulate the details of a single record to enhance the user experience.'\n ]\n },\n {\n featureName: 'List Element - Preview List',\n disableNewFeatureBadge: true,\n src: {\n type: SOURCE_TYPE.VIDEO,\n url: 'https://cdn.jotfor.ms/assets/img/apps/list-item/whats-new-3.mp4',\n alt: 'List Element Feature'\n\n },\n specs: [\n 'Experience the power of dynamic content with list and detail views.',\n 'Effortlessly browse the list and tap on any item to see its updated details.',\n 'Enjoy a consistent and user-friendly template throughout the app.',\n 'This seamless interaction enhances user engagement.',\n 'Keeps your app fresh and up-to-date.'\n ]\n }\n ]\n },\n [FEATURE_NAMES.PushNotification]: {\n condition: ({ currentUser }) => {\n const pushNotificationReleaseDate = '2024-08-07';\n const isEarlierDate = Moment(currentUser.created_at, 'YYYY-MM-DD').isBefore(Moment(pushNotificationReleaseDate, 'YYYY-MM-DD'));\n return isEarlierDate;\n },\n content: {\n featureName: 'Push Notifications',\n src: {\n url: 'https://cdn.jotfor.ms/assets/img/portal/whatsNewPushNotificationV3.svg',\n alt: 'Push Notification Feature'\n },\n date: 'August 08, 2024',\n specs: [\n 'Stay connected with your users by sending push notifications',\n 'Keep them updated with the latest news, updates, and offers',\n 'Send push notifications even if the app is closed',\n 'Monitor delivery and click rates for insights',\n 'Increase conversions and keep users engaged in your app'\n ]\n }\n }\n};\n\nconst WhatsNewModal = ({ onClose, whatsNewKeys }) => {\n const contents = whatsNewKeys.map(key => WHATS_NEW_MODAL_FEATURES[key].content).flat();\n return (\n \n );\n};\n\nWhatsNewModal.propTypes = {\n onClose: func.isRequired,\n whatsNewKeys: array.isRequired\n};\n\nexport default WhatsNewModal;\n","import { t } from '@jotforminc/translation';\n\nimport { IconLinkDiagonal, IconAnglesSelectorSlashHorizontal } from '@jotforminc/svg-icons';\n\nexport const publishNavPaths = {\n quickShare: 'link',\n embed: 'embed'\n};\n\nexport const getPublishNavigationProperties = () => ([\n {\n key: 'link',\n title: t('Quick Share'),\n description: t('Direct app link.'),\n path: publishNavPaths.quickShare,\n Icon: IconLinkDiagonal\n },\n {\n key: 'embed',\n title: t('Embed'),\n description: t('Get embed code.'),\n path: publishNavPaths.embed,\n Icon: IconAnglesSelectorSlashHorizontal\n }\n]);\n\nexport const publishDefaultActiveTab = publishNavPaths.quickShare;\n","/* eslint-disable max-lines */\n/* eslint-disable camelcase */\nimport React from 'react';\nimport {\n actionChannel, all, call, delay, put, select, spawn, take, takeEvery, takeLatest, debounce,\n fork, race\n} from 'redux-saga/effects';\nimport { buffers } from 'redux-saga';\nimport difference from 'lodash/difference';\nimport isUndefined from 'lodash/isUndefined';\nimport { navigate } from '@reach/router';\nimport { sumMoney } from '@jotforminc/money-utils';\nimport { safeJSONParse, handleCustomNavigation } from '@jotforminc/utils';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\nimport { prepareIcons } from '@jotforminc/icon-selector';\nimport { t } from '@jotforminc/translation';\nimport { StorageHelper } from '@jotforminc/storage-helper';\nimport Tracking from '@jotforminc/tracking';\nimport { getAppPath } from '@jotforminc/router-bridge';\nimport { PushManager, SubscriptionError } from '@jotforminc/push-notification';\nimport { PaymentActions } from '@jotforminc/payment-settings-editor';\nimport Moment from 'moment';\nimport isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport some from 'lodash/some';\nimport * as ACTION_TYPES from '../actionTypes';\nimport * as API from '../../modules/api';\nimport SELECTORS from '../selectors';\nimport * as ACTION_CREATORS from '../actionCreators';\nimport {\n ADD_ELELEMT_PULSE_EFFECT_LC_ST_KEY,\n ADD_ELELEMT_PULSE_EFFECT_MAX,\n APP_HEADER_PROPS,\n APP_MODES,\n APP_PREVIEW_STATES,\n BRANDING_DEFAULT_UTM_SCHEME,\n CHECKOUT_FORM_STATUSES,\n ERROR_MESSAGES,\n getLayoutProps,\n getProtectedStylingProps,\n IMAGE_TYPE,\n ITEM_ADDITION_ORDER_STRATEGY,\n NOTIFICATION_DISMISS_KEY,\n NOTIFICATION_ERROR_MESSAGES,\n NOTIFICATION_PERMISSION_STATES,\n PORTAL_ERROR_MAP,\n UI_PROPS\n} from '../../constants';\nimport {\n captureException,\n checkMobilePhone,\n getUserAgentPlatformType,\n getTeamID,\n getUpdatedDate,\n ignoredActions,\n isItemTypeWidget,\n isTestingEnv,\n isTeamResourcePicker,\n isYes,\n sanitizeHTML,\n sendBreadcrumbsToSentry,\n sendTrackData,\n updateAndOverrideButtonProperties,\n utmParser,\n checkAndAddProtocolToTargetLink,\n isValidLinkTarget,\n isIosSafari\n} from '../../utils';\nimport { getOrderedItemList, safeWorker, sanitizeSVGIconURLs } from '../utils';\nimport { generateResourceURL } from '../../utils/navigation';\nimport { isPWA } from '../../modules/PublicApp/utils';\nimport { ITEM_TYPES, RESOURCE_TYPES } from '../../constants/itemTypes';\nimport {\n getAvailableItemTypesByVersion,\n getLatestVersion,\n guardPropsForGrandfatheredApps,\n isAppGrandfathered,\n useAppDefaults,\n useItemDefaults\n} from '../../properties';\nimport { FEATURE_NAMES } from '../../constants/features';\nimport { isFeatureEnabled, useEnabledFeatures } from '../../utils/features/helper';\nimport { watchUndoableActions, watchUndoRedoActions } from '../watchers/undoRedo';\nimport {\n checkAddElementPulseVisible,\n initAppElementPanelAbTest,\n initAppNameIconModalAbTest,\n keepClosedUIPanels,\n watchMultipleSelection,\n watchSelectAllItems,\n watchUIPanelsChanges,\n watchUIupdates,\n watchWindowSqueeze\n} from './ui';\nimport { watchToastActions } from '../watchers/toast';\nimport { watchNetworkStatus } from '../watchers/network';\nimport { watchItemDuplication } from '../watchers/itemDuplication';\nimport { watchDoneItemProgress, watchRestartProgress, watchTodoItemProgress } from '../watchers/progress';\nimport {\n watchFetchShareList,\n watchResourceShareURLUpdate,\n watchShareDeletePortal,\n watchSharePortal\n} from '../watchers/share';\nimport VERSIONS from '../../properties/versions';\nimport { watchStylingActions } from '../watchers/styling';\nimport { watchProgressBarAvailability } from '../workers/progressBarAvailability';\nimport { pageActions, watchHeadingItemToPageNaming, watchPageUpdate } from '../watchers/pageActions';\nimport { handleInstallableAppIcon, watchInstallableIconBuilderFlow } from '../watchers/assetGeneration';\nimport { watchPortalOrderInItemAddition } from '../workers/portalOrder';\nimport appConfig from '../../constants/appConfig';\nimport { watchItemSorting } from '../workers/itemSorting';\nimport { BUTTON_ROLE_TYPES } from '../../modules/Builder/components/HomePage/RightPanel/ButtonActions/buttonRoleTypes';\nimport { watchModals } from '../watchers/modals';\nimport { watchSignupActions } from '../watchers/signup';\nimport { resourceLinkTypes, resourceTypeMap, RightPanelModes } from '../../modules/Builder/components/HomePage/constants';\nimport productListActions from '../watchers/productListActions';\nimport navigationActions from '../watchers/navigation';\nimport collaborationFlow from '../watchers/collaboration';\nimport { momentToString } from '../../modules/Builder/components/Settings/utils';\nimport watchAppToast from '../watchers/appToast';\nimport searchInProductsActions from '../watchers/filterProducts';\nimport { MODALS } from '../../constants/modals';\nimport { TEAM_ID } from '../../constants/team';\nimport { DESTINATION_TYPES } from '../../constants/navigation';\nimport eventsFlow from '../events';\nimport { AllWidgetIDs } from '../../constants/availableWidgets';\nimport { activateFullStoryOnTheFly } from '../watchers/fullstory';\nimport { getColoredPropertiesBySchemeID } from '../../properties/styling';\nimport { getFilteredProperties } from '../../modules/Builder/components/HomePage/MultipleRightPanel/utils';\nimport productList from './productList';\nimport aiAssitant from './aiAssistant';\nimport checkoutFormFlow from './checkoutForm';\nimport dataSourceFlow, { dsFetchColumnsFlow } from './dataSource/dataSource';\nimport { eventChannelRegistry, resultMutaters, shouldUpdatePropFromResponse } from './helper';\nimport { abTestActionLoggerSingleton, AB_TEST_NAMES, LC_KEYS } from '../../utils/AbTestActionLoggerSingleton';\nimport ActionHelper from '../../utils/ActionsHelper';\nimport { AB_TESTS, logAbTestActionFor } from '../../utils/abtests';\nimport { AVAILABLE_DETAIL_PAGE_ITEMS } from '../../modules/Builder/components/HomePage/RightPanel/dataSourceHelpers';\nimport { isPushPermissionRecentlyDismissed } from '../../modules/PublicApp/PushNotificationPermission/utils';\nimport { DS_ITEM_LOAD_TYPES } from '../reducers/dataSource/constants';\nimport { WHATS_NEW_MODAL_FEATURES } from '../../modules/Builder/components/Modals/WhatsNewModal';\nimport { publishNavPaths } from '../../modules/Builder/components/Publish/constants';\n\nconst isUpdateAPIAction = type => /(UPDATE|ADD|REMOVE).*\\/(REQUEST|SUCCESS)/.test(type);\nconst isAPISuccessAction = ({ type }) => /SUCCESS$/.test(type);\nconst isAPIRequestAction = ({ type }) => /(REQUEST|UNDOABLE)$/.test(type);\nconst isAPIErrorAction = ({ type }) => /ERROR$/.test(type); // eslint-disable-line no-unused-vars\n\nexport function* fetchUserFlow() {\n let currentUser = yield select(SELECTORS.getUser);\n let payload;\n if (currentUser.username) {\n // We already got it from index.php\n delete window?.__userInfo;\n payload = { credentials: currentUser, type: currentUser.USER_TYPE };\n } else {\n // we should've got the user.. It seems something unexpected occurred let's try one last time for the sentry :D\n yield put({ type: ACTION_TYPES.FETCH_USER.REQUEST });\n try {\n const withCred = yield call(API.fetchUser);\n payload = withCred;\n currentUser = withCred.credentials;\n } catch (e) {\n console.error('Error on fetch user:', e);\n // Mocking since no valid user found at session.\n // The show must go on..\n const mockPublicUser = {\n type: 'USER',\n credentials: {\n username: 'guest_apiDemo',\n name: null,\n account_type: 'GUEST',\n allowMyApps: true,\n time_zone: ''\n }\n };\n payload = mockPublicUser;\n }\n }\n\n yield spawn(watchSignupActions);\n\n const { username, name } = currentUser;\n yield put({ type: ACTION_TYPES.FETCH_USER.SUCCESS, payload });\n\n if (Tracking.FSisInitialized()) {\n Tracking.identify(username, {\n displayName: name || username,\n appBuilder_bool: true\n });\n }\n}\n\nexport function* watchFetchPortalSuccess({ payload: { checkoutFormID } }) {\n const isBuilder = yield select(SELECTORS.getIsBuilder);\n if (isBuilder && checkoutFormID) {\n yield put({ type: ACTION_TYPES.FETCH_CHECKOUT_FORM_QUESTIONS.REQUEST, payload: checkoutFormID });\n }\n}\n\nexport function* fetchWidgetsFlow() {\n const appMode = yield select(SELECTORS.getAppModeSelector);\n if (appMode === APP_MODES.builder) {\n let { username } = yield select(SELECTORS.getUser);\n if (window.isDevelopment && window.DEVELOPER) {\n username = window.DEVELOPER;\n }\n yield put({ type: ACTION_TYPES.FETCH_WIDGETS.REQUEST });\n try {\n const allWidgets = yield call(API.fetchWidgets, username);\n const filterUsedWidgets = allWidgets.filter(widget => AllWidgetIDs.includes(widget?.client_id));\n yield put({ type: ACTION_TYPES.FETCH_WIDGETS.SUCCESS, payload: filterUsedWidgets });\n } catch (exception) {\n console.error(exception);\n yield put({ type: ACTION_TYPES.FETCH_WIDGETS.ERROR });\n }\n }\n}\n\nexport function* fetchEnvironmentFlow() {\n let environment = yield select(SELECTORS.getEnvironmentSelector);\n if (!environment) {\n yield put({ type: ACTION_TYPES.FETCH_ENVIRONMENT.REQUEST });\n environment = yield call(API.fetchEnvironmentVariables);\n }\n\n yield put({ type: ACTION_TYPES.FETCH_ENVIRONMENT.SUCCESS, data: environment });\n}\n\nconst getNewMigrationProps = (fromVersion, incomingData) => {\n // WORKS FOR 0 Only\n const {\n logoURL, logoType, logoBackground, iconColor\n } = incomingData;\n const latestDefaults = useAppDefaults(getLatestVersion());\n const defaultsByVersion = useAppDefaults(fromVersion);\n const keysByVersion = Object.keys(defaultsByVersion);\n const reducedLatests = Object.entries(latestDefaults).reduce((prev, [key]) => {\n return keysByVersion.includes(key)\n ? { ...prev }\n : { ...prev, [key]: '' }; // This prop don't know by the app. Builder is more capable than app. Should be neutralized.\n }, {});\n const downgradedDefaults = { ...defaultsByVersion, ...reducedLatests };\n if (!downgradedDefaults.appIconURL\n || !downgradedDefaults.appIconType\n || !downgradedDefaults.appIconBackground\n || !downgradedDefaults.appIconColor\n ) {\n // TODO exception for appIcon? handle upward and downward migrations all together! Consider items too..\n downgradedDefaults.appIconURL = logoURL;\n downgradedDefaults.appIconType = logoType;\n downgradedDefaults.appIconBackground = logoBackground;\n downgradedDefaults.appIconColor = iconColor;\n }\n\n return {\n ...downgradedDefaults,\n ...guardPropsForGrandfatheredApps\n };\n};\n\nconst getMigratedItems = ({ items, fromVersion }) => {\n // TODO Possible irem type conversion point!\n return items.map(item => {\n const itemDefaults = useItemDefaults(item.type, fromVersion);\n const {\n itemBorderColor: defaultItemBorderColor,\n itemBgColor: defaultItemBgColor,\n itemFontColor: defaultItemFontColor,\n itemTextAlignment: defaultItemTextAlignment\n } = itemDefaults;\n\n const {\n itemBorderColor = defaultItemBorderColor,\n itemBgColor = defaultItemBgColor,\n itemFontColor = defaultItemFontColor,\n itemTextAlignment = defaultItemTextAlignment\n } = item;\n\n return {\n itemID: item.id,\n itemBorderColor,\n itemBgColor,\n itemFontColor,\n itemTextAlignment\n };\n });\n};\n\nfunction* checkIsAssetBusy({ id: appID, ...props }) {\n const isBuilder = yield select(SELECTORS.getIsBuilder);\n if (!getTeamID() || !isBuilder) return false;\n const result = yield call(API.getAssetIsBusy, appID);\n if (isEmpty(result)) {\n yield call(API.teamLog, appID, 'portalAccessed');\n return false;\n }\n yield put(ACTION_CREATORS.updatePortalPropAction({ editingResourceProps: result, ...props }));\n return true;\n}\n\n// eslint-disable-next-line max-statements\nfunction* normalizeAndRegisterApp(appProps) {\n const latestVersion = getLatestVersion();\n const appMode = yield select(SELECTORS.getAppModeSelector);\n const appDefaultsByVersion = useAppDefaults(latestVersion);\n\n const {\n appVersion, id: portalID,\n name, appBgColor, appBgColorEnd,\n items\n } = appProps;\n\n // BUGFIX #3828940 :: We should clear HTML from the title\n const titleDOM = document.createElement('div');\n titleDOM.innerHTML = sanitizeHTML(appProps.title);\n const title = titleDOM.textContent || titleDOM.innerText || '';\n\n const {\n appBgColor: latestDefaultAppBgColor\n } = appDefaultsByVersion;\n\n let newProps = { ...appProps, title }; // hope it stays 1 level\n\n // we need to update some properties while Fetching portals silently\n const normalizeProperties = {\n name: {\n condition: isUndefined(name),\n replace: name || title\n },\n appBgColorEnd: {\n condition: appBgColor && isUndefined(appBgColorEnd),\n replace: appBgColor\n }\n };\n\n const propertyKeys = Object.keys(normalizeProperties);\n let propertiesToUpdate = {};\n propertyKeys.forEach(property => {\n const element = normalizeProperties[property];\n if (element.condition) {\n propertiesToUpdate = { ...propertiesToUpdate, [property]: element.replace };\n }\n });\n\n newProps = { ...newProps, ...propertiesToUpdate };\n\n let migratedItems = {};\n if (isAppGrandfathered(appVersion)) {\n // Handle App\n const reducedProps = getNewMigrationProps(appVersion, newProps);\n // Downgrade defaults by neutralizing for grandfathered apps (closed appCover, transparent appHeaderBgColor etc.)\n newProps = {\n ...reducedProps,\n ...newProps\n };\n\n const migratedPortal = {\n ...guardPropsForGrandfatheredApps,\n appVersion: getLatestVersion()\n };\n\n const hasCustomBgColor = Object.keys(appProps).includes('appBgColor');\n if (!hasCustomBgColor) {\n Object.assign(migratedPortal, {\n appBgColor: latestDefaultAppBgColor,\n appBgColorEnd: latestDefaultAppBgColor // for now, it is not saved\n });\n }\n\n newProps = { ...newProps, ...migratedPortal };\n propertiesToUpdate = { ...propertiesToUpdate, ...migratedPortal };\n // Handle Items\n migratedItems = getMigratedItems({ items, fromVersion: appVersion });\n }\n\n if (yield checkIsAssetBusy(newProps)) return;\n\n // one and only!\n yield put({ type: ACTION_TYPES.FETCH_PORTAL.SUCCESS, payload: { ...newProps } });\n\n if (appMode === APP_MODES.builder) {\n const hasPropToUpdate = !!Object.keys(propertiesToUpdate).length;\n if (hasPropToUpdate) yield call(API.updatePortal, portalID, { ...propertiesToUpdate, systemAction: 1 });\n\n const hasItemsToMigrate = !!Object.keys(migratedItems).length;\n if (hasItemsToMigrate) {\n for (let i = 0; i < migratedItems.length; i++) {\n const item = migratedItems[i];\n yield put(ACTION_CREATORS.updateItemPropAction({ itemID: item.itemID, prop: item }));\n }\n }\n }\n\n if (appMode === APP_MODES.public) {\n yield put(ACTION_CREATORS.calculateDoneItemCount());\n yield put(ACTION_CREATORS.calculateTodoItemCount());\n }\n}\n\nexport function* fetchPortalFlow(props = {}) {\n const hasPortalInfo = typeof window.__appInfo === 'object' && window.__appInfo.id;\n const { portalID } = props;\n if (!portalID && !hasPortalInfo) return; // BuildWithForm\n const appMode = yield select(SELECTORS.getAppModeSelector);\n const endpoints = {\n [APP_MODES.public]: API.fetchPortalPublicInfo,\n [APP_MODES.builder]: API.fetchPortal\n };\n try {\n const currentApp = yield (hasPortalInfo ? window.__appInfo : call(endpoints[appMode], portalID));\n yield call(normalizeAndRegisterApp, currentApp);\n delete window.__appInfo;\n } catch (error) {\n const status = error?.response?.status;\n const errorMap = appMode === APP_MODES.builder ? 'builder' : status;\n yield put({ type: ACTION_TYPES.SET_APP_STATUS, payload: { error } });\n yield put({ type: ACTION_TYPES.FETCH_PORTAL.ERROR, payload: PORTAL_ERROR_MAP.FETCH[errorMap] || PORTAL_ERROR_MAP.FETCH.default, error });\n }\n}\n\nexport function* fetchShareInfoFlow() {\n try {\n yield put({ type: ACTION_TYPES.FETCH_SHARE_INFO.REQUEST });\n const appMode = yield select(SELECTORS.getAppModeSelector);\n if ((appMode === APP_MODES.builder) && window.__shareInfo) {\n const resourceShareInfo = (typeof window.__shareInfo === 'object' && window.__shareInfo) ? window.__shareInfo : { shareList: [], shareToken: '' };\n yield put({ type: ACTION_TYPES.FETCH_SHARE_LIST.SUCCESS, payload: Object.values(resourceShareInfo.shareList) });\n yield put({ type: ACTION_TYPES.UPDATE_RESOURCE_SHARE_URL.SUCCESS, payload: resourceShareInfo.shareToken });\n delete window.__shareInfo;\n } else if ((appMode === APP_MODES.builder) && !window.__shareInfo) {\n yield put({ type: ACTION_TYPES.FETCH_SHARE_LIST.REQUEST });\n }\n yield put({ type: ACTION_TYPES.FETCH_SHARE_INFO.SUCCESS });\n } catch (error) {\n yield put({ type: ACTION_TYPES.SET_APP_STATUS, payload: { error } });\n yield put({ type: ACTION_TYPES.FETCH_SHARE_INFO.ERROR, payload: { error } });\n }\n}\n\nfunction* withPrefetchedData(key, ACTION) {\n if (typeof window[key] === 'object' && window[key]) {\n yield put({ type: ACTION.SUCCESS, payload: window[key] });\n delete window[key];\n } else {\n yield put({ type: ACTION.REQUEST });\n }\n}\n\nfunction* fetchStorePropertiesFlow() {\n const isPaymentApp = yield select(SELECTORS.getIsPaymentApp);\n const isBuilder = yield select(SELECTORS.getIsBuilder);\n if (!isBuilder && isPaymentApp) {\n yield withPrefetchedData('__storeProperties', ACTION_TYPES.FETCH_STORE_PROPERTIES);\n }\n}\n\nexport function* fetchTeamFlow() {\n const isBuilder = yield select(SELECTORS.getIsBuilder);\n if (isBuilder) {\n yield withPrefetchedData('__userTeams', ACTION_TYPES.FETCH_USER_TEAMS);\n yield withPrefetchedData('__userPermissionsInfo', ACTION_TYPES.FETCH_USER_TEAM_PERMISSIONS);\n }\n}\n\nexport function* appStatusChecker() {\n const appMode = yield select(SELECTORS.getAppModeSelector);\n if (appMode === APP_MODES.builder) {\n yield all([\n take(ACTION_TYPES.FETCH_PORTAL.SUCCESS),\n take(ACTION_TYPES.FETCH_ENVIRONMENT.SUCCESS),\n take(ACTION_TYPES.FETCH_USER.SUCCESS),\n take(ACTION_TYPES.FETCH_WIDGETS.SUCCESS)\n ]);\n } else {\n yield all([\n take(ACTION_TYPES.FETCH_PORTAL.SUCCESS),\n take(ACTION_TYPES.FETCH_USER.SUCCESS)\n ]);\n }\n yield put({ type: ACTION_TYPES.SET_APP_STATUS, payload: 'ready' });\n}\n\nfunction* trackEvent({ payload: { action = '', target = {} } } = {}) {\n if (!action) return;\n if (ignoredActions.includes(action)) return;\n\n if (typeof target === 'object') {\n /* eslint-disable no-param-reassign */\n target.device = getUserAgentPlatformType();\n target.isPWA = isPWA();\n /* eslint-enable no-param-reassign */\n }\n\n const username = yield select(SELECTORS.getUsername);\n const portalID = yield select(SELECTORS.getPortalIDSelector);\n const portalType = yield select(SELECTORS.getPortalType);\n yield call(sendTrackData, username, action, { portalID, portalType, ...target });\n}\n\nfunction* trackEvents() {\n yield takeEvery(ACTION_TYPES.TRACK_EVENT, trackEvent);\n}\n\nfunction* watchErrors({ type, error }) { // eslint-disable-line require-yield\n sendBreadcrumbsToSentry({\n level: 'error', type: 'error', category: 'actions', message: `Error occured type: ${type}`\n });\n yield call(captureException, error);\n}\n\n// TODO :: seperate this\n/* eslint-disable max-statements */\nexport function* watchPortalUpdates(action) {\n const { payload: properties } = action;\n const portalID = yield select(SELECTORS.getPortalIDSelector);\n const appVersion = yield select(SELECTORS.getAppVersionSelector);\n\n const keysToUpdate = Object.keys(properties);\n const defaultAppByVersion = useAppDefaults(appVersion);\n const defaultsKeysByVersion = Object.keys(defaultAppByVersion);\n const defaultAppByLatest = useAppDefaults(getLatestVersion());\n const defaultsKeysByLatest = Object.keys(defaultAppByLatest);\n\n const migrationRequiredKeys = difference(defaultsKeysByLatest, defaultsKeysByVersion);\n const shouldMigrate = keysToUpdate.some(key => migrationRequiredKeys.includes(key));\n const finalVersion = shouldMigrate ? getLatestVersion() : appVersion;\n\n const resetCropTriggers = {\n appCoverBgURL: 'appCoverBgCropInfo',\n appHeaderBgURL: 'appHeaderBgCropInfo'\n };\n\n const updatingProperties = Object.entries(properties).reduce((prev, [key]) => {\n return Object.keys(resetCropTriggers).includes(key)\n ? {\n ...prev,\n [resetCropTriggers[key]]: ''\n }\n : { ...prev };\n }, properties);\n\n // Removing appLogo should reset AppLogoSize too..\n if (updatingProperties.logoURL === '') {\n updatingProperties.appLogoSize = 0;\n }\n\n // title\n if (updatingProperties.name) {\n const title = yield select(SELECTORS.getAppTitle);\n const name = yield select(SELECTORS.getAppName);\n const { title: defaultAppTitle } = defaultAppByVersion;\n if (defaultAppTitle === title || title === name) {\n updatingProperties.title = updatingProperties.name;\n }\n }\n\n // attach version\n let newVersionProps = { appVersion: finalVersion };\n const currentApp = yield select(SELECTORS.getAppInfoWithDefaults);\n if (shouldMigrate) {\n const initialMigrationProps = getNewMigrationProps(finalVersion, currentApp);\n newVersionProps = { ...initialMigrationProps, ...currentApp, appVersion: finalVersion };\n }\n const propsToUpdate = { ...updatingProperties, ...newVersionProps };\n const currentData = Object.keys(propsToUpdate).reduce((pre, next) => {\n return { ...pre, [next]: currentApp[next] };\n }, {});\n\n if (propsToUpdate.mobileMenuIcon) {\n propsToUpdate.mobileMenuIcon = sanitizeSVGIconURLs(propsToUpdate.mobileMenuIcon);\n }\n\n yield put({\n type: ACTION_TYPES.UPDATE_PORTAL.REQUEST,\n payload: propsToUpdate\n });\n\n const updateResult = yield call(API.updatePortal, portalID, propsToUpdate);\n yield put(ACTION_CREATORS.trackEventAction({ action: 'appUpdated', target: { props: Object.keys(updatingProperties) } }));\n if (shouldMigrate) {\n yield put(ACTION_CREATORS.trackEventAction({ action: 'appMigrated', target: { to: finalVersion } }));\n }\n\n // make mode on crop state while changing AppHeader/Cover background\n const backgroundCropProps = Object.keys(resetCropTriggers);\n const updatingBackgroundCropProp = Object.keys(updateResult).filter(prop => backgroundCropProps.includes(prop))[0];\n if (updatingBackgroundCropProp && !!updateResult[updatingBackgroundCropProp] && !checkMobilePhone()) {\n yield put(ACTION_CREATORS.toggleRightPanelAction(false));\n yield put(ACTION_CREATORS.toggleImageCropState(updatingBackgroundCropProp, true));\n }\n\n // close RightPanel after AppHeader is closed\n const isClosingAppHeader = propsToUpdate?.openAppHeader === 'No';\n if (isClosingAppHeader) {\n yield put(ACTION_CREATORS.setRightPanelModeAction(''));\n yield put(ACTION_CREATORS.selectPortalItemAction());\n }\n\n yield put({\n type: ACTION_TYPES.UPDATE_PORTAL.SUCCESS,\n payload: updateResult,\n requestAction: action,\n currentData\n });\n}\n\nfunction* fetchCheckoutFormID() {\n const appID = yield select(SELECTORS.getAppID);\n\n yield put(ACTION_CREATORS.fetchPortalAction(appID));\n}\n\n// eslint-disable-next-line complexity\nexport function* watchPortalItemAdditions(action) {\n const logAbTestAction = abTestActionLoggerSingleton[AB_TEST_NAMES.ELEMENT_PANEL_VISIBILITY] || (f => f);\n const getItemDefaults = yield select(SELECTORS.getItemDefaultsGetter);\n\n const isElementAlreadyAdded = StorageHelper.getLocalStorageItem({ key: LC_KEYS.ELEMENT_PANEL_VISIBILITY.IS_ELEMENT_ADDED });\n if (!isElementAlreadyAdded) {\n StorageHelper.setLocalStorageItem({ key: LC_KEYS.ELEMENT_PANEL_VISIBILITY.IS_ELEMENT_ADDED, value: true });\n logAbTestAction(\n {\n action: 'click',\n target: 'appElementAddedFirstTime'\n }\n );\n }\n\n const {\n payload: {\n items, order, isDuplicate = false, focusItemID\n }, dontStack = false, isUndo = false\n } = action;\n if (Array.isArray(items) && items.length === 0) {\n return;\n }\n const portalID = yield select(SELECTORS.getPortalIDSelector);\n\n // Considers the page of the LAST item in the payload in order to cover the case of adding into different pages (caused by an undo of multiple delete)\n const pageOfTheItem = items.reduce((prev, { page = 'homepage' }) => page, '');\n\n if (!focusItemID) {\n yield put(ACTION_CREATORS.updateLastInteractedPageIDAction(pageOfTheItem));\n }\n\n let overridedItems = items;\n // Override w/selected scheme/theme\n if (!isDuplicate) {\n const { overridingItemProps } = yield select(SELECTORS.getAppInfoWithDefaults);\n const overridingProps = safeJSONParse(overridingItemProps);\n overridedItems = items.map(i => {\n const { type } = i;\n if (!isEmpty(overridingProps) && Object.keys(overridingProps).includes('itemColors')) {\n return { ...i, ...type === ITEM_TYPES.BUTTON ? overridingProps.buttonColors : overridingProps.itemColors };\n }\n return { ...i, ...type === ITEM_TYPES.BUTTON ? {} : overridingProps };\n });\n }\n\n overridedItems = overridedItems.map(item => {\n switch (item.type) {\n case ITEM_TYPES.LIST: {\n const { presentationItemType } = item;\n const presentationItem = getItemDefaults(presentationItemType);\n return { ...item, presentationItem };\n }\n default: {\n return item;\n }\n }\n });\n\n const result = yield call(API.addItemToPortal, portalID, overridedItems, Math.round(order));\n\n const listItems = result.filter(item => item.type === ITEM_TYPES.LIST);\n\n if (listItems.length > 0 && !isUndo) {\n yield all(\n listItems.map(item => [\n put(ACTION_CREATORS.createAndLinkDetailsPage({ itemID: item.id, resourceID: item.resourceID, viewID: item.viewID })),\n put(ACTION_CREATORS.dsSetLoading({ itemID: item.id, loadType: DS_ITEM_LOAD_TYPES.INIT, isLoading: true }))\n ]).flat()\n );\n }\n\n const hasCheckoutRelatedItem = result.some(({ type }) => [ITEM_TYPES.PRODUCT_LIST, ITEM_TYPES.DONATION].includes(type));\n if (hasCheckoutRelatedItem) yield fetchCheckoutFormID();\n\n yield put({\n type: ACTION_TYPES.ADD_PORTAL_ITEMS.SUCCESS, payload: result, requestAction: action, dontStack\n });\n\n // manage pulse effect\n const pulseStorage = StorageHelper.getLocalStorageItem({ key: ADD_ELELEMT_PULSE_EFFECT_LC_ST_KEY });\n const currentPulseCount = yield select(SELECTORS.getUIProp(UI_PROPS.addElementButtonPulseCount));\n if (!pulseStorage && (currentPulseCount < ADD_ELELEMT_PULSE_EFFECT_MAX)) {\n const nextPulseCount = currentPulseCount + 1;\n yield put(ACTION_CREATORS.setUIProp(UI_PROPS.addElementButtonPulseCount, nextPulseCount));\n if (nextPulseCount === ADD_ELELEMT_PULSE_EFFECT_MAX) {\n yield put(ACTION_CREATORS.setUIProp(UI_PROPS.addElementButtonPulseVisible, false));\n StorageHelper.setLocalStorageItem({\n key: ADD_ELELEMT_PULSE_EFFECT_LC_ST_KEY,\n value: true\n });\n }\n }\n\n const isLeftPanelOpen = yield select(SELECTORS.isLeftPanelOpenSelector);\n const isMobile = checkMobilePhone();\n if (isLeftPanelOpen && isMobile) {\n yield put(ACTION_CREATORS.toggleLeftPanelAction(false));\n }\n\n // make mobile multiple selection mode false while adding new item\n const isMobileMultiSelectedMode = yield select(SELECTORS.getSelectedMultipleItems);\n if (isMobileMultiSelectedMode) {\n yield put(ACTION_CREATORS.toggleMultipleSelectionModeAction(false));\n }\n\n // User may trying to add a \"newer\" item type. That requires migration.\n const appVersion = yield select(SELECTORS.getAppVersionSelector);\n const availableTypesByVersion = getAvailableItemTypesByVersion(appVersion);\n const addedSomeNewItemType = items.some(({ type }) => !availableTypesByVersion.includes(type)); // a \"newer\" item is being added\n const shouldMigrate = appVersion < VERSIONS[1] && addedSomeNewItemType;\n if (shouldMigrate) {\n yield put(ACTION_CREATORS.updatePortalAction({ appVersion: getLatestVersion() }));\n }\n\n const additionResult = result.filter(({ type }) => !!type); // Result with no type means order update as a side effect of addition\n for (let i = 0; i < additionResult.length; i++) {\n const { type, portalOrder, id } = additionResult[i];\n const eventAction = `${type === ITEM_TYPES.FORM ? 'formsAdded' : `${type.toLowerCase()}Added`}`;\n const details = { portalOrder, id };\n const target = type === ITEM_TYPES.FORM ? { ...details, count: 1 } : details;\n yield put(ACTION_CREATORS.trackEventAction({ action: eventAction, target }));\n }\n\n // Treat last added item\n const [{ id: lastAddedItemID, type }] = listItems.length > 0 ? listItems.slice(-1) : additionResult.slice(-1);\n if (isLeftPanelOpen && isMobile) {\n yield delay(300);\n }\n\n const settedLastAddedItem = focusItemID ?? lastAddedItemID;\n\n yield put({ type: ACTION_TYPES.SET_LAST_ADDED_ITEM, payload: settedLastAddedItem });\n\n const isWidget = type === ITEM_TYPES.WIDGET;\n const targetRightPanelMode = isWidget ? RightPanelModes.APP_WIDGET : RightPanelModes.APP_ITEM;\n yield put(ACTION_CREATORS.prepareRightPanelAction(targetRightPanelMode, settedLastAddedItem));\n if ([ITEM_TYPES.PRODUCT_LIST, ITEM_TYPES.DONATION].includes(type)) {\n yield put(ACTION_CREATORS.toggleLeftPanelAction(false));\n yield put(ACTION_CREATORS.toggleRightPanelAction(true));\n }\n}\n\nexport function* watchPortalItemRemovals(action) {\n const { payload: { itemIDs }, dontStack = false } = action;\n const portalID = yield select(SELECTORS.getPortalIDSelector);\n const existingItems = yield select(SELECTORS.getPortalItems);\n const itemIDList = itemIDs.filter(i => i);\n const itemsToRemove = existingItems.filter(({ id }) => itemIDList.includes(id));\n const formsToRemoveIds = itemsToRemove.filter(({ type }) => type === ITEM_TYPES.FORM).map(({ id }) => id);\n const sentboxItems = existingItems.filter(({ type }) => type === ITEM_TYPES.SENTBOX_LINK);\n\n if (formsToRemoveIds && sentboxItems) {\n const sentboxItemsToRemove = sentboxItems.filter(({ resourceID }) => formsToRemoveIds.includes(resourceID));\n sentboxItemsToRemove.forEach(sentboxItem => {\n itemsToRemove.push(sentboxItem);\n itemIDList.push(sentboxItem.id);\n });\n }\n\n if (!itemIDList.length) {\n throw new Error('No item ID supplied for removal.');\n }\n\n let newItemList = existingItems;\n\n itemsToRemove.forEach(item => {\n newItemList = getOrderedItemList(newItemList, item);\n });\n\n yield call(API.removeItemsFromPortal, portalID, itemIDList);\n const isSingleItem = itemsToRemove.length === 1;\n yield put(ACTION_CREATORS.trackEventAction(\n {\n action: 'itemsRemoved',\n target: {\n count: itemIDList.length,\n ...isSingleItem && { type: itemsToRemove[0].type, id: itemsToRemove[0].id }\n }\n }\n ));\n\n const isPaymentFieldDeleted = itemsToRemove.find(item => [ITEM_TYPES.PRODUCT_LIST, ITEM_TYPES.DONATION].includes(item.type));\n const noPaymentAfterDeletion = !newItemList.find(item => [ITEM_TYPES.PRODUCT_LIST, ITEM_TYPES.DONATION].includes(item.type));\n const isReusableConnectionEnabled = yield select(SELECTORS.getIsReusableConnectionEnabled);\n if (isPaymentFieldDeleted && noPaymentAfterDeletion && isReusableConnectionEnabled) { // remove/detach connection\n const checkoutFormID = yield select(SELECTORS.getCheckoutFormIDSelector);\n yield put(ACTION_CREATORS.updateGatewaySettings({ type: 'control_payment', currency: 'USD', itemDeleted: 1 }));\n yield call(PaymentActions.detachPaymentConnection, 'APP', checkoutFormID);\n }\n\n yield put({\n type: ACTION_TYPES.REMOVE_PORTAL_ITEMS.SUCCESS, payload: newItemList, requestAction: action, dontStack, currentData: itemsToRemove\n });\n\n const message = isSingleItem\n ? t('Item is deleted')\n : t('Items are deleted');\n\n yield put(ACTION_CREATORS.undoableToastAction(message));\n yield put(ACTION_CREATORS.selectPortalItemAction(''));\n}\n\nexport function* watchFetchForms() {\n let forms = yield call(API.fetchForms);\n if (isTeamResourcePicker()) {\n const teamForms = yield call(API.getTeamResources, { teamID: TEAM_ID, resourceType: 'form' });\n forms = [...forms, ...teamForms];\n }\n yield put({ type: ACTION_TYPES.FETCH_FORMS.SUCCESS, payload: forms });\n}\n\nfunction* fetchTeamResources(resourceType, actionType) {\n const teamID = getTeamID();\n const response = yield call(API.getTeamResources, { teamID, resourceType });\n yield put({ type: actionType, payload: response });\n}\n\nexport function* watchFetchResources(resourceType, actionType, regularAction) {\n const actions = {\n team: () => call(fetchTeamResources, resourceType, actionType),\n regular: () => call(regularAction)\n };\n\n yield actions[isTeamResourcePicker() ? 'team' : 'regular']();\n}\n\nconst prepateSignDocuments = signs => {\n const preparedSigns = signs.map(sign => {\n const { signerCount, embedDocumentKey, formID } = sign;\n\n const handleGoToSign = () => {\n handleCustomNavigation(`/sign/${formID}/send/embed`, '_blank');\n };\n\n const errorText = (\n <>\n Only single signer and\n {' '}\n embed code generated\n {' '}\n documents can be added\n \n );\n\n if (signerCount < 1) {\n return {\n ...sign, errorText, disabled: true, noSigner: true\n };\n }\n\n if (signerCount > 1) {\n return {\n ...sign, errorText, disabled: true, multipleSigner: true\n };\n }\n\n if (!embedDocumentKey) {\n return {\n ...sign, errorText, disabled: true, noLink: true\n };\n }\n\n return sign;\n });\n\n const sortSigns = items => {\n return items.sort((a, b) => {\n const date1 = new Date(a.modificationDate);\n const date2 = new Date(b.modificationDate);\n return date1.getTime() - date2.getTime();\n });\n };\n\n const noLinkSigns = preparedSigns.filter(item => item.noLink);\n const noSignerSigns = preparedSigns.filter(item => item.noSigner);\n const multipleSigners = preparedSigns.filter(item => item.multipleSigner);\n const demonstrableSings = preparedSigns.filter(item => !item.disabled);\n const sortedSigns = sortSigns(demonstrableSings);\n\n // change the parts if it needed..\n return [...sortSigns(sortedSigns), ...sortSigns([...noLinkSigns, ...noSignerSigns, ...multipleSigners])];\n};\n\nexport function* wathcFetchSigns() {\n if (!isFeatureEnabled(FEATURE_NAMES.SignField)) {\n return;\n }\n const appID = yield select(SELECTORS.getAppID);\n const signs = yield call(API.fetchSigns, appID);\n const preparedSigns = prepateSignDocuments(signs);\n yield put({ type: ACTION_TYPES.FETCH_SIGNS.SUCCESS, payload: preparedSigns });\n}\n\nexport function* portalCreationError(error) {\n const { data: { responseCode } = {} } = error;\n let reason = 'default';\n switch (responseCode) {\n case 429:\n const isUserLoggedIn = yield select(SELECTORS.selectIsUserLoggedIn);\n reason = isUserLoggedIn ? PORTAL_ERROR_MAP.CREATE.CREATE_APP_RATE_LIMIT : PORTAL_ERROR_MAP.CREATE.CREATE_APP_RATE_LIMIT_GUEST;\n break;\n case 500:\n reason = PORTAL_ERROR_MAP.CREATE.CREATE_APP;\n break;\n default:\n }\n yield put({ type: ACTION_TYPES.SET_APP_STATUS, payload: { error } });\n yield put({ type: ACTION_TYPES.CREATE_NEW_PORTAL.ERROR, payload: PORTAL_ERROR_MAP.CREATE[reason], error });\n}\n\nexport function* watchCreatePortal({ formIDs = null, widgetDefaults = null, createWithFormProperties = {} }) {\n try {\n const appPropertiesDefault = useAppDefaults();\n const appProperties = { ...appPropertiesDefault, ...createWithFormProperties };\n const homePage = { id: 0, pageOrder: 0 };\n const _page = isFeatureEnabled(FEATURE_NAMES.SortPages) ? homePage : null;\n const app = yield call(API.createPortal, formIDs, appProperties, widgetDefaults, _page);\n const { id } = app;\n const isFromStartFromScratch = StorageHelper.getSessionStorageItem({ key: 'create_app_from_scratch' });\n const from = isFromStartFromScratch && { from: 'wizard:start-from-scratch' };\n\n yield put(ACTION_CREATORS.trackEventAction({ action: 'appCreated', target: { portalID: id, ...from } }));\n StorageHelper.removeSessionStorageItem({ key: 'create_app_from_scratch' });\n yield call(normalizeAndRegisterApp, app);\n yield put({ type: ACTION_TYPES.CREATE_NEW_PORTAL.SUCCESS, payload: { formIDs, widgetDefaults } });\n navigate(`${getAppPath()}/build/${id}${window.location.search}`, { replace: true });\n } catch (error) {\n yield call(portalCreationError, error);\n }\n}\n\nexport function* watchBuildOrCreate({ payload: formID }) {\n yield put(ACTION_CREATORS.fetchFormsAction());\n const portalsOfForm = yield call(API.fetchPortalsByFormID, formID);\n if (portalsOfForm.length === 0) {\n navigate(`${getAppPath()}/create/${formID}`, { replace: true });\n return;\n }\n yield put({ type: ACTION_TYPES.FETCH_APPS.SUCCESS, payload: portalsOfForm });\n}\n\nexport function* shareFlow() {\n yield takeEvery(ACTION_TYPES.BULK_SHARE_PORTAL.REQUEST, watchSharePortal);\n yield takeEvery(ACTION_TYPES.BULK_DELETE_SHARE_PORTAL.REQUEST, watchShareDeletePortal);\n yield takeEvery(ACTION_TYPES.UPDATE_RESOURCE_SHARE_URL.REQUEST, watchResourceShareURLUpdate);\n yield takeLatest(ACTION_TYPES.FETCH_SHARE_LIST.REQUEST, watchFetchShareList);\n}\n\nexport function* watchItemOrderUpdate(action) {\n const { payload, dontStack = false } = action;\n const {\n data, sortInfo, page, elementID\n } = payload;\n\n const pageHeadingItems = data.filter(i => i.page === page).filter(i => i.type === ITEM_TYPES.HEADING);\n const isItFirstHeading = pageHeadingItems.length === 1;\n\n if (isItFirstHeading) {\n const { title } = yield select(SELECTORS.getPortalItemByIDSelector(elementID));\n yield put({\n type: ACTION_TYPES.WATCH_HEADING_ITEM_FOR_PAGE_NAMING,\n payload: {\n itemID: elementID,\n prop: {\n title,\n newPage: page\n }\n }\n });\n }\n\n const requestAction = { type: ACTION_TYPES.UPDATE_ORDER.REQUEST, payload: data };\n const portalID = yield select(SELECTORS.getPortalIDSelector);\n const currentData = yield select(SELECTORS.getPortalItems);\n yield put(requestAction);\n\n const result = yield call(API.bulkUpdateItems, portalID, data);\n\n yield put({\n type: ACTION_TYPES.UPDATE_ORDER.SUCCESS,\n payload: result,\n currentData,\n requestAction: action,\n dontStack\n });\n\n yield put(ACTION_CREATORS.trackEventAction({ action: 'itemOrdersUpdated', target: sortInfo }));\n}\n\nfunction* checkLoginableApp() {\n const { loginable, id } = yield select(SELECTORS.getAppInfoWithDefaults);\n if (isYes(loginable)) {\n return;\n }\n // make portal loginable\n yield put(ACTION_CREATORS.updatePortalAction({ loginable: 'Yes' }));\n const redirectPublish = () => {\n navigate(`${getAppPath()}/build/${id}/publish/link/shareSettings`);\n };\n yield put(ACTION_CREATORS.toastAction({\n message: 'Users now can access their submissions through the app.',\n buttonText: 'Go to Publish',\n onButtonClick: redirectPublish\n }));\n}\n\n// TODO :: seperate this\n/* eslint-disable max-statements */\n/* eslint-disable-next-line complexity */\nexport function* watchItemPropUpdate(action) {\n const {\n payload: {\n itemID, prop, linkedItemID = null, bypassDebounce = false\n }\n } = action;\n const portalID = yield select(SELECTORS.getPortalIDSelector);\n if (!itemID) {\n throw new Error('No item ID specified');\n }\n\n let updatingProps = { ...prop };\n let linkPreviewResolved = false;\n const itemProps = yield select(SELECTORS.getPortalItemByIDSelector(itemID));\n const {\n showLinkPreview: currentShowLinkPreview, type, title: itemTitle, formTitle\n } = itemProps;\n const updatingShowLinkPreview = updatingProps?.showLinkPreview;\n\n if (type === ITEM_TYPES.LINK) {\n const updatingLinkWithPreviewEnabled = Object.keys(prop).includes('title') && isYes(currentShowLinkPreview);\n const turningPreviewOn = isYes(updatingShowLinkPreview);\n // Do not send request when showLinkPreview is No.\n if (updatingLinkWithPreviewEnabled || turningPreviewOn) {\n const sanitizedTitle = (prop.title || '').replace(/^https:\\/\\/(https?):\\/\\//, '$1://'); // replace w/ first matched group // TODO try to handle other protocols and occurrences too\n const linkTargetIsMailTo = sanitizedTitle.startsWith('mailto:'); // Dirty fix, validUrl check gets confused about mailto..\n const URL = checkAndAddProtocolToTargetLink(sanitizedTitle || itemTitle);\n if (isValidLinkTarget(URL) && !linkTargetIsMailTo) {\n yield put(ACTION_CREATORS.updateItemLoadingStatus({ [itemID]: true }));\n linkPreviewResolved = true;\n // get preview\n const {\n title: previewTitle,\n image: previewImageURL,\n imageWidth: previewImageWidth,\n imageHeight: previewImageHeight\n } = yield call(API.getLinkItemPreviewDetails, { portalID, itemID, URL });\n\n // Enrich props\n updatingProps = {\n ...updatingProps,\n previewTitle,\n previewImageURL,\n previewImageWidth,\n previewImageHeight\n };\n\n if (prop.title && sanitizedTitle !== prop.title) {\n updatingProps = {\n ...updatingProps,\n title: sanitizedTitle\n };\n }\n\n // Track\n yield put(ACTION_CREATORS.trackEventAction({ action: 'linkPreviewResolved', target: { itemID } }));\n } else {\n updatingProps = {\n ...updatingProps,\n previewTitle: 'Link',\n previewImageURL: '',\n previewImageWidth: '',\n previewImageHeight: ''\n };\n }\n }\n }\n\n // Guard for empty form titles\n if ([ITEM_TYPES.FORM, ITEM_TYPES.SIGN_LINK].includes(type)) {\n const { title, required_showBadge, completed_showBadge } = updatingProps;\n if (title === '' && type === ITEM_TYPES.FORM) {\n updatingProps = { ...updatingProps, title: formTitle };\n }\n // todo :: handle elsewhere\n if (isYes(required_showBadge)) updatingProps = { ...updatingProps, completed_showBadge: required_showBadge };\n\n if ((isYes(required_showBadge) || isYes(completed_showBadge))) {\n yield call(checkLoginableApp);\n }\n }\n\n if (ITEM_TYPES.FORM === type && !!prop.embeddedForm && itemProps.isInitialForm === 'Yes') {\n const _action = prop.embeddedForm === 'Yes' ? 'enabled' : 'disabled';\n logAbTestActionFor(AB_TESTS.ShowFormFromFormBuilder, { action: _action, target: 'showForm' });\n }\n\n const currentItem = yield select(SELECTORS.getItemWithDefaults(itemID));\n\n const { buttonRole, buttonValue: updatingButtonValue } = updatingProps;\n\n if (ActionHelper.ACTIONABLE_ITEMS.includes(type)) {\n const ItemActionHelper = ActionHelper.createComponent(type);\n const userInfo = yield select(SELECTORS.getUser);\n const firstPageID = yield select(SELECTORS.getFirstPageID);\n const pages = yield select(SELECTORS.getPortalPages);\n const pagesLength = pages?.length;\n\n const { title, buttonRole: currentButtonRole, buttonValue } = currentItem;\n const { title: currentFormTitle } = yield select(SELECTORS.getFormByID(buttonValue));\n\n const isTitleFormTitle = title === currentFormTitle;\n const isTitleDefault = ItemActionHelper.isTitleDefault(title);\n\n if (!updatingButtonValue && buttonRole) {\n const { defaultTexts } = ItemActionHelper;\n const updatingButtonProps = updateAndOverrideButtonProperties({\n defaultTexts,\n currentItem,\n updatingProps,\n userInfo,\n isTitleFormTitle,\n isTitleDefault,\n navigationDefaultPage: pagesLength > 1 ? firstPageID : ''\n });\n updatingProps = { ...updatingProps, ...updatingButtonProps };\n }\n\n if (currentButtonRole === BUTTON_ROLE_TYPES.FORM && updatingButtonValue) {\n const { title: updatingFormTitle } = yield select(SELECTORS.getFormByID(updatingButtonValue));\n\n const newTitle = (!title || isTitleDefault || isTitleFormTitle) ? { title: updatingFormTitle } : {};\n\n // We need to send buttonRole even if it's not one of the changing props\n updatingProps = { ...updatingProps, ...newTitle, buttonRole: currentButtonRole };\n }\n }\n\n if (type === ITEM_TYPES.HEADING) {\n yield put({ type: ACTION_TYPES.WATCH_HEADING_ITEM_FOR_PAGE_NAMING, payload: action.payload });\n }\n\n // Make icon svg urls relative\n if (updatingProps.itemIcon) {\n updatingProps.itemIcon = sanitizeSVGIconURLs(updatingProps.itemIcon);\n }\n\n const currentData = Object.keys(updatingProps).reduce((pre, next) => {\n return { ...pre, [next]: currentItem[next] };\n }, {});\n\n const shouldUpdate = shouldUpdatePropFromResponse(type, updatingProps);\n\n const actionType = bypassDebounce ? ACTION_TYPES.UPDATE_ITEM_PROP.WITHOUT_DEBOUNCE : ACTION_TYPES.UPDATE_ITEM_PROP.WITH_DEBOUNCE;\n\n yield put({\n type: actionType,\n payload: {\n itemID,\n prop: updatingProps,\n linkedItemID\n },\n shouldUpdate,\n currentData,\n linkPreviewResolved,\n requestAction: action,\n currentItem\n });\n}\n\nexport function* watchItemPropUpdateRequest(action) {\n const isBuilder = yield select(SELECTORS.getIsBuilder);\n if (!isBuilder) return;\n\n const portalID = yield select(SELECTORS.getPortalIDSelector);\n const previewPanelOpened = yield select(SELECTORS.isPreviewPanelOpenSelector);\n\n const {\n payload: { itemID, prop: updatingProps, linkedItemID = null }, linkPreviewResolved, currentData, shouldUpdate, currentItem\n } = action;\n\n try {\n let result = yield call(API.changeItemProp, portalID, itemID, updatingProps);\n\n if (shouldUpdate) {\n const mutaterFunc = resultMutaters(currentItem)?.[currentItem?.type];\n if (mutaterFunc && typeof mutaterFunc === 'function') {\n result = mutaterFunc(result);\n }\n }\n\n if (shouldUpdate || previewPanelOpened) {\n yield put({\n type: ACTION_TYPES.UPDATE_ITEM_PROP.SUCCESS,\n payload: result,\n requestAction: action,\n currentData\n });\n }\n\n if (currentItem?.page) {\n const pageProps = yield select(SELECTORS.getPageByID(currentItem.page));\n if (pageProps?.linkedItemID) {\n const activeRowID = yield select(SELECTORS.dsGetActiveListRowID(pageProps.linkedItemID));\n yield put(ACTION_CREATORS.dsFetchRow({ itemID, rowID: activeRowID }));\n } else if (linkedItemID) {\n yield put(ACTION_CREATORS.setLivePreviewStatus(APP_PREVIEW_STATES.LOADING));\n\n const isButtonRoleUpdate = Object.keys(updatingProps).includes('buttonRole');\n yield put(ACTION_CREATORS.dsFetchSourceItemData({ itemID: linkedItemID, isButtonRoleUpdate }));\n }\n }\n\n if (currentItem?.type === ITEM_TYPES.LIST && Object.keys(updatingProps)?.includes('resourceID')) {\n yield put(ACTION_CREATORS.dsFetchColumnsRequest({ resourceID: updatingProps.resourceID, viewID: updatingProps?.viewID }));\n yield put(ACTION_CREATORS.dsFetchSourceItemData({ itemID: currentItem.id }));\n yield put(ACTION_CREATORS.dsSetActiveRowID({ itemID, rowID: null }));\n }\n\n if (linkPreviewResolved) { // TODO Handle error cases too\n yield put(ACTION_CREATORS.updateItemLoadingStatus({ [itemID]: false }));\n }\n\n // Track\n const resultsEntries = Object.entries(result);\n for (let i = 0; i < resultsEntries.length; i++) {\n const [updatedItemID, value] = resultsEntries[i];\n const updatedPropKeys = Object.keys(value);\n yield put(ACTION_CREATORS.trackEventAction({ action: 'itemUpdated', target: { itemID: updatedItemID, prop: updatedPropKeys } }));\n }\n if (linkedItemID) {\n yield put(ACTION_CREATORS.setAppUpdatedAt(true));\n }\n } catch (err) {\n console.error(err);\n yield put(ACTION_CREATORS.toastAction({\n message: 'Changes are not saved',\n error: true,\n type: 'error'\n }));\n }\n}\n/* eslint-enable max-statements */\n\nexport function* watchCreateFormFromTemplate({ payload: { cloneData } }) {\n const { status, data: { form: { id: formID } } } = yield call(API.cloneTemplate, 'form', cloneData);\n yield put(ACTION_CREATORS.trackEventAction({ action: 'templateUsed', target: { templateID: cloneData.formID } }));\n if (status !== 200) {\n yield put({ type: ACTION_TYPES.CREATE_FORM_FROM_TEMPLATE.ERROR });\n return;\n }\n\n yield put(ACTION_CREATORS.fetchFormsAction());\n const formProps = {\n id: formID,\n ...useItemDefaults(ITEM_TYPES.FORM)\n };\n yield put(ACTION_CREATORS.addPortalItemAction(formProps));\n}\n\nexport function* watchCreateFormFromScratch({ payload: formID }) {\n yield put(ACTION_CREATORS.trackEventAction({ action: 'formCreated', target: { formID: formID } }));\n if (!formID) {\n yield put({ type: ACTION_TYPES.CREATE_FORM_FROM_SCRATCH.ERROR });\n return;\n }\n\n yield put(ACTION_CREATORS.fetchFormsAction());\n const formProps = {\n id: formID,\n ...useItemDefaults(ITEM_TYPES.FORM)\n };\n yield put(ACTION_CREATORS.addPortalItemAction(formProps));\n}\n\nexport function* watchCreateSignDocumentFromTemplate({ payload: { cloneData, confirmData } }) {\n const { status, data: { formID, documentID, embedDocumentKey = '' } } = yield call(API.cloneTemplate, 'pdf', cloneData);\n yield put(ACTION_CREATORS.trackEventAction({ action: 'signTemplateUsed', target: { templateID: cloneData.id } }));\n if (status !== 200) {\n yield put({ type: ACTION_TYPES.CREATE_SIGN_DOCUMENT_FROM_TEMPLATE.ERROR });\n return;\n }\n const signElementProps = {\n formID, id: documentID, embedDocumentKey, ...useItemDefaults(ITEM_TYPES.SIGN_LINK)\n };\n yield put(ACTION_CREATORS.onResourcePickerModalConfirm({ ...confirmData, selectedResourcesArray: [signElementProps] }));\n}\n\nexport function* watchMultipleItemUpdate(action) {\n const { payload, dontStack = false } = action;\n const portalID = yield select(SELECTORS.getPortalIDSelector);\n const currentPortalItems = yield select(SELECTORS.getPortalItems);\n const itemsToUpdate = {};\n let checkAppIsLoginable = false;\n payload.forEach(({ id: itemID, ...itemProps }, key) => {\n let updatedProps = itemProps;\n // todo :: handle elsewhere\n const showRequiredBadge = isYes(itemProps.required_showBadge);\n if (showRequiredBadge) {\n updatedProps = { ...itemProps, completed_showBadge: itemProps.required_showBadge };\n payload[key].completed_showBadge = itemProps.required_showBadge;\n }\n // We must prevent enabling shrink from multiple right panel if embeddedForm is enabled\n if (isYes(updatedProps.shrink) && isYes(!updatedProps.embeddedForm)) {\n const { embeddedForm } = currentPortalItems.find(({ id }) => id === itemID);\n if (isYes(embeddedForm)) {\n updatedProps = { ...updatedProps, shrink: 'No' };\n payload[key].shrink = 'No';\n }\n }\n if ((showRequiredBadge || isYes(itemProps.completed_showBadge))) {\n checkAppIsLoginable = true;\n }\n itemsToUpdate[itemID] = updatedProps;\n });\n\n if (checkAppIsLoginable) {\n yield call(checkLoginableApp);\n }\n const updatedItemIDs = Object.keys(itemsToUpdate);\n if (updatedItemIDs.length === 0) {\n return;\n }\n const currentData = currentPortalItems.filter(({ id }) => updatedItemIDs.includes(id));\n yield put({\n type: ACTION_TYPES.UPDATE_MULTIPLE_ITEM.REQUEST,\n payload: itemsToUpdate,\n currentData,\n requestAction: action\n });\n\n const response = yield call(API.bulkUpdateItems, portalID, payload);\n\n yield put({\n type: ACTION_TYPES.UPDATE_MULTIPLE_ITEM.SUCCESS,\n payload: response,\n currentData,\n requestAction: action,\n dontStack\n });\n yield put(ACTION_CREATORS.trackEventAction({ action: 'bulkItemUpdate', target: { itemIDs: Object.keys(response) } }));\n}\n\nexport function* updateSlug({\n slug,\n forReset,\n reject: rejectCheck,\n resolve: resolveCheck\n}) {\n try {\n const prevSlug = yield select(SELECTORS.getAppSlug);\n if (prevSlug === slug) {\n resolveCheck();\n return;\n }\n if (!forReset) {\n const { isSlugAvailable } = yield call(API.isSlugAvailable, slug);\n if (!isSlugAvailable) {\n rejectCheck(t('Slug is already in use.'));\n return;\n }\n }\n\n yield put({\n type: ACTION_TYPES.UPDATE_PORTAL.UNDOABLE,\n payload: {\n slug\n }\n });\n resolveCheck();\n } catch (err) {\n if (err?.data?.message) {\n const errorMessageFromAPI = ERROR_MESSAGES[err.data?.message] || ERROR_MESSAGES.DEFAULT;\n rejectCheck(t(errorMessageFromAPI));\n } else {\n rejectCheck(t('Slug is already in use.'));\n }\n }\n}\n\nexport function* watchUserSettingUpdate({ payload: userData }) {\n const username = yield select(SELECTORS.getUsername);\n if (username) {\n const res = yield call(API.updateUserSettings, username, userData);\n const updatedKeys = Object.keys(userData);\n // use only updated keys\n const payload = updatedKeys.reduce((prev, next) => ({ ...prev, [next]: res[next] }), {});\n yield put({ type: ACTION_TYPES.UPDATE_USER.SUCCESS, payload });\n }\n}\n\nexport function* watchContinueAsUser() {\n const appID = yield select(SELECTORS.getAppID);\n yield call(API.portalUserAddCurrentUser, appID);\n yield put({ type: ACTION_TYPES.CONTINUE_AS_USER.SUCCESS, payload: false });\n}\n\nexport function* watchAPIRequests() {\n const currentUpdateReqActions = yield actionChannel(({ type }) => isUpdateAPIAction(type), buffers.expanding());\n // check if there are upcoming updates\n const savingProcess = yield select(SELECTORS.areAPIRequestsCompletedSelector);\n try {\n while (true) {\n const { type: actionType } = yield take(currentUpdateReqActions);\n if (isAPIRequestAction({ type: actionType }) && !savingProcess) {\n yield put(ACTION_CREATORS.setApiRequestsCompleted(false));\n } else if (isAPISuccessAction({ type: actionType })) {\n yield put(ACTION_CREATORS.setApiRequestsCompleted(true));\n }\n }\n } catch (e) {\n //\n }\n}\n\nfunction* sendFeedback({ payload }) {\n const {\n stars, feedbackText, feedbackEmail, formID: feedbackFormID\n } = payload;\n const portalID = yield select(SELECTORS.getPortalIDSelector);\n const currentUser = yield select(SELECTORS.getUser);\n const { username, email } = currentUser;\n const emailValue = feedbackEmail || email;\n const feedbackData = {\n ...stars && {\n q5_howWould: stars,\n q5_stars: stars,\n q7_greatWhat7: (stars > 3 ? feedbackText : ''),\n q9_whatCould: (stars === 3 ? feedbackText : ''),\n q8_wereSorry: (stars < 3 ? feedbackText : '')\n },\n ...!stars && {\n q9_whatCould: feedbackText || ''\n },\n q11_appid: portalID,\n q3_username: username,\n q20_email: emailValue,\n // plase don't change below 3 keys & values\n formID: feedbackFormID,\n q18_ticketcategoryid: 37,\n q19_assignee: 'Orion_Team'\n };\n\n try {\n yield call(API.sendFeedbackSubmission, feedbackData);\n yield put({ type: ACTION_TYPES.SEND_FEEDBACK.SUCCESS });\n } catch (e) {\n yield put({ type: ACTION_TYPES.SEND_FEEDBACK.ERROR, error: e });\n }\n}\n\nfunction* fetchApps() {\n const { id: appID } = yield select(SELECTORS.getAppInfoWithDefaults);\n const apps = yield call(API.fetchUserPortals, appID);\n yield put({ type: ACTION_TYPES.FETCH_APPS.SUCCESS, payload: apps });\n}\n\nexport function* watchFetchUserApps() {\n yield call(watchFetchResources, 'portal', ACTION_TYPES.FETCH_APPS.SUCCESS, fetchApps);\n}\n\nexport function* watchDeleteSelectedItems() {\n const multipleSelecteds = yield select(SELECTORS.getSelectedMultipleItems);\n const items = yield select(SELECTORS.getPortalItems);\n const listItemsToRemoved = items.filter(({ type, id }) => type === ITEM_TYPES.LIST && multipleSelecteds.includes(id));\n yield all(listItemsToRemoved?.map(item => put(ACTION_CREATORS.dsDeleteDetailPage({ item }))));\n const presentationItemIDs = listItemsToRemoved.map(({ presentationItemID }) => presentationItemID);\n\n yield put(ACTION_CREATORS.removePortalItems([...multipleSelecteds, ...presentationItemIDs]));\n}\n\nexport function* watchBrandingButtonClick() {\n const appMode = yield select(SELECTORS.getAppModeSelector);\n const isBuilder = appMode === APP_MODES.builder;\n const appID = yield select(SELECTORS.getPortalIDSelector);\n const utmScheme = {\n ...BRANDING_DEFAULT_UTM_SCHEME,\n ...(isBuilder && { source: 'appBuilder' }),\n appID\n };\n const utmString = utmParser(utmScheme);\n if (!isBuilder) yield put(ACTION_CREATORS.trackEventAction({ action: 'brandingFooterClicked' }));\n handleCustomNavigation(`${isBuilder ? '/pricing' : 'https://www.jotform.com/myapps/'}?${utmString}&action=createWizard`, '_blank', true);\n}\n\nfunction* templateCategoriesFlow() {\n const appMode = yield select(SELECTORS.getAppModeSelector);\n if (appMode === APP_MODES.builder && isFeatureEnabled(FEATURE_NAMES.ShareAsTemplate)) {\n const response = yield call(API.getTemplateCategories);\n yield put({ type: ACTION_TYPES.SET_TEMPLATE_CATEGORIES, payload: response });\n\n const { data: { languages } } = yield call(API.getTemplateLanguages);\n yield put({ type: ACTION_TYPES.SET_TEMPLATE_LANGUAGES, payload: languages });\n }\n}\n\nfunction* svgIconsFlow() {\n const appMode = yield select(SELECTORS.getAppModeSelector);\n if (appMode === APP_MODES.builder) {\n // put icons svgRefs to the dom\n yield call(prepareIcons, appConfig.svgIconsContainer);\n }\n}\n\nexport function* fetchCDNConfigFlow() {\n const appMode = yield select(SELECTORS.getAppModeSelector);\n if (appMode === APP_MODES.builder || isEnterprise()) {\n yield put({ type: ACTION_TYPES.FETCH_CDN_CONFIG.REQUEST });\n const result = yield call(API.fetchCDNConfig);\n const { configs = {} } = result;\n const CDN = (!configs.cloudURL || (configs.cloudURL && configs.cloudURL.length === 0)) ? '/' : configs.cloudURL;\n const config = { ...configs, CDN };\n yield put({ type: ACTION_TYPES.FETCH_CDN_CONFIG.SUCCESS, payload: config });\n }\n}\n\nexport function* fetchResources() {\n const appMode = yield select(SELECTORS.getAppModeSelector);\n if (appMode === APP_MODES.builder) {\n yield put(ACTION_CREATORS.fetchFormsAction());\n yield put(ACTION_CREATORS.fetchSignAction());\n }\n}\n\nfunction* fetchUserApps() {\n yield take(ACTION_TYPES.FETCH_PORTAL.SUCCESS);\n const appMode = yield select(SELECTORS.getAppModeSelector);\n if (appMode === APP_MODES.builder) {\n yield put(ACTION_CREATORS.fetchUserAppsAction());\n }\n}\n\nexport function* watchLayoutChange(action) {\n const { payload: appLayout } = action;\n const { portalProps } = getLayoutProps(appLayout);\n\n if (portalProps) {\n yield put(ACTION_CREATORS.updatePortalAction(portalProps));\n }\n\n const items = yield select(SELECTORS.getPortalItems);\n\n const updatingItems = items.reduce((prev, item) => {\n const { type } = item;\n const { itemProps } = getLayoutProps(appLayout, type);\n const stylingProps = getProtectedStylingProps(appLayout, item);\n\n return [...prev, { ...item, ...itemProps, ...stylingProps }];\n }, []);\n\n yield put(ACTION_CREATORS.updateMultipleItemAction(updatingItems));\n}\n\nfunction* fetchUserSlugFlow() {\n yield all([take(ACTION_TYPES.FETCH_USER.SUCCESS), take(ACTION_TYPES.FETCH_PORTAL.SUCCESS)]);\n\n try {\n const [appMode, appInfo] = yield all([\n select(SELECTORS.getAppModeSelector),\n select(SELECTORS.getPortalInfoSelector)\n ]);\n\n if (appMode === APP_MODES.builder && appInfo?.username) {\n const { slug } = yield call(API.getUserSlug, appInfo.username);\n yield put({ type: ACTION_TYPES.SET_USER_SLUG, slug });\n }\n } catch (e) {\n console.error('Error on fetch user slug');\n }\n}\n\nfunction* watchUserChange(action) {\n const { payload: user } = action;\n\n const { id: appID } = yield select(SELECTORS.getAppInfoWithDefaults);\n\n yield call(API.claimGuestAccount, appID);\n\n try {\n yield call(API.portalUserAddCurrentUser, appID);\n } catch (err) {\n console.error('Error on adding portal user: ', err);\n }\n\n yield put(ACTION_CREATORS.setUserAction(user));\n\n yield put(ACTION_CREATORS.fetchPortalAction(appID));\n}\n\nexport function* watchUpdatePortalUserProps({ payload }) {\n const portalID = yield select(SELECTORS.getPortalIDSelector);\n\n const data = yield call(API.updatePortalUserProperty, portalID, payload);\n yield put({ type: ACTION_TYPES.UPDATE_PORTAL.REQUEST, payload: data });\n}\n\nexport function* watchCheckoutFormStatusChanges({ payload }) {\n switch (payload) {\n case CHECKOUT_FORM_STATUSES.COMPLETED:\n const isDonationApp = yield select(SELECTORS.getIsDonationApp);\n if (isDonationApp) {\n const portalPaymentCurrencyInfo = yield select(SELECTORS.getPortalPaymentCurrencyInfo);\n const donationPrice = yield select(SELECTORS.getDonationPriceInCart);\n const oldDonationGoal = yield select(SELECTORS.getCurrentDonationGoal);\n const currentDonationGoal = sumMoney({ ...portalPaymentCurrencyInfo, price: oldDonationGoal }, donationPrice).toString();\n yield put(ACTION_CREATORS.updatePortalPropAction({ currentDonationGoal, lastOrderAmount: donationPrice }));\n }\n yield put({ type: ACTION_TYPES.SET_CART_PRODUCTS, payload: {} });\n yield put({ type: ACTION_TYPES.SET_CHECKOUT_KEY, payload: '' });\n break;\n default:\n break;\n }\n}\n\nfunction* watchNavigationItemClick({ payload: { targetPageID } }) {\n yield put(ACTION_CREATORS.navigateToAction({ to: DESTINATION_TYPES.PAGE, pageID: targetPageID }));\n}\n\nfunction* watchSetTodoComplete({ payload: { formID, submissionCount } }) {\n const lastSubmitted = momentToString(Moment(getUpdatedDate(new Date().getTime(), 'America/New_York', true)), true);\n yield put(ACTION_CREATORS.setTodoItemCompleted({\n itemID: formID,\n prop: { lastSubmitted, submissionCount: submissionCount + 1 }\n }));\n}\n\nfunction* createNewPortalWithAny(onAppCreated, customAppProperties = {}, from) {\n try {\n const isMobilePhone = checkMobilePhone();\n const appPropertiesDefault = useAppDefaults();\n const appProperties = { ...appPropertiesDefault, ...customAppProperties };\n const homePage = { id: 0, pageOrder: 0 };\n const _page = isFeatureEnabled(FEATURE_NAMES.SortPages) ? homePage : null;\n const app = yield call(API.createPortal, null, appProperties, null, _page);\n const { id } = app;\n yield put(ACTION_CREATORS.trackEventAction({ action: 'appCreated', target: { portalID: id, ...from } }));\n yield call(normalizeAndRegisterApp, app);\n const isDonationActive = isFeatureEnabled(FEATURE_NAMES.DonationItem);\n let redirectUrl = `${getAppPath()}/build/${id}`;\n if (isDonationActive) {\n redirectUrl += '?useNewBuilder';\n }\n yield call(navigate, redirectUrl, { replace: true });\n if (id) {\n yield call(onAppCreated);\n if (!isMobilePhone) {\n yield put(ACTION_CREATORS.openRightPanelWithModeAction(RightPanelModes.APP_ITEM));\n }\n }\n } catch (error) {\n yield call(portalCreationError, error);\n }\n}\n\nexport function* createNewPortalWithTemplate({ payload }) {\n try {\n const app = yield call(API.fetchPortal, payload.appID);\n yield call(normalizeAndRegisterApp, app);\n const redirectUrl = `${getAppPath()}/build/${payload.appID}`;\n yield call(navigate, redirectUrl, { replace: true });\n StorageHelper.removeSessionStorageItem({ key: 'create_app_from_app_templates' });\n } catch (error) {\n yield call(portalCreationError, error);\n }\n}\n\nexport function* createNewPortalWithStore() {\n const isFromStoreBuilder = StorageHelper.getSessionStorageItem({ key: 'create_app_from_store_builder' });\n const from = isFromStoreBuilder && { from: 'create_app_from_store_builder' };\n function* onAppCreated() {\n const itemProps = {\n type: 'PRODUCT_LIST',\n title: t('Products'),\n page: '0'\n };\n yield put(ACTION_CREATORS.addPortalItemAction(itemProps, -1, true));\n yield take(ACTION_TYPES.ADD_PORTAL_ITEMS.SUCCESS);\n yield put(ACTION_CREATORS.selectPortalItemAction('1'));\n }\n yield call(createNewPortalWithAny, onAppCreated, {}, from);\n StorageHelper.removeSessionStorageItem({ key: 'create_app_from_store_builder' });\n}\n\nexport function* createNewPortalWithDonation() {\n function* onAppCreated() {\n const getItemDefaults = yield select(SELECTORS.getItemDefaultsGetter);\n yield put(ACTION_CREATORS.addPortalItemAction([\n { ...getItemDefaults(ITEM_TYPES.IMAGE), page: '0' },\n { ...getItemDefaults(ITEM_TYPES.DONATION), page: '0' }\n ]));\n yield put(ACTION_CREATORS.trackEventAction({ action: 'donationBoxAddedFromURL', target: { url: '/createWithDonationBuilder' } }));\n yield take(ACTION_TYPES.ADD_PORTAL_ITEMS.SUCCESS);\n yield put(ACTION_CREATORS.selectPortalItemAction('1'));\n }\n let customAppProperties = {\n [APP_HEADER_PROPS.appHeaderBgColor]: '#B2E0FF'\n };\n\n if (global.JOTFORM_ENV !== 'ENTERPRISE') {\n customAppProperties = {\n ...customAppProperties,\n appIconColor: '#0099FF',\n appIconBackground: '#FFFFFF',\n appIconSvgRef: 'jfc_icon_solid-heart',\n appIconURL: '/cardforms/assets/icons/icon-sets-v2/solid/Basic UI/jfc_icon_solid-heart.svg',\n appIconType: IMAGE_TYPE.icon,\n\n logoBackground: '#FFFFFF',\n logoIconSvgRef: 'jfc_icon_solid-heart',\n logoURL: '/cardforms/assets/icons/icon-sets-v2/solid/Basic UI/jfc_icon_solid-heart.svg',\n logoType: IMAGE_TYPE.icon,\n iconColor: '#0099FF'\n };\n }\n\n yield call(createNewPortalWithAny, onAppCreated, customAppProperties);\n}\nexport function* watchIsAppDone({ payload: isAppDone }) {\n const shouldShowProgressBar = yield select(SELECTORS.getShouldShowProgressBar);\n if (isAppDone && shouldShowProgressBar) {\n yield put(ACTION_CREATORS.showGenericModalAction({ name: MODALS.APP_IS_DONE_MODAL }));\n }\n}\n\nexport function* watchFormPickerModalConfirm({ payload }) {\n const {\n selection, portalOrder = ITEM_ADDITION_ORDER_STRATEGY.TO_END_OF_THE_PAGE, page, withClicking = false\n } = payload;\n const lastSelectedItemOrder = yield select(SELECTORS.getLastSelectedItemOrder);\n const getItemDefaults = yield select(SELECTORS.getItemDefaultsGetter);\n const formItems = selection.map(formID => ({ id: formID, type: ITEM_TYPES.FORM }));\n const useDndDropOrder = portalOrder && portalOrder !== ITEM_ADDITION_ORDER_STRATEGY.TO_END_OF_THE_PAGE;\n const newPortalOrder = useDndDropOrder ? portalOrder : lastSelectedItemOrder;\n\n const formsWithPage = formItems.reduce((prev, item) => ([...prev, { ...item, page }]), []);\n\n const forms = (page && page !== 'homepage') ? formsWithPage : formItems;\n const formsWithDefaultValues = forms.map(form => {\n return {\n ...form,\n ...getItemDefaults(ITEM_TYPES.FORM)\n };\n });\n yield put(ACTION_CREATORS.addPortalItemAction(formsWithDefaultValues, newPortalOrder, withClicking));\n}\n\nexport function* watchResourcePickerModalConfirm({ payload }) {\n const {\n selectedResourcesArray,\n resourceType,\n addOrder = ITEM_ADDITION_ORDER_STRATEGY.TO_END_OF_THE_PAGE,\n page,\n withClicking = false\n } = payload;\n const lastSelectedItemOrder = yield select(SELECTORS.getLastSelectedItemOrder);\n const getItemDefaults = yield select(SELECTORS.getItemDefaultsGetter);\n const appID = yield select(SELECTORS.getAppID);\n const useDndDropOrder = addOrder && addOrder !== ITEM_ADDITION_ORDER_STRATEGY.TO_END_OF_THE_PAGE;\n const newPortalOrder = useDndDropOrder ? addOrder : lastSelectedItemOrder;\n\n const itemTypesMap = {\n [RESOURCE_TYPES.TABLE]: ITEM_TYPES.TABLE_LINK,\n [RESOURCE_TYPES.REPORT]: ITEM_TYPES.REPORT_LINK,\n [RESOURCE_TYPES.SENTBOX]: ITEM_TYPES.SENTBOX_LINK,\n [RESOURCE_TYPES.SIGN]: ITEM_TYPES.SIGN_LINK,\n [RESOURCE_TYPES.DATA_SOURCE]: ITEM_TYPES.LIST\n };\n\n if (isFeatureEnabled(FEATURE_NAMES.FormResource)) {\n itemTypesMap[RESOURCE_TYPES.FORM] = ITEM_TYPES.FORM;\n }\n\n const newPortalItems = selectedResourcesArray.map(({\n name,\n title,\n id,\n type: reportType = 'reports', // Will be only used for reports,\n isTeamAsset = false,\n ...restResource\n }) => {\n const resourceSubType = (resourceType === RESOURCE_TYPES.REPORT) ? { resourceSubType: reportType } : {};\n const resourceURL = resourceType === RESOURCE_TYPES.FORM && isFeatureEnabled(FEATURE_NAMES.FormResource) ? restResource.url : generateResourceURL(resourceType, id, appID, reportType);\n return {\n ...getItemDefaults(itemTypesMap[resourceType]),\n resourceType,\n ...resourceSubType,\n resourceID: id,\n resourceURL,\n title: title || name,\n isTeamAsset,\n ...(page && page !== 'homepage') && { page }\n };\n });\n\n yield put(ACTION_CREATORS.addPortalItemAction(newPortalItems, newPortalOrder, withClicking));\n}\n\nexport function* watchLeftPanelItemClick({ payload: type }) {\n const getItemDefaults = yield select(SELECTORS.getItemDefaultsGetter);\n const lastSelectedItemOrder = yield select(SELECTORS.getLastSelectedItemOrder);\n const isMultiPage = yield select(SELECTORS.getIsMultiPage);\n const pageWithMaxPageOrder = yield select(SELECTORS.getPageWithMaxPageOrder);\n const lastInteractedPageID = yield select(SELECTORS.getLastInteractedPageID);\n const firstPageID = yield select(SELECTORS.getFirstPageID);\n const selectedPortalItems = yield select(SELECTORS.getSelectedPortalItems);\n const [selectedPortalItem] = selectedPortalItems ?? [];\n const lastPageID = isMultiPage && pageWithMaxPageOrder.id;\n const page = (lastInteractedPageID || (!selectedPortalItem && lastPageID)) || firstPageID;\n const pageProps = yield select(SELECTORS.getPageByID(page));\n\n switch (!!pageProps?.linkedItemID || type) {\n case ITEM_TYPES.FORM:\n if (isFeatureEnabled(FEATURE_NAMES.FormResource)) {\n yield put(ACTION_CREATORS.showGenericModalAction({\n name: MODALS.RESOURCE_PICKER_MODAL,\n resourceType: RESOURCE_TYPES.FORM,\n page,\n withClicking: true\n }));\n } else {\n yield put(ACTION_CREATORS.showGenericModalAction({\n name: MODALS.FORM_PICKER_MODAL,\n page,\n withClicking: true\n }));\n }\n return;\n case ITEM_TYPES.TABLE_LINK:\n yield put(ACTION_CREATORS.showGenericModalAction({\n name: MODALS.RESOURCE_PICKER_MODAL,\n resourceType: RESOURCE_TYPES.TABLE,\n page,\n withClicking: true\n }));\n return;\n case ITEM_TYPES.REPORT_LINK:\n yield put(ACTION_CREATORS.showGenericModalAction({\n name: MODALS.RESOURCE_PICKER_MODAL,\n resourceType: RESOURCE_TYPES.REPORT,\n page,\n withClicking: true\n }));\n return;\n case ITEM_TYPES.SENTBOX_LINK:\n yield put(ACTION_CREATORS.showGenericModalAction({\n name: MODALS.RESOURCE_PICKER_MODAL,\n resourceType: RESOURCE_TYPES.SENTBOX,\n page,\n withClicking: true\n }));\n return;\n case ITEM_TYPES.SIGN_LINK:\n yield put(ACTION_CREATORS.showGenericModalAction({\n name: MODALS.RESOURCE_PICKER_MODAL,\n resourceType: RESOURCE_TYPES.SIGN,\n page,\n withClicking: true\n }));\n return;\n default: // For other types\n const itemProps = getItemDefaults(type);\n yield put(ACTION_CREATORS.addPortalItemAction({ ...itemProps, ...page ? { page } : {} }, lastSelectedItemOrder, true));\n }\n}\n\nfunction* watchItemClick({ payload }) {\n const {\n itemID, metaKey, ctrlKey, shiftKey, rightPanelMode = RightPanelModes.APP_ITEM\n } = payload;\n\n const isMobileMultipleSelectMode = yield select(SELECTORS.getMobileMultipleSelectionMode);\n const selectedPortalItems = yield select(SELECTORS.getSelectedPortalItems);\n const [selectedPortalItem] = selectedPortalItems;\n // const { metaKey, ctrlKey, shiftKey } = event || {};\n const multipleSelectionMode = metaKey || ctrlKey || shiftKey;\n\n if ((multipleSelectionMode || isMobileMultipleSelectMode)) {\n yield put(ACTION_CREATORS.selectMultipleItemAction({ selection: itemID, withRange: shiftKey }));\n return;\n }\n\n if (!isEqual(selectedPortalItem, itemID)) {\n // TODO:: we should handle tempIDs\n // When a new item added, initially we are waiting for a response from API to get the item's ID\n // if the user wants to update this item before its ID return from API,\n // we are selecting an empty(undefined) item in UI since this false equality check returns true.\n // leads to problems both in UI and backend\n yield put(ACTION_CREATORS.selectPortalItemAction(itemID));\n yield put(ACTION_CREATORS.setRightPanelModeAction(rightPanelMode));\n }\n}\n\nfunction* watchOpenRightPanelWithMode({ payload: mode }) {\n yield put(ACTION_CREATORS.setRightPanelModeAction(mode));\n const isRightPanelOpen = yield select(SELECTORS.isRightPanelOpenSelector);\n const selectedItems = yield select(SELECTORS.getSelectedPortalItems);\n if (!isEmpty(selectedItems) && mode === RightPanelModes.APP_HEADER) {\n yield put(ACTION_CREATORS.selectPortalItemAction());\n }\n if (!isRightPanelOpen) {\n yield put(ACTION_CREATORS.toggleRightPanelAction(true));\n }\n}\n\nfunction* watchFetchUserTeams() {\n const userTeams = yield call(API.getUserTeams);\n\n yield put({ type: ACTION_TYPES.FETCH_USER_TEAMS.SUCCESS, payload: userTeams });\n}\n\nfunction* watchFetchUserTeamPermissions() {\n const teamPermissions = yield call(API.fetchUserPermissions);\n yield put({ type: ACTION_TYPES.FETCH_USER_TEAM_PERMISSIONS.SUCCESS, payload: teamPermissions });\n}\n\nfunction* watchUpdateAppLogo({ payload }) {\n const installableProps = yield call(handleInstallableAppIcon, payload);\n\n yield put(ACTION_CREATORS.updatePortalPropAction(installableProps));\n yield put(ACTION_CREATORS.trackEventAction({ action: 'appUpdated', target: { props: Object.keys(installableProps) } }));\n}\n\nfunction* watchOnStageClick() {\n const isAppCoverCropperActive = yield select(SELECTORS.getAppCoverCropState);\n const isAppHeaderCropperActive = yield select(SELECTORS.getAppHeaderCropState);\n const isRightPanelOpen = yield select(SELECTORS.isRightPanelOpenSelector);\n const isLeftPanelOpen = yield select(SELECTORS.isLeftPanelOpenSelector);\n const selectedItems = yield select(SELECTORS.getSelectedPortalItems);\n const selectedPage = yield select(SELECTORS.getSelectedPage);\n const lastAddedItemAction = yield select(SELECTORS.getLastAddedItemIDSelector);\n const isMobile = checkMobilePhone();\n\n const isAnyCropperActive = isAppCoverCropperActive || isAppHeaderCropperActive;\n\n if (isRightPanelOpen) {\n yield put(ACTION_CREATORS.toggleRightPanelAction(false));\n yield put(ACTION_CREATORS.setRightPanelModeAction(''));\n }\n if (!isAnyCropperActive) {\n if (!isEmpty(selectedItems)) {\n yield put(ACTION_CREATORS.selectPortalItemAction(''));\n }\n if (selectedPage) {\n yield put(ACTION_CREATORS.selectPageAction());\n }\n if (lastAddedItemAction) {\n yield put(ACTION_CREATORS.clearLastAddedItemAction());\n }\n }\n if (isMobile && isLeftPanelOpen) {\n yield put(ACTION_CREATORS.toggleLeftPanelAction(false));\n }\n}\n\nfunction* watchShowDonationItem() {\n const allItems = yield select(SELECTORS.getPortalItems);\n const activePageID = yield select(SELECTORS.getActivePageID);\n const donationItem = allItems.find(item => item.type === ITEM_TYPES.DONATION);\n const donationItemPage = donationItem?.page;\n\n yield put(ACTION_CREATORS.trackEventAction({ action: 'topBarDonationButtonClicked' }));\n\n if (activePageID !== donationItemPage) {\n yield put(ACTION_CREATORS.navigateToAction({ to: DESTINATION_TYPES.PAGE, pageID: donationItemPage }));\n yield take(ACTION_TYPES.ACTIVE_PAGE);\n }\n\n const donationItemElement = document.querySelector('div[type=\"DONATION\"]');\n donationItemElement.scrollIntoView({ block: 'center' });\n}\n\nfunction* watchOnDragEnd({ payload }) {\n const getItemDefaults = yield select(SELECTORS.getItemDefaultsGetter);\n const { source, destination, draggableId } = payload;\n\n if (!destination) return;\n const { droppableId: srcDropppableID, index: oldIndex } = source;\n const { droppableId: destDropppableID, index: newIndex } = destination;\n if (!destDropppableID.includes('droppable')) return; // Forbidden to drop outside\n\n const page = destDropppableID.split('_')[1];\n const oldpage = srcDropppableID.split('_')[1];\n\n const isSourceDetailPage = yield select(SELECTORS.getIsDataSourcePage(oldpage));\n\n if (isSourceDetailPage && page !== oldpage) {\n yield put(ACTION_CREATORS.toastAction({\n message: 'Elements cannot be moved from details page'\n }));\n return;\n }\n\n const { type: itemType } = yield select(SELECTORS.getPortalItemByIDSelector(draggableId));\n const isDestinationDetailPage = yield select(SELECTORS.getIsDataSourcePage(page));\n\n if (isDestinationDetailPage && !(AVAILABLE_DETAIL_PAGE_ITEMS.includes(draggableId) || AVAILABLE_DETAIL_PAGE_ITEMS.includes(itemType))) {\n yield put(ACTION_CREATORS.toastAction({\n message: 'Element is not supported for detail page'\n }));\n\n yield put(ACTION_CREATORS.trackEventAction({ action: 'detailPageUnsupportedItemAddition', target: { itemType: itemType ?? draggableId, pageID: page } }));\n return;\n }\n\n const pageObject = page && page !== 'homepage' ? { page } : {};\n if (Object.values(ITEM_TYPES).includes(draggableId) || isItemTypeWidget(draggableId)) {\n // New Addition\n const droppedItem = getItemDefaults(draggableId);\n const newItemOrder = newIndex + 1;\n const { type } = droppedItem;\n\n if (type === ITEM_TYPES.FORM && !isFeatureEnabled(FEATURE_NAMES.FormResource)) {\n yield put(ACTION_CREATORS.showGenericModalAction({\n name: MODALS.FORM_PICKER_MODAL,\n portalOrder: newItemOrder,\n page\n }));\n return;\n }\n\n if (resourceLinkTypes.includes(type)) {\n yield put(ACTION_CREATORS.showGenericModalAction({\n name: MODALS.RESOURCE_PICKER_MODAL,\n resourceType: resourceTypeMap[type],\n page,\n addOrder: newItemOrder\n }));\n return;\n }\n\n yield put(ACTION_CREATORS.addPortalItemAction({ ...droppedItem, ...pageObject }, newItemOrder));\n return;\n }\n yield put(ACTION_CREATORS.changeOrderAction({\n oldIndex, newIndex, page, elementID: draggableId, oldpage: oldpage || ''\n }));\n\n yield put(ACTION_CREATORS.updateLastInteractedPageIDAction(page));\n}\n\nfunction* pushNotificationFlowPublic() {\n const status = yield select(SELECTORS.getPushNotificationStatus);\n if (!isYes(status)) {\n return;\n }\n const appID = yield select(SELECTORS.getAppID);\n if (!appID) {\n return;\n }\n\n if (!PushManager.isSupported()) {\n if (!(!isPWA() && isIosSafari())) {\n yield put(ACTION_CREATORS.trackEventAction({ action: 'pushNotificationNotSupported' }));\n }\n return;\n }\n\n const portalPush = new PushManager({\n resourceType: 'portal',\n resourceId: appID\n });\n\n const isSubscribed = yield call([portalPush, portalPush.isSubscribed]);\n const swRegistration = yield window.navigator.serviceWorker.ready;\n\n if (!isSubscribed && swRegistration && !isPushPermissionRecentlyDismissed(appID)) {\n yield put(ACTION_CREATORS.setUIProp(UI_PROPS.notificationPermissionState, NOTIFICATION_PERMISSION_STATES.VISIBLE));\n yield put(ACTION_CREATORS.trackEventAction({ action: 'notificationPermissionShown' }));\n yield takeLatest(ACTION_TYPES.PUSH_NOTIFICATION_ALLOW, function* allow() {\n yield put(ACTION_CREATORS.trackEventAction({ action: 'notificationPermissionAllowClicked' }));\n yield put(ACTION_CREATORS.setUIProp(UI_PROPS.notificationPermissionState, NOTIFICATION_PERMISSION_STATES.LOADING));\n const username = yield select(SELECTORS.getUsername);\n try {\n yield call([portalPush, portalPush.subscribe], { username });\n yield put(ACTION_CREATORS.setUIProp(UI_PROPS.notificationPermissionState, NOTIFICATION_PERMISSION_STATES.HIDDEN));\n } catch (err) {\n if (err instanceof SubscriptionError) {\n switch (err.name) {\n case 'PermissionDefault':\n yield put(ACTION_CREATORS.setUIProp(UI_PROPS.notificationPermissionState, NOTIFICATION_PERMISSION_STATES.VISIBLE));\n break;\n case 'PermissionDenied':\n yield put(ACTION_CREATORS.setUIProp(UI_PROPS.notificationPermissionState, NOTIFICATION_PERMISSION_STATES.DENIED));\n yield put(ACTION_CREATORS.trackEventAction({ action: 'notificationPermissionDenied' }));\n break;\n case 'NoSwRegistration':\n case 'DeviceNotSupported':\n yield put(ACTION_CREATORS.setUIProp(UI_PROPS.notificationPermissionState, NOTIFICATION_PERMISSION_STATES.HIDDEN));\n console.error('Error on registering push subscription:', err);\n break;\n default:\n console.error('Error on registering push subscription:', err);\n }\n } else {\n console.log(err);\n yield put(ACTION_CREATORS.setUIProp(UI_PROPS.notificationPermissionState, NOTIFICATION_PERMISSION_STATES.ERROR));\n }\n }\n });\n yield takeLatest(ACTION_TYPES.PUSH_NOTIFICATION_DISMISS, function* dismiss() {\n yield put(ACTION_CREATORS.trackEventAction({ action: 'notificationPermissionDismissed' }));\n const notificationDismissKey = `${NOTIFICATION_DISMISS_KEY}_${appID}`;\n StorageHelper.setLocalStorageItem({\n key: notificationDismissKey,\n value: Date.now()\n });\n yield put(ACTION_CREATORS.setUIProp(UI_PROPS.notificationPermissionState, NOTIFICATION_PERMISSION_STATES.HIDDEN));\n });\n }\n}\n\nfunction* pushNotificationHistoryPolling() {\n const pendingCampaign = yield select(SELECTORS.hasPendingPushCampaign);\n const serverTimeZone = 'America/New_York';\n if (pendingCampaign && Moment.tz(pendingCampaign.createdAt, serverTimeZone).isAfter(Moment.tz(serverTimeZone).subtract(2, 'minutes'))) {\n yield delay(3000);\n yield put({ type: ACTION_TYPES.FETCH_NOTIFICATON_HISTORY.REQUEST });\n }\n}\n\nfunction* pushNotificationFlow() {\n const appMode = yield select(SELECTORS.getAppModeSelector);\n if (appMode === APP_MODES.public) {\n yield spawn(pushNotificationFlowPublic);\n } else if (appMode === APP_MODES.builder) {\n const currentStep = yield select(SELECTORS.getCurrentStep);\n const currentSubtab = yield select(SELECTORS.getCurrentSubTab);\n if (currentStep === 'settings' && currentSubtab === 'pushNotification') { // TODO: check is push enabled (performance)\n yield put({ type: ACTION_TYPES.FETCH_NOTIFICATON_HISTORY.REQUEST });\n yield put({ type: ACTION_TYPES.FETCH_NOTIFICATION_STATS.REQUEST });\n }\n yield takeLatest(ACTION_TYPES.SET_ACTIVE_BUILDER_PAGE, function* handler({ payload }) {\n if (payload.subTab === 'pushNotification') {\n yield put({ type: ACTION_TYPES.FETCH_NOTIFICATON_HISTORY.REQUEST });\n yield put({ type: ACTION_TYPES.FETCH_NOTIFICATION_STATS.REQUEST });\n }\n });\n yield takeLatest([ACTION_TYPES.SEND_PUSH_NOTIFICATION.SUCCESS, ACTION_TYPES.FETCH_NOTIFICATON_HISTORY.SUCCESS], pushNotificationHistoryPolling);\n }\n}\n\nfunction* uxrExitIntentSurveyFlow() {\n const key = 'appBuilder:uxrExitIntentSurveySeen';\n const isSurveySeen = StorageHelper.getLocalStorageItem({ key });\n const isBuilder = yield select(SELECTORS.getIsBuilder);\n const currentUser = yield select(SELECTORS.getUser);\n const isGuestUser = currentUser.account_type?.name === 'GUEST';\n const isAppFirstUser = yield select(SELECTORS.getIsAppFirstUser);\n const portalID = yield select(SELECTORS.getPortalIDSelector);\n\n if (!isBuilder || !isAppFirstUser || isSurveySeen) return;\n\n const selectors = ['.jNewHeader-logo', '.jNewHeader-appBoxContent'];\n yield delay(1000);\n const elements = selectors.map(s => document.querySelector(s));\n\n const { register, closeAll } = eventChannelRegistry();\n\n function* showSurveyModal() {\n yield put(ACTION_CREATORS.showGenericModalAction({ name: MODALS.EXIT_INTENT_SURVEY_MODAL, username: currentUser.username, appID: portalID }));\n StorageHelper.setLocalStorageItem({ key, value: true });\n closeAll();\n }\n\n const clickChannel = register(emitter => {\n elements.forEach(el => el?.addEventListener('click', emitter));\n return () => {\n elements.forEach(el => el?.removeEventListener('click', emitter));\n };\n });\n\n yield takeEvery(clickChannel, function* handler(event) {\n event.preventDefault();\n event.stopPropagation();\n yield fork(showSurveyModal);\n });\n\n if (isGuestUser) {\n const mouseEnterChannel = register(emitter => {\n document.addEventListener('mouseenter', emitter);\n return () => document.removeEventListener('mouseenter', emitter);\n });\n\n const timeoutMouseLeaveChannel = register(emitter => {\n const timeout = setTimeout(() => {\n document.addEventListener('mouseleave', emitter);\n }, 2 * 60 * 1000);\n return () => {\n clearTimeout(timeout);\n document.removeEventListener('mouseleave', emitter);\n };\n });\n\n yield takeEvery(timeoutMouseLeaveChannel, function* handler(event) {\n if (event.clientY < 0) { // only upper side of the window\n const { timeout } = yield race({\n mouseEnter: take(mouseEnterChannel),\n timeout: delay(1000)\n });\n if (timeout) {\n yield fork(showSurveyModal);\n }\n }\n });\n } else {\n // const unloadChannel = register(emitter => {\n // window.addEventListener('beforeunload', emitter);\n // return () => {\n // window.removeEventListener('beforeunload', emitter);\n // };\n // }, false); // TODO: replace w/ !isGuestUser\n\n // yield takeEvery(unloadChannel, function* handler() {\n // TODO: send email\n // });\n }\n}\n\nfunction* whatsNewModalFlow() {\n const isBuilder = yield select(SELECTORS.getIsBuilder);\n if (!isBuilder) return;\n const currentUser = yield select(SELECTORS.getUser);\n\n const features = useEnabledFeatures();\n const enabledFeatures = Object.keys(features).filter(key => features[key]);\n const viableFeatureModalKeys = Object.keys(WHATS_NEW_MODAL_FEATURES)\n .filter(viableKey => enabledFeatures.includes(viableKey) && (WHATS_NEW_MODAL_FEATURES[viableKey]?.condition?.({ currentUser }) ?? true));\n\n if (viableFeatureModalKeys.length) {\n yield put(ACTION_CREATORS.showWhatsNewModalAction(viableFeatureModalKeys));\n yield all(\n viableFeatureModalKeys.map(key => put(ACTION_CREATORS.trackEventAction({ action: `${key.charAt(0).toLowerCase() + key.slice(1)}` })))\n );\n }\n}\n\nfunction* fetchUserManagementUsers() {\n const appID = yield select(SELECTORS.getAppID);\n\n try {\n const { users, sheetID, sheetViewID } = yield call(API.fetchUserManagementUsers, appID);\n if (!users) {\n console.error('Expected users on fetch user management users but received: ', users);\n return;\n }\n yield put({ type: ACTION_TYPES.SET_USER_MANAGEMENT_USERS, payload: { users, sheetID, sheetViewID } });\n } catch (err) {\n console.log(err);\n }\n}\n\nfunction* userManagement() {\n const userManagementEnabledUser = isFeatureEnabled(FEATURE_NAMES.UserManagement);\n const isBuilder = yield select(SELECTORS.getIsBuilder);\n if (!userManagementEnabledUser || !isBuilder) return;\n yield takeEvery(ACTION_TYPES.SET_ACTIVE_BUILDER_PAGE, function* handler({ payload }) {\n if (payload.subTab === publishNavPaths.quickShare) {\n yield fetchUserManagementUsers();\n }\n });\n}\n\nfunction* watchAppStatus({ payload: status }) {\n if (status === 'ready') {\n yield spawn(fetchResources);\n yield spawn(fetchShareInfoFlow);\n yield spawn(watchInstallableIconBuilderFlow);\n yield spawn(fetchStorePropertiesFlow);\n yield spawn(checkAddElementPulseVisible);\n yield spawn(pushNotificationFlow);\n yield spawn(uxrExitIntentSurveyFlow);\n yield spawn(dsFetchColumnsFlow);\n yield spawn(aiAssitant);\n yield spawn(userManagement);\n\n yield spawn(whatsNewModalFlow);\n // A/B Test: ctAppNameIconModal\n yield spawn(initAppNameIconModalAbTest);\n }\n}\n\nfunction* watchOnMultipleItemUpdate({ payload: props }) {\n const selectedItemProps = yield select(SELECTORS.getSelectedPortalItemsWithInfo);\n const designatedItemID = yield select(SELECTORS.getDesignatedItemIDSelector);\n const version = yield select(SELECTORS.getAppVersionSelector);\n\n const getItemWithDefaults = type => useItemDefaults(type, version);\n const selectedItemsWithDefaults = selectedItemProps.map(({ type, ...rest }) => ({ ...getItemWithDefaults(type), ...rest }));\n\n const { schemeID } = props;\n\n if (designatedItemID) {\n const designatedProperties = ['itemBgColor', 'itemFontColor', 'itemBorderColor', 'itemTextAlignment'];\n const propValues = Object.keys(props);\n const shouldUpdateDesignated = some(propValues, prop => designatedProperties.includes(prop));\n if (shouldUpdateDesignated) {\n yield put(ACTION_CREATORS.updatePortalAction({ designatedItemProps: '' }));\n }\n }\n\n const designatedProperties = schemeID && getColoredPropertiesBySchemeID(selectedItemsWithDefaults, schemeID, version);\n const properties = schemeID ? designatedProperties.itemsToChange : getFilteredProperties(selectedItemsWithDefaults, props, version);\n\n yield put(ACTION_CREATORS.updateMultipleItemAction(properties));\n yield put(ACTION_CREATORS.trackEventAction({ action: 'multipleItemsUpdated', target: { props: Object.keys(props) } }));\n}\n\nfunction* watchOnDeletePage({ payload }) {\n const { pageID, type = '' } = payload;\n const appItems = yield select(SELECTORS.getPortalItems);\n const pageHasItem = appItems.find(({ page }) => page && page.toString() === pageID.toString());\n const pageProps = yield select(SELECTORS.getPageByID(pageID));\n const presentationItem = yield select(SELECTORS.getPresentationItemByDsPageID(pageID));\n const isPageLinked = presentationItem?.buttonValue === pageID;\n\n if (isPageLinked) {\n yield put(ACTION_CREATORS.showGenericModalAction({\n name: MODALS.PREVENT_DETAIL_PAGE_DELETION_MODAL,\n pageID,\n type,\n dsItemID: pageProps.linkedItemID\n\n }));\n\n return;\n }\n\n if (pageHasItem) {\n yield put(ACTION_CREATORS.showGenericModalAction({\n name: MODALS.DELETE_PAGE_MODAL, pageID, type, forceDeleteItems: !!pageProps.linkedItemID\n }));\n return;\n }\n\n yield put(ACTION_CREATORS.deletePageAction(pageID, false, type));\n}\n\nfunction* watchReplaceFormItem({ payload: { itemID, formID } }) {\n const appID = yield select(SELECTORS.getAppID);\n const sentboxItem = yield select(SELECTORS.getSentboxByFormID(itemID));\n\n const form = yield call(API.replaceFormItem, { appID, itemID, formID });\n\n yield put({ type: ACTION_TYPES.REPLACE_FORM_ITEM.SUCCESS, payload: { form, itemID } });\n\n if (sentboxItem) {\n const {\n id, type, name, title\n } = yield select(SELECTORS.getFormByID(formID));\n yield put(ACTION_CREATORS.updateItemPropAction({\n itemID: sentboxItem.id,\n prop: {\n resourceID: id,\n resourceTitle: '',\n title: name || title,\n resourceURL: generateResourceURL(ITEM_TYPES.SENTBOX_LINK, id, appID, type)\n }\n }));\n }\n}\n\nfunction* watchDonations({ payload: { title, description, selectedPrice: price } }) {\n const appID = yield select(SELECTORS.getAppID);\n const appIcon = yield select(SELECTORS.getInstallableIconURL);\n const donationCartData = {\n donation: [{\n description,\n images: [appIcon],\n name: title,\n options: [],\n pid: '1000',\n price,\n quantity: '1'\n }]\n };\n\n yield put(ACTION_CREATORS.setCartProductsAction(donationCartData));\n\n const { checkoutKey } = yield call(API.updateCart, appID, JSON.stringify(donationCartData));\n\n if (checkoutKey) {\n yield put(ACTION_CREATORS.setCheckoutKeyAction(checkoutKey));\n }\n}\n\nfunction* watchShowWhatsNewModal({ payload: whatsNewKeys }) {\n const storageKeys = whatsNewKeys\n .reduce((acc, key) => ({ ...acc, [key]: `whats_new_portal_${key.split(/(?=[A-Z])/).map(word => word.toLowerCase()).join('_')}` }), {});\n\n const unseenedKeys = Object.entries(storageKeys).filter(([, localStorageKey]) => global?.localStorage?.getItem(localStorageKey) !== '1');\n\n if (unseenedKeys.length && !isTestingEnv()) {\n const unseenedWhatsNewKeys = unseenedKeys.map(key => key[0]);\n yield put(ACTION_CREATORS.showGenericModalAction({ name: MODALS.WHAT_IS_NEW, whatsNewKeys: unseenedWhatsNewKeys }));\n unseenedKeys.forEach(([, localStorageKey]) => global?.localStorage?.setItem(localStorageKey, 1));\n }\n}\n\nfunction* watchFetchStorePropertiesSuccess() {\n const cartProducts = yield select(SELECTORS.getCart);\n if (isEmpty(cartProducts)) {\n return;\n }\n const appID = yield select(SELECTORS.getAppID);\n const productListItems = yield select(SELECTORS.getProductListItems);\n const validCartProducts = Object.fromEntries(Object.entries(cartProducts).map(([formID, products]) => [\n formID,\n products.filter(({ pid }) => productListItems.find(item => item.formID === formID)?.products?.some(product => product.pid === pid))\n ]));\n\n if (!isEqual(validCartProducts, cartProducts)) {\n yield put(ACTION_CREATORS.setCartProductsAction(validCartProducts));\n yield call(API.updateCart, appID, JSON.stringify(validCartProducts));\n }\n\n const validPriceCartProducts = Object.fromEntries(Object.entries(cartProducts).map(([formID, products]) => [\n formID,\n products.filter(({ pid, price }) => {\n const productListItem = productListItems.find(item => item.formID === formID)?.products?.find(product => product.pid === pid);\n return productListItem && productListItem.price === price;\n })\n ]));\n\n if (!isEqual(validPriceCartProducts, validCartProducts)) {\n yield put(ACTION_CREATORS.setIsChangedPriceInCartAction(true));\n yield put(ACTION_CREATORS.setCartProductsAction(validPriceCartProducts));\n yield call(API.updateCart, appID, JSON.stringify(validPriceCartProducts));\n }\n}\n\nfunction* watchFetchStorePropertiesRequest() {\n const portalID = yield select(SELECTORS.getPortalIDSelector);\n const { cartProducts, favoriteProducts, checkoutKey } = yield call(API.getStorePropertiesOfUser, portalID);\n\n yield put({ type: ACTION_TYPES.FETCH_STORE_PROPERTIES.SUCCESS, payload: { cartProducts, favoriteProducts, checkoutKey } });\n}\n\nfunction* watchFetchNotificationHistory() {\n const appID = yield select(SELECTORS.getAppID);\n try {\n const historyList = yield call(API.getNotificationHistory, appID);\n yield put({ type: ACTION_TYPES.FETCH_NOTIFICATON_HISTORY.SUCCESS, notificationHistory: historyList });\n } catch (err) {\n console.error(err);\n }\n}\n\nfunction* watchFetchNotificationStats() {\n const appID = yield select(SELECTORS.getAppID);\n try {\n const stats = yield call(API.getNotificationStats, appID);\n yield put({ type: ACTION_TYPES.FETCH_NOTIFICATION_STATS.SUCCESS, stats });\n } catch (err) {\n console.error(err);\n }\n}\n\nfunction* watchSendPushNotificationError({ payload: error }) {\n if (error?.data?.responseCode === 401) {\n let message;\n switch (error.data.message) {\n case NOTIFICATION_ERROR_MESSAGES.HOURLY_LIMIT:\n message = t('You have reached the maximum number of push notifications allowed per hour. Please try again later.');\n break;\n case NOTIFICATION_ERROR_MESSAGES.DAILY_LIMIT:\n message = t('You have reached the maximum number of push notifications allowed for today. Please try again tomorrow.');\n break;\n case NOTIFICATION_ERROR_MESSAGES.NOT_ALLOWED:\n message = t(\"You're not authorized to use this feature.\");\n break;\n default:\n message = t('Something went wrong. Please try again.');\n }\n yield put(ACTION_CREATORS.toastAction({\n message,\n error: true,\n type: 'error'\n }));\n }\n}\n\nfunction* watchSendPushNotification({ payload: { title, message, reset } }) {\n const appID = yield select(SELECTORS.getAppID);\n const notificationHistoryList = yield select(SELECTORS.notificationHistory);\n\n try {\n const response = yield call(API.sendPushNotification, { appID, title, message });\n const newHistoryList = [response, ...notificationHistoryList];\n\n yield put({ type: ACTION_TYPES.SEND_PUSH_NOTIFICATION.SUCCESS, payload: newHistoryList });\n reset();\n yield put(ACTION_CREATORS.toastAction({\n message: t('All users will receive a notification.'),\n type: 'success',\n backdrop: false\n }));\n } catch (error) {\n yield put({ type: ACTION_TYPES.SEND_PUSH_NOTIFICATION.ERROR, payload: error });\n }\n}\n\n// eslint-disable-next-line max-statements\nexport function* rootSagaFlow() {\n yield takeLatest(ACTION_TYPES.UPDATE_PORTAL.UNDOABLE, safeWorker(watchPortalUpdates));\n yield takeEvery(ACTION_TYPES.ADD_PORTAL_ITEMS.REQUEST, safeWorker(watchPortalItemAdditions));\n yield takeLatest(ACTION_TYPES.REMOVE_PORTAL_ITEMS.REQUEST, safeWorker(watchPortalItemRemovals));\n yield takeEvery(ACTION_TYPES.UPDATE_ORDER.UNDOABLE, safeWorker(watchItemOrderUpdate));\n yield takeLatest(ACTION_TYPES.UPDATE_ITEM_PROP.UNDOABLE, safeWorker(watchItemPropUpdate));\n yield takeLatest(ACTION_TYPES.CREATE_NEW_PORTAL.REQUEST, safeWorker(watchCreatePortal));\n yield takeLatest(ACTION_TYPES.BRANDING_BANNER_CLICK, watchBrandingButtonClick);\n yield takeLatest(ACTION_TYPES.BUILD_WITH_FORM, watchBuildOrCreate);\n yield takeEvery(ACTION_TYPES.FETCH_PORTAL.REQUEST, safeWorker(fetchPortalFlow));\n yield takeEvery(ACTION_TYPES.FETCH_SIGNS.REQUEST, safeWorker(wathcFetchSigns));\n yield takeEvery(ACTION_TYPES.FETCH_FORMS.REQUEST, safeWorker(watchFetchForms));\n yield takeEvery(ACTION_TYPES.CREATE_FORM_FROM_TEMPLATE.REQUEST, safeWorker(watchCreateFormFromTemplate));\n yield takeEvery(ACTION_TYPES.CREATE_FORM_FROM_SCRATCH.REQUEST, safeWorker(watchCreateFormFromScratch));\n yield takeEvery(ACTION_TYPES.CREATE_SIGN_DOCUMENT_FROM_TEMPLATE.REQUEST, safeWorker(watchCreateSignDocumentFromTemplate));\n yield takeEvery(ACTION_TYPES.SHOULD_WINDOW_SQUEEZE, watchWindowSqueeze);\n yield takeEvery(ACTION_TYPES.SEND_FEEDBACK.REQUEST, safeWorker(sendFeedback));\n yield takeEvery(ACTION_TYPES.FETCH_APPS.REQUEST, safeWorker(watchFetchUserApps));\n yield takeEvery(ACTION_TYPES.SELECT_ALL_ITEMS, watchSelectAllItems);\n yield takeEvery(ACTION_TYPES.REMOVE_SELECTED_ITEMS, watchDeleteSelectedItems);\n yield takeLatest(ACTION_TYPES.UPDATE_MULTIPLE_ITEM.UNDOABLE, safeWorker(watchMultipleItemUpdate));\n yield takeEvery(action => /^@UI/ig.test(action.type), watchUIupdates);\n yield takeEvery(isAPIErrorAction, watchErrors);\n yield takeEvery(ACTION_TYPES.SELECT_MULTIPLE_PORTAL_ITEM, watchMultipleSelection);\n yield takeEvery(\n [\n ACTION_TYPES.UPDATE_ITEM_PROP.REQUEST,\n ACTION_TYPES.CALCULATE_DONE_COUNT,\n ACTION_TYPES.UPDATE_ITEM_PROP.WITHOUT_DEBOUNCE,\n ACTION_TYPES.UPDATE_ITEM_PROP.WITH_DEBOUNCE\n ],\n watchDoneItemProgress);\n yield takeEvery(ACTION_TYPES.CALCULATE_TODO_COUNT, watchTodoItemProgress);\n yield takeEvery(ACTION_TYPES.RESTART_PROGRESS, watchRestartProgress);\n yield takeEvery(ACTION_TYPES.UPDATE_ITEM_PROP.WITHOUT_DEBOUNCE, watchItemPropUpdateRequest);\n yield debounce(500, ACTION_TYPES.UPDATE_ITEM_PROP.WITH_DEBOUNCE, watchItemPropUpdateRequest);\n yield takeEvery([ACTION_TYPES.UPDATE_ITEM_PROP.SUCCESS, ACTION_TYPES.UPDATE_MULTIPLE_ITEM.SUCCESS], watchProgressBarAvailability);\n yield takeEvery(ACTION_TYPES.ITEM_ADDITION_PORTAL_ORDER_WORKER.REQUEST, safeWorker(watchPortalOrderInItemAddition));\n yield takeEvery(ACTION_TYPES.WATCH_HEADING_ITEM_FOR_PAGE_NAMING, watchHeadingItemToPageNaming);\n yield takeEvery(ACTION_TYPES.UPDATE_PORTAL_SLUG.REQUEST, updateSlug);\n yield takeEvery(ACTION_TYPES.LAYOUT_CHANGE.REQUEST, safeWorker(watchLayoutChange));\n yield takeEvery(ACTION_TYPES.FETCH_USER_TEAMS.REQUEST, safeWorker(watchFetchUserTeams));\n yield takeEvery(ACTION_TYPES.FETCH_USER_TEAM_PERMISSIONS.REQUEST, safeWorker(watchFetchUserTeamPermissions));\n\n yield takeEvery([ACTION_TYPES.ADD_NEW_PAGE.UNDOABLE, ACTION_TYPES.UPDATE_PAGE.UNDOABLE, ACTION_TYPES.DELETE_PAGE.UNDOABLE], safeWorker(pageActions));\n yield takeEvery(ACTION_TYPES.CHANGE_PAGE_ORDER.REQUEST, safeWorker(watchPageUpdate));\n yield takeEvery(ACTION_TYPES.UPDATE_ORDER_WORKER.REQUEST, safeWorker(watchItemSorting));\n yield takeEvery(ACTION_TYPES.UPDATE_USER.REQUEST, safeWorker(watchUserSettingUpdate));\n yield takeEvery(ACTION_TYPES.CONTINUE_AS_USER.REQUEST, safeWorker(watchContinueAsUser));\n yield takeEvery(ACTION_TYPES.DUPLICATE_ITEM, safeWorker(watchItemDuplication));\n yield takeEvery(ACTION_TYPES.REPLACE_FORM_ITEM.REQUEST, safeWorker(watchReplaceFormItem));\n\n yield takeEvery(ACTION_TYPES.USER_CHANGE, safeWorker(watchUserChange));\n\n yield takeEvery(ACTION_TYPES.UPDATE_PORTAL_USER_PROPS.REQUEST, safeWorker(watchUpdatePortalUserProps));\n\n yield takeEvery(ACTION_TYPES.SET_CHECKOUT_FORM_STATUS, watchCheckoutFormStatusChanges);\n\n yield takeEvery(ACTION_TYPES.NAVIGATION_ITEM_CLICK, watchNavigationItemClick);\n\n yield takeEvery(ACTION_TYPES.ON_TODO_COMPLETE, watchSetTodoComplete);\n\n yield takeEvery(ACTION_TYPES.CREATE_PORTAL_WITH_STORE, createNewPortalWithStore);\n\n yield takeEvery(ACTION_TYPES.CREATE_PORTAL_WITH_TEMPLATE, createNewPortalWithTemplate);\n\n yield takeEvery(ACTION_TYPES.CREATE_PORTAL_WITH_DONATION, createNewPortalWithDonation);\n\n yield takeEvery(ACTION_TYPES.SET_IS_APP_DONE, watchIsAppDone);\n\n yield takeEvery(ACTION_TYPES.ON_FORM_PICKER_MODAL_CONFIRM, watchFormPickerModalConfirm);\n\n yield takeEvery(ACTION_TYPES.ON_RESOURCE_PICKER_MODAL_CONFIRM, watchResourcePickerModalConfirm);\n\n yield takeEvery(ACTION_TYPES.ON_LEFT_PANEL_ITEM_CLICK, watchLeftPanelItemClick);\n\n yield takeEvery(ACTION_TYPES.ON_ITEM_CLICK, watchItemClick);\n\n yield takeEvery(ACTION_TYPES.ON_STAGE_CLICK, watchOnStageClick);\n yield takeEvery(ACTION_TYPES.SHOW_DONATION_ITEM, watchShowDonationItem);\n yield takeEvery(ACTION_TYPES.ON_DRAG_END, watchOnDragEnd);\n yield takeEvery(ACTION_TYPES.ON_DELETE_PAGE, watchOnDeletePage);\n yield takeEvery(ACTION_TYPES.ON_MULTIPLE_ITEM_UPDATE, watchOnMultipleItemUpdate);\n\n yield takeEvery(ACTION_TYPES.OPEN_RIGHT_PANEL_WITH_MODE, watchOpenRightPanelWithMode);\n\n yield takeEvery(ACTION_TYPES.UPDATE_APP_LOGO.REQUEST, watchUpdateAppLogo);\n\n yield takeEvery(ACTION_TYPES.SET_APP_STATUS, watchAppStatus);\n\n // yield takeEvery(ACTION_TYPES.SET_APP_STATUS, watchUXRSurveyModal);\n\n yield takeEvery(ACTION_TYPES.FETCH_PORTAL.SUCCESS, watchFetchPortalSuccess);\n\n yield takeEvery(ACTION_TYPES.DONATE, watchDonations);\n\n yield takeEvery(ACTION_TYPES.SHOW_WHATS_NEW_MODAL, watchShowWhatsNewModal);\n yield takeEvery(ACTION_TYPES.FETCH_STORE_PROPERTIES.REQUEST, watchFetchStorePropertiesRequest);\n yield takeEvery(ACTION_TYPES.FETCH_STORE_PROPERTIES.SUCCESS, watchFetchStorePropertiesSuccess);\n yield takeLatest(ACTION_TYPES.INIT_ELEMENTS_PANEL_AB_TEST, initAppElementPanelAbTest);\n yield takeEvery(ACTION_TYPES.SEND_PUSH_NOTIFICATION.REQUEST, watchSendPushNotification);\n yield takeEvery(ACTION_TYPES.SEND_PUSH_NOTIFICATION.ERROR, watchSendPushNotificationError);\n yield takeEvery(ACTION_TYPES.FETCH_NOTIFICATON_HISTORY.REQUEST, watchFetchNotificationHistory);\n yield takeEvery(ACTION_TYPES.FETCH_NOTIFICATION_STATS.REQUEST, watchFetchNotificationStats);\n\n yield spawn(productListActions);\n yield spawn(searchInProductsActions);\n yield spawn(navigationActions);\n\n yield spawn(fetchUserSlugFlow);\n yield spawn(fetchWidgetsFlow);\n yield spawn(templateCategoriesFlow);\n yield spawn(svgIconsFlow);\n yield spawn(appStatusChecker);\n yield spawn(fetchUserFlow);\n yield spawn(fetchPortalFlow);\n yield spawn(fetchEnvironmentFlow); // TODO why? Ask Berkay\n yield spawn(trackEvents);\n yield spawn(shareFlow);\n yield spawn(watchAPIRequests);\n yield spawn(watchUIPanelsChanges);\n yield spawn(keepClosedUIPanels);\n yield spawn(watchModals);\n yield spawn(watchUndoableActions);\n yield spawn(watchUndoRedoActions);\n yield spawn(watchToastActions);\n yield spawn(watchAppToast);\n yield spawn(watchNetworkStatus);\n yield spawn(watchStylingActions);\n yield spawn(fetchCDNConfigFlow);\n yield spawn(fetchUserApps);\n yield spawn(eventsFlow);\n if (getTeamID()) {\n yield spawn(fetchTeamFlow);\n yield spawn(collaborationFlow);\n }\n yield spawn(activateFullStoryOnTheFly);\n yield spawn(productList); // it is new\n yield spawn(checkoutFormFlow);\n yield spawn(uxrExitIntentSurveyFlow);\n yield spawn(dataSourceFlow);\n}\n","import {\n combineReducers, createStore, compose, applyMiddleware\n} from 'redux';\nimport createSagaMiddleware from 'redux-saga';\nimport UIReducer from './reducers/ui';\nimport userReducer from './reducers/user';\nimport portalReducer from './reducers/portal';\nimport formsReducer from './reducers/forms';\nimport signsReducer from './reducers/signs';\nimport shareReducer from './reducers/share';\nimport appsReducer from './reducers/apps';\nimport undoRedo from './reducers/undoRedo';\nimport progress from './reducers/progress';\nimport widgetsReducer from './reducers/widgets';\nimport productsReducer from './reducers/products';\nimport CDNConfigReducer from './reducers/cdnconfig';\nimport teamReducer from './reducers/team';\nimport checkoutFormReducer from './reducers/checkoutForm';\nimport pushNotificationReducer from './reducers/pushNotification';\nimport livePreviewReducer from './reducers/livePreview';\nimport AssistantReducer from './reducers/assistant';\nimport dataSourceReducer from './reducers/dataSource';\nimport UserManagementReducer from './reducers/userManagement';\n\nimport { rootSagaFlow } from './saga';\n\nconst rootReducer = combineReducers({\n ui: UIReducer,\n user: userReducer,\n forms: formsReducer,\n signs: signsReducer,\n portal: portalReducer,\n share: shareReducer,\n apps: appsReducer,\n widgets: widgetsReducer,\n cdnConfig: CDNConfigReducer,\n undoRedo,\n progress,\n products: productsReducer,\n team: teamReducer,\n checkoutForm: checkoutFormReducer,\n pushNotification: pushNotificationReducer,\n livePreview: livePreviewReducer,\n assistant: AssistantReducer,\n dataSource: dataSourceReducer,\n userManagement: UserManagementReducer\n});\n\nconst sagaMiddleware = createSagaMiddleware();\n\nconst middlewares = applyMiddleware(\n sagaMiddleware\n);\n\nconst composeEnhancers = (typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) || compose;\nconst store = createStore(rootReducer, composeEnhancers(middlewares));\n\nsagaMiddleware.run(rootSagaFlow);\nexport default store;\n","import React from 'react';\nimport { Provider } from 'react-redux';\nimport store from './store';\n\nconst withStore = AppComponent => {\n return () => (\n \n \n \n );\n};\n\nexport default withStore;\n","import React, { useCallback } from 'react';\nimport { func, string, boolean } from 'prop-types';\nimport Styled from 'styled-components';\nimport { t } from '@jotforminc/translation';\nimport { ConfirmationModal } from '@jotforminc/modals';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { IconExclamationTriangleFilled } from '@jotforminc/svg-icons';\nimport * as ACTION_CREATORS from '../../../../../store/actionCreators';\nimport SELECTORS from '../../../../../store/selectors';\n\nconst ScCommonConfirmationModal = Styled.div`\n svg { width: 73px }\n\n .taste.isRed {\n background: #FF4948;\n\n &:hover {\n background: #F12E2D;\n }\n }\n\n .taste.isGhost {\n background-color: #FAFAFC;\n\n &:hover {\n background-color: #fff;\n color: #9EA7CE;\n border-color: #9EA7CE;\n }\n }\n\n .dontshow {\n background-color: #EDF8FF;\n margin: 20px 0 0;\n }\n\n .dontshow-input:checked + .dontshow-checkbox:before {\n background-color: #0099FF;\n border-color: #0099FF;\n }\n\n .dontshow-checkbox {\n cursor: pointer;\n }\n\n .dontshow-text {\n cursor: pointer;\n }\n`;\n\nconst DeletePageModal = ({\n onClose, pageID, type, forceDeleteItems, ...rest\n}) => {\n const dispatch = useDispatch();\n\n const selectedPageID = useSelector(SELECTORS.getSelectedPage) || pageID;\n\n const handleConfirm = useCallback(({ dontShowAgain: deleteItems = false }) => {\n dispatch(ACTION_CREATORS.deletePageAction(selectedPageID, forceDeleteItems ? true : deleteItems, type));\n onClose();\n }, [forceDeleteItems]);\n\n return (\n \n }\n backText={t('CANCEL')}\n confirmText={t('DELETE PAGE')}\n title={t('Are you sure you want to delete this page?')}\n subtitle={t('Are you sure you want to proceed?')}\n description={t('You can undo this action by pressing Command + Z.')}\n dontShowAgainText={t('Delete all elements on this page.')}\n showDontShowAgain={!forceDeleteItems}\n onConfirm={handleConfirm}\n onBack={onClose}\n onClose={onClose}\n {...rest}\n />\n \n );\n};\n\nDeletePageModal.defaultProps = {\n pageID: '',\n type: '',\n forceDeleteItems: false\n};\n\nDeletePageModal.propTypes = {\n onClose: func.isRequired,\n type: string,\n pageID: string,\n forceDeleteItems: boolean\n};\n\nexport default DeletePageModal;\n","import { t } from '@jotforminc/translation';\nimport { func } from 'prop-types';\nimport React, { useCallback } from 'react';\nimport {\n Button,\n Dialog,\n DialogBody,\n DialogIcon,\n DialogTitle,\n DialogDescription,\n DialogActions\n} from '@jotforminc/magnet';\nimport { useDispatch } from 'react-redux';\nimport { IconArrowRotateRight } from '@jotforminc/svg-icons';\nimport * as ACTION_CREATORS from '../../store/actionCreators';\n\nconst RestartAppModal = ({ onClose }) => {\n const dispatch = useDispatch();\n\n const handleRestartProgress = useCallback(() => {\n dispatch(ACTION_CREATORS.restartProgressAction());\n onClose();\n }, []);\n\n return (\n \n \n \n {t('Restart progress')}\n \n

    {t('Are you sure you want to restart your progress?')}

    \n

    {t('All required steps will be restored, and')}

    \n

    {t('your submissions won’t be deleted.')}

    \n
    \n
    \n \n \n {t('Cancel')}\n \n \n {t('Yes, Restart')}\n \n \n \n );\n};\n\nRestartAppModal.propTypes = {\n onClose: func.isRequired\n};\n\nexport default RestartAppModal;\n","import { objectEntries } from './data';\n\nexport const autoTranslateSingleValue = value => {\n if (typeof value.locale === 'function') {\n return value.locale();\n }\n return value;\n};\n\nexport const autoTranslate = translationObject => {\n const translatedObject = {};\n\n objectEntries(translationObject).forEach(item => {\n const [key, value] = item;\n translatedObject[key] = autoTranslateSingleValue(value);\n });\n return translatedObject;\n};\n","import { autoTranslate } from '@jotforminc/utils';\n\nexport default autoTranslate({\n CLOSE: 'Close',\n BACK: 'Back',\n BETA: 'BETA',\n NEW: 'NEW',\n USE_TEMPLATE: 'Use Template',\n PREVIEW_FORM: 'Preview Form',\n PLEASE_WAIT: 'Please wait...',\n CHOOSE_FROM_TEMPLATES: 'Choose a template',\n CHOOSE_FROM_TEMPLATES_SUBTITLE: 'Explore {formTemplatesCount}+ ready-made templates to create a form in minutes',\n SELECT_YOUR_FORM: 'Select a Form',\n SELECT_YOUR_FORM_SUBTITLE: 'Select the form you want to use.'\n});\n","import React from 'react';\nimport {\n oneOfType, arrayOf, func, string, node\n} from 'prop-types';\nimport { classNames } from '@jotforminc/utils';\n\nexport default class Button extends React.Component {\n render() {\n const { children, className, ...props } = this.props;\n return (\n \n {children}\n \n );\n }\n}\n\nButton.propTypes = {\n onClick: func,\n className: string,\n children: oneOfType([\n arrayOf(node),\n node\n ])\n};\n\nButton.defaultProps = {\n onClick: f => f,\n className: null,\n children: null\n};\n","import React from 'react';\nimport { string } from 'prop-types';\nimport { classNames } from '@jotforminc/utils';\n\nimport { IconXmark } from '@jotforminc/svg-icons';\nimport texts from '../../core/texts';\nimport Button from '.';\n\nexport default class CloseButton extends React.Component {\n render() {\n const {\n className, label, ...props\n } = this.props;\n return (\n \n \n \n );\n }\n}\n\nCloseButton.propTypes = {\n className: string,\n label: string\n};\n\nCloseButton.defaultProps = {\n className: null,\n label: texts.CLOSE\n};\n","export const stateClass = (action, className) => {\n return global.document.body.classList[action](className);\n};\n\n// Minimal fetch\n// https://github.com/developit/unfetch\nexport const fetch = (url, options) => {\n /* eslint-disable */\n options = options || {};\n return new Promise( (resolve, reject) => {\n const request = new XMLHttpRequest();\n const keys = [];\n const all = [];\n const headers = {};\n\n const response = () => ({\n ok: (request.status/100|0) == 2, // 200-299\n statusText: request.statusText,\n status: request.status,\n url: request.responseURL,\n text: () => Promise.resolve(request.responseText),\n json: () => Promise.resolve(JSON.parse(request.responseText)),\n blob: () => Promise.resolve(new Blob([request.response])),\n clone: response,\n headers: {\n keys: () => keys,\n entries: () => all,\n get: n => headers[n.toLowerCase()],\n has: n => n.toLowerCase() in headers\n }\n });\n\n request.open(options.method || 'get', url, true);\n\n request.onload = () => {\n request.getAllResponseHeaders().replace(/^(.*?):[^\\S\\n]*([\\s\\S]*?)$/gm, (m, key, value) => {\n keys.push(key = key.toLowerCase());\n all.push([key, value]);\n headers[key] = headers[key] ? `${headers[key]},${value}` : value;\n });\n resolve(response());\n };\n\n request.onerror = reject;\n\n request.withCredentials = options.credentials == 'include';\n\n for (const i in options.headers) {\n request.setRequestHeader(i, options.headers[i]);\n }\n\n request.send(options.body || null);\n });\n /* eslint-enable */\n};\n","import React from 'react';\nimport {\n boolean, string, oneOfType, arrayOf, shape, node\n} from 'prop-types';\n\nconst WizardWrapper = ({\n children, withContainer, wrapperRestProps, className\n}) => {\n return withContainer ? (\n \n {children}\n
    \n ) : children;\n};\n\nWizardWrapper.propTypes = {\n withContainer: boolean,\n className: string,\n children: oneOfType([\n arrayOf(node),\n node\n ]),\n wrapperRestProps: shape({})\n};\n\nWizardWrapper.defaultProps = {\n withContainer: true,\n className: '',\n children: null,\n wrapperRestProps: {}\n};\n\nexport default WizardWrapper;\n","import React from 'react';\nimport { createPortal } from 'react-dom';\nimport {\n node, bool, string, func,\n shape, objectOf, arrayOf, elementType\n} from 'prop-types';\nimport { classNames } from '@jotforminc/utils';\n\nimport CloseButton from '../Button/CloseButton';\n\nimport { stateClass } from '../../core/utils';\n\nimport '../../styles/jfWizard.scss';\nimport WizardWrapper from './WizardWrapper';\n\nclass WizardNavigation extends React.Component {\n constructor(props) {\n super(props);\n\n this.setView = this.setView.bind(this);\n this.toggleVisibility = this.toggleVisibility.bind(this);\n this.setVisibilityState = this.setVisibilityState.bind(this);\n this.getClassNames = this.getClassNames.bind(this);\n this.getModalState = this.getModalState.bind(this);\n this.setCloseButtonVisibilityState = this.setCloseButtonVisibilityState.bind(this);\n\n this.state = {\n isVisible: null,\n CurrentView: props.DefaultView,\n setViewProps: this.getViewProps(props),\n isCloseButtonVisible: props.closeable\n };\n\n stateClass('add', 'jfWizard--isReady');\n }\n\n componentDidMount() {\n const {\n DefaultView,\n targetElement,\n initialView,\n initialVisibilityState,\n wizardRef\n } = this.props;\n\n this.setView(DefaultView);\n\n if (targetElement) {\n this.initializeTargetElementEvent();\n }\n\n if (initialView) {\n this.setView(initialView);\n }\n\n if (initialVisibilityState) {\n this.setVisibilityState(initialVisibilityState);\n }\n\n if (wizardRef) {\n wizardRef.current = {\n show: () => this.setVisibilityState(true),\n hide: () => this.setVisibilityState(false),\n setView: this.setView\n };\n }\n }\n\n componentWillUnmount() {\n const { targetElement } = this.props;\n if (targetElement) {\n this.unbindTargetElementEvent(targetElement);\n }\n }\n\n handleTargetClick() {\n this.setVisibilityState(true);\n }\n\n /**\n * Set close button to visible or invisible.\n */\n setCloseButtonVisibilityState(isCloseButtonVisible) {\n this.setState({ isCloseButtonVisible });\n }\n\n getViewProps = props => {\n return {\n skip: props.skip,\n formId: props.formId,\n forms: props.forms,\n onSave: props.onSave,\n fetchFormQuestions: props.fetchFormQuestions,\n isReportEdit: props?.isReportEdit,\n reportType: props?.reportType,\n reportName: props?.reportName,\n reportPassword: props?.reportPassword,\n fields: props?.fields,\n isProtected: props?.isProtected,\n reportSettings: props?.reportSettings,\n reportID: props?.reportID,\n teamID: props?.teamID\n };\n };\n\n setView(newView, newProps = {}, resetState = false) {\n const { Navigation, hideOnEscapeKeyPress, onViewChange } = this.props;\n const { setViewProps: oldProps, CurrentView } = this.state;\n onViewChange(newView === 'Main');\n const viewProps = resetState ? this.getViewProps(this.props) : oldProps;\n\n const setViewProps = { ...viewProps, ...newProps };\n\n if (hideOnEscapeKeyPress && newProps && newProps.closeWizard) {\n this.toggleVisibility();\n return;\n }\n\n if (Navigation[newView]) {\n if (CurrentView !== newView) {\n window.scrollTo(0, 0);\n }\n\n this.setState({ CurrentView: newView, setViewProps });\n }\n }\n\n setVisibilityState(isVisible) {\n const { onShow, onHide } = this.props;\n this.setState({ isVisible });\n\n if (isVisible) {\n onShow();\n } else {\n this.setView('Main');\n onHide();\n }\n\n stateClass(isVisible ? 'add' : 'remove', 'jfWizard--isVisible');\n stateClass(isVisible ? 'add' : 'remove', 'jfWizard--isModalView');\n\n if (!isVisible) {\n this.setState({ setViewProps: { isModal: false } });\n }\n }\n\n toggleVisibility() { // eslint-disable-line\n const { isVisible } = this.state;\n this.setVisibilityState(!isVisible);\n }\n\n initializeTargetElementEvent() {\n const { targetElement } = this.props;\n this.bindTargetElementEvent(targetElement);\n }\n\n bindTargetElementEvent(targetElement) {\n targetElement.addEventListener('click', this.handleTargetClick.bind(this));\n }\n\n unbindTargetElementEvent(targetElement) {\n targetElement.removeEventListener('click', this.handleTargetClick.bind(this));\n }\n\n getClassNames() {\n const { wrapperProps: { className } } = this.props;\n const { setViewProps: { className: viewClassName } } = this.state;\n\n return classNames(className, viewClassName);\n }\n\n getModalState() {\n const { isModal } = this.props;\n const { setViewProps: { isModal: viewIsModal } } = this.state;\n\n stateClass(viewIsModal ? 'add' : 'remove', 'jfWizard--isModalView');\n\n return viewIsModal || isModal;\n }\n\n renderClsoeButton() {\n const { isCloseButtonVisible } = this.state;\n\n return isCloseButtonVisible && (\n
    \n \n
    \n );\n }\n\n renderTarget() {\n const { targetContainer } = this.props;\n\n if (typeof targetContainer === 'string') {\n return document.querySelector(targetContainer);\n }\n\n return targetContainer;\n }\n\n renderContent() {\n const {\n Navigation, isReportEdit, reportType, forms, digest, user, digestProps, teamID\n } = this.props;\n const { CurrentView, setViewProps } = this.state;\n if (isReportEdit && reportType && CurrentView === 'Main') {\n if (reportType === 'digest') {\n this.setView('DigestEmailBuilder', {\n forms,\n user,\n digest,\n digestProps,\n setView: this.setView,\n teamID\n });\n return;\n }\n this.setView('ReportConfiguration');\n }\n const CurrentViewComponent = Navigation[CurrentView];\n const isMobileApp = global.navigator.userAgent.indexOf('JotForm Mobile') > -1 || global.navigator.userAgent.indexOf('JFCEMobile') > -1;\n const {\n wrapperProps: { className, ...wrapperRestProps },\n isModal,\n usePortal,\n isEmbeddedToMixedCreationFlow,\n ...props\n } = this.props;\n\n const { isVisible } = this.state;\n const isEmbeddedMainStep = isEmbeddedToMixedCreationFlow && CurrentView === 'Main';\n\n if (!isVisible) return null;\n\n return (\n \n \n {!isMobileApp && this.renderClsoeButton()}\n \n );\n }\n\n render() {\n const { usePortal } = this.props;\n\n return usePortal ? createPortal(this.renderContent(), this.renderTarget()) : this.renderContent();\n }\n}\n\nWizardNavigation.propTypes = {\n targetElement: node,\n targetContainer: node,\n wrapperProps: shape({}),\n setViewWrapperProps: shape({}),\n isModal: bool,\n closeable: bool,\n initialVisibilityState: bool,\n initialView: string,\n hideOnEscapeKeyPress: bool,\n onShow: func,\n onHide: func,\n forms: arrayOf(shape()),\n usePortal: bool,\n wizardRef: shape(),\n DefaultView: string.isRequired,\n Navigation: objectOf(elementType).isRequired,\n isReportEdit: bool,\n reportType: string,\n digest: shape({}),\n digestProps: shape({}),\n user: shape({}),\n teamID: string,\n isEmbeddedToMixedCreationFlow: bool,\n onViewChange: func\n};\n\nconst getInitialView = () => {\n try {\n const { location: { search = '', pathname = '' } } = global;\n\n const urlParams = new URLSearchParams(search);\n let wizardInitialView = urlParams.get('wizardInitialView');\n\n if (wizardInitialView === 'UseTemplate' && pathname.includes('/mytables')) {\n wizardInitialView = 'SheetTemplates';\n }\n return wizardInitialView;\n } catch {\n return null;\n }\n};\n\nWizardNavigation.defaultProps = {\n targetElement: null,\n targetContainer: null,\n wrapperProps: {},\n setViewWrapperProps: {},\n isModal: false,\n closeable: true,\n initialVisibilityState: false,\n initialView: getInitialView(),\n hideOnEscapeKeyPress: true,\n onShow: f => f,\n onHide: f => f,\n forms: [],\n usePortal: false,\n wizardRef: null,\n isReportEdit: false,\n reportType: null,\n digest: {},\n user: {},\n digestProps: {},\n teamID: '',\n isEmbeddedToMixedCreationFlow: false,\n onViewChange: f => f\n};\n\nexport default WizardNavigation;\n","import React from 'react';\nimport { string } from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { classNames } from '@jotforminc/utils';\n\nimport { IconArrowLeft } from '@jotforminc/svg-icons';\nimport texts from '../../core/texts';\nimport Button from '.';\n\nexport default class BackButton extends React.Component {\n render() {\n const {\n className, label, ...props\n } = this.props;\n return (\n \n \n {t('back')}\n \n );\n }\n}\n\nBackButton.propTypes = {\n className: string,\n label: string\n};\n\nBackButton.defaultProps = {\n className: null,\n label: texts.BACK\n};\n","import React from 'react';\nimport {\n func,\n bool,\n string,\n oneOfType,\n node,\n arrayOf,\n object\n} from 'prop-types';\nimport keyboardJS from 'keyboardjs';\n\nimport BackButton from '../Button/BackButton';\n\nexport default class Header extends React.Component {\n constructor(props) {\n super(props);\n this.titleRef = React.createRef();\n this.backButtonClick = this.backButtonClick.bind(this);\n this.handleEscapePressed = this.handleEscapePressed.bind(this);\n }\n\n componentDidMount() {\n keyboardJS.bind('esc', this.handleEscapePressed);\n this.titleRef.current?.focus();\n }\n\n componentWillUnmount() {\n keyboardJS.unbind('esc', this.handleEscapePressed);\n }\n\n handleEscapePressed(e) {\n const { backButtonVisible, isModalVisible, onModalClose } = this.props;\n e.preventDefault();\n e.stopImmediatePropagation();\n if (isModalVisible && onModalClose) {\n onModalClose();\n return false;\n }\n if (backButtonVisible) {\n this.backButtonClick();\n return false;\n }\n const { setView } = this.props;\n setView('Main', { closeWizard: true });\n }\n\n handleFillVariable(subTitle) {\n if (typeof subTitle !== 'string' || subTitle.length === 0) return subTitle;\n let filledSubTitle = subTitle;\n const variables = {\n TABLE_TEMPLATES_COUNT: 300,\n APP_TEMPLATES_COUNT: 600,\n appTemplatesCount: 600\n };\n Object.keys(variables).forEach(variableKey => {\n filledSubTitle = filledSubTitle.replace(`{${variableKey}}`, variables[variableKey]);\n });\n return filledSubTitle;\n }\n\n get htmlAttributes() {\n const uikitModalContainer = document?.querySelector?.(\"[data-uikit-modal-container='true']\");\n const ariaLabelledBy = uikitModalContainer?.getAttribute('aria-labelledby');\n const ariaDescribedBy = uikitModalContainer?.getAttribute('aria-describedby');\n\n return { ariaLabelledBy, ariaDescribedBy };\n }\n\n get title() {\n const { ariaLabelledBy } = this.htmlAttributes;\n const { title, noDecodeURI } = this.props;\n return title && (\n \n {noDecodeURI ? title : decodeURI(title)}\n \n );\n }\n\n get subTitle() {\n const { ariaDescribedBy } = this.htmlAttributes;\n const { subTitle, noDecodeURI, extraSubTitleClasses } = this.props;\n const filledSubtitle = this.handleFillVariable(subTitle);\n return subTitle && (\n \n {noDecodeURI ? filledSubtitle : decodeURI(filledSubtitle)}\n \n );\n }\n\n get backButton() {\n const { backButtonVisible } = this.props;\n return backButtonVisible &&
    ;\n }\n\n backButtonClick() {\n const {\n onBackButtonClick, setView, actionLogger, backToMixModalActionLogger\n } = this.props;\n\n if (global.user && actionLogger) {\n actionLogger?.({ actor: global.user.username, action: 'wizardBackClick', target: '.forBack' });\n }\n\n if (onBackButtonClick) {\n backToMixModalActionLogger?.();\n return onBackButtonClick();\n }\n\n setView('Main');\n }\n\n render() {\n const { customStyles } = this.props;\n return (\n
    \n {this.backButton}\n {this.title}\n {this.subTitle}\n
    \n );\n }\n}\n\nHeader.propTypes = {\n setView: func,\n actionLogger: func,\n onBackButtonClick: func,\n backButtonVisible: bool,\n isModalVisible: bool,\n onModalClose: func,\n noDecodeURI: bool,\n title: oneOfType([string, node]),\n extraSubTitleClasses: arrayOf(string),\n subTitle: oneOfType([string, node]),\n customStyles: object,\n backToMixModalActionLogger: func\n};\n\nHeader.defaultProps = {\n setView: f => f,\n actionLogger: f => f,\n onBackButtonClick: null,\n backButtonVisible: false,\n isModalVisible: false,\n onModalClose: null,\n noDecodeURI: false,\n title: null,\n subTitle: null,\n extraSubTitleClasses: [],\n customStyles: {},\n backToMixModalActionLogger: f => f\n};\n","import React from 'react';\nimport {\n oneOfType, arrayOf, node, string\n} from 'prop-types';\nimport { classNames } from '@jotforminc/utils';\n\nexport default class WizardBody extends React.Component {\n render() {\n const { className, children, ...props } = this.props;\n\n return (\n
    \n {children}\n
    \n );\n }\n}\n\nWizardBody.propTypes = {\n children: oneOfType([\n arrayOf(node),\n node\n ]),\n className: string\n};\n\nWizardBody.defaultProps = {\n children: null,\n className: ''\n};\n","import React from 'react';\nimport {\n oneOfType, arrayOf, node, string, bool\n} from 'prop-types';\nimport { classNames } from '@jotforminc/utils';\n\nexport default class WizardItem extends React.Component {\n render() {\n const {\n children,\n className,\n noGutter,\n noMaxWidth,\n ...props\n } = this.props;\n\n return (\n
    \n {children}\n
    \n );\n }\n}\n\nWizardItem.propTypes = {\n children: oneOfType([\n arrayOf(node),\n node\n ]),\n className: string,\n noGutter: bool,\n noMaxWidth: bool\n};\n\nWizardItem.defaultProps = {\n children: null,\n className: '',\n noGutter: false,\n noMaxWidth: false\n};\n","import React from 'react';\n\nconst Loader = () => {\n return (\n
    \n
    \n
    \n
    \n
    \n );\n};\n\nexport default Loader;\n","/* eslint-disable max-len */\nexport const placeholderImage = 'https://cdn.jotfor.ms/assets/img/templates/placeholder-form.svg';\nexport const placeholderPdfImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAADPAQMAAAB1FH6uAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB5JREFUWMPtwTEBAAAAwiD7p7bETmAAAAAAAAAAQOcfiQABx6hqKQAAAABJRU5ErkJggg==';\nexport const placeholderPageImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8gAAAJxAQMAAACkLglIAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAG1JREFUeNrswYEAAAAAgKD9qRepAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg9uCQAAAAAEDQ/9feMAAAAAAAAAAAAAAAAAAAADASKekAAXrKGqUAAAAASUVORK5CYII=';\nexport const placeholderApprovalImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAECAQMAAADq3xPHAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAACJJREFUaN7twQEBAAAAgqD+r26IwAAAAAAAAAAAAAAAACDvM2YAAT++t4sAAAAASUVORK5CYII=';\nexport const placeholderTableImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATQAAADJAQMAAACXNFyvAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB5JREFUWMPtwYEAAAAAw6D7U19hANUAAAAAAAAAgOwfaAABUTPfMQAAAABJRU5ErkJggg==';\nexport const placeholderAgentImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATYAAADXAQMAAACqHe95AAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB9JREFUaN7twTEBAAAAwiD7pzbFPmAAAAAAAAAAACQOIZgAAZFj4y4AAAAASUVORK5CYII=';\n","export const getDeviceType = () => {\n const ua = global.navigator.userAgent;\n if (/(tablet|ipad|playbook|silk)|(android(?!.*mobi))/i.test(ua)) {\n return 'tablet';\n } if (/Mobile|Android|iP(hone|od)|IEMobile|BlackBerry|Kindle|Silk-Accelerated|(hpw|web)OS|Opera M(obi|ini)/.test(ua)) {\n return 'mobile';\n }\n return 'desktop';\n};\n","const getScrollableHeightOfElement = (element, withoutLimit) => {\n const maxScrollableDistance = 10000;\n const wrapperEl = element.parentElement;\n let distance = element.clientHeight - wrapperEl.clientHeight;\n distance = !withoutLimit && distance >= maxScrollableDistance ? maxScrollableDistance : distance;\n return -distance;\n};\n\nexport const getTopValue = screenshotRef => {\n const screenshotElement = screenshotRef.current;\n if (screenshotElement === null || !screenshotElement) return;\n const { clientHeight } = screenshotElement;\n if (clientHeight <= 0) return;\n return getScrollableHeightOfElement(screenshotElement);\n};\n","import { placeholderImage } from './constantImages';\n\nexport const onImageError = e => {\n const { target } = e;\n target.onerror = null;\n target.src = placeholderImage;\n};\n","import React from 'react';\nimport { string } from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { IconEyeFilled } from '@jotforminc/svg-icons';\n\nconst PreviewHint = ({ ctaText }) => {\n return (\n \n \n {t(ctaText)}\n \n );\n};\n\nexport default PreviewHint;\n\nPreviewHint.defaultProps = {\n ctaText: 'Preview'\n};\nPreviewHint.propTypes = {\n ctaText: string\n};\n","/* eslint-disable max-len */\nimport React, { useRef } from 'react';\nimport { object, func, bool } from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { getCurrentTime } from '@jotforminc/utils';\n\nimport { placeholderImage } from '../../constantImages';\nimport { getDeviceType } from '../../getDeviceType';\nimport { getTopValue } from './utils';\nimport { onImageError } from '../../onImageError';\nimport PreviewHint from './PreviewHint';\n\nconst defaultColor = 'rgba(255, 113, 26, 1)';\nconst defaultWhite = 'rgba(255,255,255,1)';\nconst defaultDark = 'rgba(0,0,0,1)';\n\nconst AppTemplateItem = ({\n template, imageLoaded, handlePreviewTemplate, setImageLoaded, templateCloneWrapper\n}) => {\n let animationTimeoutReferance;\n const screenshotRef = useRef();\n const slug = template._slug || template.slug;\n const title = template._title || template.title;\n const isSkeleton = title === 'skeleton';\n\n const screenshotURL = slug ? `https://cdn.jotfor.ms/templates/screenshot/app-templates/${slug}?f=png&w=1044` : placeholderImage;\n\n const getSplittedRGB = rgbString => rgbString.replace('rgba(', '').replace(')', '').split(',');\n\n const getLuminance = hexColor => {\n const [r, g, b] = getSplittedRGB(hexColor);\n\n const uicolors = [r / 255, g / 255, b / 255];\n const c = uicolors.map(col => (col <= 0.03928 ? col / 12.92 : ((col + 0.055) / 1.055) ** 2.4));\n return (0.2126 * c[0]) + (0.7152 * c[1]) + (0.0722 * c[2]);\n };\n\n const getBorderColor = (bgColor = defaultColor, lightColor = defaultWhite, darkColor = defaultDark) => {\n const L = getLuminance(bgColor);\n const L1 = getLuminance(lightColor);\n const L2 = getLuminance(darkColor);\n\n return (L > Math.sqrt((L1 + 0.05) * (L2 + 0.05)) - 0.05) ? darkColor : lightColor;\n };\n\n let notchColor;\n let splashBgColor = 'rgba(243, 243, 254, 1)';\n if (template.JSON) {\n const screenshotBGColor = JSON.parse(template.JSON)?.screenshotBGColor || defaultColor;\n splashBgColor = JSON.parse(template.JSON)?.splashBgColor || defaultColor;\n notchColor = getBorderColor(screenshotBGColor);\n }\n\n const updateScreenshotPosition = position => {\n if (!imageLoaded || getDeviceType() !== 'desktop') return;\n const screenshotElement = screenshotRef.current;\n if (screenshotElement === null || !screenshotElement) return;\n screenshotElement.style.top = `${position}px`;\n };\n\n const handleMouseEnterAnimation = () => {\n updateScreenshotPosition(getTopValue(screenshotRef));\n animationTimeoutReferance = setTimeout(() => updateScreenshotPosition(0), 2000);\n };\n\n const handleMouseLeave = () => {\n if (animationTimeoutReferance === undefined) return;\n clearTimeout(animationTimeoutReferance);\n updateScreenshotPosition(0);\n };\n\n const isWhite = notchColor === defaultWhite;\n const phoneNotchClass = isWhite ? 'white' : 'black';\n\n const previewTemplateWrapper = action => {\n handlePreviewTemplate(action, {\n ...template,\n splashBgColor,\n phoneNotchClass\n });\n };\n\n return (\n
    \n previewTemplateWrapper('viewTemplateFromImg')}\n >\n \n setImageLoaded(true)}\n src={!isSkeleton ? screenshotURL : placeholderImage}\n />\n
    \n
    \n {getCurrentTime()}\n
    \n
    \n \n
    \n
    \n \n \n \n \n \n \n \n \n
    \n
    \n

    previewTemplateWrapper('viewTemplateFromTitle')}>\n {title}\n

    \n \n \n { t('Use Template') }\n \n \n handlePreviewTemplate('viewTemplateFromPreviewCta')}\n >\n {t('Preview')}\n \n
    \n );\n};\n\nexport default AppTemplateItem;\nAppTemplateItem.defaultProps = {\n templateCloneWrapper: f => f\n};\nAppTemplateItem.propTypes = {\n templateCloneWrapper: func,\n template: object.isRequired,\n imageLoaded: bool.isRequired,\n setImageLoaded: func.isRequired,\n handlePreviewTemplate: func.isRequired\n};\n","import React, { useRef } from 'react';\nimport { object, func, bool } from 'prop-types';\nimport { t } from '@jotforminc/translation';\n\nimport { getTopValue } from './utils';\nimport { placeholderPdfImage } from '../../constantImages';\nimport { getDeviceType } from '../../getDeviceType';\nimport { onImageError } from '../../onImageError';\nimport PreviewHint from './PreviewHint';\n\nconst PdfTemplateItem = ({\n template, imageLoaded, handlePreviewTemplate, setImageLoaded, templateCloneWrapper\n}) => {\n let animationTimeoutReferance;\n const screenshotRef = useRef();\n const { screenshot } = template;\n const title = template._title || template.title;\n const isSkeleton = title === 'skeleton';\n\n const updateScreenshotPosition = position => {\n if (!imageLoaded || getDeviceType() !== 'desktop') return;\n const screenshotElement = screenshotRef.current;\n if (screenshotElement === null || !screenshotElement) return;\n screenshotElement.style.top = `${position}px`;\n };\n\n const handleMouseEnterAnimation = () => {\n updateScreenshotPosition(getTopValue(screenshotRef));\n animationTimeoutReferance = setTimeout(() => updateScreenshotPosition(0), 2000);\n };\n\n const handleMouseLeave = () => {\n if (animationTimeoutReferance === undefined) return;\n clearTimeout(animationTimeoutReferance);\n updateScreenshotPosition(0);\n };\n\n const previewTemplateWrapper = action => {\n handlePreviewTemplate(action, { ...template });\n };\n\n return (\n
    \n previewTemplateWrapper('viewTemplateFromImg')}\n >\n \n
    \n \n setImageLoaded(true)}\n src={!isSkeleton ? screenshot : placeholderPdfImage}\n />\n
    \n

    previewTemplateWrapper('viewTemplateFromTitle')}>\n {title}\n

    \n templateCloneWrapper(event)}\n >\n {t('Use Template')}\n \n
    \n );\n};\n\nexport default PdfTemplateItem;\nPdfTemplateItem.defaultProps = {\n};\nPdfTemplateItem.propTypes = {\n template: object.isRequired,\n imageLoaded: bool.isRequired,\n setImageLoaded: func.isRequired,\n templateCloneWrapper: func.isRequired,\n handlePreviewTemplate: func.isRequired\n};\n","/* eslint-disable complexity */\n/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\n/* eslint-disable @jotforminc/no-native-button */\n/* eslint-disable max-len */\nimport React, { useRef, useState } from 'react';\nimport {\n object, func, bool, string\n} from 'prop-types';\nimport cx from 'classnames';\nimport { t } from '@jotforminc/translation';\nimport { IconEyeFilled } from '@jotforminc/svg-icons';\nimport { classNames } from '@jotforminc/utils';\n\nimport { getDeviceType } from '../../getDeviceType';\nimport { getTopValue } from './utils';\nimport { placeholderImage } from '../../constantImages';\n\nconst FormTemplateItem = ({\n template, imageLoaded, handlePreviewTemplate,\n setImageLoaded, templateCloneWrapper, theme, context, useSlider\n}) => {\n const screenshotRef = useRef();\n const [loadImageErr, setLoadImageErr] = useState(false);\n const [screenshotScrolled, setScreenshotScrolled] = useState(false);\n const [isPlaceholder, setIsPlaceholder] = useState(false);\n const { _title, screenshot, _previewImageUrl } = template;\n const [screenshotPosition, setScreenshotPosition] = useState(0);\n const isSkeleton = _title === 'skeleton';\n\n const updateScreenshotPosition = position => {\n if (!imageLoaded || getDeviceType() !== 'desktop') return;\n const screenshotElement = screenshotRef.current;\n if (screenshotElement === null || !screenshotElement) return;\n setScreenshotPosition(position);\n setScreenshotScrolled(true);\n };\n\n const handleMouseEnterAnimation = () => {\n if (isPlaceholder) return;\n updateScreenshotPosition(getTopValue(screenshotRef) - 24);\n // animationTimeoutReferance = setTimeout(() => updateScreenshotPosition(0), 2000);\n };\n\n return (\n \n
    \n {\n setScreenshotPosition(0);\n setScreenshotScrolled(false);\n }}\n onMouseEnter={handleMouseEnterAnimation}\n >\n
    \n handlePreviewTemplate('viewTemplateFromImg')}\n className=\"template-item-imgur cursor-pointer block h-full bg-navy-50 color-white\"\n >\n \n \n {theme === 'card' && (\n
    \n )}\n\n \n setLoadImageErr(true)}\n onLoad={({ target: { src: screenshotSrc } }) => {\n const isScreenshotImageLoaded = screenshotSrc === placeholderImage;\n setIsPlaceholder(screenshotSrc && isScreenshotImageLoaded);\n setImageLoaded(!isScreenshotImageLoaded);\n }}\n />\n
    \n {theme === 'classic' && (\n <>\n \n \n \n )}\n
    \n \n \n \n {t('Preview')}\n \n
    \n {theme === 'classic' && (\n \n )}\n
    \n
    \n
    \n
    \n handlePreviewTemplate('viewTemplateFromTitle')}\n onKeyDown={() => handlePreviewTemplate('viewTemplateFromTitle')}\n >\n {!isSkeleton && _title}\n \n
    \n
    \n \n \n { t('Use Template') }\n \n \n handlePreviewTemplate('viewTemplateFromPreviewCta')}\n >\n {t('Preview')}\n \n
    \n
    \n
    \n );\n};\n\nexport default FormTemplateItem;\nFormTemplateItem.defaultProps = {\n context: '',\n useSlider: false\n};\nFormTemplateItem.propTypes = {\n template: object.isRequired,\n imageLoaded: bool.isRequired,\n setImageLoaded: func.isRequired,\n templateCloneWrapper: func.isRequired,\n handlePreviewTemplate: func.isRequired,\n theme: string.isRequired,\n context: string,\n useSlider: bool\n};\n","import React from 'react';\nimport { object, func, bool } from 'prop-types';\nimport { t } from '@jotforminc/translation';\n\nimport { placeholderTableImage } from '../../constantImages';\nimport { onImageError } from '../../onImageError';\nimport PreviewHint from './PreviewHint';\n\nconst TableTemplateItem = ({\n template, imageLoaded, handlePreviewTemplate,\n setImageLoaded, templateCloneWrapper\n}) => {\n const {\n _slug,\n _title,\n thumbnailBackgroundColor\n // _imageUrl,\n } = template;\n const isSkeleton = _title === 'skeleton';\n const screenshotURL = _slug ? `https://cdn.jotfor.ms/templates/screenshot/table-templates/${_slug}?f=png&w=930` : placeholderTableImage;\n return (\n
    \n
    handlePreviewTemplate('viewTemplateFromImg')}>\n
    \n \n setImageLoaded(true)}\n src={!isSkeleton ? (screenshotURL) : placeholderTableImage}\n />\n \n
    \n
    \n

    handlePreviewTemplate('viewTemplateFromTitle')}>{_title}

    \n templateCloneWrapper(event)}\n >\n {t('Use Template')}\n \n handlePreviewTemplate('viewTemplateFromPreviewCta')}\n >\n {t('Preview')}\n \n
    \n );\n};\n\nexport default TableTemplateItem;\nTableTemplateItem.defaultProps = {\n};\nTableTemplateItem.propTypes = {\n template: object.isRequired,\n imageLoaded: bool.isRequired,\n setImageLoaded: func.isRequired,\n templateCloneWrapper: func.isRequired,\n handlePreviewTemplate: func.isRequired\n};\n","import React from 'react';\nimport { object, func, bool } from 'prop-types';\nimport { t } from '@jotforminc/translation';\n\nimport { placeholderApprovalImage } from '../../constantImages';\nimport { onImageError } from '../../onImageError';\nimport PreviewHint from './PreviewHint';\n\nconst ApprovalTemplateItem = ({\n template, imageLoaded, handlePreviewTemplate,\n setImageLoaded, templateCloneWrapper\n}) => {\n const {\n slug,\n title\n } = template;\n const isSkeleton = title === 'skeleton';\n\n const screenshotURL = `https://cdn.jotfor.ms/templates/screenshot/approval-templates/${slug}?f=png&w=1482`;\n const image = slug ? screenshotURL : placeholderApprovalImage;\n\n return (\n
    \n
    handlePreviewTemplate('viewTemplateFromImg')}>\n
    \n \n setImageLoaded(true)}\n />\n \n
    \n
    \n

    handlePreviewTemplate('viewTemplateFromTitle')}>{title}

    \n templateCloneWrapper(event)}\n >\n {t('Use Template')}\n \n handlePreviewTemplate('viewTemplateFromPreviewCta')}\n >\n {t('Preview')}\n \n
    \n );\n};\n\nexport default ApprovalTemplateItem;\nApprovalTemplateItem.defaultProps = {\n};\nApprovalTemplateItem.propTypes = {\n template: object.isRequired,\n imageLoaded: bool.isRequired,\n setImageLoaded: func.isRequired,\n templateCloneWrapper: func.isRequired,\n handlePreviewTemplate: func.isRequired\n};\n","import React from 'react';\nimport { object, func, bool } from 'prop-types';\nimport { t } from '@jotforminc/translation';\n\nimport { placeholderAgentImage } from '../../constantImages';\nimport { onImageError } from '../../onImageError';\nimport PreviewHint from './PreviewHint';\n\nconst AgentTemplateItem = ({\n template, imageLoaded, handlePreviewTemplate,\n setImageLoaded, templateCloneWrapper\n}) => {\n const {\n title,\n thumbnailBackgroundColor,\n screenshot,\n _previewImageUrl\n } = template;\n const isSkeleton = title === 'skeleton';\n return (\n
    \n
    handlePreviewTemplate('viewTemplateFromImg')}>\n \n setImageLoaded(true)}\n src={!isSkeleton ? (screenshot || _previewImageUrl) : placeholderAgentImage}\n />\n \n
    \n

    handlePreviewTemplate('viewTemplateFromTitle')}>{title}

    \n \n {t('Use Agent')}\n \n handlePreviewTemplate('viewTemplateFromPreviewCta')}\n >\n {t('Preview')}\n \n
    \n );\n};\n\nexport default AgentTemplateItem;\nAgentTemplateItem.defaultProps = {\n};\nAgentTemplateItem.propTypes = {\n template: object.isRequired,\n imageLoaded: bool.isRequired,\n setImageLoaded: func.isRequired,\n templateCloneWrapper: func.isRequired,\n handlePreviewTemplate: func.isRequired\n};\n","import React, { useRef } from 'react';\nimport { object, func, bool } from 'prop-types';\nimport { t } from '@jotforminc/translation';\n\nimport { getTopValue } from './utils';\nimport { placeholderPageImage } from '../../constantImages';\nimport { getDeviceType } from '../../getDeviceType';\nimport { onImageError } from '../../onImageError';\nimport PreviewHint from './PreviewHint';\n\nconst PdfTemplateItem = ({\n template, imageLoaded, handlePreviewTemplate, setImageLoaded\n}) => {\n let animationTimeoutReferance;\n const screenshotRef = useRef();\n const { screenshot } = template;\n const title = template._title || template.title;\n const isSkeleton = title === 'skeleton';\n\n const updateScreenshotPosition = position => {\n if (!imageLoaded || getDeviceType() !== 'desktop') return;\n const screenshotElement = screenshotRef.current;\n if (screenshotElement === null || !screenshotElement) return;\n screenshotElement.style.top = `${position}px`;\n };\n\n const handleMouseEnterAnimation = () => {\n updateScreenshotPosition(getTopValue(screenshotRef));\n animationTimeoutReferance = setTimeout(() => updateScreenshotPosition(0), 2000);\n };\n\n const handleMouseLeave = () => {\n if (animationTimeoutReferance === undefined) return;\n clearTimeout(animationTimeoutReferance);\n updateScreenshotPosition(0);\n };\n\n const previewTemplateWrapper = action => {\n handlePreviewTemplate(action, { ...template });\n };\n\n return (\n
    \n previewTemplateWrapper('viewTemplateFromImg')}\n >\n \n
    \n \n setImageLoaded(true)}\n src={!isSkeleton ? screenshot : placeholderPageImage}\n />\n
    \n

    previewTemplateWrapper('viewTemplateFromTitle')}>\n {title}\n

    \n previewTemplateWrapper('viewFormPreviewButton')}\n >\n {t('Preview')}\n \n
    \n );\n};\n\nexport default PdfTemplateItem;\nPdfTemplateItem.defaultProps = {\n};\nPdfTemplateItem.propTypes = {\n template: object.isRequired,\n imageLoaded: bool.isRequired,\n setImageLoaded: func.isRequired,\n handlePreviewTemplate: func.isRequired\n};\n","import React from 'react';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\nimport { translationRenderer } from '@jotforminc/translation';\nimport { StorageHelper } from '@jotforminc/storage-helper';\n\nimport { getUrlParameter, handleCustomNavigation, handleRedirect as handleSignDocumentRedirect } from '@jotforminc/utils';\n\nimport AppTemplateItem from './components/TemplateItem/AppTemplateItem';\nimport PdfTemplateItem from './components/TemplateItem/PdfTemplateItem';\nimport FormTemplateItem from './components/TemplateItem/FormTemplateItem';\nimport TableTemplateItem from './components/TemplateItem/TableTemplateItem';\nimport ApprovalTemplateItem from './components/TemplateItem/ApprovalTemplateItem';\nimport AgentTemplateItem from './components/TemplateItem/AgentTemplateItem';\nimport PageTemplatesItem from './components/TemplateItem/PageTemplateItem';\n\nconst sharedPayloadProperties = { action: 'useTemplate', context: 'standalone' };\n\nexport const templateConstants = {\n 'form-templates': {\n newSidebar: true,\n abTestsAvailable: true,\n subGalleryViewActive: true,\n newPreviewModalActive: true,\n availableForEnterprise: false,\n gtmCloneActionKey: 'cloneForm',\n hasDetailedPreviewModal: true,\n count: '10,000',\n countKey: '{formTemplatesCount}',\n getCustomHeaderSubText: ({\n templateHeaderSubText, setView, countKey, count, username\n }) => ({\n subTitle: (\n <>\n {translationRenderer(`[1[${templateHeaderSubText}]] or [2[create form from scratch]]`)({\n renderer1: text => text.replaceAll(countKey, count),\n renderer2: text => (\n {\n if (window?.standaloneTemplatesLogger && (typeof window.standaloneTemplatesLogger === 'function')) {\n window.standaloneTemplatesLogger({\n actor: username,\n action: 'click',\n target: 'subtitle-scratch-btn'\n });\n }\n setView('StartFromScratch', {\n onBackButtonClick: () => {\n setView('UseTemplate');\n }\n });\n }}\n >\n {text}\n \n )\n })}\n \n ),\n extraSubTitleClasses: ['create-form-from-scratch-btn']\n }),\n templateItem: FormTemplateItem,\n sidebarTabs: [\n { text: 'types', value: 'formtype' },\n { text: 'industries', value: 'industry' },\n { text: 'professions', value: 'profession' }\n ],\n sortingOptions: ['popular', 'trend', 'recent'],\n formLayoutOptions: ['classic', 'card'],\n extractIdFromResponse: response => {\n const { data: { form: { id: newFormID = null } = {} } = {} } = response;\n return newFormID;\n },\n getCloneTemplatePayload: (modalProps, template, source) => {\n const {\n theme, formID, id, _id\n } = template;\n return {\n payload: {\n ...sharedPayloadProperties,\n theme,\n categories: template?._categories || template?.categories,\n slug: template?._slug || template?.slug || modalProps?.template?._slug,\n formID: formID || id || _id,\n action: 'cloneForm',\n ...(source === 'template-suggestion-modal' && { source: 'MYFORMS', context: source })\n },\n successAction: 'formCreationCompleted',\n failAction: 'useTemplateCloneFormFail',\n failMessage: 'Failed to clone form for use template action'\n };\n }\n },\n 'sign-templates': {\n newSidebar: true,\n aliasType: 'pdf-templates',\n gtmCloneActionKey: 'cloneSignDocument',\n sortCategoriesByFeatured: true,\n newPreviewModalActive: window.location.href.includes('newPreviewModalActive=1'),\n getCustomReqParams: source => {\n const defaults = { modeESign: '1' };\n if (source === 'app-sign-element') return { ...defaults, singleSigner: '1' };\n return { ...defaults };\n },\n getCustomPropertiesReqParams: source => {\n const defaults = { modeESign: '1', idKey: '_id', similarTemplates: 1 };\n if (source === 'app-sign-element') return { ...defaults, singleSigner: '1' };\n return { ...defaults };\n },\n subGalleryViewActive: true,\n availableForEnterprise: true,\n showAllCategories: true,\n hasDetailedPreviewModal: true,\n templateItem: PdfTemplateItem,\n customPreviewModalClass: 'signTemplatePreviewModal',\n sidebarTabs: [\n { text: 'types', value: 'pdftype' },\n { text: 'industries', value: 'industry' }\n ],\n sortingOptions: ['popular', 'trend', 'recent'],\n extractIdFromResponse: res => {\n const { data: { formID } } = res;\n return formID;\n },\n cloneRedirectionFunc: id => {\n handleSignDocumentRedirect(id);\n },\n getCloneTemplatePayload: (modalProps, template) => {\n return {\n payload: {\n ...sharedPayloadProperties,\n action: 'cloneESignTemplate',\n slug: template?._slug || template?.slug || modalProps?.template?._slug,\n id: template?.id || template?._id || modalProps?.template?._id\n },\n successAction: 'signDocumentCreationCompleted',\n failAction: 'useTemplateCloneSignDocumentFail',\n failMessage: 'Failed to clone sign document for use template action'\n };\n }\n },\n 'pdf-templates': {\n sortCategoriesByFeatured: true,\n newSidebar: true,\n count: '1,300',\n countKey: '{pdfTemplatesCount}',\n getCustomReqParams: () => ({ type: 'pdftype' }),\n getCustomPropertiesReqParams: () => ({ idKey: '_id', type: 'pdftype' }),\n newPreviewModalActive: window.location.href.includes('newPreviewModalActive=1'),\n subGalleryViewActive: true,\n availableForEnterprise: true,\n showAllCategories: true,\n hasDetailedPreviewModal: true,\n templateItem: PdfTemplateItem,\n customPreviewModalClass: 'signTemplatePreviewModal',\n sidebarTabs: [\n { text: 'types', value: 'pdftype' },\n { text: 'industries', value: 'industry' }\n ],\n sortingOptions: ['popular', 'trend', 'recent'],\n extractIdFromResponse: res => {\n const { data: { formID } } = res;\n return formID;\n },\n cloneRedirectionFunc: id => {\n handleSignDocumentRedirect(id);\n },\n getCloneTemplatePayload: (modalProps, template) => {\n return {\n payload: {\n ...sharedPayloadProperties,\n action: 'cloneESignTemplate',\n slug: template?._slug || template?.slug || modalProps?.template?._slug,\n id: template?.id || template?._id || modalProps?.template?._id\n },\n successAction: 'signDocumentCreationCompleted',\n failAction: 'useTemplateCloneSignDocumentFail',\n failMessage: 'Failed to clone sign document for use template action'\n };\n }\n },\n 'app-templates': {\n newSidebar: true,\n count: '700',\n countKey: '{appTemplatesCount}',\n subGalleryViewActive: true,\n availableForEnterprise: true,\n templateItem: AppTemplateItem,\n showAllCategories: true,\n newPreviewModalActive: window.location.href.includes('newPreviewModalActive=1'),\n hasDetailedPreviewModal: true,\n gtmCloneActionKey: 'cloneApp',\n sortingOptions: ['popular', 'recent'],\n cloneRedirectionFunc: (id, username) => {\n if (window?.standaloneTemplatesLogger && (typeof window.standaloneTemplatesLogger === 'function')) {\n window.standaloneTemplatesLogger({ actor: username, action: 'appCreated', target: { portalID: id, from: 'wizard:use-template' } });\n }\n StorageHelper.setSessionStorageItem({ key: 'create_app_from_app_templates', value: true });\n handleCustomNavigation(`/app/template/${id}`, '_self');\n },\n getCustomHeaderSubText: ({\n templateHeaderSubText, teamID, countKey, count, username\n }) => ({\n subTitle: (\n <>\n {translationRenderer(`[1[${templateHeaderSubText}]] or [2[create app from scratch]]`)({\n renderer1: text => text.replaceAll(countKey, count),\n renderer2: text => (\n {\n if (window?.standaloneTemplatesLogger && (typeof window.standaloneTemplatesLogger === 'function')) {\n window.standaloneTemplatesLogger({\n actor: username,\n action: 'click',\n target: 'subtitle-scratch-btn'\n });\n }\n handleCustomNavigation(`/app${teamID ? `?teamID=${teamID}` : ''}`, '_self');\n }}\n >\n {text}\n \n )\n })}\n \n ),\n extraSubTitleClasses: ['create-form-from-scratch-btn']\n }),\n sidebarTabs: [{ text: 'categories', value: 'categories' }],\n getCloneTemplatePayload: (modalProps, template) => {\n return {\n payload: {\n ...sharedPayloadProperties,\n slug: template?.slug || modalProps?.template?.slug,\n id: template?.id || modalProps?.template?.id\n },\n successAction: 'appCreationCompleted',\n failAction: 'useTemplateCloneAppFail',\n failMessage: 'Failed to clone app for use template action'\n };\n }\n },\n 'page-templates': {\n newSidebar: true,\n showAllCategories: true,\n subGalleryViewActive: true,\n availableForEnterprise: false,\n gtmCloneActionKey: 'clonePage',\n templateItem: PageTemplatesItem,\n hasDetailedPreviewModal: true,\n sortingOptions: ['popular', 'recent'],\n cloneRedirectionFunc: id => {\n handleCustomNavigation(`/page/build/${id}`, '_self');\n },\n extractIdFromResponse: response => {\n const { data: clonedPageID } = response;\n return clonedPageID;\n },\n sidebarTabs: [{ text: 'categories', value: 'categories' }],\n getCloneTemplatePayload: (modalProps, template) => {\n return {\n payload: {\n ...sharedPayloadProperties,\n slug: template?.slug || modalProps?.template?.slug,\n id: template?.id || modalProps?.template?.id\n },\n successAction: 'pageCreationCompleted',\n failAction: 'useTemplateClonePageFail',\n failMessage: 'Failed to clone page for use template action'\n };\n }\n },\n 'approval-templates': {\n newSidebar: true,\n showAllCategories: true,\n count: '100',\n countKey: '{approvalTemplatesCount}',\n availableForEnterprise: true,\n gtmCloneActionKey: 'cloneApproval',\n newPreviewModalActive: window.location.href.includes('newPreviewModalActive=1'),\n hasDetailedPreviewModal: true,\n templateItem: ApprovalTemplateItem,\n sortingOptions: ['popular', 'recent'],\n cloneRedirectionFunc: id => {\n const integrationParam = getUrlParameter('integration');\n const hasIntegration = integrationParam.length > 0;\n handleCustomNavigation(`/workflow/${id}/build${hasIntegration ? `?integration=${integrationParam}` : ''}`, '_self');\n },\n sidebarTabs: [{ text: 'categories', value: 'categories' }],\n getCloneTemplatePayload: (modalProps, template) => {\n return {\n payload: {\n ...sharedPayloadProperties,\n slug: template?.slug || modalProps?.template?.slug,\n id: template?.id || modalProps?.template?.id\n },\n successAction: 'approvalCreationCompleted',\n failAction: 'useTemplateCloneApprovalFail',\n failMessage: 'Failed to clone approval for use template action'\n };\n }\n },\n 'table-templates': {\n newSidebar: true,\n count: '300',\n countKey: '{tableTemplatesCount}',\n showAllCategories: true,\n availableForEnterprise: true,\n hasDetailedPreviewModal: true,\n templateItem: TableTemplateItem,\n newPreviewModalActive: window.location.href.includes('newPreviewModalActive=1'),\n gtmCloneActionKey: 'cloneTable',\n getCustomPropertiesReqParams: () => ({ idKey: '_id' }),\n sortingOptions: ['popular', 'recent'],\n customPreviewModalClass: 'tableTemplatePreviewModal',\n sidebarTabs: [{ text: 'categories', value: 'categories' }],\n cloneRedirectionFunc: id => {\n handleCustomNavigation(`/tables/${id}`, '_self');\n },\n getCloneTemplatePayload: (modalProps, template) => {\n return {\n payload: {\n ...sharedPayloadProperties,\n slug: template?._slug || template?.slug || modalProps?.template?._slug,\n id: template?.id || template?._id || modalProps?.template?._id\n },\n successAction: 'tableCreationCompleted',\n failAction: 'useTemplateCloneTableFail',\n failMessage: 'Failed to clone table for use template action'\n };\n }\n },\n 'agent-templates': {\n newSidebar: true,\n count: '300',\n countKey: '{agentTemplatesCount}',\n showAllCategories: true,\n newPreviewModalActive: true,\n availableForEnterprise: true,\n hasDetailedPreviewModal: true,\n templateItem: AgentTemplateItem,\n gtmCloneActionKey: 'cloneAgent',\n getCustomPropertiesReqParams: () => ({ idKey: '_id' }),\n sortingOptions: ['popular', 'recent'],\n customPreviewModalClass: 'agentTemplatePreviewModal',\n sidebarTabs: [{ text: 'categories', value: 'categories' }],\n cloneRedirectionFunc: id => {\n handleCustomNavigation(`/agent/build/form/${id}`, '_self');\n },\n getCloneTemplatePayload: (modalProps, template) => {\n return {\n payload: {\n ...sharedPayloadProperties,\n slug: template?._slug || template?.slug || modalProps?.template?._slug,\n id: template?.id || template?._id || modalProps?.template?._id\n },\n successAction: 'agentCreationCompleted',\n failAction: 'useTemplateCloneAgentFail',\n failMessage: 'Failed to clone agent for use template action'\n };\n }\n }\n};\n\nexport const isNewStandaloneActive = (frameSrc = '', isMobileApp, source) => {\n const { location: { origin } } = window;\n const formatedSrc = frameSrc.charAt(0) !== '/' ? `/${frameSrc}` : frameSrc;\n\n const formatedFrameSrc = `${origin}${formatedSrc}`;\n const { pathname } = new URL(formatedFrameSrc);\n\n if (isMobileApp || !pathname.includes('/standalone') || source === 'test') return false;\n\n let rawTemplateType = pathname.replaceAll('/standalone', '').replaceAll('/', '');\n if (rawTemplateType === 'agent-templates') return false;\n if (!rawTemplateType.includes('form-templates') && rawTemplateType.includes('?')) {\n [rawTemplateType] = rawTemplateType.split('?');\n }\n const standaloneData = templateConstants[rawTemplateType];\n\n if (!standaloneData) return false;\n if (isEnterprise() && !standaloneData.availableForEnterprise) return false;\n if (standaloneData.underDevelopmentData) {\n const { underDevelopmentData: { urlParam } } = standaloneData;\n return window.location.href.includes(urlParam);\n }\n return true;\n};\n","/* eslint-disable no-confusing-arrow */\n/* eslint-disable max-lines */\n/* eslint-disable max-len */\nimport Styled from 'styled-components';\n\nconst greenColor = '#78BB07';\nconst greenColorDarken = '#6da70c';\nconst blueColor = '#0099FF';\nconst blueColorDarken = '#0a7cc9';\nconst navyColor = '#091141';\nconst agentColor = 'rgba(121, 35, 221, var(--bg-opacity))';\n\nconst animMixin = `\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n transform: translateX(-100%);\n background-image: linear-gradient(\n 90deg,\n rgba(255, 255, 255, 0) 0,\n rgba(255, 255, 255, 0.2) 20%,\n rgba(255, 255, 255, 0.5) 60%,\n rgba(255, 255, 255, 0)\n );\n animation: shimmer 2s infinite;\n z-index: 0;\n`;\n\nexport const ScTemplates = Styled.div`\n width: ${({ liteMode, slider }) => (liteMode || slider) ? '100%' : 'calc(100% - 320px)'};\n @media screen and (max-width: 768px) {\n & {\n width: 100%;\n padding-bottom: 150px;\n }\n }\n\n .boxes {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex-wrap: wrap;\n margin: 0 -20px 20px -20px;\n min-height: 200px;\n @media screen and (max-width: 768px) {\n & {\n margin: 0 -10px;\n }\n }\n @media screen and (max-width: 480px) {\n & {\n /* flex-direction: column; */\n margin: 0;\n /* padding: 0 20px; */\n padding: 0;\n min-width: 240px;\n }\n }\n }\n\n .resultWrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n\n .resultTitle {\n font-size: 24px;\n font-weight: 400;\n line-height: 1.55;\n color: #0a224c;\n flex-grow: 1;\n padding-right: 16px;\n word-break: break-word;\n }\n @media screen and (max-width: 768px) {\n & {\n margin-bottom: 20px;\n .resultTitle {\n font-size: 18px;\n }\n }\n }\n }\n\n .noResult {\n max-width: 720px;\n width: 100%;\n margin: 100px auto;\n display: block;\n text-align: center;\n color: ${navyColor};\n svg {\n width: 38px;\n height: 48px;\n margin-left: auto;\n margin-right: auto;\n }\n h4 {\n font-size: 22px;\n font-weight: normal;\n margin: 20px 0;\n }\n p {\n font-size: 20px;\n line-height: 1.4;\n max-width: 450px;\n text-align: center;\n margin: 0 auto 30px auto;\n }\n }\n // result\n\n .clearResult {\n border: 0;\n flex-shrink: 1;\n font-size: 16px;\n color: #757a88;\n background-color: #f0f3f7;\n border-radius: 4px;\n font-weight: 400;\n padding: 16px 48px 16px 16px;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 17 16' width='16' height='16'%3E%3Cpath d='M9.514 8l6.438-6.408a.933.933 0 10-1.32-1.319L8.225 6.711 1.817.273a.933.933 0 00-1.319 1.32L6.936 8.03.498 14.408a.933.933 0 101.32 1.319l6.437-6.438 6.377 6.438a.933.933 0 001.32-1.32L9.514 8z' fill='%23A8AAB5' fill-rule='evenodd'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: calc(100% - 16px);\n white-space: nowrap;\n word-break: keep-all;\n text-decoration: none;\n transition: 0.3s;\n\n &:hover {\n color: #696e7a;\n background-color: #e9eef3;\n }\n\n html[dir=\"rtl\"] & {\n padding: 16px 16px 16px 48px;\n background-position: 16px;\n }\n @media screen and (max-width: 768px) {\n background-size: 12px;\n padding: 10px 40px 10px 10px;\n }\n }\n\n .item {\n &:not(.js-new-card):not(.agent-item) {\n position: relative;\n overflow: hidden;\n width: 33.333%;\n margin-top: 16px;\n margin-bottom: 48px;\n padding: 0 20px;\n .more-templates-area & {\n width: 100%;\n padding: 0;\n }\n @media screen and (max-width: 1080px) {\n & {\n width: 50%;\n }\n }\n\n @media screen and (max-width: 768px) {\n & {\n margin-top: 0;\n padding: 0 10px;\n }\n }\n @media screen and (max-width: 480px) {\n & {\n width: 100%;\n padding: 0;\n margin: 32px 0;\n &:first-child {\n margin-top: 0;\n }\n }\n } \n }\n &.agent-item {\n margin-top: 32px;\n margin-bottom: 32px;\n }\n\n h3,\n .useTemplate,\n .previewCta {\n &:before {\n content: '';\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n overflow: hidden;\n border-radius: 4px;\n background-color: #f4f5ff;\n transition: all .3s ease;\n }\n &:after {\n content: '';\n ${animMixin}\n }\n }\n\n h3 {\n position: relative;\n font-size: 18px;\n font-weight: 500;\n line-height: 24px;\n min-height: 24px;\n margin: 16px 0 8px;\n padding: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition: all .3s ease;\n &:before,\n &:after {\n width: 50%;\n }\n span {\n color: ${navyColor};\n transition: opacity, filter .3s ease;\n opacity: 0;\n }\n @media screen and (max-width: 768px) {\n & {\n font-size: 14px;\n line-height: 1.4;\n }\n }\n }\n\n .useTemplate,\n .previewCta {\n pointer-events: none;\n cursor: pointer;\n position: relative;\n border-radius: 4px;\n background: none;\n margin: 8px auto;\n display: block;\n padding: 12px 0;\n width: 100%;\n font-size: 17px;\n font-weight: 500;\n text-decoration: none;\n text-align: center;\n transition: all .3s ease;\n border: 1px solid transparent;\n span {\n transition: opacity, filter .3s ease;\n opacity: 0;\n }\n\n @media screen and (max-width: 768px) {\n & {\n font-size: 14px;\n padding: 10px 0;\n }\n }\n }\n .useTemplate {\n span {\n color: ${greenColor};\n }\n }\n .previewCta {\n span {\n color: ${blueColor};\n }\n display: ${({ isDesktop }) => isDesktop ? 'none' : 'block'};\n }\n\n .image {\n cursor: pointer;\n width: 100%;\n height: auto;\n /* max-height: 300px; */\n position: relative;\n border: 1px solid #C8CEED;\n border-radius: 4px;\n overflow: hidden;\n display: flex;\n justify-content: center;\n &:after {\n content: \"\";\n background: #f4f5ff url(\"data:image/svg+xml,%3Csvg fill='none' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 73 80'%3E%3Cpath d='M19.93 76.03c1.5 1.46.44 3.97-1.7 3.97H4.8A4.74 4.74 0 0 1 0 75.34v-13c0-2.09 2.59-3.12 4.1-1.66l15.83 15.35ZM40.9 77.04a10.06 10.06 0 0 1 0-14.3L55.26 48.5a10.22 10.22 0 0 1 14.39 0 10.06 10.06 0 0 1 0 14.3L55.3 77.03a10.22 10.22 0 0 1-14.4 0ZM3.03 41.24a10.06 10.06 0 0 1 0-14.29L27.16 2.96a10.22 10.22 0 0 1 14.39 0 10.06 10.06 0 0 1 0 14.3L17.4 41.23a10.22 10.22 0 0 1-14.38 0ZM22.75 58.34a10.06 10.06 0 0 1 0-14.3l32.6-32.38a10.22 10.22 0 0 1 14.4 0 10.06 10.06 0 0 1 0 14.29l-32.6 32.4a10.22 10.22 0 0 1-14.4 0Z' fill='%23E3E5F5'/%3E%3C/svg%3E\") no-repeat center;\n background-size: 40%;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n }\n .aspect-ratio {\n width: 100%;\n height: 100%;\n }\n img {\n position: relative;\n z-index: 1;\n display: block;\n width: 100%;\n height: auto;\n transition: all .3s ease;\n opacity: 0;\n }\n .animBg {\n ${animMixin}\n }\n .template-hint {\n position: absolute;\n pointer-events: none;\n top: 50%;\n background-color: rgba(10, 21, 81, 0.75);\n border-radius: 40px;\n color: #fff;\n font-size: 16px;\n z-index: 3;\n padding: 11px 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n column-gap: 10px;\n opacity: 0;\n transition: all .3s linear;\n }\n }\n &.image-loaded {\n .image:hover {\n .template-hint {\n transform: translateY(-20px);\n opacity: 1;\n }\n }\n }\n\n &.approval-item,\n &.table-item {\n .image {\n &:before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n transition: all 0.2s;\n /* background: ${navyColor}; */\n background-color: rgba(9, 17, 65, 0);\n /* opacity: 0; */\n z-index: 2;\n display: ${({ isDesktop }) => isDesktop ? 'block' : 'none'};\n }\n @media screen and (max-width: 550px) {\n & {\n aspect-ratio: 16/18.5;\n }\n }\n @media screen and (max-width: 480px) {\n & {\n aspect-ratio: unset;\n }\n }\n }\n }\n &.pdf-item,\n &.page-item {\n .image {\n max-height: unset;\n border-radius: 8px;\n display: flex;\n justify-content: center;\n .aspect-ratio {\n position: relative;\n width: 100%;\n height: auto;\n pointer-events: none;\n display: block;\n }\n img {\n z-index: 0;\n position: absolute;\n top: 0;\n left: 0;\n }\n .shadows {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n &:before,\n &:after {\n content: \"\";\n position: absolute;\n left: 0;\n pointer-events: none;\n width: 100%;\n height: 3rem;\n transition: all .3s linear;\n }\n &:before {\n z-index: 2;\n opacity: 0;\n top: 0;\n background: linear-gradient(0, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.1) 100%);\n }\n &:after {\n content: \"\";\n z-index: 1;\n bottom: 0;\n background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.1) 100%);\n }\n }\n \n &:hover {\n .shadows {\n &:before {\n opacity: 1;\n }\n }\n }\n }\n &.image-loaded {\n .image {\n img {\n transition: all 1.2s cubic-bezier(.68,-.15,.265,1.2);\n }\n }\n }\n }\n &.app-item {\n .image {\n padding-top: 100%;\n max-height: 630px;\n border: 0;\n transition: border-color .3s ease;\n border-bottom: 1px solid transparent;\n img {\n position: absolute;\n top: 0;\n z-index: 2;\n transition: all 0.2s;\n }\n .animBg {\n z-index: 2\n }\n }\n &.image-loaded {\n .image {\n img {\n transition: all 1.2s cubic-bezier(.68,-.15,.265,1.2);\n }\n }\n }\n .phone-notch {\n left: 6px;\n width: calc(100% - 12px);\n border-top-left-radius: 12px;\n border-top-right-radius: 12px;\n height: 28px;\n background-color: transparent;\n position: absolute;\n color: #FFF;\n top: 2.8%;\n z-index: 3;\n padding: 0 6px;\n font-size: 9px;\n font-weight: 700;\n display: flex;\n justify-content: space-between;\n align-items: center;\n opacity: 0;\n white-space: nowrap;\n transition: all .3s linear;\n .l {\n display: flex;\n justify-content: center;\n align-items: center;\n flex: 0 0 20%;\n }\n .r {\n display: flex;\n justify-content: center;\n align-items: center;\n flex: 0 0 20%;\n\n .icons {\n width: 38px;\n height: 8px;\n background-size: 100%;\n background-image: url(\"data:image/svg+xml,%3Csvg fill='none' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 36 8'%3E%3Cpath d='M12 0h2v8h-2V0ZM10 2H8v6h2V2ZM6 4H4v4h2V4ZM0 6h2v2H0V6ZM20 2h12v4H20V2Z' fill='%23fff'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M20 0a2 2 0 0 0-2 2v4c0 1.1.9 2 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H20Zm12 1H20a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1Z' fill='%23fff'/%3E%3Cpath d='M35 2.5a.5.5 0 0 1 1 0v3a.5.5 0 0 1-1 0v-3Z' fill='%23fff'/%3E%3C/svg%3E\");\n }\n }\n\n &.black {\n color: #000;\n .icons {\n background-image: url(\"data:image/svg+xml,%3Csvg fill='none' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 36 8'%3E%3Cpath d='M12 0h2v8h-2V0ZM10 2H8v6h2V2ZM6 4H4v4h2V4ZM0 6h2v2H0V6ZM20 2h12v4H20V2Z' fill='%23000'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M20 0a2 2 0 0 0-2 2v4c0 1.1.9 2 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H20Zm12 1H20a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1Z' fill='%23000'/%3E%3Cpath d='M35 2.5a.5.5 0 0 1 1 0v3a.5.5 0 0 1-1 0v-3Z' fill='%23000'/%3E%3C/svg%3E\");\n }\n }\n &.white {\n color: #FFF;\n .icons {\n background-image: url(\"data:image/svg+xml,%3Csvg fill='none' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 36 8'%3E%3Cpath d='M12 0h2v8h-2V0ZM10 2H8v6h2V2ZM6 4H4v4h2V4ZM0 6h2v2H0V6ZM20 2h12v4H20V2Z' fill='%23fff'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M20 0a2 2 0 0 0-2 2v4c0 1.1.9 2 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H20Zm12 1H20a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1Z' fill='%23fff'/%3E%3Cpath d='M35 2.5a.5.5 0 0 1 1 0v3a.5.5 0 0 1-1 0v-3Z' fill='%23fff'/%3E%3C/svg%3E\");\n }\n }\n }\n .phone-wrapper {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n z-index: 3;\n path {\n shape-rendering: auto;\n &.splash-path {\n opacity: 0;\n transition: opacity .3s linear;\n }\n &.white-path {\n stroke: white;\n stroke-width: 6px;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n &.inner-border {\n stroke: #c8ceed;\n stroke-width: .5px;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n }\n }\n }\n &.approval-item:not(.agent-item) {\n width: 50%;\n .bgColorItem {\n position: absolute;\n z-index: 0;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n opacity: 0;\n transition: opacity .3s linear;\n }\n .image {\n min-height: unset;\n max-height: unset;\n img {\n padding: 8px;\n &.approval-main {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: auto;\n z-index: 1;\n }\n &.approval-blank {\n position: relative;\n width: 100%;\n height: auto;\n z-index: 0;\n }\n }\n @media screen and (max-width: 550px) {\n & {\n aspect-ratio: unset;\n }\n }\n }\n @media screen and (max-width: 480px) {\n & {\n width: 100%;\n }\n }\n }\n &.table-item {\n .bgColorItem {\n position: absolute;\n z-index: 0;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n opacity: 0;\n transition: opacity .3s linear;\n }\n .image {\n min-height: 0;\n img {\n padding-left: 12px;\n padding-top: 12px;\n filter: drop-shadow(4px 2px 4px rgba(0, 0, 0, 0.25));\n &.table-main {\n position: absolute;\n right: 0;\n bottom: 0;\n width: 100%;\n height: auto;\n z-index: 1;\n }\n &.table-blank {\n position: relative;\n width: 100%;\n height: auto;\n z-index: 0;\n }\n }\n @media screen and (max-width: 550px) {\n & {\n aspect-ratio: unset;\n }\n }\n }\n }\n &.agent-item {\n .image {\n min-height: 0;\n border: 0;\n border-radius: 8px;\n img {\n &.agent-main {\n position: absolute;\n right: 0;\n bottom: 0;\n width: 100%;\n height: auto;\n z-index: 1;\n }\n &.agent-blank {\n position: relative;\n width: 100%;\n height: auto;\n z-index: 0;\n }\n }\n @media screen and (max-width: 550px) {\n & {\n aspect-ratio: unset;\n }\n }\n }\n }\n &.page-item {\n width: 50%;\n .more-templates-area & {\n width: 33.333%;\n }\n .image {\n min-height: unset;\n max-height: unset;\n @media screen and (max-width: 550px) {\n & {\n aspect-ratio: unset;\n }\n }\n }\n @media screen and (max-width: 480px) {\n & {\n width: 100% !important;\n }\n }\n }\n &.image-loaded {\n h3 {\n cursor: pointer;\n }\n h3 span,\n .useTemplate span,\n .previewCta span,\n .image img {\n opacity: 1;\n }\n .animBg,\n h3:after,\n .useTemplate:after,\n .previewCta:after {\n display: none;\n }\n h3:before,\n .useTemplate:before,\n .previewCta:before {\n opacity: 0;\n z-index: -1;\n }\n .useTemplate {\n pointer-events: unset;\n border: 1px solid ${greenColor};\n &:hover {\n background: ${greenColorDarken};\n border-color: ${greenColorDarken};\n span {\n color: #FFF;\n }\n }\n &.useAgent {\n border-color: ${agentColor};\n span {\n color: ${agentColor};\n }\n &:hover {\n background: ${agentColor};\n border-color: ${agentColor};\n span {\n color: #fff;\n }\n }\n }\n }\n .previewCta {\n pointer-events: unset;\n border: 1px solid ${blueColor};\n &:hover {\n background: ${blueColorDarken};\n border-color: ${blueColorDarken};\n span {\n color: #FFF;\n }\n }\n }\n }\n &.approval-item.image-loaded,\n &.table-item.image-loaded {\n .image {\n &:hover {\n box-shadow: ${({ isDesktop }) => isDesktop ? '0 20px 30px rgba(0, 0, 0, 0.15)' : 'none'};\n border-color: #bdbdbd;\n &:before {\n /* opacity: 0.8; */\n background-color: rgba(9, 17, 65, .8);\n }\n }\n }\n .bgColorItem {\n opacity: 1;\n }\n }\n &.app-item.image-loaded {\n .phone-notch,\n .phone-wrapper path.splash-path {\n opacity: 1;\n }\n }\n &.approval-item.image-loaded {\n .image {\n &:hover {\n img {\n transform: scale(1.125);\n @media screen and (max-width: 480px) {\n transform: none;\n }\n }\n }\n }\n }\n &.table-item.image-loaded {\n .image {\n &:hover {\n img {\n transform: scale(1.125);\n @media screen and (max-width: 480px) {\n transform: none;\n }\n }\n }\n }\n }\n }\n .loadMore {\n text-align: center;\n width: 100%;\n margin-bottom: 70px;\n .loadMoreCta {\n cursor: pointer;\n padding: 8px 48px;\n border-radius: 8px;\n background: ${blueColor};\n font-weight: 400;\n color: #fff;\n font-size: 20px;\n line-height: 48px;\n margin: 0;\n border: 1px solid transparent;\n transition: all .2s;\n\n &:hover {\n background: ${blueColorDarken};\n color: #fff;\n }\n\n @media screen and (max-width: 768px) {\n & {\n padding: 12px 24px;\n border-radius: 4px;\n margin-top: 0;\n font-size: 16px;\n line-height: 1;\n }\n }\n }\n }\n\n .categoryBox {\n cursor: pointer;\n background-color: #f9f9f9;\n padding: 10px;\n margin: .5rem;\n border-radius: 4px;\n transition: background-color, box-shadow 0.25s ease;\n min-height: 140px;\n width: calc(33.333% - 1rem);\n @media screen and (max-width: 1024px) {\n & {\n width: calc(50% - 1rem);\n }\n }\n &:hover {\n box-shadow: 0 2px 30px rgba(0, 0, 0, 0.15);\n background-color: #fff;\n }\n .title {\n font-size: 18px;\n font-weight: 500;\n line-height: 24px;\n color: ${navyColor};\n margin: 16px 0 8px;\n padding: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .desc {\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n min-height: 70px;\n max-height: 70px;\n overflow: hidden;\n padding: 0;\n font-weight: 400;\n color: #343C6A;\n line-height: 1.6;\n margin: 0 0 9px;\n font-size: 15px;\n }\n .count {\n color: ${navyColor};\n font-size: 14px;\n margin: 6px 0 0;\n display: flex;\n align-items: center;\n svg {\n margin-inline-end: 5px;\n }\n }\n }\n .categoryHeader {\n width: 100%;\n display: flex;\n flex-wrap: wrap;\n .breadcrumb {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex-wrap: wrap;\n\n .backButton {\n width: 32px;\n height: 32px;\n background: #E6EBF2;\n border: 0;\n outline: none;\n border-radius: 50%;\n position: relative;\n margin-inline-end: 10px;\n color: #0A1551;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n span {\n display: inline-flex;\n &:after {\n content: \"/\";\n padding: 0 5px;\n margin: 0 5px;\n }\n &:last-child {\n &:after {\n display: none;;\n }\n }\n }\n }\n .heading {\n color: $navyColor;\n font-size: 32px;\n line-height: 40px;\n font-weight: 600;\n margin: 10px 0 0 0;\n width: 100%;\n }\n .subheading {\n color: #2B3245;\n font-size: 12px;\n margin: 6px 0 0;\n font-weight: 100;\n display: flex;\n align-items: center;\n svg {\n margin-inline-end: 5px;\n }\n }\n .subBigHeading {\n color: $navyColor;\n line-height: 1.5;\n font-size: 16px;\n margin: 20px 0 10px 0;\n }\n @media screen and (max-width: 768px) {\n & {\n margin-bottom: 20px;\n }\n }\n }\n\n .see-more {\n width: 100%;\n display: flex;\n flex-direction: row;\n justify-content:center;\n align-items: center;\n padding-top: 16px;\n\n &-link {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-decoration: none;\n width: 100%;\n border: 0;\n outline: none;\n background-color: transparent;\n\n .illustration {\n display: block;\n position: relative;\n width: 100%;\n min-height: 240px;\n max-height: 323.98px;\n height: 100vh;\n overflow: hidden;\n border-radius: 4px;\n border: solid 1px #C3CAD8;\n background: #E6EBF2;\n transition: border .2s ease-in-out, background .2s ease-in-out;\n\n &-content{\n display: block;\n max-width: 312px;\n width: 100%;\n height: 100%;\n position: relative;\n margin: 0 auto;\n opacity: 1;\n transition: opacity .2s;\n @media screen and (min-width: 1200px) and (max-width: 1599px) {\n transform: scale(.8);\n }\n @media screen and (min-width: 992px) and (max-width: 1199px) {\n transform: scale(.5);\n }\n\n @media screen and (max-width: 991px) and (min-width: 851px){\n transform: scale(.82);\n }\n\n @media screen and (max-width: 850px) and (min-width: 769px){\n transform: scale(.7);\n }\n\n .temp {\n position: absolute;\n transform-origin: center;\n width: 160px;\n height: 168px;\n transition: transform .2s ease-in-out, background .2s ease-in-out, opacity .2s ease-in-out;\n background-size: 160px 168px;\n background-repeat: no-repeat;\n background-position: center center;\n top: calc(50% - 84px);\n left: calc(50% - 80px);\n }\n\n .t1 {\n background-image: url(\"data:image/svg+xml,%3Csvg width='160' height='168' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect stroke='%23C3CAD8' stroke-width='2' fill='%23FFF' x='1' y='1' width='158' height='166' rx='4'/%3E%3Crect fill='%238894AB' x='16' y='16' width='64' height='4' rx='2'/%3E%3Crect fill='%238894AB' x='16' y='54' width='48' height='4' rx='2'/%3E%3Crect fill='%23D4DAE5' x='30' y='74' width='20' height='4' rx='2'/%3E%3Crect fill='%23D4DAE5' x='77' y='74' width='20' height='4' rx='2'/%3E%3Crect fill='%23D4DAE5' x='124' y='74' width='20' height='4' rx='2'/%3E%3Crect fill='%238894AB' x='16' y='92' width='64' height='4' rx='2'/%3E%3Crect stroke='%23D4DAE5' stroke-width='2' x='17' y='29' width='126' height='14' rx='2'/%3E%3Crect stroke='%23D4DAE5' stroke-width='2' x='17' y='71' width='10' height='10' rx='5'/%3E%3Crect stroke='%238894AB' stroke-width='4' x='65' y='72' width='8' height='8' rx='4'/%3E%3Crect stroke='%23D4DAE5' stroke-width='2' x='111' y='71' width='10' height='10' rx='5'/%3E%3Crect stroke='%23D4DAE5' stroke-width='2' x='17' y='109' width='126' height='14' rx='2'/%3E%3Crect fill='%238894AB' x='104' y='136' width='40' height='16' rx='2'/%3E%3C/g%3E%3C/svg%3E\");\n transform: scale(.8);\n }\n .t2 {\n background-image: url(\"data:image/svg+xml,%3Csvg width='160' height='168' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect stroke='%23C71D38' stroke-width='2' fill='%23FFF' x='1' y='1' width='158' height='166' rx='4'/%3E%3Crect fill='%2357647E' x='16' y='16' width='64' height='4' rx='2'/%3E%3Crect fill='%2357647E' x='16' y='54' width='48' height='4' rx='2'/%3E%3Crect fill='%23C3CAD8' x='30' y='74' width='20' height='4' rx='2'/%3E%3Crect fill='%23C3CAD8' x='77' y='74' width='20' height='4' rx='2'/%3E%3Crect fill='%23C3CAD8' x='124' y='74' width='20' height='4' rx='2'/%3E%3Crect fill='%2357647E' x='16' y='92' width='64' height='4' rx='2'/%3E%3Crect stroke='%23C3CAD8' stroke-width='2' x='17' y='29' width='126' height='14' rx='2'/%3E%3Crect stroke='%23C3CAD8' stroke-width='2' x='17' y='71' width='10' height='10' rx='5'/%3E%3Crect stroke='%23C71D38' stroke-width='4' x='65' y='72' width='8' height='8' rx='4'/%3E%3Crect stroke='%23C3CAD8' stroke-width='2' x='111' y='71' width='10' height='10' rx='5'/%3E%3Crect stroke='%23C3CAD8' stroke-width='2' x='17' y='109' width='126' height='14' rx='2'/%3E%3Crect fill='%23C71D38' x='104' y='136' width='40' height='16' rx='2'/%3E%3C/g%3E%3C/svg%3E\");\n opacity: 0;\n transform: scale(.8);\n }\n .t3 {\n background-image: url(\"data:image/svg+xml,%3Csvg width='160' height='168' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect stroke='%23FBAA32' stroke-width='2' fill='%23FFF' x='1' y='1' width='158' height='166' rx='4'/%3E%3Crect fill='%2357647E' x='16' y='16' width='64' height='4' rx='2'/%3E%3Crect fill='%2357647E' x='16' y='54' width='48' height='4' rx='2'/%3E%3Crect fill='%23C3CAD8' x='30' y='74' width='20' height='4' rx='2'/%3E%3Crect fill='%23C3CAD8' x='77' y='74' width='20' height='4' rx='2'/%3E%3Crect fill='%23C3CAD8' x='124' y='74' width='20' height='4' rx='2'/%3E%3Crect fill='%2357647E' x='16' y='92' width='64' height='4' rx='2'/%3E%3Crect stroke='%23C3CAD8' stroke-width='2' x='17' y='29' width='126' height='14' rx='2'/%3E%3Crect stroke='%23C3CAD8' stroke-width='2' x='17' y='71' width='10' height='10' rx='5'/%3E%3Crect stroke='%23FBAA32' stroke-width='4' x='65' y='72' width='8' height='8' rx='4'/%3E%3Crect stroke='%23C3CAD8' stroke-width='2' x='111' y='71' width='10' height='10' rx='5'/%3E%3Crect stroke='%23C3CAD8' stroke-width='2' x='17' y='109' width='126' height='14' rx='2'/%3E%3Crect fill='%23FBAA32' x='104' y='136' width='40' height='16' rx='2'/%3E%3C/g%3E%3C/svg%3E\");\n opacity: 0;\n transform: scale(.8);\n }\n\n .gimmicks,\n .gimmicks i {\n position: absolute;\n width: 16px;\n height: 16px;\n top: calc(50% - 8px);\n left: calc(50% - 8px);\n border: none;\n padding: 0;\n }\n\n .gimmicks i {\n display: block;\n transform-origin: center;\n background-size: 16px 16px;\n background-repeat: no-repeat;\n background-position: center center;\n opacity: 0;\n transform: scale(.5);\n transition: transform .2s ease-in-out, opacity .2s ease-in-out;\n }\n }\n .template-loader{\n transition: opacity .2s;\n opacity: 0;\n }\n }\n span {\n display: block;\n font-weight: 700;\n font-size: 16px;\n line-height: 24px;\n margin: 16px 0 0;\n text-align: center;\n color: $nbText;\n transition: color .2s ease-in-out;\n }\n &.isTouch,\n &:hover {\n span {\n color: #2E69FF;\n }\n .illustration {\n border: solid 1px #C3CAD8;\n background: #F8FBFF;\n &-content{\n .t1 {\n background-image: url(\"data:image/svg+xml,%3Csvg width='160' height='168' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect stroke='%232E69FF' stroke-width='2' fill='%23FFF' x='1' y='1' width='158' height='166' rx='4'/%3E%3Crect fill='%2357647E' x='16' y='16' width='64' height='4' rx='2'/%3E%3Crect fill='%2357647E' x='16' y='54' width='48' height='4' rx='2'/%3E%3Crect fill='%23C3CAD8' x='30' y='74' width='20' height='4' rx='2'/%3E%3Crect fill='%23C3CAD8' x='77' y='74' width='20' height='4' rx='2'/%3E%3Crect fill='%23C3CAD8' x='124' y='74' width='20' height='4' rx='2'/%3E%3Crect fill='%2357647E' x='16' y='92' width='64' height='4' rx='2'/%3E%3Crect stroke='%23C3CAD8' stroke-width='2' x='17' y='29' width='126' height='14' rx='2'/%3E%3Crect stroke='%23C3CAD8' stroke-width='2' x='17' y='71' width='10' height='10' rx='5'/%3E%3Crect stroke='%232E69FF' stroke-width='4' x='65' y='72' width='8' height='8' rx='4'/%3E%3Crect stroke='%23C3CAD8' stroke-width='2' x='111' y='71' width='10' height='10' rx='5'/%3E%3Crect stroke='%23C3CAD8' stroke-width='2' x='17' y='109' width='126' height='14' rx='2'/%3E%3Crect fill='%232E69FF' x='104' y='136' width='40' height='16' rx='2'/%3E%3C/g%3E%3C/svg%3E\");\n transform: scale(1);\n }\n .t2 {\n opacity: 1;\n transform: scale(1) rotate(-16deg) translateX(-40px) translateY(16px);\n }\n\n .t3 {\n opacity: 1;\n transform: scale(1) rotate(16deg) translateX(40px) translateY(-16px);\n }\n .gimmicks {\n i {\n opacity: 1;\n }\n .g1 {\n transform: translateX(-124px) translateY(-56px) scale(.5);\n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10 2v4h4c1.1046 0 2 .8954 2 2s-.8954 2-2 2h-4v4c0 1.1046-.8954 2-2 2s-2-.8954-2-2V9.999l-4 .0007c-1.1044.0002-1.9998-.895-2-1.9994V8c0-1.1046.8954-2.0001 2-2.0003l4-.0007V2c0-1.1046.8954-2 2-2s2 .8954 2 2z' fill='%23732EFF' fill-rule='evenodd'/%3E%3C/svg%3E\");\n }\n .g2 {\n transform: translateX(-98px) translateY(-88px);\n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8 0c4.4183 0 8 3.5817 8 8s-3.5817 8-8 8-8-3.5817-8-8 3.5817-8 8-8zm0 4C5.7909 4 4 5.7909 4 8c0 2.2091 1.7909 4 4 4 2.2091 0 4-1.7909 4-4 0-2.2091-1.7909-4-4-4z' fill='%2301BD6F' fill-rule='nonzero'/%3E%3C/svg%3E\");\n }\n .g3 {\n transform: translateX(-34px) translateY(-100px);\n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8 10c.5128 0 .9355.386.9933.8834L9 11v3c0 .5523-.4477 1-1 1-.5128 0-.9355-.386-.9933-.8834L7 14v-3c0-.5523.4477-1 1-1zm-1.4142-.5858c.3605.3605.3882.9277.0832 1.32l-.0832.0942-2.1213 2.1213c-.3906.3906-1.0237.3906-1.4142 0-.3605-.3604-.3883-.9277-.0832-1.32l.0832-.0942 2.1213-2.1213c.3905-.3905 1.0237-.3905 1.4142 0zm4.1484-.0832l.0942.0832 2.1213 2.1213c.3906.3906.3906 1.0237 0 1.4142-.3604.3605-.9277.3883-1.32.0832l-.0942-.0832-2.1213-2.1213c-.3905-.3905-.3905-1.0237 0-1.4142.3605-.3605.9277-.3882 1.32-.0832zM14 7c.5523 0 1 .4477 1 1 0 .5128-.386.9355-.8834.9933L14 9h-3c-.5523 0-1-.4477-1-1 0-.5128.386-.9355.8834-.9933L11 7h3zM5 7c.5523 0 1 .4477 1 1 0 .5128-.386.9355-.8834.9933L5 9H2c-.5523 0-1-.4477-1-1 0-.5128.386-.9355.8834-.9933L2 7h3zm7.9497-3.9497c.3605.3604.3883.9277.0832 1.32l-.0832.0942-2.1213 2.1213c-.3905.3905-1.0237.3905-1.4142 0-.3605-.3605-.3882-.9277-.0832-1.32l.0832-.0942 2.1213-2.1213c.3906-.3906 1.0237-.3906 1.4142 0zM4.3703 2.967l.0942.0832 2.1213 2.1213c.3905.3905.3905 1.0237 0 1.4142-.3605.3605-.9277.3882-1.32.0832l-.0942-.0832-2.1213-2.1213c-.3906-.3906-.3906-1.0237 0-1.4142.3604-.3605.9277-.3883 1.32-.0832zM8 1c.5128 0 .9355.386.9933.8834L9 2v3c0 .5523-.4477 1-1 1-.5128 0-.9355-.386-.9933-.8834L7 5V2c0-.5523.4477-1 1-1z' fill='%23FF6038' fill-rule='nonzero'/%3E%3C/svg%3E\");\n }\n .g4 {\n transform: translateX(-8px) translateY(-124px);\n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M14.0031 5.1861L11.0953 8.094l3.283 3.283c.829.829.829 2.1728 0 3.0016-.8288.829-2.1727.829-3.0016 0l-3.283-3.283-2.9077 2.9078c-.8807.8807-2.3086.8807-3.1892 0-.8807-.8806-.8807-2.3085 0-3.1892l2.9085-2.9085-3.2835-3.2825C.8365 3.8381.795 2.591 1.4974 1.757l.1242-.1353c.8289-.8289 2.1728-.829 3.0018-.0002L7.9069 4.904l2.907-2.907c.8807-.8807 2.3086-.8807 3.1892 0 .8807.8806.8807 2.3085 0 3.1891z' fill='%2355D88B' fill-rule='evenodd'/%3E%3C/svg%3E\");\n }\n .g5 {\n transform: translateX(88px) translateY(-100px) scale(.5);\n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8 0c4.4183 0 8 3.5817 8 8s-3.5817 8-8 8-8-3.5817-8-8 3.5817-8 8-8z' fill='%23504CFF' fill-rule='nonzero'/%3E%3C/svg%3E\");\n }\n .g6 {\n transform: translateX(104px) translateY(-128px);\n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10 2v4h4c1.1046 0 2 .8954 2 2s-.8954 2-2 2h-4v4c0 1.1046-.8954 2-2 2s-2-.8954-2-2V9.999l-4 .0007c-1.1044.0002-1.9998-.895-2-1.9994V8c0-1.1046.8954-2.0001 2-2.0003l4-.0007V2c0-1.1046.8954-2 2-2s2 .8954 2 2z' fill='%237099FF' fill-rule='evenodd'/%3E%3C/svg%3E\");\n }\n .g7 {\n transform: translateX(136px) translateY(-96px);\n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8 10c.5128 0 .9355.386.9933.8834L9 11v3c0 .5523-.4477 1-1 1-.5128 0-.9355-.386-.9933-.8834L7 14v-3c0-.5523.4477-1 1-1zm-1.4142-.5858c.3605.3605.3882.9277.0832 1.32l-.0832.0942-2.1213 2.1213c-.3906.3906-1.0237.3906-1.4142 0-.3605-.3604-.3883-.9277-.0832-1.32l.0832-.0942 2.1213-2.1213c.3905-.3905 1.0237-.3905 1.4142 0zm4.1484-.0832l.0942.0832 2.1213 2.1213c.3906.3906.3906 1.0237 0 1.4142-.3604.3605-.9277.3883-1.32.0832l-.0942-.0832-2.1213-2.1213c-.3905-.3905-.3905-1.0237 0-1.4142.3605-.3605.9277-.3882 1.32-.0832zM14 7c.5523 0 1 .4477 1 1 0 .5128-.386.9355-.8834.9933L14 9h-3c-.5523 0-1-.4477-1-1 0-.5128.386-.9355.8834-.9933L11 7h3zM5 7c.5523 0 1 .4477 1 1 0 .5128-.386.9355-.8834.9933L5 9H2c-.5523 0-1-.4477-1-1 0-.5128.386-.9355.8834-.9933L2 7h3zm7.9497-3.9497c.3605.3604.3883.9277.0832 1.32l-.0832.0942-2.1213 2.1213c-.3905.3905-1.0237.3905-1.4142 0-.3605-.3605-.3882-.9277-.0832-1.32l.0832-.0942 2.1213-2.1213c.3906-.3906 1.0237-.3906 1.4142 0zM4.3703 2.967l.0942.0832 2.1213 2.1213c.3905.3905.3905 1.0237 0 1.4142-.3605.3605-.9277.3882-1.32.0832l-.0942-.0832-2.1213-2.1213c-.3906-.3906-.3906-1.0237 0-1.4142.3604-.3605.9277-.3883 1.32-.0832zM8 1c.5128 0 .9355.386.9933.8834L9 2v3c0 .5523-.4477 1-1 1-.5128 0-.9355-.386-.9933-.8834L7 5V2c0-.5523.4477-1 1-1z' fill='%23FBAA32' fill-rule='nonzero'/%3E%3C/svg%3E\");\n }\n .g8 {\n transform: translateX(-116px) translateY(116px);\n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M14.0031 5.1861L11.0953 8.094l3.283 3.283c.829.829.829 2.1728 0 3.0016-.8288.829-2.1727.829-3.0016 0l-3.283-3.283-2.9077 2.9078c-.8807.8807-2.3086.8807-3.1892 0-.8807-.8806-.8807-2.3085 0-3.1892l2.9085-2.9085-3.2835-3.2825C.8365 3.8381.795 2.591 1.4974 1.757l.1242-.1353c.8289-.8289 2.1728-.829 3.0018-.0002L7.9069 4.904l2.907-2.907c.8807-.8807 2.3086-.8807 3.1892 0 .8807.8806.8807 2.3085 0 3.1891z' fill='%232E69FF' fill-rule='evenodd'/%3E%3C/svg%3E\");\n }\n .g9 {\n transform: translateX(36px) translateY(104px);\n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8 10c.5128 0 .9355.386.9933.8834L9 11v3c0 .5523-.4477 1-1 1-.5128 0-.9355-.386-.9933-.8834L7 14v-3c0-.5523.4477-1 1-1zm-1.4142-.5858c.3605.3605.3882.9277.0832 1.32l-.0832.0942-2.1213 2.1213c-.3906.3906-1.0237.3906-1.4142 0-.3605-.3604-.3883-.9277-.0832-1.32l.0832-.0942 2.1213-2.1213c.3905-.3905 1.0237-.3905 1.4142 0zm4.1484-.0832l.0942.0832 2.1213 2.1213c.3906.3906.3906 1.0237 0 1.4142-.3604.3605-.9277.3883-1.32.0832l-.0942-.0832-2.1213-2.1213c-.3905-.3905-.3905-1.0237 0-1.4142.3605-.3605.9277-.3882 1.32-.0832zM14 7c.5523 0 1 .4477 1 1 0 .5128-.386.9355-.8834.9933L14 9h-3c-.5523 0-1-.4477-1-1 0-.5128.386-.9355.8834-.9933L11 7h3zM5 7c.5523 0 1 .4477 1 1 0 .5128-.386.9355-.8834.9933L5 9H2c-.5523 0-1-.4477-1-1 0-.5128.386-.9355.8834-.9933L2 7h3zm7.9497-3.9497c.3605.3604.3883.9277.0832 1.32l-.0832.0942-2.1213 2.1213c-.3905.3905-1.0237.3905-1.4142 0-.3605-.3605-.3882-.9277-.0832-1.32l.0832-.0942 2.1213-2.1213c.3906-.3906 1.0237-.3906 1.4142 0zM4.3703 2.967l.0942.0832 2.1213 2.1213c.3905.3905.3905 1.0237 0 1.4142-.3605.3605-.9277.3882-1.32.0832l-.0942-.0832-2.1213-2.1213c-.3906-.3906-.3906-1.0237 0-1.4142.3604-.3605.9277-.3883 1.32-.0832zM8 1c.5128 0 .9355.386.9933.8834L9 2v3c0 .5523-.4477 1-1 1-.5128 0-.9355-.386-.9933-.8834L7 5V2c0-.5523.4477-1 1-1z' fill='%2301BD6F' fill-rule='nonzero'/%3E%3C/svg%3E\");\n }\n .g10 {\n transform: translateX(80px) translateY(108px);\n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8 0c4.4183 0 8 3.5817 8 8s-3.5817 8-8 8-8-3.5817-8-8 3.5817-8 8-8zm0 4C5.7909 4 4 5.7909 4 8c0 2.2091 1.7909 4 4 4 2.2091 0 4-1.7909 4-4 0-2.2091-1.7909-4-4-4z' fill='%23FF6038' fill-rule='nonzero'/%3E%3C/svg%3E\");\n }\n .g11 {\n transform: translateX(116px) translateY(100px) scale(.5);\n background-image: url(\"data:image/svg+xml,%3Csvg width='16' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10 2v4h4c1.1046 0 2 .8954 2 2s-.8954 2-2 2h-4v4c0 1.1046-.8954 2-2 2s-2-.8954-2-2V9.999l-4 .0007c-1.1044.0002-1.9998-.895-2-1.9994V8c0-1.1046.8954-2.0001 2-2.0003l4-.0007V2c0-1.1046.8954-2 2-2s2 .8954 2 2z' fill='%23FBAA32' fill-rule='evenodd'/%3E%3C/svg%3E\");\n }\n }\n\n }\n }\n\n }\n }\n }\n .carousel-title {\n border-bottom: 1px solid #EBEBEB;\n display: flex;\n margin: 40px 20px 10px 20px;\n padding-bottom: 20px;\n width: 100%;\n align-items: flex-start;\n justify-content: space-between;\n @media screen and (max-width: 480px) {\n & {\n margin: 0;\n }\n }\n .title {\n cursor: pointer;\n display: flex;\n align-items: center;\n line-height: 1;\n h2 {\n margin: 0;\n font-size: 24px;\n color: #091141;\n letter-spacing: -.64px;\n line-height: 24px;\n font-weight: 600;\n text-decoration: none;\n margin-inline-end: 10px;\n position: relative;\n span {\n transition: opacity 0s ease 0s, filter 0.3s ease 0s;\n opacity: 0;\n }\n &:before {\n content: '';\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n overflow: hidden;\n border-radius: 4px;\n background-color: #f4f5ff;\n transition: all .3s ease;\n }\n &:after {\n content: '';\n ${animMixin}\n }\n }\n .title-forms-number {\n font-size: 16px;\n color: #dedede;\n transition: opacity 0s ease 0s, filter 0.3s ease 0s;\n opacity: 0;\n }\n }\n .all-link {\n opacity: 0;\n transition: opacity 0s ease 0s, filter 0.3s ease 0s;\n cursor: pointer;\n margin-top: 7px;\n display: flex;\n align-items: center;\n & > span {\n margin-inline-start: 4px;\n font-size: 16px;\n color: #333a50;\n text-decoration: none;\n }\n\n & > .icon {\n width: 20px;\n height: 20px;\n background: #ebebeb;\n border-radius: 50%;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n html[dir=\"rtl\"] & {\n transform: rotate(180deg);\n }\n }\n }\n &.loaded {\n .title {\n h2 {\n &:before {\n opacity: 0;\n z-index: -1;\n }\n &:after {\n display: none;\n }\n span {\n opacity: 1;\n }\n }\n .title-forms-number {\n opacity: 1;\n }\n }\n .all-link {\n opacity: 1;\n }\n }\n @media screen and (max-width: 768px) {\n & {\n .title {\n h2 {\n font-size: 18px;\n }\n .title-forms-number {\n font-size: 14px;\n }\n }\n }\n }\n @media screen and (max-width: 550px) {\n & {\n flex-direction: column;\n }\n }\n }\n .backtoTop {\n border: none;\n height: 48px;\n width: 48px;\n border-radius: 24px;\n background-color: #8894ab;\n color: #ffffff;\n position: fixed;\n z-index: 5;\n bottom: 68px;\n right: -48px;\n padding: 7px;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n transition: opacity .2s, right .2s, background-color .2s;\n html[dir=\"rtl\"] & {\n right: inherit;\n left: -48px;\n transition: opacity .2s, left .2s, background-color .2s;\n }\n &.show {\n right: 8px;\n opacity: 1;\n html[dir=\"rtl\"] & {\n right: inherit;\n left: 8px;\n }\n }\n &:hover, &:focus{\n background-color: #6c778c;\n }\n }\n @keyframes shimmer {\n 100% {\n transform: translateX(100%);\n }\n }\n`;\n","import React, { useState } from 'react';\nimport {\n object, string, func, bool\n} from 'prop-types';\nimport { getDeviceType } from '../../getDeviceType';\nimport { templateConstants } from '../../templateConstants';\n\nconst TemplateItemContainer = ({\n type, template, templateTheme, setSelectedTemplate, handleTemplateClone, username, source, context, logAbTestAction, liteMode, useSlider\n}) => {\n const [imageLoaded, setImageLoaded] = useState(false);\n const templateTitle = template._title || template.title;\n const handlePreviewTemplate = (target, selectedTemplate = template) => {\n setSelectedTemplate(selectedTemplate);\n if (window.standaloneTemplatesLogger) {\n window.standaloneTemplatesLogger({\n actor: username,\n target: `/${type}/standalone/${template?.slug || templateTitle}`,\n action: `${getDeviceType()}:${target}`\n });\n }\n\n // A/B Test: templateSuggestionModalOnMyAppsIII\n if (liteMode) {\n logAbTestAction?.({ action: 'preview', target: template?.slug });\n }\n };\n\n const { templateItem: TemplateItemRenderer, getCloneTemplatePayload } = templateConstants[type];\n const templateCloneWrapper = event => {\n if (window.standaloneTemplatesLogger) {\n window.standaloneTemplatesLogger({\n actor: username,\n target: template._id || template.id,\n action: `${getDeviceType()}:useTemplate`\n });\n }\n const { payload } = getCloneTemplatePayload(undefined, { ...template, theme: templateTheme }, source);\n handleTemplateClone(payload, event.target);\n\n // A/B Test: templateSuggestionModalOnMyAppsIII\n if (liteMode) {\n logAbTestAction?.({ action: 'clone', target: template.slug });\n }\n };\n\n return (\n \n );\n};\n\nexport default TemplateItemContainer;\nTemplateItemContainer.defaultProps = {\n source: '',\n context: '',\n username: '',\n templateTheme: '',\n handleTemplateClone: () => { },\n setSelectedTemplate: () => { },\n template: {\n screenshot: 'skeleton',\n _title: 'skeleton',\n title: 'skeleton'\n },\n logAbTestAction: f => f,\n liteMode: false,\n useSlider: false\n};\nTemplateItemContainer.propTypes = {\n source: string,\n context: string,\n template: object,\n username: string,\n templateTheme: string,\n type: string.isRequired,\n setSelectedTemplate: func,\n handleTemplateClone: func,\n logAbTestAction: func,\n liteMode: bool,\n useSlider: bool\n};\n","/* eslint-disable @jotforminc/no-native-button */\nimport React, {\n useRef, useState, useEffect, Fragment\n} from 'react';\nimport {\n arrayOf, object, func, string, number, bool\n} from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\nimport { Swiper, SwiperSlide } from 'swiper/react';\n\nimport 'swiper/css';\nimport 'swiper/css/navigation';\n\nimport { IconChevronLeft, IconChevronRight } from '@jotforminc/svg-icons';\nimport { ScTemplates } from '../ScTemplates';\nimport TemplateItemContainer from '../TemplateItem/TemplateItemContainer';\nimport { getDeviceType } from '../../getDeviceType';\nimport { templateConstants } from '../../templateConstants';\n\nconst dummyTemplatesArray = [\n { screenshot: 'skeleton', title: 'skeleton', id: 'skeleton-1' },\n { screenshot: 'skeleton', title: 'skeleton', id: 'skeleton-2' },\n { screenshot: 'skeleton', title: 'skeleton', id: 'skeleton-3' },\n { screenshot: 'skeleton', title: 'skeleton', id: 'skeleton-4' },\n { screenshot: 'skeleton', title: 'skeleton', id: 'skeleton-5' },\n { screenshot: 'skeleton', title: 'skeleton', id: 'skeleton-6' }\n];\n\nconst SimilarTemplatesItem = ({\n similarTemplates, modalBodyRef, categoryData, onTemplateClone, templateType, source, theme, useSlider, newStandaloneActive,\n setModalContentLoading, customOnSelectTemplate, skeletonCount, selectTemplateCallback, parentTemplateID, isAgentTemplates, displayMyformsModal\n}) => {\n const { newPreviewModalActive = false } = templateConstants[templateType];\n const sliderRef = useRef(null);\n const [sliderRealIndex, setSliderRealIndex] = useState(0);\n const [disableNavigationNext, setDisableNavigationNext] = useState(false);\n const [similarsLoaded, setSimilarsLoaded] = useState(false);\n\n const deviceType = getDeviceType();\n const isDesktop = deviceType === 'desktop';\n\n useEffect(() => {\n if (isAgentTemplates) {\n setSimilarsLoaded(true);\n return;\n }\n if (Object.keys(categoryData).length > 0) {\n setSimilarsLoaded(true);\n }\n }, [categoryData]);\n\n const handleSelectTemplateWrapper = newTemplate => {\n selectTemplateCallback();\n customOnSelectTemplate();\n setSimilarsLoaded(false);\n modalBodyRef?.current?.scrollTo({ top: 0, behavior: 'smooth' });\n if (!newStandaloneActive) {\n const navigatedTemplateData = {\n ...newTemplate,\n ...(isAgentTemplates ? {\n previewURL: `https://www.jotform.com/agent-directory/preview/agent/${newTemplate.id}?isTemplatePreview=1`\n } : {})\n };\n displayMyformsModal({ template: { navigatedTemplateData }, ...navigatedTemplateData });\n return;\n }\n global?.setSelectedTemplate(newTemplate);\n setModalContentLoading(true);\n };\n\n const seeAlsoTemplates = (similarsLoaded && similarTemplates.length > 0) ? similarTemplates : dummyTemplatesArray.slice(0, newPreviewModalActive ? 6 : skeletonCount);\n\n if (seeAlsoTemplates.length <= 0) return null;\n\n const prettySeeAlsoTemplates = seeAlsoTemplates.length > 3 ? seeAlsoTemplates.slice(0, newPreviewModalActive ? 6 : 3) : seeAlsoTemplates;\n return (\n \n {\n useSlider ? (\n <>\n
    \n {t(isAgentTemplates ? 'Other agents' : 'Related templates')}\n
    \n {\n if (!sliderRef.current) return;\n sliderRef.current.swiper.slidePrev();\n setSliderRealIndex(sliderRef.current.swiper.realIndex);\n setDisableNavigationNext(sliderRef.current.swiper.isEnd);\n }}\n disabled={sliderRealIndex === 0}\n style={{ opacity: sliderRealIndex === 0 ? 0.4 : 1, pointerEvents: sliderRealIndex === 0 ? 'none' : 'auto' }}\n >\n \n \n {\n if (!sliderRef.current) return;\n sliderRef.current.swiper.slideNext();\n setDisableNavigationNext(sliderRef.current.swiper.isEnd);\n setSliderRealIndex(sliderRef.current.swiper.realIndex);\n }}\n disabled={disableNavigationNext}\n style={{\n opacity: disableNavigationNext ? 0.4 : 1,\n pointerEvents: disableNavigationNext ? 'none' : 'auto'\n }}\n >\n Next\n \n \n
    \n
    \n \n \n {prettySeeAlsoTemplates.map(similiarTemplate => {\n return (\n \n handleSelectTemplateWrapper(newTemplate)}\n />\n \n );\n })}\n \n \n \n ) : (\n <>\n

    {t('More templates like this')}

    \n
    \n \n
    \n {prettySeeAlsoTemplates.map(similiarTemplate => {\n return (\n \n handleSelectTemplateWrapper(newTemplate)}\n />\n \n );\n })}\n
    \n
    \n
    \n \n )\n }\n
    \n );\n};\n\nSimilarTemplatesItem.defaultProps = {\n theme: '',\n source: '',\n useSlider: false,\n skeletonCount: 3,\n categoryData: null,\n similarTemplates: [],\n parentTemplateID: '',\n modalBodyRef: undefined,\n onTemplateClone: () => {},\n customOnSelectTemplate: () => {},\n selectTemplateCallback: () => {},\n isAgentTemplates: false,\n displayMyformsModal: f => f,\n newStandaloneActive: true\n};\n\nSimilarTemplatesItem.propTypes = {\n theme: string,\n source: string,\n useSlider: bool,\n modalBodyRef: object,\n categoryData: object,\n skeletonCount: number,\n onTemplateClone: func,\n parentTemplateID: string,\n selectTemplateCallback: func,\n customOnSelectTemplate: func,\n templateType: string.isRequired,\n similarTemplates: arrayOf(object),\n setModalContentLoading: func.isRequired,\n isAgentTemplates: bool,\n displayMyformsModal: func,\n newStandaloneActive: bool\n};\n\nexport default SimilarTemplatesItem;\n","import React from 'react';\nimport {\n string, object\n} from 'prop-types';\nimport { IconLayersFilled } from '@jotforminc/svg-icons';\n\nexport default function Infobar({ templateType, template, categoryData }) {\n const username = template._username || template.username;\n const parentSlug = categoryData?.parent?.slug || categoryData?.parent?._slug;\n const slug = categoryData?.slug || categoryData?._slug;\n const cloneCount = template.clonecount || template._clonecount;\n const formatBigNumber = number => {\n if (number === 0) {\n return '0';\n }\n if (!number) {\n return '';\n }\n return number.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n };\n\n return (\n
    \n
    \n
    \n Shared by\n {' '}\n \n {username}\n \n {' '}\n in\n {' '}\n {categoryData.name}\n
    \n
    \n \n Cloned\n {' '}\n {formatBigNumber(cloneCount)}\n
    \n
    \n
    \n );\n}\n\nInfobar.propTypes = {\n templateType: null,\n template: {},\n categoryData: null\n};\n\nInfobar.defaultProps = {\n templateType: string,\n template: object,\n categoryData: object\n};\n","/* eslint-disable @jotforminc/no-native-button */\n/* eslint-disable react/button-has-type */\n/* eslint-disable max-len */\nimport React from 'react';\nimport { t } from '@jotforminc/translation';\nimport {\n func, bool, string, oneOfType, object\n} from 'prop-types';\nimport cx from 'classnames';\nimport { IconChevronLeft, IconChevronRight } from '@jotforminc/svg-icons';\nimport Button from '../../../Button';\nimport texts from '../../../../core/texts';\n\nexport default function ModalControls({\n useTemplate, isCloningTemplate, handlePrevNextTemplateHandler, className, newStyle, leftRef, rightRef\n}) {\n const ctaControlsClassnames = cx(className, {\n 'arrow-desktop lg:flex justify-between fixed top-1/2 transform -translate-y-1/2 left-1/2 -translate-x-1/2 max-w-xxl w-full': newStyle,\n 'cta-controls sticky lg:static left-0 right-0 bottom-0 bg-white border-t border-t-navy-50 py-1 lg:py-0 lg:border-t-0 justify-center z-3': !newStyle\n });\n\n const modalArrowLeftClassnames = cx({\n 'modal-arrow left locale-data-aria-label w-16 h-16 color-navy-100 hover:color-white inline-flex items-center justify-center duration-200 transform rtl:rotate-180': newStyle,\n 'modal-arrow left relative locale-data-aria-label lg:absolute lg:top-1/3 lg:-left-20 lg:rtl:left-auto lg:rtl:-right-20 w-12 lg:w-16 h-12 lg:h-16 bg-navy-75 color-navy-400 inline-flex items-center justify-center radius lg:radius-full hover:bg-navy-700 hover:color-white duration-200 transform rtl:rotate-180': !newStyle\n });\n\n const modalArrowRightClassnames = cx({\n 'modal-arrow right locale-data-aria-label w-16 h-16 color-navy-100 hover:color-white inline-flex items-center justify-center duration-200 transform rtl:rotate-180': newStyle,\n 'modal-arrow right relative locale-data-aria-label lg:absolute lg:top-1/3 lg:-right-20 lg:rtl:right-auto lg:rtl:-left-20 w-12 lg:w-16 h-12 lg:h-16 bg-navy-75 color-navy-400 inline-flex items-center justify-center radius lg:radius-full hover:bg-navy-700 hover:color-white duration-200 transform rtl:rotate-180': !newStyle\n });\n\n return (\n
    \n handlePrevNextTemplateHandler({ key: 'ArrowLeft' })}\n >\n \n \n {!newStyle && (\n \n {isCloningTemplate ? t(texts.PLEASE_WAIT) : t(texts.USE_TEMPLATE)}\n \n )}\n handlePrevNextTemplateHandler({ key: 'ArrowRight' })}\n >\n \n \n
    \n );\n}\n\nModalControls.propTypes = {\n className: string,\n useTemplate: func,\n isCloningTemplate: bool,\n handlePrevNextTemplateHandler: func,\n newStyle: bool,\n leftRef: oneOfType(func, object),\n rightRef: oneOfType(func, object)\n};\n\nModalControls.defaultProps = {\n className: '',\n useTemplate: f => f,\n isCloningTemplate: false,\n handlePrevNextTemplateHandler: f => f,\n newStyle: false,\n leftRef: f => f,\n rightRef: f => f\n};\n","/* eslint-disable max-len */\n/* eslint-disable react/prop-types */\nimport React from 'react';\nimport {\n string, object, func, arrayOf, bool\n} from 'prop-types';\n// import { classNames } from '@jotforminc/utils';\n// import { t } from '@jotforminc/translation';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\n\nimport './style.scss';\nimport SimilarTemplatesItem from './SimilarTemplatesItem';\nimport Loader from '../../../Loader';\nimport Infobar from './InfoBar';\nimport ModalControls from './ModalControls';\n\nconst FormTemplatePreviewContent = ({\n frameSrc, template, modalBodyRef, onTemplateClone,\n categoryData, setModalContentLoading, similarTemplates,\n previewURL, theme, useTemplate, isCloningTemplate, handlePrevNextTemplateHandler\n}) => {\n const templateType = frameSrc.split('/')[1];\n const {\n id,\n _id,\n _description = ''\n } = template;\n return (\n
    \n
    \n \n \n
    \n {(Object.keys(template).length > 0) && (\n <>\n \n
    \n {!isEnterprise() && (\n <>\n \n
    \n
    \n
    \n \n )}\n {similarTemplates.length > 0 && (\n \n )}\n
    \n \n )}\n
    \n );\n};\n\nFormTemplatePreviewContent.defaultProps = {\n template: {},\n previewURL: string,\n frameSrc: '/',\n categoryData: null,\n similarTemplates: [],\n onTemplateClone: f => f,\n modalBodyRef: undefined,\n isCloningTemplate: false,\n handlePrevNextTemplateHandler: f => f\n};\n\nFormTemplatePreviewContent.propTypes = {\n frameSrc: string,\n previewURL: null,\n template: object,\n categoryData: object,\n modalBodyRef: object,\n onTemplateClone: func,\n isCloningTemplate: bool,\n useTemplate: func.isRequired,\n similarTemplates: arrayOf(object),\n handlePrevNextTemplateHandler: func,\n setModalContentLoading: func.isRequired\n};\n\nexport default FormTemplatePreviewContent;\n","export const RESPONSIVE_MODES = {\n MOBILE: 'mobile',\n TABLET: 'tablet',\n DESKTOP: 'desktop'\n};\n\nexport const DUMMY_RECOMMENDED_THEMES = [{\n id: 211301991871959,\n thumbnail_url: 'https://cdn.jotfor.ms/assets/img/appPreview/industry_education.png'\n}, {\n id: 212721702558958,\n thumbnail_url: 'https://cdn.jotfor.ms/assets/img/appPreview/theme1.png'\n}, {\n id: 211602841262951,\n thumbnail_url: 'https://cdn.jotfor.ms/assets/img/appPreview/theme2.png'\n}, {\n id: 211302146772952,\n thumbnail_url: 'https://cdn.jotfor.ms/assets/img/appPreview/theme3.png'\n}, {\n id: 212382889685978,\n thumbnail_url: 'https://cdn.jotfor.ms/assets/img/appPreview/default.png'\n}];\n","import { autoTranslate } from '@jotforminc/utils';\n\nexport default autoTranslate({\n APP_TITLE: 'Your app is ready!',\n APP_CTA_TEXT: 'Use this app',\n SELECT_THEME: 'Select Theme',\n TRY_ME: 'Try me'\n});\n","import React from 'react';\nimport { string, func } from 'prop-types';\nimport { IconMobile, IconTablet, IconDesktop } from '@jotforminc/svg-icons';\nimport { RESPONSIVE_MODES } from '../core/constants';\n\nconst ViewMode = ({ viewMode, onViewModeChange }) => {\n const { MOBILE, TABLET, DESKTOP } = RESPONSIVE_MODES;\n\n const isActive = (vMode, type) => (vMode === type ? 'active' : '');\n\n return (\n
    \n {/* mobile */}\n onViewModeChange(MOBILE)}\n className={`mobile ${isActive(viewMode, MOBILE)}`}\n >\n \n \n {/* tablet */}\n onViewModeChange(TABLET)}\n className={`tablet ${isActive(viewMode, TABLET)}`}\n >\n \n \n {/* desktop */}\n onViewModeChange(DESKTOP)}\n className={`desktop ${isActive(viewMode, DESKTOP)}`}\n >\n \n \n
    \n );\n};\n\nViewMode.propTypes = {\n viewMode: string,\n onViewModeChange: func\n};\n\nViewMode.defaultProps = {\n viewMode: RESPONSIVE_MODES.MOBILE,\n onViewModeChange: f => f\n};\n\nexport default ViewMode;\n","/* eslint-disable max-len */\nimport React from 'react';\nimport { string } from 'prop-types';\n\nconst MobileBorder = ({ splashBgColor }) => {\n return (\n \n \n \n \n \n \n );\n};\n\nMobileBorder.propTypes = { splashBgColor: string.isRequired };\n\nexport default MobileBorder;\n","/* eslint-disable max-len */\nimport React from 'react';\nimport { string } from 'prop-types';\n\nconst TabletBorder = ({ splashBgColor }) => {\n return (\n \n \n \n \n \n \n \n );\n};\n\nTabletBorder.propTypes = { splashBgColor: string.isRequired };\n\nexport default TabletBorder;\n","/* eslint-disable max-len */\nimport React from 'react';\n\nconst MobilePageBorder = props => {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default MobilePageBorder;\n","/* eslint-disable max-len */\nimport React from 'react';\n\nconst TabletPageBorder = props => {\n return (\n \n \n \n \n \n \n \n );\n};\n\nTabletPageBorder.propTypes = { };\n\nexport default TabletPageBorder;\n","import { DUMMY_RECOMMENDED_THEMES } from './constants';\n\nexport const dummyAppThemesApi = () => {\n return new Promise(resolve => {\n setTimeout(() => {\n resolve(DUMMY_RECOMMENDED_THEMES);\n }, 50);\n });\n};\n\nconst getObjectElDocument = objectEl => {\n let docEl = objectEl.contentWindow || objectEl.contentDocument;\n if (docEl?.document) {\n docEl = docEl.document;\n }\n return docEl;\n};\n\nconst getSpacerStyles = () => {\n return `\n .appHeader {\n padding: 58px 30px 87px !important;\n }\n .navigationPanelWrapper {\n padding-top: 28px !important;\n }\n .navBurger {\n top: 28px !important;\n } \n @media screen and (max-width: 381px) {\n .formRendererNav {\n padding: 36px 12px 8px !important;\n height: 90px;\n }\n }\n .navPanel-title {\n top: 28px !important;\n }`;\n};\n\nexport const addMobileHeadSpacer = objectEl => {\n const styleEl = document.createElement('style');\n styleEl.innerHTML = getSpacerStyles();\n const objectDocEl = getObjectElDocument(objectEl);\n objectDocEl?.head?.append(styleEl);\n};\n","import React from 'react';\nimport {\n array, func, string, number\n} from 'prop-types';\nimport { getDomainURL } from '@jotforminc/request-layer';\n\nconst MultiplePreview = ({\n onLoad,\n currentThemeId,\n previewQueryParams,\n themesWithLoadAllowed\n}) => {\n return (\n <>\n {themesWithLoadAllowed.map((theme, index) => {\n if (!theme.allowLoading) return null;\n return (\n onLoad(event, theme, index)}\n />\n );\n })}\n \n );\n};\n\nMultiplePreview.propTypes = {\n themesWithLoadAllowed: array.isRequired,\n previewQueryParams: string.isRequired,\n currentThemeId: number,\n onLoad: func\n};\n\nMultiplePreview.defaultProps = {\n onLoad: f => f,\n currentThemeId: 0\n};\n\nexport default MultiplePreview;\n","/* eslint-disable no-nested-ternary */\nimport React, { useState, useEffect } from 'react';\nimport { bool, func, string } from 'prop-types';\nimport { getDomainURL } from '@jotforminc/request-layer';\nimport { RESPONSIVE_MODES } from '../core/constants';\nimport Loader from '../../Loader';\n\nconst SinglePreview = ({\n title,\n onLoad,\n viewMode,\n appDetails,\n splashBgColor,\n currentThemeId,\n modalContentLoading,\n forStandalonePageTemplate\n}) => {\n let loadingTimeout;\n let loadedObjectStatusTimeout;\n\n const [loadedObjectStatus, setLoadedObjectStatus] = useState(false);\n const [loadedAnimationStatus, setLoadedAnimationStatus] = useState(false);\n const [loadingAnimationStatus, setLoadingAnimationStatus] = useState(false);\n\n useEffect(() => {\n if (currentThemeId) {\n setLoadedAnimationStatus(false);\n setLoadingAnimationStatus(false);\n setLoadedObjectStatus(false);\n if (viewMode !== RESPONSIVE_MODES.MOBILE) return;\n loadingTimeout = setTimeout(() => {\n setLoadingAnimationStatus(true);\n }, 2000);\n }\n return () => {\n clearTimeout(loadingTimeout);\n clearTimeout(loadedObjectStatusTimeout);\n };\n }, forStandalonePageTemplate ? [currentThemeId] : [currentThemeId, viewMode]);\n\n let iconURL = '';\n let fontColor = '';\n\n try {\n const parsedData = JSON.parse(appDetails);\n iconURL = parsedData?.appIconURL;\n fontColor = parsedData?.appFontColor;\n } catch (e) {\n console.log(e);\n }\n\n let previewURL = `${getDomainURL()}/app-templates/preview/app/${currentThemeId}?mode=${viewMode}`;\n let previewFrameTitle = 'App Preview';\n\n if (forStandalonePageTemplate) {\n previewFrameTitle = 'Page Preview';\n previewURL = `${getDomainURL()}/page-templates/preview/${currentThemeId}`;\n }\n\n if (forStandalonePageTemplate) {\n return (\n <>\n
    \n \n
    \n {\n loadedObjectStatusTimeout = setTimeout(() => {\n setLoadedObjectStatus(true);\n }, 350);\n }}\n data={previewURL}\n >\n {previewFrameTitle}\n \n \n );\n }\n\n return (\n <>\n
    \n
    \n {!modalContentLoading && (\n {title}\n )}\n
    \n
    {title}
    \n
    \n
    \n {\n viewMode === RESPONSIVE_MODES.MOBILE ? (\n loadingAnimationStatus ? (\n {\n setLoadedAnimationStatus(true);\n loadedObjectStatusTimeout = setTimeout(() => {\n setLoadedObjectStatus(true);\n }, 350);\n }}\n data={previewURL}\n >\n {previewFrameTitle}\n \n ) : (\n \n {previewFrameTitle}\n \n )\n ) : (\n \n {previewFrameTitle}\n \n )\n }\n \n );\n};\n\nSinglePreview.propTypes = {\n onLoad: func,\n title: string,\n viewMode: string.isRequired,\n appDetails: string.isRequired,\n forStandalonePageTemplate: bool,\n splashBgColor: string.isRequired,\n currentThemeId: string.isRequired,\n modalContentLoading: bool.isRequired\n};\n\nSinglePreview.defaultProps = {\n onLoad: f => f,\n title: '',\n forStandalonePageTemplate: false\n};\n\nexport default SinglePreview;\n","import React, { useEffect, useState } from 'react';\nimport {\n number, func, arrayOf, shape, bool, string, object, oneOfType\n} from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { getCurrentTime } from '@jotforminc/utils';\n\nimport { RESPONSIVE_MODES } from '../core/constants';\nimport texts from '../core/texts';\nimport ViewMode from './ViewMode';\nimport MobileBorder from './MobileBorder';\nimport TabletBorder from './TabletBorder';\nimport MobilePageBorder from './MobilePageBorder';\nimport TabletPageBorder from './TabletPageBorder';\nimport { addMobileHeadSpacer } from '../core/utils';\nimport MultiplePreview from './MultiplePreview';\nimport SinglePreview from './SinglePreview';\nimport TryArrow from '../assets/svg/tryArrow.svg';\n\nconst AppPreviewBody = ({\n themes,\n template,\n customTryText,\n currentThemeId,\n previewQueryParams,\n modalContentLoading,\n showAsTemplatePreview,\n forStandalonePageTemplate,\n showThemeChangeTransition,\n onViewModeChange\n}) => {\n const [viewMode, setViewMode] = useState(forStandalonePageTemplate ? RESPONSIVE_MODES.DESKTOP : RESPONSIVE_MODES.MOBILE);\n const [themesWithLoadAllowed, setThemesWithLoadAllowed] = useState([]);\n const areThemesLoading = themes.length === 0;\n\n const {\n title = '',\n splashBgColor = '',\n phoneNotchClass = 'black',\n JSON: appDetails = '{}'\n } = template;\n\n useEffect(() => {\n if (areThemesLoading) return;\n\n let intialThemes = themes.map(theme => ({ ...theme, allowLoading: false }));\n intialThemes = [{ ...intialThemes[0], allowLoading: true }, ...intialThemes.slice(1)];\n setThemesWithLoadAllowed(intialThemes);\n }, [themes]);\n\n const handleViewModeChange = selectedMode => {\n setViewMode(selectedMode);\n onViewModeChange(selectedMode);\n };\n\n // allow the next items loading\n const allowNextLoadingAfter = lastLoadedTheme => {\n const indexOfLoaded = themesWithLoadAllowed.indexOf(lastLoadedTheme);\n const updatedThemes = themesWithLoadAllowed.map((theme, index) => ((indexOfLoaded + 1) === index ? { ...theme, allowLoading: true } : { ...theme }));\n setThemesWithLoadAllowed(updatedThemes);\n };\n\n // find the last loaded item and trigger the next item's loading\n const handleOnLoad = (event, loadedTheme, loadedThemeIndex) => {\n const lastLoadedItemIndex = themesWithLoadAllowed.map(theme => theme.allowLoading).lastIndexOf(true);\n if (lastLoadedItemIndex === loadedThemeIndex) {\n allowNextLoadingAfter(loadedTheme);\n }\n\n // add custom css to the object el's document\n addMobileHeadSpacer(event.target);\n };\n return (\n
    \n {/* preview frames: mobile, tablet, desktop */}\n
    \n
    \n {!forStandalonePageTemplate ? (\n <>\n
    \n
    \n {getCurrentTime()}\n
    \n
    \n \n
    \n
    \n \n \n ) : (\n \n )}\n
    \n
    \n {!forStandalonePageTemplate ? (\n \n ) : (\n \n )}\n
    \n
    \n {/* standard preview */}\n {!showAsTemplatePreview && !areThemesLoading && (\n \n )}\n {/* app template preview */}\n {showAsTemplatePreview && (\n \n )}\n
    \n {\n !forStandalonePageTemplate && (\n
    \n {customTryText !== null ? t(customTryText) : texts.TRY_ME}\n
    \n
    \n )\n }\n
    \n {/* responsive controls */}\n \n
    \n );\n};\n\nAppPreviewBody.propTypes = {\n template: object,\n themes: arrayOf(shape()),\n currentThemeId: (oneOfType([number, string])),\n onViewModeChange: func,\n showThemeChangeTransition: bool,\n showAsTemplatePreview: bool,\n forStandalonePageTemplate: bool,\n previewQueryParams: string,\n customTryText: string,\n modalContentLoading: bool\n};\n\nAppPreviewBody.defaultProps = {\n onViewModeChange: f => f,\n themes: [],\n currentThemeId: 0,\n customTryText: null,\n modalContentLoading: false,\n showThemeChangeTransition: false,\n forStandalonePageTemplate: false,\n previewQueryParams: '',\n showAsTemplatePreview: false,\n template: {\n splashBgColor: 'rgba(243, 243, 254, 1)',\n phoneNotchClass: 'white'\n }\n};\n\nexport default AppPreviewBody;\n","import React, { useEffect, Fragment } from 'react';\nimport {\n string, func, bool, arrayOf, object\n} from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\nimport { classNames } from '@jotforminc/utils';\nimport { AppPreviewBody } from '../../../AppPreview';\nimport Button from '../../../Button';\nimport texts from '../../../../core/texts';\nimport SimilarTemplatesItem from './SimilarTemplatesItem';\nimport './style.scss';\n\nconst AppTemplatePreviewContent = ({\n id, template, categoryData, useTemplate, modalContentLoading,\n isCloningTemplate, similarTemplates, setModalContentLoading, modalBodyRef, frameSrc\n}) => {\n const templateType = frameSrc.split('/')[1];\n\n useEffect(() => {\n if (Object.keys(categoryData).length > 0) {\n setModalContentLoading(false);\n }\n }, [categoryData]);\n\n const { title = '', description = '' } = template;\n return (\n
    \n \n {\n (Object.keys(template).length > 0) && (\n
    \n {!isEnterprise() && (\n <>\n
    \n
    \n
    \n
    \n

    {t('See app in action')}

    \n

    {t('Use your camera to scan the QR code and preview the app on your device.')}

    \n
    \n {title}\n
    \n
    \n \n {isCloningTemplate ? t(texts.PLEASE_WAIT) : t(texts.USE_TEMPLATE)}\n \n
    \n
    \n \n )}\n \n
    \n )\n }\n
    \n );\n};\n\nAppTemplatePreviewContent.defaultProps = {\n id: null,\n template: {},\n frameSrc: '/',\n categoryData: null,\n similarTemplates: [],\n modalBodyRef: undefined,\n isCloningTemplate: false,\n modalContentLoading: false\n};\n\nAppTemplatePreviewContent.propTypes = {\n id: string,\n frameSrc: string,\n template: object,\n categoryData: object,\n modalBodyRef: object,\n isCloningTemplate: bool,\n modalContentLoading: bool,\n useTemplate: func.isRequired,\n similarTemplates: arrayOf(object),\n setModalContentLoading: func.isRequired\n};\n\nexport default AppTemplatePreviewContent;\n","import React, { useState, useEffect } from 'react';\nimport {\n func, arrayOf, object, string\n} from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\nimport Loader from '../../../Loader';\nimport Infobar from './InfoBar';\n\nimport './style.scss';\nimport { getDeviceType } from '../../getDeviceType';\n\nimport SimilarTemplatesItem from './SimilarTemplatesItem';\n\nconst ApprovalTemplatePreviewContent = ({\n template, categoryData, onTemplateClone, username,\n similarTemplates, setModalContentLoading, modalBodyRef, frameSrc\n}) => {\n const [viewMode, setViewMode] = useState('approval');\n const [resourcesLoading, setResourcesLoading] = useState({ approval: false, form: false });\n\n const templateType = frameSrc.split('/')[1];\n const { id = '', source_snapshot: sourceSnapshot = '{}' } = template;\n\n useEffect(() => {\n if (!resourcesLoading.approval || !resourcesLoading.form) {\n setModalContentLoading(true);\n }\n }, [viewMode]);\n\n useEffect(() => {\n if (resourcesLoading[viewMode]) {\n setModalContentLoading(false);\n }\n }, [resourcesLoading]);\n\n useEffect(() => {\n setResourcesLoading({ approval: false, form: false });\n }, [template]);\n\n const { description = '' } = template;\n\n const handleChangeViewMode = newViewMode => {\n setViewMode(newViewMode);\n if (global?.standaloneTemplatesLogger) {\n global.standaloneTemplatesLogger({\n actor: username,\n action: `${getDeviceType()}:${newViewMode}-preview`\n });\n }\n };\n\n const pageIsReady = Object.keys(categoryData).length > 0;\n\n const viewOptionButtons = [{ optionKey: 'approval', prettyText: 'APPROVAL FLOW' }, { optionKey: 'form', prettyText: 'FORM' }];\n const isWorkflowReleased = window.location.href.includes('myworkflows');\n return (\n
    \n
    \n
    \n {viewOptionButtons.map(optionButton => {\n const { prettyText, optionKey } = optionButton;\n return (\n handleChangeViewMode(optionKey, username)}\n className={`view-option-button${viewMode === optionKey ? ' active' : ''}`}\n >\n {t(prettyText)}\n \n );\n })}\n
    \n
    \n \n {\n pageIsReady && (\n <>\n setResourcesLoading({ ...resourcesLoading, approval: true })}\n />\n setResourcesLoading({ ...resourcesLoading, form: true })}\n data={`/${templateType}/standalone/preview/form/${JSON.parse(sourceSnapshot).id}?id=${id}`}\n />\n \n )\n }\n
    \n
    \n {\n (Object.keys(template).length > 0) && (\n
    \n {!isEnterprise() && (\n <>\n \n
    \n
    \n
    \n \n )}\n setResourcesLoading({ approval: false, form: false })}\n />\n
    \n )\n }\n
    \n );\n};\n\nApprovalTemplatePreviewContent.defaultProps = {\n template: {},\n frameSrc: '/',\n username: '',\n categoryData: null,\n similarTemplates: [],\n modalBodyRef: undefined,\n onTemplateClone: () => { }\n};\n\nApprovalTemplatePreviewContent.propTypes = {\n template: object,\n username: string,\n frameSrc: string,\n categoryData: object,\n modalBodyRef: object,\n onTemplateClone: func,\n similarTemplates: arrayOf(object),\n setModalContentLoading: func.isRequired\n};\n\nexport default ApprovalTemplatePreviewContent;\n","import React, { useRef, useEffect, useState } from 'react';\nimport {\n string, func, arrayOf, object, bool\n} from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\nimport Button from '../../../Button';\nimport Loader from '../../../Loader';\nimport PreviewHint from '../TemplateItem/PreviewHint';\nimport './style.scss';\nimport { getDeviceType } from '../../getDeviceType';\nimport SimilarTemplatesItem from './SimilarTemplatesItem';\n\nconst TableTemplatePreviewContent = ({\n template, categoryData, modalBodyRef, frameSrc,\n setAdditionalWrapperClasses, setCustomHandleCloseFunction,\n similarTemplates, setModalContentLoading, modalContentLoading, username, onTemplateClone\n}) => {\n let timeoutReference;\n\n const templateType = frameSrc.split('/')[1];\n const isMobile = getDeviceType() === 'mobile';\n\n const demoPreviewRef = useRef();\n const previewImageRef = useRef();\n const [previewMode, setPreviewMode] = useState('image');\n const [containerHeight, setContainerHeight] = useState();\n\n const isEnterpriseCheck = isEnterprise();\n\n const resetComponentState = () => {\n if (isMobile) return;\n clearTimeout(timeoutReference);\n setContainerHeight();\n };\n\n const updateContainerHeight = () => {\n const currentImageRef = previewImageRef?.current;\n if (currentImageRef !== null) {\n setContainerHeight(currentImageRef.clientHeight);\n }\n };\n\n const handleWindowResize = () => {\n if (isMobile) return;\n if (window.innerWidth < 1100) {\n updateContainerHeight();\n }\n };\n\n useEffect(() => {\n if (isMobile) return;\n window.addEventListener('resize', handleWindowResize);\n return () => {\n window.removeEventListener('resize', handleWindowResize);\n resetComponentState();\n };\n }, []);\n\n useEffect(() => {\n if (Object.keys(categoryData).length > 0) {\n setModalContentLoading(false);\n }\n }, [categoryData]);\n\n const {\n id,\n _id,\n _slug,\n _imageUrl,\n _title = '',\n _previewImageUrl,\n _description = '',\n thumbnailBackgroundColor\n } = template;\n\n const handleImageLoad = () => {\n timeoutReference = setTimeout(() => {\n if (!isMobile) {\n updateContainerHeight();\n }\n setModalContentLoading(false);\n }, 500);\n };\n\n const getContainerHeight = () => {\n if (isMobile) return 'auto';\n if (containerHeight) return `${containerHeight}px`;\n if (window.innerWidth < 580) return '100px';\n if (window.innerWidth < 768) return '200px';\n return '300px';\n };\n\n const handleChangeViewMode = newMode => {\n setPreviewMode(newMode);\n setModalContentLoading(true);\n setAdditionalWrapperClasses(newMode === 'demo' ? ['previewMode'] : []);\n window.standaloneTemplatesLogger({\n actor: username,\n target: `${newMode}PreviewMode`,\n action: `${getDeviceType()}:previewModeChanged`\n });\n setCustomHandleCloseFunction(\n newMode === 'demo' ? () => handleChangeViewMode('image') : null\n );\n };\n\n return (\n
    \n {\n previewMode === 'demo' ? (\n
    \n \n {\n const node = demoPreviewRef?.current;\n if (node && node !== null && node?.contentWindow) {\n const demoFrame = node;\n demoFrame.contentWindow.backToImagePreviewMode = () => handleChangeViewMode('image');\n }\n setModalContentLoading(false);\n }}\n className={`demoFrame${modalContentLoading ? '' : ' demoFrameLoaded'}`}\n ref={demoPreviewRef}\n />\n
    \n ) : (\n <>\n
    \n \n handleChangeViewMode('demo')}\n >\n {isEnterpriseCheck && (\n \n )}\n \n {\n !modalContentLoading && (\n
    \n \n
    \n\n )\n }\n
    \n
    \n {\n (Object.keys(template).length > 0) && (\n
    \n {!isEnterprise() && (\n <>\n
    \n
    \n
    \n \n
    \n
    \n \n )}\n \n
    \n )\n }\n \n )\n }\n
    \n );\n};\n\nTableTemplatePreviewContent.defaultProps = {\n template: {},\n username: '',\n frameSrc: '/',\n categoryData: null,\n similarTemplates: [],\n modalBodyRef: undefined,\n onTemplateClone: f => f,\n modalContentLoading: true,\n setAdditionalWrapperClasses: f => f,\n setCustomHandleCloseFunction: f => f\n};\n\nTableTemplatePreviewContent.propTypes = {\n frameSrc: string,\n template: object,\n username: string,\n categoryData: object,\n modalBodyRef: object,\n onTemplateClone: func,\n modalContentLoading: bool,\n setAdditionalWrapperClasses: func,\n similarTemplates: arrayOf(object),\n setCustomHandleCloseFunction: func,\n setModalContentLoading: func.isRequired\n};\n\nexport default TableTemplatePreviewContent;\n","/* eslint-disable react/prop-types */\nimport React, { forwardRef, useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { TextInput, Dropdown } from '@jotforminc/uikit';\nimport { classNames } from '@jotforminc/utils';\n\nconst DropdownEditor = ({\n options,\n onChange,\n selectedOptionValue,\n textInputPlaceholder,\n ...props\n}) => {\n const [menuOpen, setMenuOpen] = useState(false);\n const selectOption = selectedOption => {\n onChange(selectedOption);\n };\n\n const ContainerRenderer = ({ children }) => (\n
      {children}
    \n );\n const ButtonRenderer = forwardRef(({\n option: { text, value } = {}, placeholder, isOptionsVisible, ...buttonProps\n }, ref) => {\n useEffect(() => {\n setMenuOpen(isOptionsVisible);\n }, [isOptionsVisible]);\n\n return (\n
    \n \n {text || placeholder}\n \n
    \n );\n });\n\n const TextInputRenderer = ({ ...textInputProps }) => {\n return (\n
    \n \n
    \n );\n };\n\n const GroupRenderer = ({ text, children, ...groupProps }) => {\n return (\n
    \n {text}\n
    {children}
    \n
    \n );\n };\n\n const OptionContainerRenderer = optionProps => {\n // eslint-disable-next-line react/destructuring-assignment\n const color = optionProps?.children?.props?.option?.color || '#151039';\n return (\n
  • \n );\n };\n\n return (\n
    \n \n
    \n\n );\n};\n\nDropdownEditor.propTypes = {\n options: PropTypes.array.isRequired,\n onChange: PropTypes.func,\n selectedOptionValue: PropTypes.string,\n textInputPlaceholder: PropTypes.string\n};\n\nDropdownEditor.defaultProps = {\n onChange: f => f,\n selectedOptionValue: null,\n textInputPlaceholder: null\n};\n\nexport default DropdownEditor;\n","/* eslint-disable react/prop-types */\nimport React, {\n useState, useRef, useEffect\n} from 'react';\nimport {\n string, object, func, arrayOf\n} from 'prop-types';\nimport { IconEyeFilled } from '@jotforminc/svg-icons';\nimport { capitalizeFirstLetter, classNames } from '@jotforminc/utils';\nimport { t } from '@jotforminc/translation';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\n\nimport './style.scss';\nimport RoleSelector from '../RoleSelector';\nimport { templateConstants } from '../../templateConstants';\nimport SimilarTemplatesItem from './SimilarTemplatesItem';\n// import Button from '../../../Button';\n// import texts from '../../../../core/texts';\n\nconst PdfTemplatePreviewContent = ({\n frameSrc, template, DOM,\n modalBodyRef, onTemplateClone,\n categoryData, setModalContentLoading, similarTemplates\n}) => {\n console.log(DOM);\n const objectRef = useRef();\n const [signers, setSigners] = useState([]);\n const [signAnnotations, setSignAnnotations] = useState([]);\n const [currentParticipantID, setCurrentParticipantID] = useState('');\n const [loadingPreview, setLoadingPreview] = useState(true);\n const templateType = frameSrc.split('/')[1];\n\n const {\n _id,\n screenshot,\n _description = ''\n } = template;\n\n const { aliasType } = templateConstants[templateType];\n\n const resetPreviewStates = () => {\n setSigners([]);\n setSignAnnotations([]);\n setLoadingPreview(true);\n setCurrentParticipantID('');\n };\n\n useEffect(() => {\n resetPreviewStates();\n }, [template]);\n\n const getIframeInsideObject = objectEl => {\n const iFrameElement = objectEl.querySelector('IFRAME');\n const { contentDocument, contentWindow } = iFrameElement !== null ? iFrameElement : {};\n return contentDocument || contentWindow.document;\n };\n\n const isFirstPdfPageRendered = iframeDoc => iframeDoc.getElementsByClassName('PDFV-canvas').length > 0;\n\n const getOwnerName = owner => {\n const { role, type } = owner;\n if (type === 'owner') return 'Owner';\n return capitalizeFirstLetter(role || type);\n };\n\n const formatAnnotations = (annotations, iframeDoc) => {\n return annotations.map(annotation => {\n const { id } = annotation;\n return {\n id,\n ref: iframeDoc.querySelector(`[data-annotation-id=\"${id}\"]`)\n };\n });\n };\n\n const handleLoadObject = (event, tryCount = 0) => {\n const { current: { contentDocument, contentWindow = {} } } = objectRef;\n if (tryCount > 100) {\n setLoadingPreview(false);\n }\n\n const iframeDoc = getIframeInsideObject(contentDocument);\n if (!iframeDoc || iframeDoc.readyState !== 'complete') {\n setTimeout(() => handleLoadObject(null, tryCount + 1), 100);\n return;\n }\n\n if (!isFirstPdfPageRendered(iframeDoc)) {\n setTimeout(() => handleLoadObject(null, tryCount + 1), 100);\n return;\n }\n setLoadingPreview(false);\n const { documentProps: { participants }, annotations = [] } = contentWindow;\n\n const allAnnotations = formatAnnotations(annotations, iframeDoc).filter(annotation => annotation.ref !== null);\n\n if (allAnnotations.length !== annotations.length && tryCount !== 100) {\n setTimeout(() => handleLoadObject(null, tryCount + 1), 100);\n return;\n }\n\n setSignAnnotations(allAnnotations);\n setSigners(\n participants.map(singer => {\n return { ...singer, prettyName: getOwnerName(singer) };\n })\n );\n };\n\n const showHideAnnotationElement = (show, element) => {\n if (show) {\n element.removeAttribute('data-participant');\n } else {\n element.setAttribute('data-participant', 'passive');\n }\n };\n\n const handleRoleChange = event => {\n const selectedValue = event?.value?.target || event?.value;\n\n setCurrentParticipantID(selectedValue);\n const { fields: selectedParticipantFields } = signers.find(signer => signer.participantID === selectedValue) || { fields: [] };\n signAnnotations.forEach(annotation => {\n const { ref: annotationElement } = annotation;\n if (selectedValue === '') {\n showHideAnnotationElement(true, annotationElement);\n } else {\n const qid = annotationElement.getAttribute('data-qid');\n const isPassive = !selectedParticipantFields.includes(qid);\n showHideAnnotationElement(!isPassive, annotationElement);\n }\n });\n };\n\n const signerOptions = [{ prettyName: 'All Roles ', participantID: '' }, ...signers];\n const isRoleBarActive = signers.length > 0;\n\n const { signable } = template;\n const isSignablePDF = signable === '1';\n\n const embedPDFCss = '';\n return (\n
    \n
    \n {loadingPreview && (\n <>\n
    \n \n \n \n
    \n { isSignablePDF && }\n \n )}\n {\n isSignablePDF ? (\n \n ) : (\n {\n setTimeout(() => { setLoadingPreview(false); }, 1000);\n }}\n src={`data:text/html,${encodeURIComponent(`${embedPDFCss}${DOM}`)}`}\n style={{\n width: '100%', border: '0', opacity: loadingPreview ? 0 : 1, height: loadingPreview ? '0px' : '100%', zIndex: 0\n }}\n />\n )\n }\n
    \n {\n isSignablePDF && (\n
    \n
    \n
    \n \n {t('Previewing as')}\n :\n
    \n {\n return {\n text: option.prettyName,\n value: option.participantID,\n color: option.color\n };\n })}\n onChange={handleRoleChange}\n selectedOptionValue={currentParticipantID}\n />\n
    \n
    \n {t('Customize this template and share it to collect e-signatures')}\n
    \n
    \n )\n }\n {(Object.keys(template).length > 0) && (\n
    \n {!isEnterprise() && (\n <>\n
    \n
    \n
    \n \n )}\n {similarTemplates.length > 0 && (\n \n )}\n
    \n )}\n
    \n );\n};\n\nPdfTemplatePreviewContent.defaultProps = {\n template: {},\n frameSrc: '/',\n categoryData: null,\n similarTemplates: [],\n onTemplateClone: f => f,\n modalBodyRef: undefined\n // isCloningTemplate: false\n};\n\nPdfTemplatePreviewContent.propTypes = {\n frameSrc: string,\n template: object,\n categoryData: object,\n modalBodyRef: object,\n onTemplateClone: func,\n // isCloningTemplate: bool,\n // useTemplate: func.isRequired,\n similarTemplates: arrayOf(object),\n setModalContentLoading: func.isRequired\n};\n\nexport default PdfTemplatePreviewContent;\n","import React from 'react';\nimport {\n func, arrayOf, object, string\n} from 'prop-types';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\nimport { AppPreviewBody } from '../../../AppPreview';\n\nimport '../../../AppPreview/styles/appPreview.scss';\nimport './style.scss';\n\nimport SimilarTemplatesItem from './SimilarTemplatesItem';\n\nconst PageTemplatePreviewContent = ({\n template, categoryData, onTemplateClone,\n similarTemplates, setModalContentLoading, modalBodyRef, frameSrc\n}) => {\n const templateType = frameSrc.split('/')[1];\n const { id = '' } = template;\n\n const { description = '' } = template;\n\n const pageIsReady = Object.keys(categoryData).length > 0;\n\n return (\n
    \n \n {\n (Object.keys(template).length > 0) && (\n
    \n {!isEnterprise() && (\n <>\n
    \n
    \n
    \n \n )}\n \n
    \n )\n }\n
    \n );\n};\n\nPageTemplatePreviewContent.defaultProps = {\n template: {},\n frameSrc: '/',\n categoryData: null,\n similarTemplates: [],\n modalBodyRef: undefined,\n onTemplateClone: () => { }\n};\n\nPageTemplatePreviewContent.propTypes = {\n template: object,\n frameSrc: string,\n categoryData: object,\n modalBodyRef: object,\n onTemplateClone: func,\n similarTemplates: arrayOf(object),\n setModalContentLoading: func.isRequired\n};\n\nexport default PageTemplatePreviewContent;\n","import FormTemplatePreviewContent from './components/PreviewModalContents/FormTemplatePreviewContent';\nimport AppTemplatePreviewContent from './components/PreviewModalContents/AppTemplatePreviewContent';\nimport ApprovalTemplatePreviewContent from './components/PreviewModalContents/ApprovalTemplatePreviewContent';\nimport TableTemplatePreviewContent from './components/PreviewModalContents/TableTemplatePreviewContent';\nimport PdfTemplatePreviewContent from './components/PreviewModalContents/PdfTemplatePreviewContent';\nimport PageTemplatePreviewContent from './components/PreviewModalContents/PageTemplatePreviewContent';\n\nexport const customModalConstants = {\n 'form-templates': {\n CustomPreviewModalBody: FormTemplatePreviewContent\n },\n 'sign-templates': {\n CustomPreviewModalBody: PdfTemplatePreviewContent\n },\n 'pdf-templates': {\n CustomPreviewModalBody: PdfTemplatePreviewContent\n },\n 'app-templates': {\n CustomPreviewModalBody: AppTemplatePreviewContent\n },\n 'approval-templates': {\n CustomPreviewModalBody: ApprovalTemplatePreviewContent\n },\n 'table-templates': {\n CustomPreviewModalBody: TableTemplatePreviewContent\n },\n 'page-templates': {\n CustomPreviewModalBody: PageTemplatePreviewContent\n }\n};\n","import axios from 'axios';\n\nimport { templateConstants } from './templateConstants';\n\nconst removeLastCharacter = string => string.substring(0, string.length - 1);\n\nconst apiCallWrapper = requestParams => {\n let paramString = '?';\n Object.keys(requestParams).forEach(paramKey => {\n const parameterValue = requestParams[paramKey];\n if (paramKey === 'language') {\n if (parameterValue !== undefined && parameterValue !== '') paramString += `${paramKey}=${parameterValue}&`;\n } else if (parameterValue !== undefined) {\n paramString += `${paramKey}=${parameterValue}&`;\n }\n });\n return removeLastCharacter(paramString);\n};\n\nconst languageFlatter = language => { if (language.length !== 0) return language[0]; };\n\nexport async function fetchCategories(templateType, language, source) {\n const { aliasType, getCustomReqParams = () => {} } = templateConstants[templateType];\n const templateTypeParameter = removeLastCharacter(aliasType || templateType);\n const requestParameters = apiCallWrapper({\n language: languageFlatter(language),\n ...getCustomReqParams(source)\n });\n return axios.get(`/API/${templateTypeParameter}/category${requestParameters}`);\n}\n\nconst categoryParamFlatter = (selectedCategory, isMyTemplates, searchKeywordParameter) => {\n if (selectedCategory?.slug) return selectedCategory?.slug;\n if (!isMyTemplates && searchKeywordParameter === '') return 'homepage';\n return undefined;\n};\n\nexport async function getTemplate(templateType, templateID, source = '', theme) {\n const {\n aliasType,\n getCustomPropertiesReqParams = () => ({ idKey: 'id' })\n } = templateConstants[templateType];\n\n const { idKey, ...rest } = getCustomPropertiesReqParams(source);\n const requestParameters = apiCallWrapper({\n ...rest,\n [idKey]: templateID,\n ...(theme === 'card' ? { theme } : {})\n });\n return axios.get(`/API/${(templateType === 'form-templates' ? 'form-template' : (aliasType || templateType))}${requestParameters}`);\n}\n\nexport async function getEnterpriseTemplate(id, theme = 'classic') {\n const formData = new FormData();\n\n formData.append('action', 'renderTemplateModalView');\n formData.append('id', id);\n formData.append('theme', theme);\n formData.append('mode-single', true);\n return axios.post('/form-templates/standalone/api', formData);\n}\n\nexport async function getCategory(filters, selectedCategory, language = ['en'], templateType, source) {\n const { theme = 'classic', sorting = 'popular' } = filters;\n const { aliasType, getCustomReqParams = () => {} } = templateConstants[templateType];\n const isFormTemplates = templateType === 'form-templates';\n const requestParameters = apiCallWrapper({\n ...getCustomReqParams(source),\n theme: isFormTemplates ? theme : undefined,\n sorting,\n filterBy: 'id',\n language: languageFlatter(language),\n id: selectedCategory._id || selectedCategory.id\n });\n return axios.get(`/API/${removeLastCharacter(aliasType || templateType)}/category${requestParameters}`);\n}\n\nexport async function fetchStarterPackTemplates(payload = {}) {\n const { templateType, featuredTemplates = false } = payload;\n if (templateType === 'sign-templates') {\n return axios.get('/API/sign/starter-pack-templates');\n }\n\n return axios.get(`/API/${templateType}/starter-pack-templates`, {\n // A/B Test: templateSuggestionModalOnMyAppsIII\n params: {\n ...(featuredTemplates && { featuredTemplates: '1' })\n }\n });\n}\n\nexport async function fetchTemplates(payload = {}) {\n const {\n source,\n filters,\n category,\n language,\n templateType,\n username = '',\n offsetParameter = 0,\n getOnlyMyTemplates = false,\n searchKeywordParameter = '',\n rpp = 24\n } = payload;\n const { sorting, theme } = filters;\n const isFormTemplates = templateType === 'form-templates';\n const { aliasType, getCustomReqParams = () => {} } = templateConstants[templateType];\n const requestParameters = apiCallWrapper({\n ...getCustomReqParams(source),\n theme: isFormTemplates ? theme : undefined,\n rpp,\n sorting: sorting,\n filterListing: 'all',\n start: offsetParameter,\n filterStatus: 'public',\n noESign: source === 'pdf-editor-new' ? '1' : '0',\n language: languageFlatter(language),\n username: getOnlyMyTemplates ? username : undefined,\n keyword: searchKeywordParameter !== '' ? searchKeywordParameter : undefined,\n category: categoryParamFlatter(category, getOnlyMyTemplates, searchKeywordParameter)\n });\n return axios.get(`/API/${aliasType || templateType}/filter${requestParameters}`);\n}\n\nexport async function fetchLanguages(templateType, source) {\n const { aliasType, getCustomReqParams = () => {} } = templateConstants[templateType];\n const type = aliasType || templateType;\n const requestParameters = apiCallWrapper({\n ...getCustomReqParams(source)\n });\n return axios.get(`/API/${type}/languages${requestParameters}`);\n}\n","import React from 'react';\nimport { t, translationRenderer } from '@jotforminc/translation';\nimport { capitalizeFirstLetter } from '@jotforminc/utils';\nimport { IconAngleLeft, IconCopyLine } from '@jotforminc/svg-icons';\nimport { getCategory } from './apiTemplates';\nimport { getDeviceType } from './getDeviceType';\nimport IconNoResult from './assets/icon-noresult.svg';\n\nexport const filterWrapper = (templateType, list, filters, index = 0) => {\n if (filters.length <= index) return list;\n const { property, value } = filters[index];\n return filterWrapper(templateType, list.filter(listItem => {\n if (templateType === 'form-templates' && listItem?.slug === 'salesforce-forms') return true;\n return listItem[property] === value;\n }), filters, index + 1);\n};\n\nexport const addOrRemoveMultipleEventListeners = (listeners, handlerFunction, addOrRemove, target) => {\n if (target === null) return;\n listeners.forEach(listener => {\n if (addOrRemove === 'add') {\n target.addEventListener(listener, handlerFunction);\n } else {\n target.removeEventListener(listener, handlerFunction);\n }\n });\n};\n\nexport const getInitialLanguage = isFormTemplates => {\n let result = 'en';\n const jfLang = window?.langCode;\n if (jfLang && jfLang !== '' && isFormTemplates) {\n result = jfLang.includes('-') ? jfLang.split('-')[0] : jfLang;\n }\n return result;\n};\n\nexport const prettyTemplatePageType = (templateType, isPlural = true) => {\n const [first, second] = templateType.split('-');\n const prettyName = `${capitalizeFirstLetter(first)} ${capitalizeFirstLetter(second)}`;\n return isPlural ? prettyName : prettyName.substring(0, prettyName.length - 1);\n};\n\nexport const categoryHasParent = category => category.parent !== '' && category.parent !== null && category.parent !== undefined;\n\nexport const getTemplateId = template => template?.id || template?._id;\n\nexport const getSubCategoryViewData = (selectedCategory, allCategories, setSubCategoryViewData, filters, language, templateType, source) => {\n if (!selectedCategory) return [];\n const subCategories = allCategories.filter(category => getTemplateId(category?.parent) === getTemplateId(selectedCategory));\n if (subCategories.length === 0) return [];\n setSubCategoryViewData({ subCategories: [], loading: true });\n return getCategory(filters, selectedCategory, language, templateType, source);\n};\n\nexport const getNoResultContent = (isNoUserTemplates = false, handleClearResult, searchResult, templatePageTypePrettyPlural) => {\n return (\n
    \n \n

    {t('Oops, No Result Found')}

    \n {\n isNoUserTemplates ? (\n

    {t('We could not find any user template for your current filtered language.')}

    \n ) : (\n <>\n

    \n {translationRenderer(`Sorry we could not find any results for [1[{keyword}]] in our ${templatePageTypePrettyPlural}.`)({\n renderer1: () => (\n \n {`\"${searchResult.searchedKeyword}\"`}\n \n )\n })}\n

    \n \n \n )\n }\n
    \n );\n};\n\nexport const getTemplateCountText = total => t('{categoryTotal} Templates').replace('{categoryTotal}', total);\n\nexport const getJfWizardWrapper = () => document.querySelector('.jfWizard');\n\nexport const scrollToTop = (isMobile, containerRef, isInline) => {\n const scrollPayload = { top: 0, behavior: 'smooth' };\n // eslint-disable-next-line no-nested-ternary\n const scrollElement = (isMobile || getDeviceType() !== 'desktop') ? containerRef.current : (isInline ? getJfWizardWrapper() : window);\n if (scrollElement !== null && scrollElement) {\n scrollElement.scrollTo(scrollPayload);\n }\n};\n\nconst handleClickBackToHomeButton = (handleSelectCategory, username) => {\n window.standaloneTemplatesLogger({\n actor: username,\n action: `${getDeviceType()}:back-homepage`\n });\n handleSelectCategory();\n};\n\nexport const categoryHeaderRenderer = props => {\n const {\n selectedCategory, handleSelectCategory, templatePageTypePrettyPlural, setActiveParentCategory,\n isAllCategoriesSelected, templatePageTypePretty, subCategoryViewData, activeParentCategory, username\n } = props;\n if (selectedCategory) {\n const totalCount = selectedCategory.total ? selectedCategory.total : subCategoryViewData.total;\n return (\n
    \n
    \n \n handleSelectCategory()} style={{ cursor: 'pointer' }}>\n {t(templatePageTypePrettyPlural)}\n \n {(categoryHasParent(selectedCategory) || activeParentCategory) && (\n {\n handleSelectCategory({ category: (activeParentCategory || selectedCategory.parent) });\n setActiveParentCategory();\n }}\n >\n {t((activeParentCategory?.name || selectedCategory.parent.name))}\n \n )}\n {t(selectedCategory.name)}\n
    \n

    {t(selectedCategory.pageTitle || selectedCategory.title || selectedCategory._title)}

    \n
    \n \n {getTemplateCountText(totalCount ? totalCount : '0')}\n
    \n
    \n );\n }\n if (isAllCategoriesSelected) {\n return (\n
    \n

    {t(`${templatePageTypePretty} Categories`)}

    \n
    {t(`You can find any ${templatePageTypePretty} Category that fits your needs.`)}
    \n
    \n );\n }\n return null;\n};\n\nexport const allCategoriesRenderer = (categories, handleSelectCategory, setActiveParentCategory) => (\n categories.map(category => {\n const {\n description, total, name, _id\n } = category;\n return (\n {\n handleSelectCategory({ category });\n setActiveParentCategory();\n }}\n >\n

    {t(name)}

    \n {t(description)}\n \n \n {getTemplateCountText(total ? total : 0)}\n \n
    \n );\n })\n);\n\nexport const isDevelopmentEnv = () => window.JOTFORM_ENV === 'DEVELOPMENT';\n\nexport const handleSetupActionLogger = (projectName = 'newWizard') => {\n const { JotFormActions } = global;\n window.standaloneTemplatesLogger = (typeof JotFormActions === 'function' && !isDevelopmentEnv()) ? JotFormActions(projectName).tick : () => {};\n};\n\nexport const isHomepage = (isMyTemplates, selectedCategory, isSearchView, isAllCategoriesSelected) => {\n if (isMyTemplates || selectedCategory || isSearchView || isAllCategoriesSelected) return false;\n return true;\n};\n\nexport const getUser = () => global?.user || global?.__user || {};\n\nexport const isGuest = () => {\n const user = getUser();\n return user?.account_type?.name === 'GUEST';\n};\n\nexport const getPreviewID = template => template.app_id || template.approval_id || template._id || template.id;\n\nexport const formatBigNumber = number => {\n if (number === 0) {\n return '0';\n }\n if (!number) {\n return '';\n }\n return number.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n};\n\nexport const getUsername = (usernameProp, user) => {\n if (typeof usernameProp === 'string' && usernameProp !== '') return usernameProp;\n if (typeof user === 'string' && user !== '') return user;\n\n if (typeof usernameProp === 'object' && usernameProp?.username) return usernameProp?.username;\n if (typeof user === 'object' && user?.username) return user?.username;\n\n return global?.user?.username || global?.__user?.username || '';\n};\n\nexport const getUrlSearchParamByKey = ({\n key,\n options,\n defaultValue = null\n}) => {\n try {\n const { location: { search = '' } } = global;\n const urlParams = new URLSearchParams(search);\n const result = urlParams.get(key);\n if (options && result && !options.includes(result)) return defaultValue;\n return result;\n } catch {\n return defaultValue;\n }\n};\n","/* eslint-disable react/button-has-type */\n/* eslint-disable max-len */\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n string, func, bool, object, arrayOf\n} from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { classNames } from '@jotforminc/utils';\nimport { Portal } from '@jotforminc/magnet';\n\nimport Button from '../Button';\nimport Loader from '../Loader';\nimport CloseButton from '../Button/CloseButton';\n\nimport texts from '../../core/texts';\nimport { stateClass } from '../../core/utils';\nimport { templateConstants } from '../StandaloneTemplates/templateConstants';\nimport { customModalConstants } from '../StandaloneTemplates/customModalConstants';\nimport { getPreviewID } from '../StandaloneTemplates/utils';\nimport ModalControls from '../StandaloneTemplates/components/PreviewModalContents/ModalControls';\n\nexport default class TemplateModal extends React.Component {\n constructor(props) {\n super(props);\n this.wizardModalBodyRef = React.createRef();\n\n this.state = {\n isCloningTemplate: false,\n modalContentLoading: true,\n additionalWrapperClasses: [],\n customHandleCloseFunction: null\n };\n\n this.modalWrapperRef = React.createRef();\n this.useTemplate = this.useTemplate.bind(this);\n this.handleClose = this.handleClose.bind(this);\n this.handleEscapePressed = this.handleEscapePressed.bind(this);\n this.setCloneTemplateLoading = this.setCloneTemplateLoading.bind(this);\n this.listenForEmbedFormLoader = this.listenForEmbedFormLoader.bind(this);\n this.hideFormLoaderIndicators = this.hideFormLoaderIndicators.bind(this);\n this.handlePrevNextTemplateHandler = this.handlePrevNextTemplateHandler.bind(this);\n\n this.isNativeMobileApp = global.navigator.userAgent.indexOf('JotForm Mobile') > -1 || global.navigator.userAgent.indexOf('JFCEMobile') > -1;\n }\n\n componentDidMount() {\n this.listenForEmbedFormLoader();\n window.addEventListener('keydown', this.handlePrevNextTemplateHandler);\n }\n\n componentDidUpdate() {\n const { isVisible } = this.props;\n\n stateClass(isVisible ? 'add' : 'remove', 'jfWizard--isModalVisible');\n }\n\n componentWillUnmount() {\n if (global.Embed && global.Embed.hideFormLoaderIndicators === this.hideFormLoaderIndicators) {\n delete global.Embed.hideFormLoaderIndicators;\n }\n window.removeEventListener('keydown', this.handlePrevNextTemplateHandler);\n }\n\n static getDerivedStateFromProps(props) {\n const { isVisible } = props;\n\n if (!isVisible) {\n return { modalContentLoading: true };\n }\n }\n\n handlePrevNextTemplateHandler(event) {\n const {\n standaloneTemplates = [],\n template: previewedTemplate,\n isVisible: previewModalVisible\n } = this.props;\n if (!previewModalVisible) return false;\n\n if (standaloneTemplates.length === 0) return;\n\n const { key } = event;\n const keyboardEvents = ['ArrowLeft', 'ArrowRight'];\n if (!keyboardEvents.includes(key)) return;\n\n const { parentTemplateID } = previewedTemplate;\n const previewTemplateID = parentTemplateID || getPreviewID(previewedTemplate);\n let currentTemplateOrder = standaloneTemplates.findIndex(template => previewTemplateID === getPreviewID(template));\n\n if (currentTemplateOrder === -1) {\n return;\n }\n\n const isArrowLeft = key === 'ArrowLeft';\n if ((currentTemplateOrder === 0 && isArrowLeft) || (currentTemplateOrder === standaloneTemplates.length - 1 && !isArrowLeft)) {\n currentTemplateOrder = isArrowLeft ? standaloneTemplates.length : -1;\n }\n\n this.setState({ modalContentLoading: true });\n\n const navigatedTemplate = standaloneTemplates[isArrowLeft ? currentTemplateOrder - 1 : currentTemplateOrder + 1];\n if (navigatedTemplate) {\n global.setSelectedTemplate(navigatedTemplate);\n }\n }\n\n handleClose() {\n const { customHandleCloseFunction } = this.state;\n if (customHandleCloseFunction !== null) {\n customHandleCloseFunction();\n return;\n }\n const { onClose, actionLogger } = this.props;\n\n this.setState({\n modalContentLoading: true\n });\n\n if (actionLogger) {\n actionLogger({\n action: 'useTemplateModalCloseClick',\n target: '.jfWizard-button.forModalClose'\n });\n }\n\n if (typeof onClose === 'function') {\n onClose();\n }\n this.setState({\n additionalWrapperClasses: []\n });\n }\n\n handleEscapePressed(e) {\n const { isVisible } = this.props;\n if (isVisible) {\n e.preventDefault();\n e.stopImmediatePropagation();\n this.handleClose();\n }\n }\n\n setCloneTemplateLoading(isCloningTemplate) {\n this.setState({\n isCloningTemplate\n });\n }\n\n useTemplate() {\n const {\n id, theme, actionLogger, onTemplateClone, username, template\n } = this.props;\n\n if (actionLogger) {\n actionLogger({\n action: 'useTemplateButtonClick',\n target: '.jfWizard-button.forUseTemplate'\n });\n }\n if (typeof window.standaloneTemplatesLogger === 'function') {\n window.standaloneTemplatesLogger({\n actor: username,\n target: id,\n action: `${window.innerWidth <= 780 ? 'mobile' : 'desktop'}:useTemplate`\n });\n }\n\n this.setCloneTemplateLoading(true);\n const { isNewStandalone, frameSrc, source } = this.props;\n const templateType = frameSrc.split('/')[1];\n\n let onTemplateCloneReqParams = { formID: id, theme };\n if (isNewStandalone) {\n const { getCloneTemplatePayload } = templateConstants[templateType];\n onTemplateCloneReqParams = getCloneTemplatePayload(\n {},\n { ...template, ...(templateType === 'form-templates' ? { theme } : {}) },\n source\n )?.payload;\n }\n onTemplateClone(onTemplateCloneReqParams)?.then(() => this.setCloneTemplateLoading(false));\n }\n\n listenForEmbedFormLoader() {\n if (typeof global.Embed !== 'object') {\n global.Embed = {};\n }\n\n global.Embed.hideFormLoaderIndicators = this.hideFormLoaderIndicators;\n }\n\n hideFormLoaderIndicators() {\n this.setState({\n modalContentLoading: false\n });\n }\n\n render() {\n const {\n title, previewURL, isVisible, frameSrc, similarTemplates, DOM, onTemplateClone,\n id = '', template = {}, onClose, categoryData = {}, username, theme, useMagnetPortal\n } = this.props;\n const { signable = false } = template;\n\n const {\n isCloningTemplate,\n modalContentLoading,\n additionalWrapperClasses\n } = this.state;\n\n // const isFormTemplates = isNewStandalone && frameSrc.includes('form-templates');\n\n const templateType = frameSrc.split('/')[1];\n const { customPreviewModalClass = '' } = templateConstants[templateType] || {};\n const { CustomPreviewModalBody } = customModalConstants[templateType] || {};\n const modalBodyRenderer = () => {\n const setAdditionalWrapperClasses = newClassList => this.setState({ additionalWrapperClasses: newClassList });\n const setCustomHandleCloseFunction = handleCloseFunc => this.setState({ customHandleCloseFunction: handleCloseFunc });\n const previewModalProps = {\n id,\n DOM,\n theme,\n previewURL,\n username,\n template,\n frameSrc,\n categoryData,\n onTemplateClone,\n isCloningTemplate,\n similarTemplates,\n modalContentLoading,\n closePreviewModal: onClose,\n setAdditionalWrapperClasses,\n setCustomHandleCloseFunction,\n useTemplate: this.useTemplate,\n modalBodyRef: this.wizardModalBodyRef,\n modalWrapperRef: this.modalWrapperRef,\n handlePrevNextTemplateHandler: this.handlePrevNextTemplateHandler,\n setModalContentLoading: stillLoading => this.setState({ modalContentLoading: stillLoading })\n };\n if (CustomPreviewModalBody) {\n if (Object.keys(template).length === 0) return null;\n return ;\n }\n return (\n <>\n \n \n {t('Form Preview Area')}\n \n \n );\n };\n\n const { PLATFORM_ENV = '' } = window;\n const modalWrapperRenderer = () => (\n \n
    \n
    \n
    \n
    \n {/* {isFormTemplates &&

    {t(texts.PREVIEW_FORM)}

    } */}\n { title &&

    {title}

    }\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n {isVisible && modalBodyRenderer()}\n
    \n {\n !this.isNativeMobileApp && (\n \n )\n }\n
    \n
    \n );\n return useMagnetPortal ? {modalWrapperRenderer()} : ReactDOM.createPortal(modalWrapperRenderer(), global.document.body);\n }\n}\n\nTemplateModal.propTypes = {\n id: string,\n DOM: string,\n title: string,\n source: string,\n frameSrc: string,\n username: string,\n previewURL: string,\n theme: string,\n onClose: func,\n isVisible: bool,\n template: object,\n categoryData: object,\n similarTemplates: arrayOf(object),\n actionLogger: func,\n onTemplateClone: func,\n isNewStandalone: bool,\n standaloneTemplates: arrayOf(object),\n useMagnetPortal: bool\n};\n\nTemplateModal.defaultProps = {\n DOM: '',\n id: null,\n source: '',\n title: null,\n username: '',\n template: undefined,\n categoryData: undefined,\n similarTemplates: [],\n frameSrc: '',\n isNewStandalone: false,\n previewURL: null,\n theme: null,\n onClose: f => f,\n isVisible: false,\n actionLogger: null,\n standaloneTemplates: [],\n onTemplateClone: f => f,\n useMagnetPortal: false\n};\n","import axios from 'axios';\n\nexport async function logSearchAction(username, keyword, project, source = '') {\n const formData = new FormData();\n\n formData.append('project', project);\n formData.append('username', username);\n formData.append('term', keyword);\n formData.append('location', source !== '' ? source : project);\n\n return axios.post('/API/search', formData);\n}\n","/* eslint-disable max-len */\nimport Styled from 'styled-components';\n\nconst greenColor = '#78BB07';\nconst greenColorDarken = '#6da70c';\n\nexport const ScSearch = Styled.div`\n width: 100%;\n height: auto;\n position: relative;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n padding: 0;\n transition: all 0.2s linear;\n\n @media screen and (max-width: 768px) {\n & {\n background: #fff;\n padding: 10px 20px 20px;\n width: calc(100% + 40px);\n margin-inline-start: -20px;\n }\n }\n .searchWrapper {\n position: relative;\n width: calc(100% - 72px);\n @media screen and (max-width: 768px) {\n width: 100%;\n }\n .input {\n width: 100%;\n display: inline-block;\n vertical-align: top;\n outline: none;\n font-weight: 400;\n font-size: 20px;\n line-height: 46px;\n height: 48px;\n padding: 0 16px;\n display: flex;\n position: relative;\n border: 1px solid transparent;\n border-radius: 4px;\n transition: all 0.2s;\n -webkit-appearance: none;\n background-color: #E3E5F5;\n color: #6F76A7;\n @media screen and (max-width: 768px) {\n height: 36px;\n font-size: 16px;\n padding: 0 12px 0 8px;\n line-height: 30px;\n } \n &:-webkit-autofill,\n &:-webkit-autofill:hover {\n box-shadow: 0 0 0 30px #e6ebf2 inset !important;\n }\n\n &:-webkit-autofill:focus,\n &:-webkit-autofill:active {\n box-shadow: 0 0 0 30px #fff inset !important;\n }\n\n &:-webkit-autofill {\n -webkit-text-fill-color: #2c3243 !important;\n }\n\n &::-webkit-autofill {\n box-shadow: none;\n }\n\n &::placeholder {\n color: #6F76A7;\n font-weight: 400;\n }\n\n &:-ms-input-placeholder {\n color: #6F76A7 !important;\n font-weight: 400;\n }\n\n &:-webkit-search-cancel-button {\n -webkit-appearance: none;\n content: url(\"data:image/svg+xml,%3Csvg width='12' height='12' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-518-18H26c2.2091 0 4 1.7909 4 4v40c0 2.2091-1.7909 4-4 4h-544c-2.2091 0-4-1.7909-4-4v-40c0-2.2091 1.7909-4 4-4z' fill='none' fill-rule='nonzero'/%3E%3Cpath d='M6 7.4142l-4.2929 4.293c-.3905.3904-1.0237.3904-1.4142 0-.3905-.3906-.3905-1.0238 0-1.4143L4.5858 6 .2928 1.7071C-.0975 1.3166-.0975.6834.2929.293c.3906-.3905 1.0238-.3905 1.4143 0L6 4.5858l4.2929-4.293c.3905-.3904 1.0237-.3904 1.4142 0 .3905.3906.3905 1.0238 0 1.4143L7.4142 6l4.293 4.2929c.3904.3905.3904 1.0237 0 1.4142-.3906.3905-1.0238.3905-1.4143 0L6 7.4142z' fill='%23c3cad8'/%3E%3C/g%3E%3C/svg%3E\");\n cursor: pointer;\n }\n\n &:focus {\n outline: none;\n border-color: $blueColor;\n box-shadow: 0px 0px 0px 3px #bdcefb;\n background-color: #FFF;\n }\n\n &:focus,\n &:active {\n background-color: #ffffff;\n }\n\n &::-ms-clear {\n display: none;\n }\n }\n }\n\n .go {\n background-color: ${greenColor};\n border: none;\n border-radius: 4px;\n margin-inline-start: 8px;\n height: 48px;\n flex: 0 0 64px;\n max-width: 64px;\n transition: all 0.2s;\n border: 1px solid transparent;\n color: #fff;\n display: flex;\n justify-content: center;\n align-items: center;\n &:hover {\n background-color: ${greenColorDarken};\n }\n @media screen and (max-width: 768px) {\n height: 36px;\n flex: 0 0 44px;\n max-width: 44px;\n background-size: 12px;\n margin-left: 4px;\n } \n }\n &.forSidebar {\n margin-bottom: 20px;\n .searchWrapper {\n width: calc(100% - 42px);\n .input {\n font-size: 12px;\n padding: 0 12px 0 8px;\n line-height: 30px;\n height: 32px; \n }\n }\n .go {\n height: 32px;\n flex: 0 0 40px;\n max-width: 40px;\n background-size: 12px;\n margin-left: 4px;\n }\n @media screen and (max-width: 768px) {\n display: none;\n padding: 10px 0 0;\n margin-inline-start: 0;\n width: 100%;\n }\n }\n &.showMobile {\n display: none;\n @media screen and (max-width: 768px) {\n & {\n display: flex;\n }\n }\n }\n \n &.isSticky {\n position: sticky;\n top: -17px;\n z-index: 5;\n box-shadow: rgba(0, 0, 0, 0.5) 0 16px 16px -16px;\n padding: 10px 20px;\n\n .searchWrapper {\n width: calc(100% - 52px);\n\n .input {\n height: 36px;\n font-size: 16px;\n }\n }\n\n .go {\n height: 36px;\n flex: 0 0 44px;\n max-width: 44px;\n background-size: 16px;\n }\n }\n`;\n","/* eslint-disable react/prop-types */\nimport React, { useEffect } from 'react';\nimport { t } from '@jotforminc/translation';\nimport { sanitize } from 'dompurify';\nimport { IconMagnifyingGlass } from '@jotforminc/svg-icons';\nimport { classNameGenerator } from '@jotforminc/utils';\nimport { getDeviceType } from '../getDeviceType';\n\nimport { isHomepage } from '../utils';\nimport { logSearchAction } from '../api';\nimport { ScSearch } from './ScSearch';\n\nconst Search = ({ props, sidebarSearch }) => {\n const {\n getTemplates, searchKeyword, searchResult, setSearchResult, isMyTemplates, username,\n setSelectedCategory, setSearchKeyword, stickySearchWrapper, setTemplates, setStandaloneTemplates, templateType,\n selectedCategory, setIsAllCategoriesSelected, setIsMyTemplates, isAllCategoriesSelected, source\n } = props;\n\n const handleSearch = () => {\n const isEmpty = searchKeyword === '';\n setTemplates([]);\n setStandaloneTemplates([]);\n if (!isEmpty) logSearchAction(username, searchKeyword, templateType, source);\n setSearchResult({ searchView: !isEmpty, searchedKeyword: searchKeyword });\n getTemplates({ searchKeywordParameter: searchKeyword });\n setSelectedCategory();\n setIsMyTemplates(false);\n setIsAllCategoriesSelected(false);\n window.standaloneTemplatesLogger({\n actor: username,\n target: searchKeyword,\n action: `${getDeviceType()}:search`\n });\n };\n\n useEffect(() => {\n window.handleSearch = handleSearch;\n return () => {\n window.handleSearch = undefined;\n };\n }, [searchKeyword]);\n\n const handleFocusSearch = () => {\n if (global?.standaloneTemplatesLogger) {\n global?.standaloneTemplatesLogger({\n actor: username,\n action: `${getDeviceType()}:searchBox-click`\n });\n }\n };\n\n return (\n \n <>\n
    \n setSearchKeyword(sanitize(e.target.value))}\n onKeyDown={e => e.key === 'Enter' && handleSearch()}\n />\n
    \n \n \n \n );\n};\n\nexport default Search;\n","/* eslint-disable react/prop-types */\n/* eslint-disable react/jsx-first-prop-new-line */\n/* eslint-disable react/jsx-max-props-per-line */\nimport React from 'react';\n\nconst ClassicFormIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default ClassicFormIcon;\n","/* eslint-disable react/prop-types */\n/* eslint-disable react/jsx-first-prop-new-line */\n/* eslint-disable react/jsx-max-props-per-line */\nimport React from 'react';\n\nconst CardFormIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default CardFormIcon;\n","/* eslint-disable max-len */\nimport Styled from 'styled-components';\n\nexport const ScThemeSelector = Styled.div`\n ul {\n display: flex;\n flex-direction: row;\n align-items: center;\n list-style: none;\n margin: 0;\n padding: 0;\n li {\n &:first-child {\n margin-inline-end: 10px;\n }\n }\n button {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n text-decoration: none;\n border: 0;\n outline: none;\n background-color: transparent;\n .themeIcon {\n width: 64px;\n height: 64px;\n margin: 0 0 8px;\n background: #E3E5F5;\n border-radius: 4px;\n transition: border .2s ease-in-out;\n border: solid 2px #E3E5F5;\n position: relative;\n overflow: hidden;\n svg {\n display: block;\n position: absolute;\n top: -2px;\n left: -2px;\n width: 64px;\n height: 64px;\n transform-origin: center;\n transition: transform .1s ease-out;\n .anim {\n transition-duration: .1s;\n transition-timing-function: ease-out;\n }\n }\n }\n span {\n display: block;\n text-align: center;\n text-transform: uppercase;\n color: #091141;\n width: 64px;\n font-size: 12px;\n line-height: 16px;\n transition: color .2s ease-in-out;\n }\n &:hover {\n .themeIcon {\n border: solid 2px #FFB629;\n }\n } \n &:hover,\n &.themeActive {\n .themeIcon {\n border: solid 2px #FF6100;\n svg {\n transform: scale(1.25);\n }\n }\n span {\n color: #FF6100;\n }\n }\n &.themeClassic {\n .anim {\n transition: opacity, width;\n }\n .blue {\n transition-delay: 0, .1s;\n }\n .orange {\n transition-delay: .1s, .2s;\n }\n .yellow {\n transition-delay: .2s, .3s;\n }\n &:hover .anim,\n &.themeActive .anim {\n opacity: 1;\n width: 16px;\n }\n }\n &.themeCard {\n .blue {\n transition-delay: 0, .1s;\n transition: opacity, width;\n }\n .orangeTop {\n transition-delay: .1s, .2s;\n transition: opacity, width;\n }\n .orangeBottom {\n transition-delay: .2s, .3s, .3s;\n transition: opacity, width, transform;\n }\n .yellow {\n transition-delay: .3s, .4s, .4s;\n transition: opacity, width, transform;\n }\n &:hover,\n &.themeActive {\n .blue, .orangeTop {\n opacity: 1;\n width: 14px;\n }\n .orangeBottom, .yellow {\n opacity: 1;\n width: 14px;\n transform: translateX(-11px);\n }\n }\n }\n }\n }\n`;\n","import React from 'react';\nimport { func, object, string } from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { capitalizeFirstLetter } from '@jotforminc/utils';\n\nimport { getDeviceType } from '../getDeviceType';\nimport ClassicFormIcon from '../assets/ClassicFormIcon';\nimport CardFormIcon from '../assets/CardFormIcon';\nimport { ScThemeSelector } from './ScThemeSelector';\n\nconst ThemeSelector = ({ filters, setFilters, username }) => {\n const { theme } = filters;\n const handleSelectTheme = newTheme => {\n if (newTheme === theme) return;\n setFilters({\n ...filters,\n theme: newTheme\n });\n window.standaloneTemplatesLogger({\n actor: username,\n action: `${getDeviceType()}:filterTheme`,\n target: newTheme\n });\n };\n\n const themeButtons = [\n { buttonText: 'classic', icon: ClassicFormIcon, buttonClass: 'themeClassic' },\n { buttonText: 'card', icon: CardFormIcon, buttonClass: 'themeCard' }\n ];\n\n return (\n \n
      \n {themeButtons.map(button => (\n
    • \n handleSelectTheme(button.buttonText)}\n type=\"button\"\n >\n
      \n {button.icon()}\n
      \n {t(capitalizeFirstLetter(button.buttonText))}\n \n
    • \n ))}\n
    \n
    \n );\n};\n\nThemeSelector.defaultProps = {\n username: ''\n};\n\nThemeSelector.propTypes = {\n username: string,\n filters: object.isRequired,\n setFilters: func.isRequired\n};\n\nexport default ThemeSelector;\n","export const Languages = [\n { key: 'aa', value: 'Afar' },\n { key: 'ab', value: 'Abkhazian' },\n { key: 'ae', value: 'Avestan' },\n { key: 'af', value: 'Afrikaans' },\n { key: 'ak', value: 'Akan' },\n { key: 'am', value: 'Amharic' },\n { key: 'an', value: 'Aragonese' },\n { key: 'ar', value: 'Arabic' },\n { key: 'as', value: 'Assamese' },\n { key: 'av', value: 'Avaric' },\n { key: 'ay', value: 'Aymara' },\n { key: 'az', value: 'Azerbaijani' },\n { key: 'ba', value: 'Bashkir' },\n { key: 'be', value: 'Belarusian' },\n { key: 'bg', value: 'Bulgarian' },\n { key: 'bh', value: 'Bihari' },\n { key: 'bi', value: 'Bislama' },\n { key: 'bm', value: 'Bambara' },\n { key: 'bn', value: 'Bengali' },\n { key: 'bo', value: 'Tibetan' },\n { key: 'br', value: 'Breton' },\n { key: 'bs', value: 'Bosnian' },\n { key: 'ca', value: 'Catalan' },\n { key: 'ce', value: 'Chechen' },\n { key: 'ch', value: 'Chamorro' },\n { key: 'co', value: 'Corsican' },\n { key: 'cr', value: 'Cree' },\n { key: 'cs', value: 'Czech' },\n { key: 'cu', value: 'Church Slavic' },\n { key: 'cv', value: 'Chuvash' },\n { key: 'cy', value: 'Welsh' },\n { key: 'da', value: 'Danish' },\n { key: 'de', value: 'German' },\n { key: 'dv', value: 'Divehi' },\n { key: 'dz', value: 'Dzongkha' },\n { key: 'ee', value: 'Ewe' },\n { key: 'el', value: 'Greek' },\n { key: 'en', value: 'English' },\n { key: 'eo', value: 'Esperanto' },\n { key: 'es', value: 'Spanish' },\n { key: 'et', value: 'Estonian' },\n { key: 'eu', value: 'Basque' },\n { key: 'fa', value: 'Persian' },\n { key: 'ff', value: 'Fulah' },\n { key: 'fi', value: 'Finnish' },\n { key: 'fj', value: 'Fijian' },\n { key: 'fo', value: 'Faroese' },\n { key: 'fr', value: 'Français' },\n { key: 'fy', value: 'Western Frisian' },\n { key: 'ga', value: 'Irish' },\n { key: 'gd', value: 'Scottish Gaelic' },\n { key: 'gl', value: 'Galician' },\n { key: 'gn', value: 'Guarani' },\n { key: 'gu', value: 'Gujarati' },\n { key: 'gv', value: 'Manx' },\n { key: 'ha', value: 'Hausa' },\n { key: 'he', value: 'Hebrew' },\n { key: 'hi', value: 'Hindi' },\n { key: 'ho', value: 'Hiri Motu' },\n { key: 'hr', value: 'Croatian' },\n { key: 'ht', value: 'Haitian' },\n { key: 'hu', value: 'Hungarian' },\n { key: 'hy', value: 'Armenian' },\n { key: 'hz', value: 'Herero' },\n { key: 'ia', value: 'Interlingua' },\n { key: 'id', value: 'Indonesian' },\n { key: 'ie', value: 'Interlingue' },\n { key: 'ig', value: 'Igbo' },\n { key: 'ii', value: 'Sichuan Yi' },\n { key: 'ik', value: 'Inupiaq' },\n { key: 'io', value: 'Ido' },\n { key: 'is', value: 'Icelandic' },\n { key: 'it', value: 'Italian' },\n { key: 'iu', value: 'Inuktitut' },\n { key: 'ja', value: 'Japanese' },\n { key: 'jv', value: 'Javanese' },\n { key: 'ka', value: 'Georgian' },\n { key: 'kg', value: 'Kongo' },\n { key: 'ki', value: 'Kikuyu' },\n { key: 'kj', value: 'Kwanyama' },\n { key: 'kk', value: 'Kazakh' },\n { key: 'kl', value: 'Kalaallisut' },\n { key: 'km', value: 'Khmer' },\n { key: 'kn', value: 'Kannada' },\n { key: 'ko', value: 'Korean' },\n { key: 'kr', value: 'Kanuri' },\n { key: 'ks', value: 'Kashmiri' },\n { key: 'ku', value: 'Kurdish' },\n { key: 'kv', value: 'Komi' },\n { key: 'kw', value: 'Cornish' },\n { key: 'ky', value: 'Kirghiz' },\n { key: 'la', value: 'Latin' },\n { key: 'lb', value: 'Luxembourgish' },\n { key: 'lg', value: 'Ganda' },\n { key: 'li', value: 'Limburgish' },\n { key: 'ln', value: 'Lingala' },\n { key: 'lo', value: 'Lao' },\n { key: 'lt', value: 'Lithuanian' },\n { key: 'lu', value: 'Luba-Katanga' },\n { key: 'lv', value: 'Latvian' },\n { key: 'mg', value: 'Malagasy' },\n { key: 'mh', value: 'Marshallese' },\n { key: 'mi', value: 'Maori' },\n { key: 'mk', value: 'Macedonian' },\n { key: 'ml', value: 'Malayalam' },\n { key: 'mn', value: 'Mongolian' },\n { key: 'mr', value: 'Marathi' },\n { key: 'ms', value: 'Malay' },\n { key: 'mt', value: 'Maltese' },\n { key: 'my', value: 'Burmese' },\n { key: 'na', value: 'Nauru' },\n { key: 'nb', value: 'Norwegian Bokmal' },\n { key: 'nd', value: 'North Ndebele' },\n { key: 'ne', value: 'Nepali' },\n { key: 'ng', value: 'Ndonga' },\n { key: 'nl', value: 'Nederlands' },\n { key: 'nn', value: 'Norwegian Nynorsk' },\n { key: 'no', value: 'Norwegian' },\n { key: 'nr', value: 'South Ndebele' },\n { key: 'nv', value: 'Navajo' },\n { key: 'ny', value: 'Chichewa' },\n { key: 'oc', value: 'Occitan' },\n { key: 'oj', value: 'Ojibwa' },\n { key: 'om', value: 'Oromo' },\n { key: 'or', value: 'Oriya' },\n { key: 'os', value: 'Ossetian' },\n { key: 'pa', value: 'Panjabi' },\n { key: 'pi', value: 'Pali' },\n { key: 'pl', value: 'Polish' },\n { key: 'ps', value: 'Pashto' },\n { key: 'pt', value: 'Portuguese' },\n { key: 'qu', value: 'Quechua' },\n { key: 'rm', value: 'Raeto-Romance' },\n { key: 'rn', value: 'Kirundi' },\n { key: 'ro', value: 'Română' },\n { key: 'ru', value: 'Russian' },\n { key: 'rw', value: 'Kinyarwanda' },\n { key: 'sa', value: 'Sanskrit' },\n { key: 'sc', value: 'Sardinian' },\n { key: 'sd', value: 'Sindhi' },\n { key: 'se', value: 'Northern Sami' },\n { key: 'sg', value: 'Sango' },\n { key: 'si', value: 'Sinhala' },\n { key: 'sk', value: 'Slovak' },\n { key: 'sl', value: 'Slovenian' },\n { key: 'sm', value: 'Samoan' },\n { key: 'sn', value: 'Shona' },\n { key: 'so', value: 'Somali' },\n { key: 'sq', value: 'Albanian' },\n { key: 'sr', value: 'Serbian' },\n { key: 'ss', value: 'Swati' },\n { key: 'st', value: 'Southern Sotho' },\n { key: 'su', value: 'Sundanese' },\n { key: 'sv', value: 'Swedish' },\n { key: 'sw', value: 'Swahili' },\n { key: 'ta', value: 'Tamil' },\n { key: 'te', value: 'Telugu' },\n { key: 'tg', value: 'Tajik' },\n { key: 'th', value: 'Thai' },\n { key: 'ti', value: 'Tigrinya' },\n { key: 'tk', value: 'Turkmen' },\n { key: 'tl', value: 'Filipino' },\n { key: 'tn', value: 'Tswana' },\n { key: 'to', value: 'Tonga' },\n { key: 'tr', value: 'Turkish' },\n { key: 'ts', value: 'Tsonga' },\n { key: 'tt', value: 'Tatar' },\n { key: 'tw', value: 'Twi' },\n { key: 'ty', value: 'Tahitian' },\n { key: 'ug', value: 'Uighur' },\n { key: 'uk', value: 'Ukrainian' },\n { key: 'ur', value: 'Urdu' },\n { key: 'uz', value: 'Uzbek' },\n { key: 've', value: 'Venda' },\n { key: 'vi', value: 'Vietnamese' },\n { key: 'vo', value: 'Volapuk' },\n { key: 'wa', value: 'Walloon' },\n { key: 'wo', value: 'Wolof' },\n { key: 'xh', value: 'Xhosa' },\n { key: 'yi', value: 'Yiddish' },\n { key: 'yo', value: 'Yoruba' },\n { key: 'za', value: 'Zhuang' },\n { key: 'zh', value: 'Chinese' },\n { key: 'zu', value: 'Zulu' }\n];\n","/* eslint-disable max-len */\nimport Styled from 'styled-components';\n\nconst blueColor = '#0099FF';\nconst navyColor = '#091141';\n\nexport const ScFilterWrapper = Styled.div`\n position: relative;\n display: flex;\n width: 100%;\n flex-wrap: wrap;\n margin: 2rem 0 1rem;\n\n .cta {\n list-style: none;\n margin: 0;\n padding: 3px 8px;\n display: inline-block;\n vertical-align: middle;\n font-weight: 600;\n white-space: nowrap;\n font-size: 16px;\n color: ${navyColor};\n letter-spacing: 0;\n line-height: 32px;\n width: 100%;\n border-radius: 4px;\n position: relative;\n border: none;\n background: #E3E5F5;\n transition: all .2s ease-in;\n cursor: pointer;\n display: flex;\n\n &:hover {\n background: #E7E8EC;\n }\n\n span {\n vertical-align: middle;\n white-space: normal;\n line-height: 1.25;\n padding: 10px 0;\n }\n\n &:before {\n content: \"\";\n background-size: 100% 100%;\n position: relative;\n display: inline-block;\n vertical-align: middle;\n width: 18px;\n height: 18px;\n margin: auto 8px;\n background-image: url(\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxNiAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDEpIiBmaWxsPSIjMTEyMjRBIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHk9IjEiIHdpZHRoPSIxNiIgaGVpZ2h0PSIyIiByeD0iMSIvPjxyZWN0IHk9IjciIHdpZHRoPSIxNiIgaGVpZ2h0PSIyIiByeD0iMSIvPjxyZWN0IHk9IjEzIiB3aWR0aD0iMTYiIGhlaWdodD0iMiIgcng9IjEiLz48Y2lyY2xlIHN0cm9rZT0iI0U3RThFQyIgY3g9IjUiIGN5PSIyIiByPSIyLjUiLz48Y2lyY2xlIHN0cm9rZT0iI0U3RThFQyIgY3g9IjExIiBjeT0iOCIgcj0iMi41Ii8+PGNpcmNsZSBzdHJva2U9IiNFN0U4RUMiIGN4PSI1IiBjeT0iMTQiIHI9IjIuNSIvPjwvZz48L3N2Zz4=\");\n background-repeat: no-repeat;\n }\n }\n .sub {\n position: absolute;\n z-index: 5000;\n display: none;\n top: 45px;\n\n &.active {\n display: block;\n max-width: 291px;\n width: 100%;\n margin: 4px 0;\n padding: 0;\n }\n\n .close {\n cursor: pointer;\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 5010;\n padding: 0;\n width: 16px;\n height: 16px;\n display: block;\n border: none;\n text-indent: -99999px;\n background-repeat: no-repeat;\n background-size: 16px;\n background-position: center;\n background-color: transparent;\n background-image: url(\"data:image/svg+xml, %3Csvg width='16px' height='16px' viewBox='0 0 16 16' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg transform='translate(-305.000000, -148.000000)' fill='%23B0BEC5' fill-rule='nonzero'%3E%3Cg transform='translate(40.000000, 96.000000)'%3E%3Cpath d='M273,58.5857864 L279.292893,52.2928932 C279.683418,51.9023689 280.316582,51.9023689 280.707107,52.2928932 C281.097631,52.6834175 281.097631,53.3165825 280.707107,53.7071068 L274.414214,60 L280.707107,66.2928932 C281.097631,66.6834175 281.097631,67.3165825 280.707107,67.7071068 C280.316582,68.0976311 279.683418,68.0976311 279.292893,67.7071068 L273,61.4142136 L266.707107,67.7071068 C266.316582,68.0976311 265.683418,68.0976311 265.292893,67.7071068 C264.902369,67.3165825 264.902369,66.6834175 265.292893,66.2928932 L271.585786,60 L265.292893,53.7071068 C264.902369,53.3165825 264.902369,52.6834175 265.292893,52.2928932 C265.683418,51.9023689 266.316582,51.9023689 266.707107,52.2928932 L273,58.5857864 Z'%3E%3C/path%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n html[dir=\"rtl\"] & {\n right: auto;\n left: 8px;\n }\n }\n }\n`;\nexport const ScFilterMenuBox = Styled.ul`\n list-style: none;\n margin: 0;\n text-align: left;\n padding: 16px 8px;\n background: #292A3D;\n border-radius: 4px;\n\n &:before {\n content: \"\";\n display: inline-block;\n position: absolute;\n height: 0;\n width: 0;\n left: 12px;\n border-left: 12px solid transparent;\n border-right: 12px solid transparent;\n border-bottom: 12px solid #292A3D;\n top: -8px;\n\n html[dir=\"rtl\"] & {\n left: inherit;\n right: 12px;\n }\n }\n\n li {\n width: 100%;\n position: relative;\n margin-bottom: 10px;\n &:last-child {\n margin-botttom: 0;\n }\n .info {\n padding: 0 8px;\n display: block;\n text-decoration: none;\n font-weight: 600;\n transition: color .15s ease;\n position: relative;\n font-size: 14px;\n color: #FFFFFF;\n letter-spacing: 0;\n line-height: 32px;\n\n html[dir=\"rtl\"] & {\n text-align: right;\n }\n }\n .dropdown-wrapper {\n position: relative;\n .clear {\n position: absolute;\n z-index: 1;\n right: 24px;\n width: 24px;\n height: 100%;\n border: 0;\n outline: none;\n cursor: pointer;\n background-image: url(\"data:image/svg+xml,%3Csvg width='266' height='264' viewBox='0 0 266 264' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M154.822 131.762L260.232 26.3524C266.822 19.7626 266.822 9.88335 260.232 4.94235C253.643 -1.64745 243.763 -1.64745 238.822 4.94235L131.762 110.352L26.3524 4.94235C19.7626 0.00094986 9.88335 0.000957012 4.94235 6.59076C0.00094986 13.1806 0.00094986 21.4148 4.94235 26.3568L110.352 131.767L4.94235 237.177C-1.64745 243.767 -1.64745 253.646 4.94235 258.587C11.5321 265.177 21.4114 265.177 26.3524 258.587L131.762 153.177L237.172 258.587C243.762 265.177 253.641 265.177 258.582 258.587C265.172 251.997 265.172 242.118 258.582 237.177L154.822 131.762Z' fill='black'/%3E%3C/svg%3E%0A\");\n background-repeat: no-repeat;\n background-size: 10px;\n background-position: center;\n html[dir=\"rtl\"] & {\n right: auto;\n left: 24px;\n }\n }\n &:after {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%278%27 height=%275%27%3E%3Cpath fill=%27%23141E46%27 fill-rule=%27evenodd%27 stroke=%27%23141E46%27 d=%27M6.7.5L4 3.1 1.3.5h-.2v.3a68600 68600 0 0 0 3 2.7L7 .8V.5h-.2z%27/%3E%3C/svg%3E\");\n width: 2em;\n height: calc(100% - 2px);\n position: absolute;\n pointer-events: none;\n cursor: pointer;\n right: 1px;\n top: 1px;\n content: \"\";\n background-repeat: no-repeat;\n background-position: 50%;\n background-color: #fff;\n border-radius: 50%;\n &:after {\n right: auto;\n left: 0;\n } \n } \n select {\n width: 100%;\n font-size: 16px;\n line-height: 1.55;\n color: ${navyColor};\n background-color: #fff;\n border: 1px solid #d5ddf9;\n border-radius: 4px;\n height: auto;\n padding: 4px 5px 4px 9px;\n appearance: none;\n }\n }\n .jfSelect-input {\n &.filterDropdown {\n background-color: #fff;\n &:after {\n display: none;\n }\n html[dir=\"rtl\"] & {\n padding-right: auto;\n padding-left: 2.25em;\n .jfSelect-inputText {\n text-align: right;\n }\n }\n .jfSelect-tag {\n width: calc(100% - 20px);\n margin: 0;\n padding: 0 5px;\n background: transparent;\n color: ${navyColor};\n html[dir=\"rtl\"] & {\n text-align: right;\n padding-right: 20px;\n } \n .jfSelect-removeButton {\n background: transparent;\n border: 0;\n outline: none;\n svg path {\n fill: ${navyColor};\n }\n }\n }\n }\n }\n .button-group {\n position: relative;\n display: flex;\n flex: 1;\n vertical-align: middle;\n\n .filter-button {\n font-size: initial;\n text-align: left;\n display: inline-block;\n box-sizing: border-box;\n flex: 1;\n font-size: 14px;\n letter-spacing: 0;\n line-height: 32px;\n padding: 0 6px;\n border: none;\n white-space: nowrap;\n background-color: #fff;\n color: ${navyColor};\n\n &.active {\n background-color: ${blueColor};\n color: #fff;\n }\n\n &:first-child {\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n\n html[dir=\"rtl\"] & {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n }\n }\n\n &:last-child {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n\n html[dir=\"rtl\"] & {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n }\n }\n\n }\n\n }\n\n }\n`;\n","import React, { useState, useEffect, useRef } from 'react';\nimport {\n object, func, bool, string, arrayOf\n} from 'prop-types';\nimport Dropdown from '@jotforminc/dropdown';\nimport { t } from '@jotforminc/translation';\nimport { capitalizeFirstLetter } from '@jotforminc/utils';\nimport { Languages } from '@jotforminc/constants';\n\nimport { fetchLanguages } from '../apiTemplates';\nimport { getDeviceType } from '../getDeviceType';\nimport { ScFilterWrapper, ScFilterMenuBox } from './ScTemplateFilters';\nimport { templateConstants } from '../templateConstants';\n\nconst TemplateFilters = ({\n filters, updateFilter, isMobile, language, setLanguage, templateType, username, source\n}) => {\n const deviceType = getDeviceType();\n const containerRef = useRef();\n const [filterShow, setFilterShow] = useState(false);\n const [languages, setLanguages] = useState([]);\n\n const { sorting } = filters;\n\n const handleClickOutside = event => {\n const clickedTarget = event.target;\n if (!filterShow) return;\n const isSelfClick = containerRef?.current?.contains(clickedTarget);\n if (isSelfClick) return;\n const filterDropdown = document.querySelector('.jfSelect-wrapper.filterDropdown');\n if (filterDropdown !== null && filterDropdown.contains(clickedTarget)) return;\n setFilterShow(false);\n };\n\n useEffect(() => {\n document.addEventListener('mousedown', handleClickOutside, true);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside, true);\n };\n }, [filterShow]);\n\n useEffect(() => {\n fetchLanguages(templateType, source)\n .then(res => {\n try {\n const { data: { content } } = res;\n const formattedLanugages = content.map(lang => {\n const templateLang = lang._language || lang.language;\n if (Languages && Languages.length > 0) {\n const languageObject = Languages.find(l => templateLang === l.key);\n if (languageObject !== undefined) return { value: templateLang, text: languageObject.value };\n return undefined;\n }\n return { value: templateLang, text: templateLang };\n });\n setLanguages(formattedLanugages.filter(lang => lang !== undefined).sort((a, b) => (a.text > b.text ? 1 : -1)));\n } catch (e) {\n setLanguages([]);\n }\n })\n .catch(() => {\n setLanguages([]);\n });\n }, []);\n\n const handleChangeFilter = (filterKey, newValue) => {\n if (filters[filterKey] === newValue) return;\n updateFilter({\n ...filters,\n [filterKey]: newValue\n });\n if (isMobile) setFilterShow(false);\n };\n\n const handleRemoveLanguage = () => {\n setLanguage([]);\n window.standaloneTemplatesLogger({\n actor: username,\n target: 'all-languages',\n action: `${getDeviceType()}:languageSelect`\n });\n setFilterShow(false);\n };\n\n const handleSelectLanguage = selected => {\n setLanguage([selected]);\n window.standaloneTemplatesLogger({\n actor: username,\n target: selected,\n action: `${getDeviceType()}:languageSelect`\n });\n setFilterShow(false);\n };\n\n const handleChangeSorting = option => {\n window.standaloneTemplatesLogger({\n actor: username,\n target: option,\n action: `${getDeviceType()}:sorting`\n });\n handleChangeFilter('sorting', option);\n };\n\n return (\n \n
    setFilterShow(true)}>{t('Filter & Sort')}
    \n
    \n \n \n
  • \n \n
    \n {deviceType === 'desktop' ? (\n handleSelectLanguage(selected)}\n />\n ) : (\n handleSelectLanguage(selected.target.value)}\n >\n {[{ text: t('Select Language'), value: '' }, ...languages].map(lang => (\n \n ))}\n \n )}\n { language.length > 0 && (\n \n )}\n
    \n
  • \n
  • \n \n
    \n {(templateConstants[templateType].sortingOptions || []).map(option => (\n handleChangeSorting(option)}\n className={`filter-button${sorting === option ? ' active' : ''}`}\n >\n {t(capitalizeFirstLetter(option))}\n \n ))}\n
    \n
  • \n \n \n \n );\n};\n\nTemplateFilters.defaultProps = {\n source: '',\n username: '',\n isMobile: false,\n templateType: 'form-templates'\n};\n\nTemplateFilters.propTypes = {\n isMobile: bool,\n source: string,\n username: string,\n templateType: string,\n filters: object.isRequired,\n setLanguage: func.isRequired,\n updateFilter: func.isRequired,\n language: arrayOf(string).isRequired\n};\n\nexport default TemplateFilters;\n","import Styled from 'styled-components';\n\nexport const ScStandaloneContainer = Styled.div`\n width: 100%;\n max-width: 1410px;\n min-height: 200px;\n margin: 0 auto;\n position: relative;\n display: flex;\n flex-wrap: wrap;\n padding: 16px 16px 0 16px;\n @media screen and (max-width: 880px) {\n overflow-y: auto;\n overflow-x: hidden;\n max-height: 88vh;\n }\n @media screen and (max-width: 768px) {\n max-height: 100vh;\n }\n @media screen and (max-width: 480px) {\n padding-bottom: 100px;\n }\n`;\nexport const ScBottomArea = Styled.div`\n width: 100%;\n padding-bottom: 115px;\n @media screen and (max-width: 768px) {\n padding-left: 20px;\n padding-right: 20px;\n }\n`;\n","/* eslint-disable max-len */\nimport Styled from 'styled-components';\n\nexport const ScMyTemplates = Styled.div`\n display: flex;\n width: 100%;\n padding: 10px 0;\n margin: 0 0 1rem;\n font-weight: 400;\n color: #0a224c;\n font-size: 16px;\n transition: 0.15s;\n cursor: pointer;\n box-sizing: content-box;\n text-decoration: none;\n background-color: transparent;\n border: 0;\n outline: none;\n .myTemplatesIcon {\n background-color: #e5f8f0;\n border-radius: 1px;\n width: 16px;\n height: 16px;\n position: relative;\n top: 0;\n left: 0;\n display: inline-block;\n margin: 0 5px;\n html[dir=\"rtl\"] & {\n transform: rotate(180deg);\n }\n &:after,\n &:before {\n background-color: #01bd6f;\n width: 5px;\n height: 2px;\n border-radius: 1px;\n position: absolute;\n left: 5.5px;\n content: \"\";\n }\n &:after {\n top: 5px;\n transform: rotate(37deg);\n }\n &:before {\n top: 8px;\n transform: rotate(-48deg);\n }\n }\n &:hover {\n color: #01bd6f;\n }\n`;\n","/* eslint-disable max-len */\nimport Styled from 'styled-components';\n\nconst borderColor = '#cdd1ea';\nconst orangeColor = '#FF6100';\nconst navyColor = '#091141';\n\nexport const ScAsideWrapper = Styled.div`\nwidth: 100%;\nmax-width: 310px;\ndisplay: flex;\nflex-wrap: wrap;\nalign-items: flex-start;\npadding-inline-end: 32px;\nmin-height: 520px;\n\n@media screen and (max-width: 768px) {\n width: 100%;\n max-width: unset;\n min-width: unset;\n padding-inline-end: 0;\n min-height: initial;\n}\n\n.aside {\n width: 100%;\n height: 100%;\n display: block;\n transition: right 0.5s, width 0.75s;\n\n @media screen and (max-width: 768px) {\n z-index: 8000;\n width: 100%;\n top: 0;\n bottom: 0;\n position: fixed;\n position: -ms-page;\n overflow: hidden;\n background: #fff;\n right: -100%;\n padding: 0;\n\n &.isActive {\n right: 0;\n }\n }\n}\n\n.mobileAsideHeader {\n display: none;\n background: #384158;\n color: #fff;\n width: 100%;\n height: 48px;\n align-items: center;\n padding: 0 0 0 1rem;\n width: 100%;\n white-space: nowrap;\n\n html[dir=\"rtl\"] & {\n padding: 0 1rem 0 0;\n right: inherit;\n left: 0;\n }\n\n button {\n background-color: #394258;\n width: 48px;\n height: 48px;\n border: none;\n margin-left: auto;\n background-image: url(\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTJweCIgaGVpZ2h0PSIxMnB4IiB2aWV3Qm94PSIwIDAgOCA4IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPGcgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI5Ni4wMDAwMDAsIC0xNi4wMDAwMDApIj4KICAgICAgICAgICAgPGc+CiAgICAgICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlIiB4PSIwIiB5PSIwIiB3aWR0aD0iMzIwIiBoZWlnaHQ9IjQwIj48L3JlY3Q+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMzAwLDIxLjQxNDIxMzYgTDI5Ny43MDcxMDcsMjMuNzA3MTA2OCBDMjk3LjMxNjU4MiwyNC4wOTc2MzExIDI5Ni42ODM0MTgsMjQuMDk3NjMxMSAyOTYuMjkyODkzLDIzLjcwNzEwNjggQzI5NS45MDIzNjksMjMuMzE2NTgyNSAyOTUuOTAyMzY5LDIyLjY4MzQxNzUgMjk2LjI5Mjg5MywyMi4yOTI4OTMyIEwyOTguNTg1Nzg2LDIwIEwyOTYuMjkyODkzLDE3LjcwNzEwNjggQzI5NS45MDIzNjksMTcuMzE2NTgyNSAyOTUuOTAyMzY5LDE2LjY4MzQxNzUgMjk2LjI5Mjg5MywxNi4yOTI4OTMyIEMyOTYuNjgzNDE4LDE1LjkwMjM2ODkgMjk3LjMxNjU4MiwxNS45MDIzNjg5IDI5Ny43MDcxMDcsMTYuMjkyODkzMiBMMzAwLDE4LjU4NTc4NjQgTDMwMi4yOTI4OTMsMTYuMjkyODkzMiBDMzAyLjY4MzQxOCwxNS45MDIzNjg5IDMwMy4zMTY1ODIsMTUuOTAyMzY4OSAzMDMuNzA3MTA3LDE2LjI5Mjg5MzIgQzMwNC4wOTc2MzEsMTYuNjgzNDE3NSAzMDQuMDk3NjMxLDE3LjMxNjU4MjUgMzAzLjcwNzEwNywxNy43MDcxMDY4IEwzMDEuNDE0MjE0LDIwIEwzMDMuNzA3MTA3LDIyLjI5Mjg5MzIgQzMwNC4wOTc2MzEsMjIuNjgzNDE3NSAzMDQuMDk3NjMxLDIzLjMxNjU4MjUgMzAzLjcwNzEwNywyMy43MDcxMDY4IEMzMDMuMzE2NTgyLDI0LjA5NzYzMTEgMzAyLjY4MzQxOCwyNC4wOTc2MzExIDMwMi4yOTI4OTMsMjMuNzA3MTA2OCBMMzAwLDIxLjQxNDIxMzYgWiIgaWQ9IkNvbWJpbmVkLVNoYXBlIiBmaWxsPSIjODg5NEFCIj48L3BhdGg+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==\");\n background-position: center;\n background-size: 12px;\n background-repeat: no-repeat;\n\n html[dir=\"rtl\"] & {\n margin-left: initial;\n margin-right: auto;\n }\n }\n\n @media screen and (max-width: 768px) {\n display: flex;\n }\n}\n\n.asideMobile {\n display: none;\n width: 100%;\n\n @media screen and (max-width: 768px) {\n display: block;\n }\n}\n\n.asideMobileButton {\n width: 100%;\n margin: 0;\n height: 40px;\n text-align: left;\n font-size: 12px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding: 0 1rem;\n border: none;\n background-color: #f9f8f8;\n color: #9b9b9b;\n position: relative;\n\n &:after {\n content: \"\";\n display: block;\n width: 18px;\n height: 12px;\n margin-left: auto;\n background-image: url(\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTJweCIgaGVpZ2h0PSI4cHgiIHZpZXdCb3g9IjAgMCAxMiA4IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgICAgICAgICAgICAgICAgIDxnIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjg4LjAwMDAwMCwgLTI4OC4wMDAwMDApIiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOC4wMDAwMDAsIDI3Mi4wMDAwMDApIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlIiBmaWxsPSIjRjlGOEY4IiB4PSIwIiB5PSIwIiB3aWR0aD0iMzA0IiBoZWlnaHQ9IjQwIiByeD0iMyI+PC9yZWN0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yODcuMjkyODkzLDE2LjI5Mjg5MzIgQzI4Ny42NTMzNzcsMTUuOTMyNDA5MyAyODguMjIwNjA4LDE1LjkwNDY3OTcgMjg4LjYxMjg5OSwxNi4yMDk3MDQ2IEwyODguNzA3MTA3LDE2LjI5Mjg5MzIgTDI5MS43MDcxMDcsMTkuMjkyODkzMiBMMjkxLjc5MDI5NSwxOS4zODcxMDA2IEMyOTIuMDY5OTAyLDE5Ljc0NjcwMDggMjkyLjA2OTkwMiwyMC4yNTMyOTkyIDI5MS43OTAyOTUsMjAuNjEyODk5NCBMMjkxLjcwNzEwNywyMC43MDcxMDY4IEwyODguNzA3MTA3LDIzLjcwNzEwNjggTDI4OC42MTI4OTksMjMuNzkwMjk1NCBDMjg4LjI1MzI5OSwyNC4wNjk5MDE1IDI4Ny43NDY3MDEsMjQuMDY5OTAxNSAyODcuMzg3MTAxLDIzLjc5MDI5NTQgTDI4Ny4yOTI4OTMsMjMuNzA3MTA2OCBMMjg3LjIwOTcwNSwyMy42MTI4OTk0IEMyODYuOTMwMDk4LDIzLjI1MzI5OTIgMjg2LjkzMDA5OCwyMi43NDY3MDA4IDI4Ny4yMDk3MDUsMjIuMzg3MTAwNiBMMjg3LjI5Mjg5MywyMi4yOTI4OTMyIEwyODguNTg1LDIxIEwyODEsMjEgTDI4MC44ODMzNzksMjAuOTkzMjcyMyBDMjgwLjM4NjA0LDIwLjkzNTUwNzIgMjgwLDIwLjUxMjgzNTggMjgwLDIwIEMyODAsMTkuNDg3MTY0MiAyODAuMzg2MDQsMTkuMDY0NDkyOCAyODAuODgzMzc5LDE5LjAwNjcyNzcgTDI4MSwxOSBMMjg4LjU4NSwxOSBMMjg3LjI5Mjg5MywxNy43MDcxMDY4IEwyODcuMjA5NzA1LDE3LjYxMjg5OTQgQzI4Ni45MDQ2OCwxNy4yMjA2MDgyIDI4Ni45MzI0MDksMTYuNjUzMzc3MiAyODcuMjkyODkzLDE2LjI5Mjg5MzIgWiIgaWQ9IlBhdGgiIGZpbGw9IiM0QTRBNEEiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgIDwvc3ZnPiA=\");\n background-size: 100%;\n html[dir=\"rtl\"] & {\n margin-right: auto;\n margin-left: initial;\n transform: rotate(180deg);\n }\n }\n}\n\n.tabItems {\n position: relative;\n z-index: 2;\n display: flex;\n width: 100%;\n\n a {\n cursor: pointer;\n position: relative;\n background-color: #F3F3FE;\n display: block;\n font-size: 16px;\n font-weight: 400;\n color: rgba(50, 58, 80, 0.5);\n text-align: center;\n padding: 15px 5px;\n flex-grow: 1;\n height: 51px;\n text-decoration: none;\n border: 1px solid transparent;\n border-bottom-color: ${borderColor};\n\n &:focus-visible {\n outline-offset: 0px;\n\n &:after {\n z-index: -1;\n }\n }\n\n &:before {\n display: none;\n z-index: 1;\n content: \"\";\n width: 18px;\n height: calc(100% + 1px);\n position: absolute;\n top: -1px;\n background-repeat: no-repeat;\n background-size: 100% 100%;\n }\n\n &:after {\n z-index: 1;\n content: \"\";\n position: absolute;\n background-repeat: no-repeat;\n background-size: 100% 100%;\n top: 25%;\n right: 0;\n width: 1px;\n height: 50%;\n background-color: ${borderColor};\n\n html[dir=\"rtl\"] & {\n right: unset;\n left: 0;\n }\n }\n\n &.active {\n font-weight: 500;\n color: rgba(38, 50, 56, 1);\n background-color: #fff;\n border-top-color: ${borderColor};\n border-left-color: ${borderColor};\n border-bottom: 0;\n border-right: 0;\n border-top-left-radius: 4px;\n\n html[dir=\"rtl\"] & {\n border-right: 1px solid ${borderColor};\n border-top-left-radius: 0;\n border-top-right-radius: 4px;\n }\n\n &:before {\n display: block;\n left: -8px;\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAxCAMAAAALH7L+AAAATlBMVEX////z8/7x8f3N0OrMz+nO0uvi5fTS1e3u7vvP0+vLzury8v7P0+v9/f77+/3v7/zQ0+vLz+rv8Pnu8PjP0+vKzur////z8/7P0+vKzuk7B+EKAAAAFnRSTlO/v/Pz8/PBy+P05vz58erp6OPR0b+/JixhQAAAAFRJREFUKM/tyEkOgCAMQFFEbAvOU5X7X9SgIY1duDbRv/vPFNsVod9TSxYaoOOUyYJwvkjdtEqsZy3V66X85VHcd4WCFkAlfZhuYmEEFlljdDizyAHZ1DlSpKKmmwAAAABJRU5ErkJggg==') !important;\n html[dir=\"rtl\"] & {\n left: inherit;\n right: -8px;\n transform: scaleX(-1);\n }\n }\n\n &:after {\n display: block;\n right: -8px;\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAxCAMAAAALH7L+AAAAUVBMVEX////z8/7x8f3Mz+rO0erP0+vN0OrLz+rt7vvQ0+vT1+3f4fTm6PTP0+v8/f77+/3v7/zs7vrt7/jt7vjc3vHP0+vKzur////z8/7P0+vKzukvnzp/AAAAF3RSTlO/v/Pz8/Tq5eTNysTC+fTr6dvRz8S/v497sHIAAABPSURBVCjP7cg5DoAgEAXQEWTHfRnl/gc1hEL9tYkNr3y0nZny01E0RJwNUdt7iuhx+g6Hlfhm2jqPkXV+GmNxXMCZzQjDqw7iPbw4mdJ+AW5KO+KiROPaAAAAAElFTkSuQmCC');\n background-color: transparent;\n top: -1px;\n width: 18px;\n height: calc(100% + 1px);\n\n html[dir=\"rtl\"] & {\n right: inherit;\n left: -8px;\n transform: scaleX(-1);\n }\n }\n\n &:first-child {\n border-left: 1px solid ${borderColor};\n border-top-left-radius: 4px;\n\n &:before {\n display: none;\n }\n }\n\n &:last-child {\n border-right: 1px solid ${borderColor};\n border-top-right-radius: 4px;\n\n &:after {\n display: none;\n }\n }\n }\n\n &:last-child {\n &:after {\n display: none;\n }\n }\n }\n\n @media screen and (max-width: 768px) {\n padding: 8px 0 0 0;\n background-color: #f3f3fe;\n\n a {\n height: auto;\n border: 0 !important;\n padding: 10px 5px;\n\n &.active {\n border: 0;\n border-top-right-radius: 4px;\n }\n\n &:before,\n &:after {\n display: none !important;\n }\n }\n }\n}\n\n.mobileScrollableContent {\n @media screen and (max-width: 768px) {\n width: 100%;\n height: calc(100% - 106px);\n overflow: auto;\n }\n}\n\n.tabContent {\n position: relative;\n z-index: 1;\n display: block;\n width: 100%;\n padding: 22px 0;\n\n &:before,\n &:after {\n content: \"\";\n top: -1px;\n width: 1px;\n height: 100%;\n position: absolute;\n background: ${borderColor};\n background: linear-gradient(to bottom, ${borderColor}, rgba(255, 255, 255, 1) 300px);\n }\n\n &:before {\n left: 0;\n }\n\n &:after {\n left: auto;\n right: 0;\n }\n\n ul.tabList {\n position: relative;\n list-style: none;\n min-height: 250px;\n padding: 0 0 12px 0;\n margin: 0 0 12px 0;\n\n @media screen and (max-width: 768px) { \n min-height: unset;\n }\n\n li {\n position: relative;\n display: flex;\n align-items: center;\n padding: 8px 12px 8px 20px;\n flex-wrap: wrap;\n html[dir=\"rtl\"] & {\n padding: 8px 20px 8px 12px;\n }\n &:last-child {\n margin-bottom: 0;\n }\n\n a {\n cursor: pointer;\n color: #2B3245;\n font-weight: 400;\n font-size: 16px;\n text-decoration: none;\n transition: color 0.1s;\n max-width: calc(100% - 40px);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n &:hover {\n color: ${orangeColor};\n +span {\n color: ${orangeColor};\n }\n }\n &:after {\n content: \"\";\n display: inline-block;\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n left: 0;\n z-index: 0;\n }\n }\n\n span {\n transition: color 0.1s;\n font-weight: 400;\n color: #6F76A7;\n font-size: 14px;\n margin-left: auto;\n padding-left: 4px;\n padding-right: 8px;\n\n html[dir=\"rtl\"] & {\n margin-left: 0;\n margin-right: auto;\n padding-left: 8px;\n padding-right: 4px;\n }\n }\n\n .subCategories {\n padding: 0;\n width: 100%;\n height: 0;\n overflow: hidden;\n transition: height, opacity .3s linear;\n li {\n flex-wrap: nowrap;\n padding-right: 0;\n a, span {\n font-size: 14px;\n }\n html[dir=\"rtl\"] & {\n padding-right: 12px;\n padding-left: 0;\n }\n }\n }\n &.active {\n > a {\n color: ${orangeColor};\n + span {\n color: ${orangeColor};\n }\n }\n .subCategories {\n height: auto;\n padding: 10px 0 0;\n }\n }\n }\n\n // &:after {\n // content: \"\";\n // position: absolute;\n // width: calc(100% - 40px);\n // height: 2px;\n // bottom: 0;\n // left: 20px;\n // background-color: rgba(207, 216, 220, 0.25);\n // }\n }\n\n .filterSort {\n margin: 2rem 0 1rem;\n width: 100%;\n\n .sortMenu {\n list-style: none;\n margin: 0;\n padding: 3px 8px;\n display: inline-block;\n vertical-align: middle;\n font-weight: 600;\n white-space: nowrap;\n font-size: 16px;\n color: ${navyColor};\n letter-spacing: 0;\n line-height: 32px;\n width: 100%;\n border-radius: 4px;\n position: relative;\n border: none;\n background: #E3E5F5;\n transition: all .2s ease-in;\n cursor: pointer;\n display: flex;\n\n &:hover {\n background: #E7E8EC;\n }\n\n span {\n vertical-align: middle;\n white-space: normal;\n line-height: 1.25;\n padding: 10px 0;\n }\n\n &:before {\n content: \"\";\n background-size: 100% 100%;\n position: relative;\n display: inline-block;\n vertical-align: middle;\n width: 18px;\n height: 18px;\n margin: auto 8px;\n background-image: url(\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxNiAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDEpIiBmaWxsPSIjMTEyMjRBIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHk9IjEiIHdpZHRoPSIxNiIgaGVpZ2h0PSIyIiByeD0iMSIvPjxyZWN0IHk9IjciIHdpZHRoPSIxNiIgaGVpZ2h0PSIyIiByeD0iMSIvPjxyZWN0IHk9IjEzIiB3aWR0aD0iMTYiIGhlaWdodD0iMiIgcng9IjEiLz48Y2lyY2xlIHN0cm9rZT0iI0U3RThFQyIgY3g9IjUiIGN5PSIyIiByPSIyLjUiLz48Y2lyY2xlIHN0cm9rZT0iI0U3RThFQyIgY3g9IjExIiBjeT0iOCIgcj0iMi41Ii8+PGNpcmNsZSBzdHJva2U9IiNFN0U4RUMiIGN4PSI1IiBjeT0iMTQiIHI9IjIuNSIvPjwvZz48L3N2Zz4=\");\n background-repeat: no-repeat;\n }\n }\n\n .subMenu {\n position: absolute;\n z-index: 5000;\n display: none;\n\n &.active {\n display: block;\n max-width: 291px;\n width: 100%;\n margin: 4px 0;\n padding: 0;\n }\n\n }\n\n .subMenuBox {\n text-align: left;\n padding: 16px 8px;\n background: #292A3D;\n border-radius: 4px;\n\n &:before {\n content: \"\";\n display: inline-block;\n position: absolute;\n height: 0;\n width: 0;\n left: 12px;\n border-left: 12px solid transparent;\n border-right: 12px solid transparent;\n border-bottom: 12px solid #292A3D;\n top: -8px;\n\n html[dir=\"rtl\"] & {\n left: inherit;\n right: 12px;\n }\n }\n\n }\n\n .subMenu ul {\n list-style: none;\n margin: 0;\n }\n\n .subMenuItem {\n width: 100%;\n position: relative;\n\n .info {\n padding: 0 8px;\n display: block;\n text-decoration: none;\n font-weight: 600;\n transition: color .15s ease;\n position: relative;\n font-size: 14px;\n color: #fff;\n letter-spacing: 0;\n line-height: 32px;\n\n html[dir=\"rtl\"] & {\n text-align: right;\n }\n }\n }\n\n .subMenu .filterClose.closef {\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 5010;\n padding: 0;\n width: 16px;\n height: 16px;\n display: block;\n border: none;\n\n html[dir=\"rtl\"] & {\n right: auto;\n left: 8px;\n right: inherit;\n }\n }\n\n .subMenu .filterClose {\n background: 0 0;\n cursor: pointer;\n }\n }\n}\n`;\n","/* eslint-disable react/prop-types */\nimport React, { useState, useEffect } from 'react';\nimport { t } from '@jotforminc/translation';\nimport { capitalizeFirstLetter, classNames } from '@jotforminc/utils';\n\nimport { templateConstants } from '../templateConstants';\nimport {\n filterWrapper, prettyTemplatePageType, isHomepage, isGuest\n} from '../utils';\nimport { getDeviceType } from '../getDeviceType';\n\nimport Search from './Search';\nimport ThemeSelector from './ThemeSelector';\nimport TemplateFilters from './TemplateFilters';\n\nimport { ScBottomArea } from './ScMainWrapper';\nimport { ScMyTemplates } from './ScMyTemplates';\nimport { ScAsideWrapper } from './ScAsideWrapper';\n\nconst Sidebar = ({ sidebarProps }) => {\n const {\n categories, selectedCategory, isAllCategoriesSelected, setAsideShow,\n asideShow, searchComponentProps, templateType, handleSelectCategory,\n filters, setFilters, isMobile, searchResult, isMyTemplates, language,\n setLanguage, setActiveParentCategory, username, source\n } = sidebarProps;\n\n const { sidebarTabs = [], showAllCategories = false } = templateConstants[templateType];\n const [activeTab, setActiveTab] = useState(sidebarTabs[0]);\n const templatePageTypePretty = prettyTemplatePageType(templateType, false);\n\n useEffect(() => {\n const { type = '' } = selectedCategory || {};\n if (type === '') return;\n\n const relatedTab = sidebarTabs.find(tab => tab?.value === type);\n if (relatedTab) setActiveTab(relatedTab);\n }, [selectedCategory]);\n\n const getFeaturedCategories = (tab = activeTab) => {\n const filterArray = [];\n if (!showAllCategories) {\n filterArray.push({ property: 'featured', value: '1' });\n }\n if (sidebarTabs.length > 1) {\n filterArray.push({ property: 'type', value: tab.value });\n }\n return filterWrapper(templateType, categories, filterArray).filter(category => category?.parent === '' || category?.parent === null);\n };\n\n const getFilteredZeroTabs = () => {\n return sidebarTabs.filter(tab => getFeaturedCategories(tab).length !== 0);\n };\n\n const handleSelectMyTemplates = () => {\n handleSelectCategory({ clickedMyTemplates: true });\n window.standaloneTemplatesLogger({\n actor: username,\n target: 'My Templates',\n action: `${getDeviceType()}:click`\n });\n };\n\n const handleSelectTab = tab => {\n window.standaloneTemplatesLogger({\n actor: username,\n target: capitalizeFirstLetter(tab.text),\n action: `${getDeviceType()}:category-tab-click`\n });\n setActiveTab(tab);\n };\n\n const isSelectedCategory = categoryID => {\n if (!selectedCategory) return false;\n return categoryID === (selectedCategory._id || selectedCategory.id);\n };\n\n const isSubCategorySelected = subCategories => {\n return Object.keys(subCategories).find(subID => isSelectedCategory(subID));\n };\n\n const myTemplatesVisible = username !== '' && !isGuest();\n\n return (\n \n
    \n \n
    \n {(!isMobile && !isHomepage(isMyTemplates, selectedCategory, searchResult.searchView, isAllCategoriesSelected)) && }\n \n
    \n );\n};\n\nexport default Sidebar;\n","import { IconAngleDown, IconAngleUp } from '@jotforminc/svg-icons';\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport camelCase from 'lodash/camelCase';\nimport { classNames } from '@jotforminc/utils';\n\nconst Accordion = ({\n text, label, children, open, scrollable, username, isLast, onToggle\n}) => {\n const [isOpen, setIsOpen] = useState(open);\n\n const handleClick = () => {\n const actionText = `${isOpen ? 'close' : 'open'}-clicked-${camelCase(text)}`;\n setIsOpen(!isOpen);\n window.standaloneTemplatesLogger({\n actor: username,\n action: `${window.innerWidth <= 780 ? 'mobile' : 'desktop'}:${actionText}`,\n target: 'newSidebar'\n });\n onToggle();\n };\n\n return (\n \n \n {text && (\n {text}\n )}\n {label && (\n {label}\n )}\n \n {isOpen ? (\n \n ) : (\n \n )}\n \n \n {isOpen && (\n \n {children}\n \n )}\n \n );\n};\n\nAccordion.defaultProps = {\n children: null,\n label: null,\n text: null,\n open: false,\n scrollable: false,\n username: '',\n isLast: false,\n onToggle: () => {}\n};\nAccordion.propTypes = {\n children: PropTypes.node,\n label: PropTypes.string,\n text: PropTypes.string,\n open: PropTypes.bool,\n scrollable: PropTypes.bool,\n username: PropTypes.string,\n isLast: PropTypes.bool,\n onToggle: PropTypes.func\n};\nexport default Accordion;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst RadioButton = ({ label, checked, ...props }) => {\n return (\n \n );\n};\n\nRadioButton.defaultProps = {\n label: null,\n checked: false\n};\n\nRadioButton.propTypes = {\n label: PropTypes.string,\n checked: PropTypes.bool\n};\n\nexport default RadioButton;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { capitalizeFirstLetter } from '@jotforminc/utils';\nimport { t } from '@jotforminc/translation';\n\nimport { templateConstants } from '../../templateConstants';\nimport { getDeviceType } from '../../getDeviceType';\n\nimport Accordion from './Accordion';\nimport RadioButton from './RadioButton';\n\nconst Sorting = ({\n username, filters, setFilters, templateType\n}) => {\n const [sortValue, setSortValue] = useState('popular');\n\n const handleChangeFilter = (filterKey, newValue) => {\n if (filters[filterKey] === newValue) return;\n setFilters({\n ...filters,\n [filterKey]: newValue\n });\n };\n const handleChangeSorting = e => {\n const option = e.target.value;\n setSortValue(option);\n window.standaloneTemplatesLogger({\n actor: username,\n target: option,\n action: `${getDeviceType()}:sorting`\n });\n handleChangeFilter('sorting', option);\n };\n\n return (\n \n {(templateConstants[templateType].sortingOptions || []).map(option => (\n \n ))}\n \n );\n};\n\nSorting.defaultProps = {\n username: '',\n filters: {},\n setFilters: () => {},\n templateType: ''\n};\n\nSorting.propTypes = {\n username: PropTypes.string,\n filters: PropTypes.object,\n setFilters: PropTypes.func,\n templateType: PropTypes.string\n};\n\nexport default Sorting;\n","/* eslint-disable react/prop-types */\nimport React from 'react';\nimport { t } from '@jotforminc/translation';\nimport { sanitize } from 'dompurify';\nimport { IconMagnifyingGlass, IconXmarkCircleFilled } from '@jotforminc/svg-icons';\nimport { classNameGenerator } from '@jotforminc/utils';\nimport { getDeviceType } from '../../getDeviceType';\n\nimport { isHomepage } from '../../utils';\nimport { logSearchAction } from '../../api';\n\nconst Search = ({ props, sidebarSearch }) => {\n const {\n getTemplates, searchKeyword, searchResult, setSearchResult, isMyTemplates, username,\n setSelectedCategory, setSearchKeyword, stickySearchWrapper, setTemplates, templateType, setStandaloneTemplates,\n selectedCategory, setIsAllCategoriesSelected, setIsMyTemplates, isAllCategoriesSelected, source\n } = props;\n\n const handleSearch = () => {\n const isEmpty = searchKeyword === '';\n setTemplates([]);\n setStandaloneTemplates([]);\n if (!isEmpty) logSearchAction(username, searchKeyword, templateType, source);\n setSearchResult({ searchView: !isEmpty, searchedKeyword: searchKeyword });\n getTemplates({ searchKeywordParameter: searchKeyword });\n setSelectedCategory();\n setIsMyTemplates(false);\n setIsAllCategoriesSelected(false);\n window.standaloneTemplatesLogger({\n actor: username,\n target: searchKeyword,\n action: `${getDeviceType()}:search`\n });\n };\n\n const handleFocusSearch = () => {\n if (global?.standaloneTemplatesLogger) {\n global?.standaloneTemplatesLogger({\n actor: username,\n action: `${getDeviceType()}:searchBox-click`\n });\n }\n };\n\n const handleResetSearchInput = () => {\n setSearchKeyword('');\n };\n\n return (\n \n \n setSearchKeyword(sanitize(e.target.value))}\n onKeyDown={e => e.key === 'Enter' && handleSearch()}\n />\n \n \n \n \n );\n};\n\nexport default Search;\n","import React, { useState, useEffect } from 'react';\nimport { t } from '@jotforminc/translation';\nimport { Languages } from '@jotforminc/constants';\nimport PropTypes from 'prop-types';\nimport Accordion from './Accordion';\n\nimport { getDeviceType } from '../../getDeviceType';\nimport { fetchLanguages } from '../../apiTemplates';\nimport RadioButton from './RadioButton';\n\nconst LanguagesFilter = ({\n language,\n setLanguage,\n templateType,\n username,\n source\n}) => {\n const [languages, setLanguages] = useState([]);\n\n useEffect(() => {\n fetchLanguages(templateType, source)\n .then(res => {\n try {\n const { data: { content } } = res;\n const formattedLanugages = content.map(lang => {\n const templateLang = lang._language || lang.language;\n if (Languages && Languages.length > 0) {\n const languageObject = Languages.find(l => templateLang === l.key);\n if (languageObject !== undefined) return { value: templateLang, text: languageObject.value };\n return undefined;\n }\n return { value: templateLang, text: templateLang };\n });\n setLanguages([{ value: '', text: 'All' }, ...formattedLanugages.filter(lang => lang !== undefined).sort((a, b) => (a.text > b.text ? 1 : -1))]);\n } catch (e) {\n setLanguages([]);\n }\n })\n .catch(() => {\n setLanguages([]);\n });\n }, []);\n\n const handleSelectLanguage = e => {\n const selected = e.target.value;\n setLanguage([selected]);\n window.standaloneTemplatesLogger({\n actor: username,\n target: selected,\n action: `${getDeviceType()}:languageSelect`\n });\n };\n\n return (\n lang.value === language[0])?.text}\n isLast={true}\n scrollable\n >\n {languages.map(lang => (\n handleSelectLanguage(e)}\n />\n ))}\n \n );\n};\n\nLanguagesFilter.defaultProps = {\n source: '',\n username: '',\n templateType: 'form-templates'\n};\n\nLanguagesFilter.propTypes = {\n source: PropTypes.string,\n username: PropTypes.string,\n templateType: PropTypes.string,\n setLanguage: PropTypes.func.isRequired,\n language: PropTypes.arrayOf(PropTypes.string).isRequired\n};\n\nexport default LanguagesFilter;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { capitalizeFirstLetter } from '@jotforminc/utils';\nimport { t } from '@jotforminc/translation';\n\nimport { templateConstants } from '../../templateConstants';\nimport { getDeviceType } from '../../getDeviceType';\nimport Accordion from './Accordion';\nimport RadioButton from './RadioButton';\n\nconst FormLayout = ({\n filters, setFilters, username\n}) => {\n const { theme: formLayout } = filters;\n\n const handleChange = e => {\n const option = e.target.value;\n if (option === formLayout) return;\n setFilters({\n ...filters,\n theme: option\n });\n window.standaloneTemplatesLogger({\n actor: username,\n action: `${getDeviceType()}:filterTheme`,\n target: option\n });\n };\n\n return (\n \n {(templateConstants['form-templates'].formLayoutOptions || []).map(option => (\n \n ))}\n \n );\n};\n\nFormLayout.defaultProps = {\n username: ''\n};\n\nFormLayout.propTypes = {\n username: PropTypes.string,\n filters: PropTypes.object.isRequired,\n setFilters: PropTypes.func.isRequired\n};\n\nexport default FormLayout;\n","/* eslint-disable react/prop-types */\nimport React, { useEffect, useState } from 'react';\nimport upperCase from 'lodash/upperCase';\nimport { t } from '@jotforminc/translation';\nimport { classNames } from '@jotforminc/utils';\nimport {\n IconAngleDown, IconAngleUp, IconArrowRight, IconLayerFilled, IconXmark\n} from '@jotforminc/svg-icons';\nimport { templateConstants } from '../../templateConstants';\nimport {\n filterWrapper,\n prettyTemplatePageType,\n isGuest,\n isHomepage,\n formatBigNumber\n} from '../../utils';\n\nimport { getDeviceType } from '../../getDeviceType';\n\nimport Accordion from './Accordion';\nimport Sorting from './Sorting';\nimport Search from './Search';\nimport LanguagesFilter from './LanguagesFilter';\nimport FormLayout from './FormLayout';\n\nconst NewSidebar = ({ sidebarProps }) => {\n const {\n categories,\n selectedCategory,\n setAsideShow,\n asideShow,\n templateType,\n handleSelectCategory,\n setActiveParentCategory,\n username,\n isMyTemplates,\n filters,\n setFilters,\n searchResult,\n isAllCategoriesSelected,\n isMobile,\n searchComponentProps,\n source,\n language,\n setLanguage,\n predefinedCategory,\n selectedIndustryCategory\n } = sidebarProps;\n\n const { sidebarTabs = [], showAllCategories = false } = templateConstants[templateType];\n const [subMenuActive, setSubMenuActive] = useState(null);\n const [accordionOpen, setAccordionOpen] = useState(null);\n const templatePageTypePretty = prettyTemplatePageType(templateType, false);\n const selectedIndustryCat = selectedIndustryCategory;\n\n const getFeaturedCategories = tab => {\n const filterArray = [];\n if (!showAllCategories) {\n filterArray.push({ property: 'featured', value: '1' });\n }\n if (sidebarTabs.length > 1) {\n filterArray.push({ property: 'type', value: tab.value });\n }\n const featuredCategories = filterWrapper(templateType, categories, filterArray).filter(\n category => category?.parent === '' || category?.parent === null\n );\n if (predefinedCategory && predefinedCategory?.subCategories && !selectedIndustryCat) {\n const predefinedCategoryID = predefinedCategory?.id || predefinedCategory?._id;\n return featuredCategories.filter(category => {\n return predefinedCategoryID && (category?.id || category?._id) === predefinedCategoryID;\n });\n }\n return featuredCategories;\n };\n\n const isSelectedCategory = categoryID => {\n if (!selectedCategory) return false;\n return categoryID === (selectedCategory._id || selectedCategory.id);\n };\n\n const isSubCategorySelected = subCategories => {\n return Object.keys(subCategories).find(subID => isSelectedCategory(subID));\n };\n\n const subMenuActiveCheck = categoryID => {\n return categoryID === subMenuActive;\n };\n\n const handleSelectMyTemplates = () => {\n handleSelectCategory({ clickedMyTemplates: true });\n window.standaloneTemplatesLogger({\n actor: username,\n target: 'My Templates',\n action: `${getDeviceType()}:click`\n });\n };\n\n const addTooltip = elm => {\n if (isMobile) return;\n const isCheck = e => {\n return (e.offsetWidth < e.scrollWidth);\n };\n\n if (isCheck(elm) && !elm.parentElement.querySelector('.tooltip')) {\n elm.parentElement.insertAdjacentHTML('beforeend', `
    ${t(elm.innerText)}
    `);\n }\n };\n\n const myTemplatesVisible = username !== '' && !isGuest();\n const industryCategoryType = categories.find(category => category.slug === selectedIndustryCat);\n\n useEffect(() => {\n const categoryList = document.querySelectorAll('.jfSidebar--categoryList a span:not(.countTotal)');\n categoryList.forEach(elm => addTooltip(elm));\n }, [categories, subMenuActive, asideShow, accordionOpen]);\n\n return (\n
    \n
    \n setAsideShow(true)}\n className=\"asideMobileButton\"\n >\n {t(`${templatePageTypePretty} Categories`)}\n \n
    \n \n
    \n );\n};\n\nexport default NewSidebar;\n","/* eslint-disable max-len */\nimport Styled from 'styled-components';\n\nconst navyColor = '#091141';\n\nexport const ScRelatedCategories = Styled.div`\n display: flex;\n flex-wrap: wrap;\n width: 100%;\n padding: 10px 0;\n margin: 0 0 30px;\n font-weight: 400;\n h3 {\n width: 100%;\n color: #4a4a4a;\n font-size: 26px;\n font-weight: 400;\n margin: 0 0 10px 0;\n }\n .similar-category {\n width: calc(100% + 20px);\n list-style: none;\n margin: 0;\n display: flex;\n align-items: flex-start;\n justify-content: flex-start;\n margin: 0 -10px;\n padding: 0;\n flex-wrap: wrap;\n .similar-category-card-list {\n width: 33.333%;\n .similar-category-card {\n cursor: pointer;\n background-color: #f9f9f9;\n padding: 10px;\n border-radius: 4px;\n margin: 10px;\n p {\n margin: 0;\n font-size: 16px;\n font-weight: 500;\n line-height: 24px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .count {\n color: ${navyColor};\n font-size: 14px;\n margin: 6px 0 0;\n display: flex;\n align-items: center;\n svg {\n margin-inline-end: 5px;\n }\n } \n }\n &:nth-child(1n) {\n .similar-category-card {\n background-color: #D0F0FD;\n }\n }\n &:nth-child(2n) {\n .similar-category-card {\n background-color: #FDDAF3;\n }\n }\n &:nth-child(3n) {\n .similar-category-card {\n background-color: #EDE8C3;\n }\n }\n }\n }\n\n @media screen and (max-width: 1024px) {\n h3 {\n font-size: 22px;\n }\n }\n @media screen and (max-width: 980px) {\n .similar-category {\n .similar-category-card-list {\n width: 50%;\n }\n }\n } \n \n`;\n","import React from 'react';\nimport { arrayOf, object, func } from 'prop-types';\nimport { t } from '@jotforminc/translation';\n\nimport { IconCopyLine } from '@jotforminc/svg-icons';\nimport { ScRelatedCategories } from './ScRelatedCategories';\nimport { getTemplateCountText } from '../utils';\n\nconst RelatedCategories = ({\n selectedCategory, categories, handleSelectCategory, setActiveParentCategory\n}) => {\n const getRelatedCategories = () => {\n const { relatedCategories } = selectedCategory;\n if (!relatedCategories || relatedCategories === '') return [];\n const relatedCategoryObjects = [];\n const splitted = relatedCategories.split(',');\n splitted.forEach(categoryIterator => {\n if (categoryIterator !== '') {\n const category = categories.find(cat => cat._id === categoryIterator);\n if (category) {\n relatedCategoryObjects.push(category);\n }\n }\n });\n return relatedCategoryObjects;\n };\n\n if (selectedCategory === null) return null;\n const relateds = getRelatedCategories();\n if (relateds.length === 0) return null;\n\n return (\n \n

    {t('More categories like this')}

    \n
      \n {\n relateds.filter(rel => rel.total !== undefined).map(related => (\n {\n setActiveParentCategory();\n handleSelectCategory({ category: related });\n }}\n >\n
      \n

      {t(related.name)}

      \n \n \n {getTemplateCountText(related.total)}\n \n
      \n \n ))\n }\n
    \n
    \n );\n};\n\nRelatedCategories.defaultProps = {\n selectedCategory: null\n};\n\nRelatedCategories.propTypes = {\n selectedCategory: object,\n handleSelectCategory: func.isRequired,\n categories: arrayOf(object).isRequired,\n setActiveParentCategory: func.isRequired\n};\n\nexport default RelatedCategories;\n","export const carouselBreakPoints = [\n {\n width: 1, itemsToShow: 1, itemsToScroll: 1, pagination: false\n },\n {\n width: 469, itemsToShow: 2, itemsToScroll: 2, pagination: false\n },\n {\n width: 850, itemsToShow: 3, itemsToScroll: 2, pagination: false\n }\n];\n","/* eslint-disable react/no-array-index-key */\nimport React from 'react';\nimport {\n func, object, string, bool\n} from 'prop-types';\nimport Carousel from 'react-elastic-carousel';\nimport { t } from '@jotforminc/translation';\n\nimport { IconCaretRight } from '@jotforminc/svg-icons';\nimport { carouselBreakPoints } from '../constants';\nimport TemplateItemContainer from './TemplateItem/TemplateItemContainer';\n\nconst SubCategoryGalleryItem = ({\n subCategoryObject, handleSelectCategory, templateTheme, username,\n setSelectedTemplate, handleTemplateClone, skeletonActive, type, source\n}) => {\n const { templates = [], total, name } = subCategoryObject || {};\n\n const handleClickCategory = () => {\n if (skeletonActive) return;\n handleSelectCategory({ category: subCategoryObject });\n };\n\n return (\n <>\n
    \n
    \n

    {t(name)}

    \n {total}\n
    \n
    \n
    \n \n
    \n {t('See All')}\n
    \n
    \n \n {\n skeletonActive ? (\n Array(3).fill().map(() => (\n \n ))\n ) : (\n [...templates].map(template => (\n \n ))\n )\n }\n \n \n );\n};\n\nexport default SubCategoryGalleryItem;\n\nSubCategoryGalleryItem.defaultProps = {\n source: '',\n username: '',\n skeletonActive: false\n};\n\nSubCategoryGalleryItem.propTypes = {\n source: string,\n username: string,\n skeletonActive: bool,\n type: string.isRequired,\n templateTheme: string.isRequired,\n setSelectedTemplate: func.isRequired,\n handleTemplateClone: func.isRequired,\n subCategoryObject: object.isRequired,\n handleSelectCategory: func.isRequired\n};\n","/* eslint-disable max-lines */\n/* eslint-disable quote-props */\n/* eslint-disable indent */\n/* eslint-disable quotes */\n/* eslint-disable no-unused-expressions */\n/* eslint-disable max-len */\nexport default [\n {\n \"id\": 242482907187970,\n \"slug\": \"real-estate-consultant\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Real Estate Consultant\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Real Estate Consultants with 10+ years of buying, selling, and leasing real estate.\\\",\\\"expertise\\\":\\\"Helps clients find homes by asking key questions about location, budget, amenities, and property preferences. Equipped to handle property listings, mortgage options, and financial documents.\\\",\\\"personality\\\":\\\"Knowledgeable, persuasive, and focused on helping clients through their property search. Can answer complex questions about zoning laws, mortgage types, or even neighborhood trends.\\\",\\\"special_skills\\\":\\\"Handles property viewings and schedules, offers automated follow-up reminders, and provides instant responses to common home-buying questions.\\\"}\",\n \"description\": \"Real Estate Consultant assist clients of real estate agents to find their dream home or office in line with their needs.\",\n \"metaDescription\": \"Real Estate Consultant assist clients of real estate agents to find their dream home or office in line with their needs.\",\n \"furtherDescription\": \"Real Estate Consultant assist clients of real estate agents to find their dream home or office in line with their needs.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 10007,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"10007,20103,30008,30010\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of real estate properties are available?\\\", \\\"Can I get a virtual tour of a property?\\\", \\\"How much should I put down as a down payment?\\\", \\\"What is the process of buying a home?\\\", \\\"What are the closing costs involved in buying a property?\\\"]\",\n \"url\": \"/agent-directory/real-estate-consultant\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Real Estate Consultant\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242482907187970-e5546331bd8fa3d4423f9f3488271d58-thumbnail.png\"\n },\n {\n \"id\": 242483021625955,\n \"slug\": \"tattoo-studio-manager\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Tattoo Studio Manager\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Real Tattoo Studio Managers with 6+ years of experience working with tattoo artists and clientele.\\\",\\\"expertise\\\":\\\"Manages bookings, designs consultations, and provides aftercare instructions to clients. Communicates with customers about their ideas, preferences, and medical concerns.\\\",\\\"personality\\\":\\\"Artistic, patient, and empathetic—helps clients feel comfortable and confident about their tattoo choices.\\\",\\\"special_skills\\\":\\\"Streamlines consultations with artists, collects liability waivers, and sends personalized reminders for touch-up appointments or aftercare follow-ups.\\\"}\",\n \"description\": \"Tattoo Studio Manager provides help to collect waivers and appointments.\",\n \"metaDescription\": \"Tattoo Studio Manager provides help to collect waivers and appointments.\",\n \"furtherDescription\": \"Tattoo Studio Manager provides help to collect waivers and appointments.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 10005,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"10005,20103,20104,20105,30008,30009,30013\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I book an appointment with a specific tattoo artist?\\\", \\\"Can I reschedule or cancel my tattoo appointment?\\\", \\\"Do I need to pay a deposit to book a tattoo session?\\\", \\\"How much does a tattoo typically cost?\\\", \\\"How are tattoo prices determined?\\\"]\",\n \"url\": \"/agent-directory/tattoo-studio-manager\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Tattoo Studio Manager\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242483021625955-b97bff4089c6f288fbd1d680d9f79067-thumbnail.png\"\n },\n {\n \"id\": 242483195993975,\n \"slug\": \"school-administrator\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI School Administrator\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Real School Administrators with 8+ years of experience in school management and student services.\\\",\\\"expertise\\\":\\\"Manages admissions, enrollment, and student information with ease. Acts as a bridge between parents, students, and educators by ensuring all forms related to enrollment, attendance, and extracurricular activities are accurate and complete.\\\",\\\"personality\\\":\\\"Organized, communicative, and attentive to details. Ensures that both parents and students have their questions about scheduling, curriculum, and fees answered promptly.\\\",\\\"special_skills\\\":\\\"Tracks student progress, collects feedback, and provides detailed reports for internal use or parent communication.\\\"}\",\n \"description\": \"School Administrator Agent provides communication that fosters a strong partnership between students and parents and automate various administrative tasks within educational institutions.\",\n \"metaDescription\": \"School Administrator Agent provides communication that fosters a strong partnership between students and parents and automate various administrative tasks within educational institutions.\",\n \"furtherDescription\": \"School Administrator Agent provides communication that fosters a strong partnership between students and parents and automate various administrative tasks within educational institutions.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 10001,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"10001,20107,30000,30003,30005,30011,30014\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What are the school hours?\\\", \\\"What grades does the school offer?\\\", \\\"What extracurricular activities are available?\\\", \\\"What facilities does the school offer?\\\", \\\"What documents are required for registration?\\\"]\",\n \"url\": \"/agent-directory/school-administrator\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"School Administrator\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242483195993975-667cdb6f3903ecdbf580e621041ad335-thumbnail.png\"\n },\n {\n \"id\": 242483379154968,\n \"slug\": \"hr-manager-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI HR Manager Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Human Resources Managers with 10+ years of experience in managing recruitment and employee processes.\\\",\\\"expertise\\\":\\\"Handles recruitment, employee onboarding, and performance evaluation forms. Facilitates smoother HR operations by answering questions about company policies, benefits, and career development programs.\\\",\\\"personality\\\":\\\"Professional, approachable, and dedicated to employee welfare. Maintains a friendly yet efficient tone when communicating policies, job expectations, and benefits.\\\",\\\"special_skills\\\":\\\"Organizes and processes job applications, schedules interviews, and collects performance feedback from teams. Tracks employee growth and manages paperwork with precision.\\\"}\",\n \"description\": \"HR Manager Agent assists employees about the company policies, regulations and applicable labor law, assist them to track their leaves and other rights\",\n \"metaDescription\": \"HR Manager Agent assists employees about the company policies, regulations and applicable labor law, assist them to track their leaves and other rights\",\n \"furtherDescription\": \"HR Manager Agent assists employees about the company policies, regulations and applicable labor law, assist them to track their leaves and other rights\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 10009,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"10009,30006,30008,30009,30010,30012\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What are the company’s working hours and break policies?\\\", \\\"How do I apply for vacation leave?\\\", \\\"What is the company’s sick leave policy?\\\", \\\"What is the process for taking parental or maternity leave?\\\", \\\"What is the company’s policy on bonuses and raises?\\\"]\",\n \"url\": \"/agent-directory/hr-manager-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"HR Manager Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242483379154968-deb8abeef812aefa6b8c5b4d1819a58a-thumbnail.png\"\n },\n {\n \"id\": 242483501669966,\n \"slug\": \"summer-camp-director\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Summer Camp Director\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Real Summer Camp Directors with 5+ years of experience in organizing outdoor and indoor activities for children.\\\",\\\"expertise\\\":\\\"Engages parents, children, and staff with seamless registration and intake forms. This AI knows how to tailor conversations around dietary restrictions, medical conditions, activity preferences, and safety regulations.\\\",\\\"personality\\\":\\\"Energetic, creative, and detail-oriented, ready to address all inquiries and guide families through the registration process.\\\",\\\"special_skills\\\":\\\"Customizes forms to accommodate seasonal preferences, age groups, and specific camp themes. Collects critical consent and liability waivers in one easy interaction.\\\"}\",\n \"description\": \"Summer Camp Director assists students and parents in the process of camp registration and and the related summer camp activities.\",\n \"metaDescription\": \"Summer Camp Director assists students and parents in the process of camp registration and and the related summer camp activities.\",\n \"furtherDescription\": \"Summer Camp Director assists students and parents in the process of camp registration and and the related summer camp activities.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 10001,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"10001,10002,20101,30000,30001,30003,30005,30009,30011,30021\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of summer camps do you offer?\\\", \\\"What age groups are your camps designed for?\\\", \\\"Can my child attend multiple sessions?\\\", \\\"Are meals and snacks provided?\\\", \\\"How do you handle medical emergencies?\\\"]\",\n \"url\": \"/agent-directory/summer-camp-director\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Summer Camp Director\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242483501669966-ea882120636833c736192c437fe3b1c8-thumbnail.png\"\n },\n {\n \"id\": 242483603943964,\n \"slug\": \"beauty-salon-manager\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Beauty Salon Manager\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Real Beauty Salon Managers with 7+ years of experience in the beauty and wellness industry.\\\",\\\"expertise\\\":\\\"Oversees appointment bookings, service customizations, and post-service feedback. Communicates with clients to understand their style preferences, skin types, and hair care needs.\\\",\\\"personality\\\":\\\"Personable, detail-oriented, and customer-focused. Ensures that every client interaction is tailored, whether it’s booking an appointment or checking product preferences.\\\",\\\"special_skills\\\":\\\"Assists with scheduling, collects feedback on beauty services, and offers consultation reminders. Handles retail orders for beauty products, ensuring customer satisfaction.\\\"}\",\n \"description\": \"Beauty Salon Manager Agent provides information to clients about services and guide them in accordance with their needs, arrange appointments\",\n \"metaDescription\": \"Beauty Salon Manager Agent provides information to clients about services and guide them in accordance with their needs, arrange appointments\",\n \"furtherDescription\": \"Beauty Salon Manager Agent provides information to clients about services and guide them in accordance with their needs, arrange appointments\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 10005,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"10005,10003,20103,20104,20105,20107,30008,30009,30021\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What services do you offer at the salon?\\\", \\\"How can I book an appointment?\\\", \\\"What are your opening hours?\\\", \\\"Can I book multiple services at once?\\\", \\\"Do you sell the products used during treatments?\\\"]\",\n \"url\": \"/agent-directory/beauty-salon-manager\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Beauty Salon Manager\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242483603943964-2096d95d2525fc0087f4ffacab70b60a-thumbnail.png\"\n },\n {\n \"id\": 242483780181964,\n \"slug\": \"hospice-care-coordinator\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Hospice Care Coordinator\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Real Hospice Care Coordinators with 10+ years of experience in end-of-life care and patient services.\\\",\\\"expertise\\\":\\\"Manages sensitive intake forms for hospice care, coordinating with families and healthcare providers. Handles questions about treatment options, living arrangements, and counseling services.\\\",\\\"personality\\\":\\\"Compassionate, calm, and supportive—offering both logistical and emotional guidance to families.\\\",\\\"special_skills\\\":\\\"Coordinates hospice services, collects detailed medical history, and provides easy access to resources for pain management, emotional support, and spiritual care.\\\"}\",\n \"description\": \"Hospice Care Coordinator Agent assists relatives in filling out necessary forms, streamlining administrative processes during sensitive times. Its goal is to ease the burden on families by delivering clear, accessible information and support, ensuring a smooth and comforting experience.\",\n \"metaDescription\": \"Hospice Care Coordinator Agent assists relatives in filling out necessary forms, streamlining administrative processes during sensitive times. Its goal is to ease the burden on families by delivering clear, accessible information and support, ensuring a smooth and comforting experience.\",\n \"furtherDescription\": \"Hospice Care Coordinator Agent assists relatives in filling out necessary forms, streamlining administrative processes during sensitive times. Its goal is to ease the burden on families by delivering clear, accessible information and support, ensuring a smooth and comforting experience.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 10003,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"10003,30002,30006,30012,30015,30018\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I register a patient for hospice care?\\\", \\\"Does insurance cover hospice care, and what services are included?\\\", \\\"Are there financial assistance programs available for hospice care?\\\", \\\"Who do I contact if I have concerns or complaints about the care?\\\", \\\"What kind of support does hospice offer after my loved one passes?\\\"]\",\n \"url\": \"/agent-directory/hospice-care-coordinator\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Hospice Care Coordinator\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242483780181964-2a7487331c99ca472c9f3688932e8d41-thumbnail.png\"\n },\n {\n \"id\": 242483836545970,\n \"slug\": \"pharmacy-manager\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Pharmacist/Pharmacy Manager\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Real Pharmacists and Pharmacy Managers with 12+ years of experience in pharmaceutical services and customer care.\\\",\\\"expertise\\\":\\\"Streamlines prescription orders, refills, and customer queries about medications. Provides professional advice on dosage, side effects, and drug interactions.\\\",\\\"personality\\\":\\\"Knowledgeable, reliable, and patient-focused. Ensures a seamless process from prescription submission to medication pickup, while providing clear answers about health concerns.\\\",\\\"special_skills\\\":\\\"Manages inventory requests, ensures legal compliance with prescriptions, and maintains clear communication with healthcare providers.\\\"}\",\n \"description\": \"Pharmacist/Pharmacy Manager Agent offers product comparisons, suggest dermocosmetic products in accordance with the needs of clients, gives very general information about healtcare and public health \",\n \"metaDescription\": \"Pharmacist/Pharmacy Manager Agent offers product comparisons, suggest dermocosmetic products in accordance with the needs of clients, gives very general information about healtcare and public health \",\n \"furtherDescription\": \"Pharmacist/Pharmacy Manager Agent offers product comparisons, suggest dermocosmetic products in accordance with the needs of clients, gives very general information about healtcare and public health \",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 10003,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"10003,20103,20104,20107,30002,30008,30016,30018\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I register with this pharmacy?\\\", \\\"Can I transfer my prescriptions to this pharmacy?\\\", \\\"Does this pharmacy accept my insurance?\\\", \\\"Can I get a medication review or consultation?\\\", \\\"Do you offer vaccination services?\\\"]\",\n \"url\": \"/agent-directory/pharmacy-manager\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Pharmacist/Pharmacy Manager\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242483836545970-902612347d11bcffba6def277a38586e-thumbnail.png\"\n },\n {\n \"id\": 242484315570961,\n \"slug\": \"travel-agency-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Travel Agency Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Travel Agents with 10+ years of experience in planning vacations and travel arrangements.\\\",\\\"expertise\\\":\\\"Organizes vacation bookings, travel itineraries, and customer preferences. Communicates with clients to ensure their vacation preferences—flights, hotels, activities—are all seamlessly arranged.\\\",\\\"personality\\\":\\\"Enthusiastic, detail-oriented, and knowledgeable about global destinations. Helps clients plan the perfect trip, with the ability to answer questions about visas, accommodations, and travel insurance.\\\",\\\"special_skills\\\":\\\"Personalizes travel itineraries, sends real-time updates, and offers tailored recommendations based on travel history and preferences.\\\"}\",\n \"description\": \"Travel Agency Agent helps you manage the professional travel arrangements.\",\n \"metaDescription\": \"Travel Agency Agent helps you manage the professional travel arrangements.\",\n \"furtherDescription\": \"Travel Agency Agent helps you manage the professional travel arrangements.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 10002,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"10002,10010,20103,30008,30010,30018,30022\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I register for a tour or holiday package?\\\", \\\"Can you help me find a guided tour in [destination]?\\\", \\\"What is the refund policy for canceled tours?\\\", \\\"How do I make a payment for my booking?\\\", \\\"Is it safe to pay online through your platform?\\\"]\",\n \"url\": \"/agent-directory/travel-agency-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Travel Agency Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242484315570961-c787a4ba71ff2c2d7781dd7378312182-thumbnail.png\"\n },\n {\n \"id\": 242484390457968,\n \"slug\": \"animal-shelter-coordinator\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Animal Shelter Coordinator\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Animal Shelter Coordinators with 5+ years of experience in animal rescue and shelter management.\\\",\\\"expertise\\\":\\\"Manages adoption forms, volunteer registrations, and donations. Communicates with potential adopters to gather information about their needs, preferences, and living conditions.\\\",\\\"personality\\\":\\\"Compassionate, organized, and knowledgeable about animal welfare. Engages potential pet owners with patience and clear guidance on adoption policies.\\\",\\\"special_skills\\\":\\\"Tracks pet records, collects feedback from adopters, and organizes volunteer shifts. Provides information on vaccinations, pet behavior, and post-adoption support.\\\"}\",\n \"description\": \"Animal Shelter Coordinator Agent helps people to adopt pets in accordance with the characteristics of a pet, suggests people to find them the appropriate pet, gives information about pet-caring \",\n \"metaDescription\": \"Animal Shelter Coordinator Agent helps people to adopt pets in accordance with the characteristics of a pet, suggests people to find them the appropriate pet, gives information about pet-caring \",\n \"furtherDescription\": \"Animal Shelter Coordinator Agent helps people to adopt pets in accordance with the characteristics of a pet, suggests people to find them the appropriate pet, gives information about pet-caring \",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 10011,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"10011,10002\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What documents are required for adopting an animal?\\\", \\\"How do I register an animal for adoption at a shelter?\\\", \\\"How can I make a donation to the shelter?\\\", \\\"What types of payments does the shelter accept for adoption fees?\\\", \\\"Are there any recurring donation programs available?\\\"]\",\n \"url\": \"/agent-directory/animal-shelter-coordinator\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Animal Shelter Coordinator\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242484390457968-66b1757b37c232674456a3372f5d7614-thumbnail.png\"\n },\n {\n \"id\": 242484557169973,\n \"slug\": \"photography-studio-manager\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Photography Studio Manager\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Photography Studio Managers with 6+ years of experience in managing photography studios and clients.\\\",\\\"expertise\\\":\\\"Handles appointment bookings, photography style preferences, and project quotes. Communicates with clients about their vision, event type, and photography needs.\\\",\\\"personality\\\":\\\"Creative, professional, and detail-focused. Ensures that every photo session is perfectly coordinated, from lighting to subject placement.\\\",\\\"special_skills\\\":\\\"Assists with pre-shoot consultations, organizes portfolios, and delivers feedback on client preferences. Handles product orders such as albums and framed prints.\\\"}\",\n \"description\": \"Photography Studio Manager Agent helps clients of a photography studio with all their needs. It provides answers to questions about the studio’s services, pricing, appointment availability, and operating hours.\",\n \"metaDescription\": \"Photography Manager Studio Agent helps clients of a photography studio with all their needs. It provides answers to questions about the studio’s services, pricing, appointment availability, and operating hours.\",\n \"furtherDescription\": \"Photography Manager Studio Agent helps clients of a photography studio with all their needs. It provides answers to questions about the studio’s services, pricing, appointment availability, and operating hours.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 10012,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"10012,10005\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How should I handle and store digital and physical photo files?\\\", \\\"How can I register for a photography class or workshop at the studio?\\\", \\\"What are the payment options available for booking a photography session?\\\", \\\"How do I handle cancellations and refunds for studio bookings?\\\", \\\"What is the process for submitting a complaint or issue with a photo shoot?\\\"]\",\n \"url\": \"/agent-directory/photography-studio-manager\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Photography Studio Manager\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242484557169973-4bc360a405e6657e1044cf58eef9148d-thumbnail.png\"\n },\n {\n \"id\": null,\n \"slug\": \"hotel-management-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Hotel Management Agent\",\n \"avatar\": \"\",\n \"description\": \"Hotel Management Agent assists hotel customers during the reservation and accommodation processes.\",\n \"metaDescription\": \"Hotel Management Agent assists hotel customers during the reservation and accommodation processes.\",\n \"furtherDescription\": \"Hotel Management Agent assists hotel customers during the reservation and accommodation processes.\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I make a reservation?\\\", \\\"What is the cancellation policy?\\\", \\\"Can I modify my reservation after booking?\\\", \\\"What time is check-in and check-out?\\\", \\\"Do you offer airport transportation?\\\"]\",\n \"url\": \"/agent-directory/hotel-management-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Hotel Management Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"medical-practice-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Medical Practice Agent\",\n \"avatar\": \"\",\n \"description\": \"Medical Practice Agent helps the medical practices to arrange appointments and collect consents before an appointment.\",\n \"metaDescription\": \"Medical Practice Agent helps the medical practices to arrange appointments and collect consents before an appointment.\",\n \"furtherDescription\": \"Medical Practice Agent helps the medical practices to arrange appointments and collect consents before an appointment.\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/medical-practice-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Medical Practice Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"restaurant-management-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Restaurant Management Agent\",\n \"avatar\": \"\",\n \"description\": \"Restaurant Management Agent provides information about the menu and ingredients, arranges reservations and gives information about group events, collects feedback\",\n \"metaDescription\": \"Restaurant Management Agent provides information about the menu and ingredients, arranges reservations and gives information about group events, collects feedback\",\n \"furtherDescription\": \"Restaurant Management Agent provides information about the menu and ingredients, arranges reservations and gives information about group events, collects feedback\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/restaurant-management-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Restaurant Management Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"logistics-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Logistics Agent\",\n \"avatar\": \"\",\n \"description\": \"Logistics Agent assists the customers of courier companies in terms of the status of their shipments, inform the customers about the services and pricing, find out the nearest courier office to the customer\",\n \"metaDescription\": \"Logistics Agent assists the customers of courier companies in terms of the status of their shipments, inform the customers about the services and pricing, find out the nearest courier office to the customer\",\n \"furtherDescription\": \"Logistics Agent assists the customers of courier companies in terms of the status of their shipments, inform the customers about the services and pricing, find out the nearest courier office to the customer\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/logistics-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Logistics Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"transportation-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Transportation Agent\",\n \"avatar\": \"\",\n \"description\": \"Transportation Agent assist citizens with knowledge of the public and private transportation options in a city or country, provides roadmaps, allows users to book or buy tickets.\",\n \"metaDescription\": \"Transportation Agent assist citizens with knowledge of the public and private transportation options in a city or country, provides roadmaps, allows users to book or buy tickets.\",\n \"furtherDescription\": \"Transportation Agent assist citizens with knowledge of the public and private transportation options in a city or country, provides roadmaps, allows users to book or buy tickets.\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/transportation-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Transportation Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"retail-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Retail Agent\",\n \"avatar\": \"\",\n \"description\": \"Retail Agent is an assistant for retailers that enhances customer experience, optimizes inventory, and drives sales.\",\n \"metaDescription\": \"Retail Agent is an assistant for retailers that enhances customer experience, optimizes inventory, and drives sales.\",\n \"furtherDescription\": \"Retail Agent is an assistant for retailers that enhances customer experience, optimizes inventory, and drives sales.\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/retail-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Retail Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"insurance-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Insurance Agent\",\n \"avatar\": \"\",\n \"description\": \"Insurance Agent assists the clients of insurance companies who are seeking for appropriate insurance packages, or to be informed about coverages and pricing.\",\n \"metaDescription\": \"Insurance Agent assists the clients of insurance companies who are seeking for appropriate insurance packages, or to be informed about coverages and pricing.\",\n \"furtherDescription\": \"Insurance Agent assists the clients of insurance companies who are seeking for appropriate insurance packages, or to be informed about coverages and pricing.\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/insurance-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Insurance Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"client-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Client Agent\",\n \"avatar\": \"\",\n \"description\": \"Client Agent can inform the customers about the services of a law firm, provides really basic legal information or arranges appointments with related lawyers.\",\n \"metaDescription\": \"Client Agent can inform the customers about the services of a law firm, provides really basic legal information or arranges appointments with related lawyers.\",\n \"furtherDescription\": \"Client Agent can inform the customers about the services of a law firm, provides really basic legal information or arranges appointments with related lawyers.\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/client-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Client Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"financial-institute-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Financial Institute Agent\",\n \"avatar\": \"\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/financial-institute-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Financial Institute Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"fitness-club-gym-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Fitness Club-Gym Agent\",\n \"avatar\": \"\",\n \"description\": \"Fitness Club-Gym Agent provides basic information about fitness, nutrition and gives information about the classes at a gym. Also collects intake information, waiver (consent)\",\n \"metaDescription\": \"Fitness Club-Gym Agent provides basic information about fitness, nutrition and gives information about the classes at a gym. Also collects intake information, waiver (consent)\",\n \"furtherDescription\": \"Fitness Club-Gym Agent provides basic information about fitness, nutrition and gives information about the classes at a gym. Also collects intake information, waiver (consent)\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I sign up for a membership?\\\", \\\"What are the membership fees and available plans?\\\", \\\"Is there a free trial period available?\\\", \\\"How can I cancel or pause my membership?\\\", \\\"Are there any discounts for students or families?\\\"]\",\n \"url\": \"/agent-directory/fitness-club-gym-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Fitness Club-Gym Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"event-organization-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Event Organization Agent\",\n \"avatar\": \"\",\n \"description\": \"If you are organizing an event, you can use this agent to answer all the questions of the attendees. They can learn all the rules in the event area, You can also sell tickets for the event and collect payments using this agent.\",\n \"metaDescription\": \"If you are organizing an event, you can use this agent to answer all the questions of the attendees. They can learn all the rules in the event area, You can also sell tickets for the event and collect payments using this agent.\",\n \"furtherDescription\": \"If you are organizing an event, you can use this agent to answer all the questions of the attendees. They can learn all the rules in the event area, You can also sell tickets for the event and collect payments using this agent.\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/event-organization-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Event Organization Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"non-profit-organization-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Non-profit Organization Agent\",\n \"avatar\": \"\",\n \"description\": \"Non-profit Organization Agent gives information about the aims and works of the organization, collect donations\",\n \"metaDescription\": \"Non-profit Organization Agent gives information about the aims and works of the organization, collect donations\",\n \"furtherDescription\": \"Non-profit Organization Agent gives information about the aims and works of the organization, collect donations\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/non-profit-organization-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Non-profit Organization Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"church-pastor-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Church-Pastor Agent\",\n \"avatar\": \"\",\n \"description\": \"Church-Pastor Agent helps pastors to handle all the operations in a religious organization, including collecing donations, collecting prayer request, attendance information etc.\",\n \"metaDescription\": \"Church-Pastor Agent helps pastors to handle all the operations in a religious organization, including collecing donations, collecting prayer request, attendance information etc.\",\n \"furtherDescription\": \"Church-Pastor Agent helps pastors to handle all the operations in a religious organization, including collecing donations, collecting prayer request, attendance information etc.\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/church-pastor-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Church-Pastor Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"customer-service-representative\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Customer Service Representative\",\n \"avatar\": \"\",\n \"description\": \"Customer Service Representative Agent can handle customer queries, failure loggings, and suggest products based on customer preferences.\",\n \"metaDescription\": \"Customer Service Representative Agent can handle customer queries, failure loggings, and suggest products based on customer preferences.\",\n \"furtherDescription\": \"Customer Service Representative Agent can handle customer queries, failure loggings, and suggest products based on customer preferences.\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What are your shipping options?\\\", \\\"How do I return an item?\\\", \\\"When will I receive my refund?\\\", \\\"Do you offer product warranties?\\\", \\\"Do you offer discounts or promotions?\\\"]\",\n \"url\": \"/agent-directory/customer-service-representative\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Customer Service Representative\"\n },\n {\n \"id\": null,\n \"slug\": \"social-media-management-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Social Media Management Agent\",\n \"avatar\": \"\",\n \"description\": \"A creative assistant for the entertainment industry that aids creating social media campaigns\",\n \"metaDescription\": \"A creative assistant for the entertainment industry that aids creating social media campaigns\",\n \"furtherDescription\": \"A creative assistant for the entertainment industry that aids creating social media campaigns\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/social-media-management-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Social Media Management Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"veterinary-service-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Veterinary Service Agent\",\n \"avatar\": \"\",\n \"description\": \"Veterinary Service Agent provides basic information about animal health and arrange appointments for the pet owners.\",\n \"metaDescription\": \"Veterinary Service Agent provides basic information about animal health and arrange appointments for the pet owners.\",\n \"furtherDescription\": \"Veterinary Service Agent provides basic information about animal health and arrange appointments for the pet owners.\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/veterinary-service-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Veterinary Service Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"wedding-organization-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Wedding Organization Agent\",\n \"avatar\": \"\",\n \"description\": \"Wedding Organization Agent provides information about the organization and services, makes calendar, suggests additional services and service providers\",\n \"metaDescription\": \"Wedding Organization Agent provides information about the organization and services, makes calendar, suggests additional services and service providers\",\n \"furtherDescription\": \"Wedding Organization Agent provides information about the organization and services, makes calendar, suggests additional services and service providers\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/wedding-organization-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Wedding Organization Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"personal-training-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Personal Training Agent\",\n \"avatar\": \"\",\n \"description\": \"Personal Training Agent serves as an assistant to people who want to receive personal training courses.\",\n \"metaDescription\": \"Personal Training Agent serves as an assistant to people who want to receive personal training courses.\",\n \"furtherDescription\": \"Personal Training Agent serves as an assistant to people who want to receive personal training courses.\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/personal-training-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Personal Training Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"spa-massage-center-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Spa-Massage Center Agent\",\n \"avatar\": \"\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/spa-massage-center-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Spa-Massage Center Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"boutique-owner-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Boutique Owner Agent\",\n \"avatar\": \"\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/boutique-owner-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Boutique Owner Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"safety-inspections-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Safety Inspections Agent\",\n \"avatar\": \"\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/safety-inspections-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Safety Inspections Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"company-portal-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Company Portal Agent\",\n \"avatar\": \"\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/company-portal-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Company Portal Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"car-rental-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Car Rental Agent\",\n \"avatar\": \"\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/car-rental-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Car Rental Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"caregiver-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Caregiver Agent\",\n \"avatar\": \"\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/caregiver-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Caregiver Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"library-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Library Agent\",\n \"avatar\": \"\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/library-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Library Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"feedback-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Feedback Agent\",\n \"avatar\": \"\",\n \"description\": \"Feedback Agent enhances customer interactions by providing instant responses to feedback, categorizing it for easy analysis, and offering actionable insights.\",\n \"metaDescription\": \"Feedback Agent enhances customer interactions by providing instant responses to feedback, categorizing it for easy analysis, and offering actionable insights.\",\n \"furtherDescription\": \"Feedback Agent enhances customer interactions by providing instant responses to feedback, categorizing it for easy analysis, and offering actionable insights.\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/feedback-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Feedback Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"lead-generation-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Lead Generation Agent\",\n \"avatar\": \"\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/lead-generation-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Lead Generation Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"law-firm-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Law Firm Agent\",\n \"avatar\": \"\",\n \"description\": \"Law Firm Agent can inform the customers about the services of a law firm, provides really basic legal information or arranges appointments with related lawyers.\",\n \"metaDescription\": \"Law Firm Agent can inform the customers about the services of a law firm, provides really basic legal information or arranges appointments with related lawyers.\",\n \"furtherDescription\": \"Law Firm Agent can inform the customers about the services of a law firm, provides really basic legal information or arranges appointments with related lawyers.\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/law-firm-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Law Firm Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"internship-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Internship Agent\",\n \"avatar\": \"\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/internship-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Internship Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"life-coaching-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Life Coaching Agent\",\n \"avatar\": \"\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/life-coaching-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Life Coaching Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"it-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI IT Agent\",\n \"avatar\": \"\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/it-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"IT Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"rsvp-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI RSVP Agent\",\n \"avatar\": \"\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/rsvp-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"RSVP Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"yoga-instructor-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Yoga Instructor Agent\",\n \"avatar\": \"\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/yoga-instructor-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Yoga Instructor Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"dietitian-clinic-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Dietitian Clinic Agent\",\n \"avatar\": \"\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/dietitian-clinic-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Dietitian Clinic Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"e-commerce-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI E-commerce Agent\",\n \"avatar\": \"\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/e-commerce-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"E-commerce Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"dental-clinic-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Dental Clinic Agent\",\n \"avatar\": \"\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/dental-clinic-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Dental Clinic Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"tax-management-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Tax Management Agent\",\n \"avatar\": \"\",\n \"description\": \"Tax Management Agent assists clients about the applicable taxes, payment due dates and other tax obligations, provides very basic information about the taxes, arrange appointments with tax professionals\",\n \"metaDescription\": \"Tax Management Agent assists clients about the applicable taxes, payment due dates and other tax obligations, provides very basic information about the taxes, arrange appointments with tax professionals\",\n \"furtherDescription\": \"Tax Management Agent assists clients about the applicable taxes, payment due dates and other tax obligations, provides very basic information about the taxes, arrange appointments with tax professionals\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/tax-management-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Tax Management Agent\"\n },\n {\n \"id\": null,\n \"slug\": \"therapist-agent\",\n \"canonical\": \"\",\n \"agentName\": \"Nova\",\n \"title\": \"AI Therapist Agent\",\n \"avatar\": \"\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"imageUrl\": \"\",\n \"previewImageUrl\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": null,\n \"keywords\": \"\",\n \"created\": \"2024-09-06 15:01:44\",\n \"updated\": \"2024-09-06 15:01:44\",\n \"categories\": \"\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"\",\n \"url\": \"/agent-directory/therapist-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"screenshots\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Therapist Agent\"\n },\n {\n \"id\": \"242670498144967\",\n \"slug\": \"sales-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Sales Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Sales Managers with 7+ years in sales operations and order management.\\\",\\\"expertise\\\":\\\"Facilitates the sales order process, effectively capturing customer details and order specifications to enhance the sales workflow.\\\",\\\"personality\\\":\\\"Friendly, persuasive, and attentive, committed to providing an exceptional ordering experience for customers.\\\",\\\"special_skills\\\":\\\"Gathers vital information about products, quantities, and customer preferences to streamline the sales process.\\\"}\",\n \"description\": \"Sales Order AI Agent revolutionizes the sales order process by efficiently collecting order details and addressing customer inquiries in real time. This AI Agent is easily trainable, allowing businesses to tailor its responses based on specific product information and sales strategies. With customizable personalities, tones of voice, and avatars, it enhances customer interactions, creating a friendly and engaging atmosphere that fosters trust and facilitates smooth transactions. Elevate your sales operations with this intuitive and adaptable AI solution.\",\n \"metaDescription\": \"Sales Order AI Agent revolutionizes the sales order process by efficiently collecting order details and addressing customer inquiries in real time. This AI Agent is easily trainable, allowing businesses to tailor its responses based on specific product information and sales strategies. With customizable personalities, tones of voice, and avatars, it enhances customer interactions, creating a friendly and engaging atmosphere that fosters trust and facilitates smooth transactions. Elevate your sales operations with this intuitive and adaptable AI solution.\",\n \"furtherDescription\": \"Sales Order AI Agent revolutionizes the sales order process by efficiently collecting order details and addressing customer inquiries in real time. This AI Agent is easily trainable, allowing businesses to tailor its responses based on specific product information and sales strategies. With customizable personalities, tones of voice, and avatars, it enhances customer interactions, creating a friendly and engaging atmosphere that fosters trust and facilitates smooth transactions. Elevate your sales operations with this intuitive and adaptable AI solution.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30013,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30013\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I apply discount codes to my sales order?\\\",\\\"What types of products are available for sales orders?\\\",\\\"How can I view the status of my sales order?\\\",\\\"Is there a customer service line for urgent inquiries regarding my order?\\\",\\\"What information do I need to provide when placing a sales order?\\\"]\",\n \"url\": \"/agent-directory/sales-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/sales-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Sales Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670498144967-36b0435caf8c82be3d29209e8cb4abd7-thumbnail.png\"\n },\n {\n \"id\": \"242670845612963\",\n \"slug\": \"school-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"School Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced School Administrators with over 7 years of expertise in student registration and enrollment processes.\\\",\\\"expertise\\\":\\\"This AI Agent focuses on simplifying the school registration experience, assisting families in navigating application requirements, important dates, and necessary documentation.\\\",\\\"personality\\\":\\\"Warm, knowledgeable, and approachable, this agent ensures a supportive environment for parents and students during the registration journey.\\\",\\\"special_skills\\\":\\\"This AI Agent streamlines the school registration process by guiding users through the completion of forms and providing immediate responses to inquiries about school policies, required materials, and registration timelines. It can be trained with specific school data and offers customizable tones of voice and avatars to reflect your institution's unique character.\\\"}\",\n \"description\": \"Simplify the school enrollment experience with a dedicated AI Agent designed to assist families in the registration process. The School Registration AI Agent guides parents and students through filling out necessary forms while addressing questions about admission requirements, school policies, and available programs. Perfect for school administrators and enrollment officers, this AI Agent can be tailored with specific institutional data, ensuring a smooth and efficient registration experience that sets students on the path to success.\",\n \"metaDescription\": \"Simplify the school enrollment experience with a dedicated AI Agent designed to assist families in the registration process. The School Registration AI Agent guides parents and students through filling out necessary forms while addressing questions about admission requirements, school policies, and available programs. Perfect for school administrators and enrollment officers, this AI Agent can be tailored with specific institutional data, ensuring a smooth and efficient registration experience that sets students on the path to success.\",\n \"furtherDescription\": \"Simplify the school enrollment experience with a dedicated AI Agent designed to assist families in the registration process. The School Registration AI Agent guides parents and students through filling out necessary forms while addressing questions about admission requirements, school policies, and available programs. Perfect for school administrators and enrollment officers, this AI Agent can be tailored with specific institutional data, ensuring a smooth and efficient registration experience that sets students on the path to success.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30000,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30000\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I register my child for school using the AI Agent?\\\",\\\"What information do I need to provide for school registration?\\\",\\\"Are there any registration fees for enrolling in school?\\\",\\\"Can I update my child's registration information after it\\\\u2019s been submitted?\\\",\\\"How will I receive confirmation of my child's school registration?\\\"]\",\n \"url\": \"/agent-directory/school-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/school-registration\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"School Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670845612963-642c07bbdfeffc083fe80b1fa5084c13-thumbnail.png\"\n },\n {\n \"id\": \"242670995927978\",\n \"slug\": \"bakery-products-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Bakery Products Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Culinary Experts with over 7 years of experience in bakery operations and customer service.\\\",\\\"expertise\\\":\\\"This AI Agent streamlines the ordering process for bakery products, helping customers select from a variety of baked goods, including bread, pastries, cakes, and cookies, while accommodating special requests and dietary preferences.\\\",\\\"personality\\\":\\\"Friendly and knowledgeable, this agent captures the warmth and charm of a local bakery, making customers feel welcomed and appreciated as they explore delicious options.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through product selections, answers questions about ingredients and allergens, and manages custom orders for special occasions, ensuring a delightful and seamless ordering experience.\\\"}\",\n \"description\": \"The Bakery Products Order AI Agent transforms the way customers order delicious treats by engaging them in friendly conversations. It gathers essential information, such as product selections, quantities, and customization options, while answering any questions about ingredients and availability. With its intuitive interface and ability to create a personalized experience, this AI Agent ensures that ordering bakery delights is smooth, enjoyable, and efficient for all customers.\",\n \"metaDescription\": \"The Bakery Products Order AI Agent transforms the way customers order delicious treats by engaging them in friendly conversations. It gathers essential information, such as product selections, quantities, and customization options, while answering any questions about ingredients and availability. With its intuitive interface and ability to create a personalized experience, this AI Agent ensures that ordering bakery delights is smooth, enjoyable, and efficient for all customers.\",\n \"furtherDescription\": \"The Bakery Products Order AI Agent transforms the way customers order delicious treats by engaging them in friendly conversations. It gathers essential information, such as product selections, quantities, and customization options, while answering any questions about ingredients and availability. With its intuitive interface and ability to create a personalized experience, this AI Agent ensures that ordering bakery delights is smooth, enjoyable, and efficient for all customers.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30019,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30019\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I choose different flavors for my bakery products?\\\",\\\"Is there a gluten-free option for the bakery products?\\\",\\\"Can I customize the order for a specific event?\\\",\\\"How soon can I receive my bakery order?\\\",\\\"Do you offer bulk pricing for large orders?\\\"]\",\n \"url\": \"/agent-directory/bakery-products-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/bakery-products-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Bakery Products Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670995927978-a33be20bf256851915d49514a29d935c-thumbnail.png\"\n },\n {\n \"id\": \"242670700936962\",\n \"slug\": \"product-purchase-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Product Purchase Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Supply Chain Experts with over 8 years of experience in procurement and inventory management.\\\",\\\"expertise\\\":\\\"This AI Agent simplifies the process of placing purchase orders for products, helping teams manage their inventory efficiently while adhering to budget constraints.\\\",\\\"personality\\\":\\\"Detail-oriented and proactive, this agent ensures users feel confident in their purchasing decisions, streamlining the procurement process.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through order forms, answers questions about product availability and pricing, and ensures accurate processing of purchase orders.\\\"}\",\n \"description\": \"The Product Purchase Order AI Agent assists users in placing orders for products by guiding them through necessary fields, such as item selection, quantity, and delivery details. It can be trained to understand specific requirements and provide accurate answers to questions. Additionally, each agent can have distinct personalities, tones of voice, and appearances, all of which can be customized to fit your business needs.\",\n \"metaDescription\": \"The Product Purchase Order AI Agent assists users in placing orders for products by guiding them through necessary fields, such as item selection, quantity, and delivery details. It can be trained to understand specific requirements and provide accurate answers to questions. Additionally, each agent can have distinct personalities, tones of voice, and appearances, all of which can be customized to fit your business needs.\",\n \"furtherDescription\": \"The Product Purchase Order AI Agent assists users in placing orders for products by guiding them through necessary fields, such as item selection, quantity, and delivery details. It can be trained to understand specific requirements and provide accurate answers to questions. Additionally, each agent can have distinct personalities, tones of voice, and appearances, all of which can be customized to fit your business needs.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20103,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20103\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I order multiple products in one form?\\\",\\\"Can I track my product order after it has been submitted?\\\",\\\"How quickly will the products be delivered?\\\",\\\"Is there an option to bulk order products?\\\",\\\"Can I request a specific brand or model for the product?\\\"]\",\n \"url\": \"/agent-directory/product-purchase-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/product-purchase-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Product Purchase Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670700936962-625ea7f6d580c7beaef2920c564ed583-thumbnail.png\"\n },\n {\n \"id\": \"242670762340959\",\n \"slug\": \"t-shirt-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"T-Shirt Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Apparel Specialists with over 6 years of experience in custom apparel sales and customer service.\\\",\\\"expertise\\\":\\\"This AI Agent enhances the t-shirt ordering process by assisting customers in selecting styles, colors, sizes, and printing options while providing clarity on pricing and delivery timelines.\\\",\\\"personality\\\":\\\"Casual, friendly, and approachable, this agent embodies a laid-back vibe, making the ordering experience relaxed and enjoyable for users.\\\",\\\"special_skills\\\":\\\"The AI Agent adeptly navigates users through order forms, answers questions about fabric choices, customization details, and order status, ensuring a seamless and satisfying shopping experience.\\\"}\",\n \"description\": \"The T-shirt Order AI Agent transforms the ordering process into a personalized conversation. It guides customers through selecting sizes, colors, and styles while answering their questions about pricing, customization, and shipping. This AI agent simplifies the entire process, making ordering T-shirts fast, intuitive, and engaging for a seamless shopping experience.\",\n \"metaDescription\": \"The T-shirt Order AI Agent transforms the ordering process into a personalized conversation. It guides customers through selecting sizes, colors, and styles while answering their questions about pricing, customization, and shipping. This AI agent simplifies the entire process, making ordering T-shirts fast, intuitive, and engaging for a seamless shopping experience.\",\n \"furtherDescription\": \"The T-shirt Order AI Agent transforms the ordering process into a personalized conversation. It guides customers through selecting sizes, colors, and styles while answering their questions about pricing, customization, and shipping. This AI agent simplifies the entire process, making ordering T-shirts fast, intuitive, and engaging for a seamless shopping experience.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20101,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20101\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What material are the t-shirts made of?\\\",\\\"Can I order t-shirts in bulk?\\\",\\\"Do you offer different styles of t-shirts?\\\",\\\"Are there any discounts for large orders?\\\",\\\"Can I choose the font for custom text on the t-shirts?\\\"]\",\n \"url\": \"/agent-directory/t-shirt-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/t-shirt-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"T-Shirt Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670762340959-3efa024809fa36a2565c67b65576fb84-thumbnail.png\"\n },\n {\n \"id\": \"242671468803967\",\n \"slug\": \"student-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Student Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Educational Administrators with over 6 years of experience in managing student enrollment processes in academic institutions.\\\",\\\"expertise\\\":\\\"This AI Agent is designed to streamline the student registration process, helping prospective students complete necessary forms and understand the enrollment requirements.\\\",\\\"personality\\\":\\\"Friendly, informative, and supportive, the agent ensures that students feel guided and encouraged as they navigate their registration journey.\\\",\\\"special_skills\\\":\\\"The AI Agent expertly assists users through registration forms and provides real-time answers to inquiries about course offerings, admission criteria, and campus resources. Customizable with specific school details, it features avatars and tones of voice that embody the welcoming and nurturing spirit of the educational environment.\\\"}\",\n \"description\": \"Simplify the enrollment process for educational institutions with an AI Agent designed for student registrations. This Student Registration AI Agent assists prospective students in completing registration forms by asking essential questions about personal information, academic history, program selection, and contact details. Ideal for schools, colleges, and universities, this AI Agent can be trained with specific institutional requirements and procedures. With customizable features, including friendly avatars, engaging tones, and approachable personalities, it creates an efficient and welcoming registration experience, ensuring that students feel excited and supported as they begin their educational journey.\",\n \"metaDescription\": \"Simplify the enrollment process for educational institutions with an AI Agent designed for student registrations. This Student Registration AI Agent assists prospective students in completing registration forms by asking essential questions about personal information, academic history, program selection, and contact details. Ideal for schools, colleges, and universities, this AI Agent can be trained with specific institutional requirements and procedures. With customizable features, including friendly avatars, engaging tones, and approachable personalities, it creates an efficient and welcoming registration experience, ensuring that students feel excited and supported as they begin their educational journey.\",\n \"furtherDescription\": \"Simplify the enrollment process for educational institutions with an AI Agent designed for student registrations. This Student Registration AI Agent assists prospective students in completing registration forms by asking essential questions about personal information, academic history, program selection, and contact details. Ideal for schools, colleges, and universities, this AI Agent can be trained with specific institutional requirements and procedures. With customizable features, including friendly avatars, engaging tones, and approachable personalities, it creates an efficient and welcoming registration experience, ensuring that students feel excited and supported as they begin their educational journey.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30003,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30003\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide for student registration?\\\",\\\"Is there a specific deadline for completing the registration process?\\\",\\\"What documents are required for the registration?\\\",\\\"Will I receive confirmation after submitting the registration?\\\",\\\"What are the school\\\\u2019s registration hours?\\\"]\",\n \"url\": \"/agent-directory/student-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/student-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Student Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671468803967-30da814a4bdb8dd182aa84571edb9e0a-thumbnail.png\"\n },\n {\n \"id\": \"20840339161448\",\n \"slug\": \"new-patient-enrollment-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"New Patient Enrollment AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Healthcare Administrators with over 5 years of experience in managing patient registration processes in medical facilities and clinics.\\\",\\\"expertise\\\":\\\"Designed to streamline the new patient enrollment process, this AI Agent assists patients in completing necessary forms and understanding healthcare services offered.\\\",\\\"personality\\\":\\\"Caring, informative, and approachable, the agent ensures that new patients feel welcomed and supported throughout their enrollment journey.\\\",\\\"special_skills\\\":\\\"This AI Agent efficiently guides users through enrollment forms and provides real-time answers to questions about appointment scheduling, insurance options, and clinic services. Customizable with specific facility information, it features avatars and tones of voice that convey warmth and professionalism, making the healthcare experience more accessible.\\\"}\",\n \"description\": \"Welcome new patients to your practice with an AI Agent designed to streamline the enrollment process. This New Patient Enrollment AI Agent guides users through filling out registration forms and provides answers to questions about services, insurance, and appointment scheduling. Ideal for healthcare providers and clinics, this AI Agent can be trained with specific practice information. Featuring customizable traits, including friendly avatars, reassuring tones, and approachable personalities, it creates a welcoming experience that helps patients feel at ease from the very beginning of their healthcare journey.\",\n \"metaDescription\": \"Welcome new patients to your practice with an AI Agent designed to streamline the enrollment process. This New Patient Enrollment AI Agent guides users through filling out registration forms and provides answers to questions about services, insurance, and appointment scheduling. Ideal for healthcare providers and clinics, this AI Agent can be trained with specific practice information. Featuring customizable traits, including friendly avatars, reassuring tones, and approachable personalities, it creates a welcoming experience that helps patients feel at ease from the very beginning of their healthcare journey.\",\n \"furtherDescription\": \"Welcome new patients to your practice with an AI Agent designed to streamline the enrollment process. This New Patient Enrollment AI Agent guides users through filling out registration forms and provides answers to questions about services, insurance, and appointment scheduling. Ideal for healthcare providers and clinics, this AI Agent can be trained with specific practice information. Featuring customizable traits, including friendly avatars, reassuring tones, and approachable personalities, it creates a welcoming experience that helps patients feel at ease from the very beginning of their healthcare journey.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30002,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30002\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide for new patient enrollment?\\\",\\\"What is the enrollment deadline for new patients?\\\",\\\"What are the office hours for patient enrollment?\\\",\\\"Do I need to bring any documents for enrollment?\\\",\\\"How will I receive confirmation of my new patient enrollment?\\\"]\",\n \"url\": \"/agent-directory/new-patient-enrollment-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/new-patient-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"New Patient Enrollment AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/20840339161448-1f9b34cbba8a8d527d8265395119a4ee-thumbnail.png\"\n },\n {\n \"id\": \"242671076562964\",\n \"slug\": \"fundraising-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Fundraising Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Fundraising Coordinators with 6+ years of experience in organizing charitable events and campaigns.\\\",\\\"expertise\\\":\\\"Captures participant information efficiently, facilitating a smooth registration process for various fundraising initiatives.\\\",\\\"personality\\\":\\\"Friendly, enthusiastic, and detail-oriented, eager to motivate participants and ensure their engagement.\\\",\\\"special_skills\\\":\\\"Collects information on donations, participant details, and preferences to enhance the fundraising experience.\\\"}\",\n \"description\": \"Fundraising Registration AI Agent simplifies the process of signing up for fundraising events, making it easy for participants to get involved. This AI Agent collects necessary details such as names, contact information, and fundraising goals, streamlining the registration experience. With the ability to be trained on specific event details, it provides relevant assistance tailored to each fundraiser. Its approachable personality and customizable appearance encourage engagement and excitement about contributing to meaningful causes.\",\n \"metaDescription\": \"Fundraising Registration AI Agent simplifies the process of signing up for fundraising events, making it easy for participants to get involved. This AI Agent collects necessary details such as names, contact information, and fundraising goals, streamlining the registration experience. With the ability to be trained on specific event details, it provides relevant assistance tailored to each fundraiser. Its approachable personality and customizable appearance encourage engagement and excitement about contributing to meaningful causes.\",\n \"furtherDescription\": \"Fundraising Registration AI Agent simplifies the process of signing up for fundraising events, making it easy for participants to get involved. This AI Agent collects necessary details such as names, contact information, and fundraising goals, streamlining the registration experience. With the ability to be trained on specific event details, it provides relevant assistance tailored to each fundraiser. Its approachable personality and customizable appearance encourage engagement and excitement about contributing to meaningful causes.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30015,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30015\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I register for a fundraising event?\\\",\\\"What payment methods are accepted for fundraising registration?\\\",\\\"Is there a registration deadline for fundraising events?\\\",\\\"Can I edit my registration information after submitting the form?\\\",\\\"Will I receive a confirmation after registering for the event?\\\"]\",\n \"url\": \"/agent-directory/fundraising-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/fundraising-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Fundraising Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671076562964-3b183706bb1b35badee3de20e1b561ab-thumbnail.png\"\n },\n {\n \"id\": \"242671272259965\",\n \"slug\": \"restaurant-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Restaurant Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Restaurant management professionals with 8+ years of experience in food service operations.\\\",\\\"expertise\\\":\\\"Streamlines the order process by collecting customer preferences, dietary restrictions, and special requests.\\\",\\\"personality\\\":\\\"Friendly, attentive, and energetic, focused on creating a positive dining experience for customers.\\\",\\\"special_skills\\\":\\\"Gathers detailed information about menu selections, special orders, and timing for efficient service delivery.\\\"}\",\n \"description\": \"Restaurant Order AI Agent handles customer orders in restaurants with ease, offering a dynamic interaction that guides guests through the menu while collecting specific order details, such as dietary preferences or customization requests. Trained with restaurant-specific information, it can also help answer questions about ingredients, preparation methods, or allergen concerns. This AI Agent can be designed with a warm, inviting tone, making the dining experience seamless, whether it's for dine-in, takeout, or delivery. The agent’s appearance, voice, and personality can also be tailored to fit the atmosphere of any restaurant, from casual diners to upscale establishments.\",\n \"metaDescription\": \"Restaurant Order AI Agent handles customer orders in restaurants with ease, offering a dynamic interaction that guides guests through the menu while collecting specific order details, such as dietary preferences or customization requests. Trained with restaurant-specific information, it can also help answer questions about ingredients, preparation methods, or allergen concerns. This AI Agent can be designed with a warm, inviting tone, making the dining experience seamless, whether it's for dine-in, takeout, or delivery. The agent’s appearance, voice, and personality can also be tailored to fit the atmosphere of any restaurant, from casual diners to upscale establishments.\",\n \"furtherDescription\": \"Restaurant Order AI Agent handles customer orders in restaurants with ease, offering a dynamic interaction that guides guests through the menu while collecting specific order details, such as dietary preferences or customization requests. Trained with restaurant-specific information, it can also help answer questions about ingredients, preparation methods, or allergen concerns. This AI Agent can be designed with a warm, inviting tone, making the dining experience seamless, whether it's for dine-in, takeout, or delivery. The agent’s appearance, voice, and personality can also be tailored to fit the atmosphere of any restaurant, from casual diners to upscale establishments.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30019,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30019\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I specify my dietary preferences when ordering?\\\",\\\"Can I place an order for a large group or event?\\\",\\\"How do I customize my order (e.g., remove ingredients)?\\\",\\\"Is there an option to schedule my order for a specific time?\\\",\\\"Can I save my order preferences for future use?\\\"]\",\n \"url\": \"/agent-directory/restaurant-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/restaurant-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Restaurant Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671272259965-7b87b32bcc6584e8765649f413031f6a-thumbnail.png\"\n },\n {\n \"id\": \"242671166859973\",\n \"slug\": \"custom-apparel-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Custom Apparel Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Apparel Design Specialists with over 5 years of experience in custom clothing and fashion retail.\\\",\\\"expertise\\\":\\\"This AI Agent facilitates the ordering of custom apparel, helping users choose designs, fabrics, and sizes for a personalized look.\\\",\\\"personality\\\":\\\"Inventive and stylish, this agent inspires users to express their individuality through custom clothing choices.\\\",\\\"special_skills\\\":\\\"The AI Agent helps users navigate order forms, answers questions about design options and turnaround times, and ensures timely processing of custom orders.\\\"}\",\n \"description\": \" The Custom Apparel Order AI Agent guides customers through the ordering process for personalized clothing items, collecting information such as sizes, colors, and design preferences. This AI Agent can be trained to match your specific product offerings and brand identity, while its customizable personality, tone of voice, and appearance enhance user interaction. Ideal for businesses looking to improve their custom apparel ordering experience.\",\n \"metaDescription\": \" The Custom Apparel Order AI Agent guides customers through the ordering process for personalized clothing items, collecting information such as sizes, colors, and design preferences. This AI Agent can be trained to match your specific product offerings and brand identity, while its customizable personality, tone of voice, and appearance enhance user interaction. Ideal for businesses looking to improve their custom apparel ordering experience.\",\n \"furtherDescription\": \" The Custom Apparel Order AI Agent guides customers through the ordering process for personalized clothing items, collecting information such as sizes, colors, and design preferences. This AI Agent can be trained to match your specific product offerings and brand identity, while its customizable personality, tone of voice, and appearance enhance user interaction. Ideal for businesses looking to improve their custom apparel ordering experience.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20105,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20105\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What customization options are available for my apparel?\\\",\\\"Can I see a mock-up of my custom design before ordering?\\\",\\\"What is the minimum order quantity for custom apparel?\\\",\\\"How do I provide artwork for my custom designs?\\\",\\\"When can I expect to receive my custom apparel order?\\\"]\",\n \"url\": \"/agent-directory/custom-apparel-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/custom-apparel-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Custom Apparel Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671166859973-e995ebe65dd4afc15ff74f15816677ac-thumbnail.png\"\n },\n {\n \"id\": \"242670501120946\",\n \"slug\": \"sports-photography-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Sports Photography Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Professional Sports Photographers with over 8 years of experience in capturing sporting events and team portraits.\\\",\\\"expertise\\\":\\\"This AI Agent facilitates the ordering of sports photography services, helping users select packages and understand pricing for their athletic events.\\\",\\\"personality\\\":\\\"Dynamic and passionate, this agent reflects the energy of sports, ensuring users feel excited about documenting their achievements.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users with order forms, answers questions about photo packages and timelines, and confirms successful bookings.\\\"}\",\n \"description\": \"The Sports Photography Order AI Agent helps clients easily schedule photography sessions for their events by guiding them through key details such as sport type, date, time, and location. This AI Agent can be trained to align with your business needs while effectively filling out forms and answering inquiries. With customizable tones, personalities, and avatars, it ensures a professional and engaging booking experience for all users.\",\n \"metaDescription\": \"The Sports Photography Order AI Agent helps clients easily schedule photography sessions for their events by guiding them through key details such as sport type, date, time, and location. This AI Agent can be trained to align with your business needs while effectively filling out forms and answering inquiries. With customizable tones, personalities, and avatars, it ensures a professional and engaging booking experience for all users.\",\n \"furtherDescription\": \"The Sports Photography Order AI Agent helps clients easily schedule photography sessions for their events by guiding them through key details such as sport type, date, time, and location. This AI Agent can be trained to align with your business needs while effectively filling out forms and answering inquiries. With customizable tones, personalities, and avatars, it ensures a professional and engaging booking experience for all users.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20106,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20106\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of sports events can I book photography for?\\\",\\\"Can I request action shots during the event?\\\",\\\"Is there a way to include team photos as part of the order?\\\",\\\"Can I select specific players to highlight in the photos?\\\",\\\"Will I receive both digital and printed options for the sports photos?\\\"]\",\n \"url\": \"/agent-directory/sports-photography-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/sports-photography-order-form-template\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Sports Photography Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670501120946-36fe24f6ad10b36bf8249c4fcc474aa3-thumbnail.png\"\n },\n {\n \"id\": \"242671055061955\",\n \"slug\": \"supplies-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Supplies Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Real Supply Chain Managers with 8+ years of experience in managing supply orders for businesses and educational institutions.\\\",\\\"expertise\\\":\\\"Assists users in placing orders for a wide range of supplies, ensuring they meet organizational needs while streamlining the order process and guiding users through common supply queries.\\\",\\\"personality\\\":\\\"Professional, efficient, and resourceful, ready to provide assistance and solutions to any supply-related inquiries.\\\",\\\"special_skills\\\":\\\"Gathers detailed order information and tracks previous supply purchases to ensure repeat orders are as efficient as possible.\\\"}\",\n \"description\": \"Supplies Order AI Agent streamlines the process of ordering essential supplies for businesses or organizations. Whether you're managing office needs or bulk purchasing, this AI efficiently collects order details and answers questions about availability, delivery times, and pricing. Businesses can also train the agent with their own data, making it a perfect fit for specific inventory systems and workflows, ensuring an intuitive and seamless ordering experience.\",\n \"metaDescription\": \"Supplies Order AI Agent streamlines the process of ordering essential supplies for businesses or organizations. Whether you're managing office needs or bulk purchasing, this AI efficiently collects order details and answers questions about availability, delivery times, and pricing. Businesses can also train the agent with their own data, making it a perfect fit for specific inventory systems and workflows, ensuring an intuitive and seamless ordering experience.\",\n \"furtherDescription\": \"Supplies Order AI Agent streamlines the process of ordering essential supplies for businesses or organizations. Whether you're managing office needs or bulk purchasing, this AI efficiently collects order details and answers questions about availability, delivery times, and pricing. Businesses can also train the agent with their own data, making it a perfect fit for specific inventory systems and workflows, ensuring an intuitive and seamless ordering experience.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20107,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20107\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of supplies can I order through this agent?\\\",\\\"How can I check the availability of a specific item?\\\",\\\"Can I place a bulk order for supplies?\\\",\\\"What is the estimated delivery time for my order?\\\",\\\"Do you offer returns or exchanges for supplies?\\\"]\",\n \"url\": \"/agent-directory/supplies-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/supplies-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Supplies Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671055061955-8badc7f1b2b6d1f36d3e9cf49a56b119-thumbnail.png\"\n },\n {\n \"id\": \"242671194888976\",\n \"slug\": \"online-flower-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Online Flower Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Floral Designers with 5+ years of experience in floral arrangements and customer service.\\\",\\\"expertise\\\":\\\"Guides users through selecting the perfect floral arrangements for any occasion, while efficiently gathering order details.\\\",\\\"personality\\\":\\\"Charming, attentive, and creative, dedicated to making every floral selection process enjoyable and memorable.\\\",\\\"special_skills\\\":\\\"Collects preferences for flower types, arrangements, and delivery options to create a personalized shopping experience.\\\"}\",\n \"description\": \"Online Flower Order AI Agent assists customers in selecting and ordering flowers for any occasion. From bouquets to custom arrangements, this AI Agent gathers details like flower type, occasion, and delivery date. It can be trained with specific florists' offerings to provide tailored advice on seasonal blooms or floral care. The agent's personality, tone, and avatar are customizable, allowing it to create a warm and thoughtful ordering experience for customers, whether they’re celebrating a birthday, anniversary, or sending condolences.\",\n \"metaDescription\": \"Online Flower Order AI Agent assists customers in selecting and ordering flowers for any occasion. From bouquets to custom arrangements, this AI Agent gathers details like flower type, occasion, and delivery date. It can be trained with specific florists' offerings to provide tailored advice on seasonal blooms or floral care. The agent's personality, tone, and avatar are customizable, allowing it to create a warm and thoughtful ordering experience for customers, whether they’re celebrating a birthday, anniversary, or sending condolences.\",\n \"furtherDescription\": \"Online Flower Order AI Agent assists customers in selecting and ordering flowers for any occasion. From bouquets to custom arrangements, this AI Agent gathers details like flower type, occasion, and delivery date. It can be trained with specific florists' offerings to provide tailored advice on seasonal blooms or floral care. The agent's personality, tone, and avatar are customizable, allowing it to create a warm and thoughtful ordering experience for customers, whether they’re celebrating a birthday, anniversary, or sending condolences.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30017,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30017\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I order flowers online?\\\",\\\"Can I include a personalized message with my flower order?\\\",\\\"Do you offer same-day delivery for flowers?\\\",\\\"Can I select specific flowers for my arrangement?\\\",\\\"How do I know when my flower order has been delivered?\\\"]\",\n \"url\": \"/agent-directory/online-flower-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/online-flower-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Online Flower Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671194888976-9ff60d4c4c0c8e652bf6e5c71a31ba12-thumbnail.png\"\n },\n {\n \"id\": \"242670510562956\",\n \"slug\": \"change-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Change Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Order management specialists with 6+ years of experience in processing change requests.\\\",\\\"expertise\\\":\\\"Facilitates the submission of change orders, collecting necessary information to ensure smooth transitions and adjustments.\\\",\\\"personality\\\":\\\"Detail-oriented, organized, and responsive, focused on delivering excellent customer service.\\\",\\\"special_skills\\\":\\\"Gathers specifics on changes needed, including product modifications and timelines, to streamline the order process.\\\"}\",\n \"description\": \"Change Request AI Agent efficiently handles customer requests for changes to existing orders or service agreements. Whether modifying a product order, updating delivery details, or adjusting service preferences, this AI Agent collects the necessary information and guides users through the process. Trained with flexibility in mind, it answers questions related to the requested changes while maintaining clear communication. Its customizable personality and tone can be adapted to match a professional or customer-centric approach, ensuring users feel supported throughout their change request journey.\\n\\n\\n\\n\\n\\n\",\n \"metaDescription\": \"Change Request AI Agent efficiently handles customer requests for changes to existing orders or service agreements. Whether modifying a product order, updating delivery details, or adjusting service preferences, this AI Agent collects the necessary information and guides users through the process. Trained with flexibility in mind, it answers questions related to the requested changes while maintaining clear communication. Its customizable personality and tone can be adapted to match a professional or customer-centric approach, ensuring users feel supported throughout their change request journey.\\n\\n\\n\\n\\n\\n\",\n \"furtherDescription\": \"Change Request AI Agent efficiently handles customer requests for changes to existing orders or service agreements. Whether modifying a product order, updating delivery details, or adjusting service preferences, this AI Agent collects the necessary information and guides users through the process. Trained with flexibility in mind, it answers questions related to the requested changes while maintaining clear communication. Its customizable personality and tone can be adapted to match a professional or customer-centric approach, ensuring users feel supported throughout their change request journey.\\n\\n\\n\\n\\n\\n\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30018,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30018\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I submit a change order request for a project?\\\",\\\"What types of changes can be made through a change order?\\\",\\\"Do I need approval for a change order request?\\\",\\\"How do I track the status of my change order?\\\",\\\"Is there an additional cost associated with a change order?\\\"]\",\n \"url\": \"/agent-directory/change-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/change-order\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Change Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670510562956-8fc65df71c51559905915ff561f6a5d8-thumbnail.png\"\n },\n {\n \"id\": \"21211840164542\",\n \"slug\": \"tickets-purchase-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Tickets Purchase Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Event Coordinators with over 5 years of experience in ticket sales and event management.\\\",\\\"expertise\\\":\\\"This AI Agent assists users in purchasing tickets for various events, guiding them through seating options, pricing, and availability for a seamless buying experience.\\\",\\\"personality\\\":\\\"Enthusiastic and engaging, this agent creates excitement around events, ensuring users feel informed and eager to attend their chosen experiences.\\\",\\\"special_skills\\\":\\\"The AI Agent helps users navigate ticket order forms, answers questions about event details and policies, and confirms successful purchases promptly.\\\"}\",\n \"description\": \"The Tickets Purchase Order AI Agent streamlines the ticket purchasing process by guiding users through essential form fields, such as event selection, date, and quantity. It can be trained to answer specific inquiries and provide personalized assistance. With customizable personalities, tones of voice, and avatars, each agent can reflect your brand's identity while ensuring an engaging user experience throughout the ordering journey.\",\n \"metaDescription\": \"The Tickets Purchase Order AI Agent streamlines the ticket purchasing process by guiding users through essential form fields, such as event selection, date, and quantity. It can be trained to answer specific inquiries and provide personalized assistance. With customizable personalities, tones of voice, and avatars, each agent can reflect your brand's identity while ensuring an engaging user experience throughout the ordering journey.\",\n \"furtherDescription\": \"The Tickets Purchase Order AI Agent streamlines the ticket purchasing process by guiding users through essential form fields, such as event selection, date, and quantity. It can be trained to answer specific inquiries and provide personalized assistance. With customizable personalities, tones of voice, and avatars, each agent can reflect your brand's identity while ensuring an engaging user experience throughout the ordering journey.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20103,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20103\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I purchase tickets for multiple events in one form submission?\\\",\\\"Can I choose my seat during the ticket purchase process?\\\",\\\"How soon will I receive my tickets after ordering?\\\",\\\"Are group discounts available for ticket purchases?\\\",\\\"Can I request refunds or exchanges through the form?\\\"]\",\n \"url\": \"/agent-directory/tickets-purchase-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/tickets-purchase-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Tickets Purchase Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/21211840164542-c6e5d5ec6e89ebdf854ecb1959dd7887-thumbnail.png\"\n },\n {\n \"id\": \"242670784603965\",\n \"slug\": \"cupcake-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Cupcake Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Pastry Chefs with over 5 years of experience in bakery management and customer relations.\\\",\\\"expertise\\\":\\\"This AI Agent streamlines the cupcake ordering process, allowing customers to select flavors, fillings, frosting types, and decorative options while also offering insights on seasonal specials and bulk order discounts.\\\",\\\"personality\\\":\\\"Delightful and cheerful, this agent embodies the sweetness of cupcakes, creating an inviting atmosphere that makes customers excited to explore their options and indulge in delicious treats.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through the menu, answers questions about ingredients and allergen information, and assists with delivery arrangements, ensuring a seamless and enjoyable cupcake ordering experience.\\\"}\",\n \"description\": \"The Cupcake Order AI Agent transforms the way customers place cupcake orders by engaging them in an interactive conversation about their flavor preferences, quantities, and special dietary needs. It answers questions about ingredients and customization options while efficiently collecting all necessary information. Perfect for bakery owners and catering managers, this AI Agent enhances customer satisfaction and streamlines the ordering process for delightful treats.\",\n \"metaDescription\": \"The Cupcake Order AI Agent transforms the way customers place cupcake orders by engaging them in an interactive conversation about their flavor preferences, quantities, and special dietary needs. It answers questions about ingredients and customization options while efficiently collecting all necessary information. Perfect for bakery owners and catering managers, this AI Agent enhances customer satisfaction and streamlines the ordering process for delightful treats.\",\n \"furtherDescription\": \"The Cupcake Order AI Agent transforms the way customers place cupcake orders by engaging them in an interactive conversation about their flavor preferences, quantities, and special dietary needs. It answers questions about ingredients and customization options while efficiently collecting all necessary information. Perfect for bakery owners and catering managers, this AI Agent enhances customer satisfaction and streamlines the ordering process for delightful treats.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20102,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20102\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I order cupcakes in different flavors?\\\",\\\"Do you offer custom decorations for the cupcakes?\\\",\\\"Is there a minimum number of cupcakes I need to order?\\\",\\\"Can I get gluten-free or vegan cupcakes?\\\",\\\"How far in advance should I place my order?\\\"]\",\n \"url\": \"/agent-directory/cupcake-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/colorful-cupcake-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Cupcake Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670784603965-ca248fda93c162013aa04d2698baec25-thumbnail.png\"\n },\n {\n \"id\": \"242670654637968\",\n \"slug\": \"cricket-tournament-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Cricket Tournament Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Sports Coordinators with over 6 years of expertise in organizing cricket tournaments and managing team registrations.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating the registration process for cricket tournaments, assisting teams and players in navigating entry requirements and schedules.\\\",\\\"personality\\\":\\\"Energetic, enthusiastic, and supportive, this agent creates an exciting atmosphere for cricket enthusiasts eager to participate in competitive play.\\\",\\\"special_skills\\\":\\\"This AI Agent simplifies the cricket tournament registration process by guiding users through necessary forms and providing real-time answers to questions about tournament rules, schedules, and fees. It can be tailored with specific tournament information and features customizable tones of voice and avatars to reflect your cricket league's vibrant spirit.\\\"}\",\n \"description\": \"Elevate your cricket tournament experience with an AI Agent designed to streamline the registration process for teams and players. The Cricket Tournament Registration AI Agent guides users through completing their registration forms while answering questions about match schedules, rules, and team requirements. Perfect for tournament organizers and sports coordinators, this AI Agent can be trained with specific tournament details. With customizable personalities, tones of voice, and appearances, it creates an engaging and efficient registration experience that helps promote teamwork and excitement in the sport.\",\n \"metaDescription\": \"Elevate your cricket tournament experience with an AI Agent designed to streamline the registration process for teams and players. The Cricket Tournament Registration AI Agent guides users through completing their registration forms while answering questions about match schedules, rules, and team requirements. Perfect for tournament organizers and sports coordinators, this AI Agent can be trained with specific tournament details. With customizable personalities, tones of voice, and appearances, it creates an engaging and efficient registration experience that helps promote teamwork and excitement in the sport.\",\n \"furtherDescription\": \"Elevate your cricket tournament experience with an AI Agent designed to streamline the registration process for teams and players. The Cricket Tournament Registration AI Agent guides users through completing their registration forms while answering questions about match schedules, rules, and team requirements. Perfect for tournament organizers and sports coordinators, this AI Agent can be trained with specific tournament details. With customizable personalities, tones of voice, and appearances, it creates an engaging and efficient registration experience that helps promote teamwork and excitement in the sport.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30001,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30001\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I register for the cricket tournament using the AI Agent?\\\",\\\"What are the dates and times of the tournament?\\\",\\\"Are there any registration fees for participating?\\\",\\\"What documents do I need to submit for registration?\\\",\\\"How will I receive confirmation of my tournament registration?\\\"]\",\n \"url\": \"/agent-directory/cricket-tournament-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/cricket-tournament-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Cricket Tournament Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670654637968-b3cb9b71dd5f8ba3ee2bbfecd9179564-thumbnail.png\"\n },\n {\n \"id\": \"242670535457966\",\n \"slug\": \"catering-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Catering Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Catering Managers with 5+ years of expertise in managing catering services and client interactions.\\\",\\\"expertise\\\":\\\"This AI Agent focuses on streamlining the catering order process, helping clients choose menu items and plan events effectively.\\\",\\\"personality\\\":\\\"Approachable, organized, and attentive, this agent fosters a positive experience for clients throughout the catering journey.\\\",\\\"special_skills\\\":\\\"This AI Agent guides clients through filling out catering order forms while providing real-time answers to questions about menu selections and event details. It can be trained with specific data to tailor its responses and comes with customizable tones of voice, avatars, and personalities to match your brand identity.\\\"}\",\n \"description\": \"Simplify your catering orders with AI. The Catering Order AI Agent guides your clients through the entire ordering process, ensuring they get the perfect menu for their event. It asks all the right questions and answers any queries, from dietary restrictions to delivery logistics. Enhance your service by making the ordering experience intuitive, efficient, and personalized with this smart AI agent.\",\n \"metaDescription\": \"Simplify your catering orders with AI. The Catering Order AI Agent guides your clients through the entire ordering process, ensuring they get the perfect menu for their event. It asks all the right questions and answers any queries, from dietary restrictions to delivery logistics. Enhance your service by making the ordering experience intuitive, efficient, and personalized with this smart AI agent.\",\n \"furtherDescription\": \"Simplify your catering orders with AI. The Catering Order AI Agent guides your clients through the entire ordering process, ensuring they get the perfect menu for their event. It asks all the right questions and answers any queries, from dietary restrictions to delivery logistics. Enhance your service by making the ordering experience intuitive, efficient, and personalized with this smart AI agent.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30020,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30020\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of catering options do you offer?\\\",\\\"How can I customize my catering order?\\\",\\\"What is the minimum order requirement for catering?\\\",\\\"How far in advance do I need to place my catering order?\\\",\\\"What happens if I need to change my order after it's been placed?\\\"]\",\n \"url\": \"/agent-directory/catering-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/catering-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Catering Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670535457966-f7fd3a2b9b478942d9cf538f7cf6c3f5-thumbnail.png\"\n },\n {\n \"id\": \"242670582465967\",\n \"slug\": \"summer-t-shirt-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Summer T-Shirt Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Apparel Industry Experts with over 5 years of experience in custom clothing and e-commerce.\\\",\\\"expertise\\\":\\\"This AI Agent streamlines the ordering process for custom summer t-shirts, assisting customers in selecting designs, sizes, and quantities while ensuring they understand pricing and delivery options.\\\",\\\"personality\\\":\\\"Friendly, enthusiastic, and vibrant, this agent reflects the joy of summer, engaging users with a lively tone that makes the ordering experience enjoyable and memorable.\\\",\\\"special_skills\\\":\\\"The AI Agent expertly guides users through order forms, answers inquiries about customization options, sizing charts, and order tracking, creating an efficient and pleasant shopping experience for all customers.\\\"}\",\n \"description\": \"The Summer T-shirt Order AI Agent helps customers seamlessly place their T-shirt orders by guiding them through size, style, and color options. It answers any questions about pricing, delivery, and customization, making the ordering process simple and engaging for a perfect summer wardrobe update.\",\n \"metaDescription\": \"The Summer T-shirt Order AI Agent helps customers seamlessly place their T-shirt orders by guiding them through size, style, and color options. It answers any questions about pricing, delivery, and customization, making the ordering process simple and engaging for a perfect summer wardrobe update.\",\n \"furtherDescription\": \"The Summer T-shirt Order AI Agent helps customers seamlessly place their T-shirt orders by guiding them through size, style, and color options. It answers any questions about pricing, delivery, and customization, making the ordering process simple and engaging for a perfect summer wardrobe update.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20101,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20101\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What sizes are available for the summer t-shirts?\\\",\\\"Can I choose different colors for each t-shirt?\\\",\\\"Is there a minimum number of t-shirts I need to order?\\\",\\\"How long will it take to receive my t-shirts?\\\",\\\"Can I upload my own logo for the t-shirts?\\\"]\",\n \"url\": \"/agent-directory/summer-t-shirt-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/summer-t-shirt-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Summer T-Shirt Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670582465967-24981cadb416a6f047b0e962b76d39e6-thumbnail.png\"\n },\n {\n \"id\": \"242670786484974\",\n \"slug\": \"soccer-team-t-shirt-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Soccer Team T-Shirt Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Sports Apparel Experts with over 5 years of experience in team merchandise and athletic wear.\\\",\\\"expertise\\\":\\\"This AI Agent streamlines the process for ordering custom soccer team t-shirts, guiding users through selecting sizes, colors, and personalization options like player names and numbers.\\\",\\\"personality\\\":\\\"Energetic, enthusiastic, and team-oriented, this agent captures the spirit of sportsmanship, encouraging team unity and excitement in the ordering process.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users in completing order forms, answers questions about bulk pricing, sizing charts, and delivery times, ensuring that every team member is outfitted for success on and off the field.\\\"}\",\n \"description\": \"The Soccer Team T-Shirt Order AI Agent simplifies the process of ordering custom jerseys for your team. It guides users through selecting sizes, colors, and designs while answering any questions about pricing, customization, and delivery. Tailored by your inputs, this AI agent turns ordering into an intuitive and interactive experience, ensuring every order is smooth and accurate for your team.\",\n \"metaDescription\": \"The Soccer Team T-Shirt Order AI Agent simplifies the process of ordering custom jerseys for your team. It guides users through selecting sizes, colors, and designs while answering any questions about pricing, customization, and delivery. Tailored by your inputs, this AI agent turns ordering into an intuitive and interactive experience, ensuring every order is smooth and accurate for your team.\",\n \"furtherDescription\": \"The Soccer Team T-Shirt Order AI Agent simplifies the process of ordering custom jerseys for your team. It guides users through selecting sizes, colors, and designs while answering any questions about pricing, customization, and delivery. Tailored by your inputs, this AI agent turns ordering into an intuitive and interactive experience, ensuring every order is smooth and accurate for your team.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20101,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20101\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I customize the t-shirts with player names?\\\",\\\"Do you offer moisture-wicking t-shirts?\\\",\\\"Can we order in team colors?\\\",\\\"How soon can we get our order for an upcoming game?\\\",\\\"Is there a minimum order quantity for team t-shirts?\\\"]\",\n \"url\": \"/agent-directory/soccer-team-t-shirt-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/soccer-team-t-shirt-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Soccer Team T-Shirt Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670786484974-50c5ad5977a04e4696d0237d3d312cd6-thumbnail.png\"\n },\n {\n \"id\": \"242670619878976\",\n \"slug\": \"dad-sweatshirt-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Dad Sweatshirt Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Apparel Specialists with over 4 years of experience in family-themed clothing and casual wear.\\\",\\\"expertise\\\":\\\"This AI Agent simplifies the ordering process for personalized dad sweatshirts, helping users choose styles, colors, and customization options such as text or graphics to celebrate fatherhood.\\\",\\\"personality\\\":\\\"Casual, friendly, and supportive, this agent embodies the warmth and humor of being a dad, making the ordering experience enjoyable and engaging.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through completing order forms, answers questions about fabric types, sizing options, and estimated delivery times, ensuring that every dad gets a sweatshirt that reflects their personality and style.\\\"}\",\n \"description\": \"The Dad Sweatshirt Order AI Agent makes ordering personalized dad-themed sweatshirts easy and fun. It guides customers through selecting designs, sizes, and colors while answering questions about pricing, customization, and delivery. This AI agent, trained by you, ensures a seamless and interactive ordering experience, so your customers get the perfect sweatshirt with minimal effort.\",\n \"metaDescription\": \"The Dad Sweatshirt Order AI Agent makes ordering personalized dad-themed sweatshirts easy and fun. It guides customers through selecting designs, sizes, and colors while answering questions about pricing, customization, and delivery. This AI agent, trained by you, ensures a seamless and interactive ordering experience, so your customers get the perfect sweatshirt with minimal effort.\",\n \"furtherDescription\": \"The Dad Sweatshirt Order AI Agent makes ordering personalized dad-themed sweatshirts easy and fun. It guides customers through selecting designs, sizes, and colors while answering questions about pricing, customization, and delivery. This AI agent, trained by you, ensures a seamless and interactive ordering experience, so your customers get the perfect sweatshirt with minimal effort.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20101,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20101\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What sizes are available for the dad sweatshirts?\\\",\\\"Can I add a personalized message to the sweatshirt?\\\",\\\"Are the sweatshirts machine washable?\\\",\\\"Do you offer gift wrapping?\\\",\\\"How long does shipping take?\\\"]\",\n \"url\": \"/agent-directory/dad-sweatshirt-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/dad-sweatshirt-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Dad Sweatshirt Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670619878976-32934679933d742002c78ebaa1f19100-thumbnail.png\"\n },\n {\n \"id\": \"242670437925967\",\n \"slug\": \"boy-scouts-t-shirt-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Boy Scouts T-Shirt Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Scouting Enthusiasts with over 5 years of experience in scout-related apparel and merchandise.\\\",\\\"expertise\\\":\\\"This AI Agent assists users in ordering custom Boy Scouts T-shirts, helping select appropriate sizes, colors, and troop-specific designs for events or everyday wear.\\\",\\\"personality\\\":\\\"Encouraging, dependable, and community-focused, this agent mirrors the values of scouting, making the ordering process smooth and aligned with the spirit of teamwork and adventure.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through selecting shirt styles, customizing logos or troop numbers, and answering questions on delivery timelines and bulk orders, ensuring scouts are geared up for every occasion.\\\"}\",\n \"description\": \"The Boy Scouts T-shirt Order AI Agent simplifies the process of ordering custom shirts for scouts. It helps users select sizes, colors, and designs while answering questions about pricing, availability, and delivery options. This AI agent, trained by your team, ensures a smooth and efficient ordering experience, making it easy for scout leaders and parents to get the perfect shirts for their troop.\",\n \"metaDescription\": \"The Boy Scouts T-shirt Order AI Agent simplifies the process of ordering custom shirts for scouts. It helps users select sizes, colors, and designs while answering questions about pricing, availability, and delivery options. This AI agent, trained by your team, ensures a smooth and efficient ordering experience, making it easy for scout leaders and parents to get the perfect shirts for their troop.\",\n \"furtherDescription\": \"The Boy Scouts T-shirt Order AI Agent simplifies the process of ordering custom shirts for scouts. It helps users select sizes, colors, and designs while answering questions about pricing, availability, and delivery options. This AI agent, trained by your team, ensures a smooth and efficient ordering experience, making it easy for scout leaders and parents to get the perfect shirts for their troop.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20101,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20101\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I add the Boy Scout troop number to the t-shirts?\\\",\\\"Do you offer eco-friendly materials?\\\",\\\"Can we order different sizes for each scout?\\\",\\\"Is there a minimum order quantity?\\\",\\\"Can I preview the design before placing the order?\\\"]\",\n \"url\": \"/agent-directory/boy-scouts-t-shirt-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/boy-scout-shirts-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Boy Scouts T-Shirt Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670437925967-c68a1566e469db0e3bd875c029c0b1e6-thumbnail.png\"\n },\n {\n \"id\": \"242670799556978\",\n \"slug\": \"basketball-t-shirt-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Basketball T-Shirt Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Sports Apparel Specialists with over 7 years of experience in basketball team merchandise and custom gear.\\\",\\\"expertise\\\":\\\"This AI Agent helps users order custom basketball T-shirts, offering guidance on selecting sizes, colors, team logos, and personalized names or numbers for team members or fans.\\\",\\\"personality\\\":\\\"Energetic, motivating, and team-oriented, this agent reflects the competitive and dynamic spirit of basketball, ensuring a smooth and efficient ordering process.\\\",\\\"special_skills\\\":\\\"The AI Agent assists with selecting designs, customizing prints, and answering questions on fabric options, order quantities, and shipping details, keeping teams ready for the court and fans decked out in style.\\\"}\",\n \"description\": \"The Basketball T-Shirt Order AI Agent streamlines the process of ordering team shirts by guiding users through size selection, design options, and order details. It answers questions about pricing, customizations, and delivery, ensuring an efficient and personalized experience. Trained by your team, the AI makes it easy for users to order the perfect shirts for their basketball team or event.\",\n \"metaDescription\": \"The Basketball T-Shirt Order AI Agent streamlines the process of ordering team shirts by guiding users through size selection, design options, and order details. It answers questions about pricing, customizations, and delivery, ensuring an efficient and personalized experience. Trained by your team, the AI makes it easy for users to order the perfect shirts for their basketball team or event.\",\n \"furtherDescription\": \"The Basketball T-Shirt Order AI Agent streamlines the process of ordering team shirts by guiding users through size selection, design options, and order details. It answers questions about pricing, customizations, and delivery, ensuring an efficient and personalized experience. Trained by your team, the AI makes it easy for users to order the perfect shirts for their basketball team or event.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20101,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20101\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I add player numbers to the t-shirts?\\\",\\\"Do you offer performance fabric t-shirts for basketball teams?\\\",\\\"Can I choose a specific color for our team?\\\",\\\"How soon can we receive our order?\\\",\\\"Is there a discount for bulk orders?\\\"]\",\n \"url\": \"/agent-directory/basketball-t-shirt-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/basketball-t-shirt-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Basketball T-Shirt Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670799556978-754b8bceef5964c6316eb0889e179096-thumbnail.png\"\n },\n {\n \"id\": \"242671023747961\",\n \"slug\": \"elementary-school-t-shirt-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Elementary School T-Shirt Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Educational Merchandise Experts with over 5 years of experience in school apparel design and ordering systems.\\\",\\\"expertise\\\":\\\"This AI Agent assists in organizing and placing orders for custom elementary school T-shirts. It guides users through selecting sizes, colors, school logos, and personalized options for students, staff, and events.\\\",\\\"personality\\\":\\\"Friendly, patient, and playful, this agent embodies the enthusiasm of school spirit, making the ordering process easy and enjoyable for all.\\\",\\\"special_skills\\\":\\\"The AI Agent helps users choose T-shirt designs, customize prints, and answers questions about bulk orders, delivery timelines, and payment options, ensuring everyone is ready for school events or spirit days.\\\"}\",\n \"description\": \"The Elementary School T-Shirt Order AI Agent makes ordering school shirts easier for parents and guardians. It guides users through selecting sizes, styles, and designs while answering questions about prices, bulk discounts, and delivery. Trained by your team, the AI Agent ensures a smooth and engaging ordering experience, simplifying the process so parents can easily get the right shirts for their kids.\",\n \"metaDescription\": \"The Elementary School T-Shirt Order AI Agent makes ordering school shirts easier for parents and guardians. It guides users through selecting sizes, styles, and designs while answering questions about prices, bulk discounts, and delivery. Trained by your team, the AI Agent ensures a smooth and engaging ordering experience, simplifying the process so parents can easily get the right shirts for their kids.\",\n \"furtherDescription\": \"The Elementary School T-Shirt Order AI Agent makes ordering school shirts easier for parents and guardians. It guides users through selecting sizes, styles, and designs while answering questions about prices, bulk discounts, and delivery. Trained by your team, the AI Agent ensures a smooth and engaging ordering experience, simplifying the process so parents can easily get the right shirts for their kids.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20101,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20101\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I customize t-shirts with the school logo?\\\",\\\"Do you offer youth sizes?\\\",\\\"Are there any color options for the t-shirts?\\\",\\\"Is there a minimum number of t-shirts I need to order?\\\",\\\"Can I add student names to each t-shirt?\\\"]\",\n \"url\": \"/agent-directory/elementary-school-t-shirt-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/elementary-school-t-shirt-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Elementary School T-Shirt Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671023747961-13d47f8dc1e0d860afabba731140b826-thumbnail.png\"\n },\n {\n \"id\": \"242670782778976\",\n \"slug\": \"team-t-shirt-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Team T-Shirt Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Sports Merchandise Specialists with 7+ years of experience in team apparel and bulk orders.\\\",\\\"expertise\\\":\\\"This AI Agent helps teams streamline their T-shirt ordering process by guiding users through customization options like sizes, colors, logos, and player names. Ideal for sports teams, clubs, or event groups.\\\",\\\"personality\\\":\\\"Energetic, organized, and collaborative, this agent channels team spirit while making the ordering process smooth and hassle-free.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users in selecting team apparel, managing bulk orders, and answering questions on pricing, delivery schedules, and design adjustments, ensuring every team member gets the perfect fit.\\\"}\",\n \"description\": \"The Team T-Shirt Order AI Agent makes ordering custom shirts easy by guiding users through the process, answering questions on sizing, designs, and delivery. With customizable personalities, tones, and appearances, this AI agent can be tailored to match your brand's identity, providing a personalized, engaging experience that fits your unique needs while simplifying the ordering process for your team.\",\n \"metaDescription\": \"The Team T-Shirt Order AI Agent makes ordering custom shirts easy by guiding users through the process, answering questions on sizing, designs, and delivery. With customizable personalities, tones, and appearances, this AI agent can be tailored to match your brand's identity, providing a personalized, engaging experience that fits your unique needs while simplifying the ordering process for your team.\",\n \"furtherDescription\": \"The Team T-Shirt Order AI Agent makes ordering custom shirts easy by guiding users through the process, answering questions on sizing, designs, and delivery. With customizable personalities, tones, and appearances, this AI agent can be tailored to match your brand's identity, providing a personalized, engaging experience that fits your unique needs while simplifying the ordering process for your team.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20101,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20101\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I add my team's logo to the t-shirts?\\\",\\\"Do you offer both men's and women's sizes for the t-shirts?\\\",\\\"Can I order a mix of colors for my team\\\\u2019s t-shirts?\\\",\\\"Are there long-sleeve options available?\\\",\\\"How long does it take to receive the order?\\\"]\",\n \"url\": \"/agent-directory/team-t-shirt-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/team-t-shirt-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Team T-Shirt Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670782778976-cd6a7449840a30feb949e656c009bb3e-thumbnail.png\"\n },\n {\n \"id\": \"242670769335970\",\n \"slug\": \"school-t-shirt-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"School T-Shirt Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"School Merchandise Experts with over 5 years of experience in school apparel and event-based clothing orders.\\\",\\\"expertise\\\":\\\"This AI Agent helps schools efficiently collect and process T-shirt orders for events, clubs, or school spirit days. It assists users in selecting sizes, colors, and customization options like logos or class names.\\\",\\\"personality\\\":\\\"Friendly, organized, and enthusiastic, this agent makes the ordering process easy while encouraging school pride.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through the order form, answers questions about pricing and delivery, and ensures a seamless experience for bulk and individual orders.\\\"}\",\n \"description\": \"The School T-Shirt Order AI Agent streamlines the process of ordering custom school apparel by guiding parents and students through each step. This intelligent agent answers questions about sizes, colors, and design options, ensuring a seamless experience. With its engaging conversation style, it makes collecting orders simple and enjoyable, allowing schools to easily manage their merchandise while fostering a sense of community among students.\",\n \"metaDescription\": \"The School T-Shirt Order AI Agent streamlines the process of ordering custom school apparel by guiding parents and students through each step. This intelligent agent answers questions about sizes, colors, and design options, ensuring a seamless experience. With its engaging conversation style, it makes collecting orders simple and enjoyable, allowing schools to easily manage their merchandise while fostering a sense of community among students.\",\n \"furtherDescription\": \"The School T-Shirt Order AI Agent streamlines the process of ordering custom school apparel by guiding parents and students through each step. This intelligent agent answers questions about sizes, colors, and design options, ensuring a seamless experience. With its engaging conversation style, it makes collecting orders simple and enjoyable, allowing schools to easily manage their merchandise while fostering a sense of community among students.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20101,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20101\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I upload the school mascot for the t-shirt design?\\\",\\\"Do you offer youth and adult sizes?\\\",\\\"Can I choose multiple colors for the t-shirts?\\\",\\\"Is there a minimum number of t-shirts I need to order?\\\",\\\"Can I add personalized text, like class names or events?\\\"]\",\n \"url\": \"/agent-directory/school-t-shirt-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/school-t-shirt-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"School T-Shirt Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670769335970-f8bb4f4f6f2509c077fcd0b775794c5f-thumbnail.png\"\n },\n {\n \"id\": \"242670650257962\",\n \"slug\": \"band-t-shirt-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Band T-Shirt Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Music and Organization Merchandise Specialists with over 7 years of experience in band apparel and fan gear management.\\\",\\\"expertise\\\":\\\"This AI Agent helps bands and music groups manage T-shirt orders for concerts, tours, or fan merchandise. It collects details on sizes, designs, and order quantities with ease.\\\",\\\"personality\\\":\\\"Energetic, creative, and fan-focused, this agent ensures a smooth ordering process while building excitement for band-related merchandise.\\\",\\\"special_skills\\\":\\\"The AI Agent guides fans through selecting their favorite designs, answers questions about availability, and helps with bulk or single orders, ensuring fans get their gear in time for the next show.\\\"}\",\n \"description\": \"T-Shirt Order AI Agent transforms the t-shirt ordering process into an engaging conversation. It efficiently fills out forms and answers customer questions in real-time. Each agent is customizable, allowing you to train them with specific information and give them unique tones, personalities, and avatars that resonate with your band’s brand, making the experience fun and memorable for your fans.\",\n \"metaDescription\": \"T-Shirt Order AI Agent transforms the t-shirt ordering process into an engaging conversation. It efficiently fills out forms and answers customer questions in real-time. Each agent is customizable, allowing you to train them with specific information and give them unique tones, personalities, and avatars that resonate with your band’s brand, making the experience fun and memorable for your fans.\",\n \"furtherDescription\": \"T-Shirt Order AI Agent transforms the t-shirt ordering process into an engaging conversation. It efficiently fills out forms and answers customer questions in real-time. Each agent is customizable, allowing you to train them with specific information and give them unique tones, personalities, and avatars that resonate with your band’s brand, making the experience fun and memorable for your fans.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20101,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20101\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I add the band logo or album artwork to the t-shirts?\\\",\\\"What kind of t-shirt styles do you offer for bands?\\\",\\\"Can I get a preview of the design before ordering?\\\",\\\"Do you offer bulk pricing for larger orders?\\\",\\\"How soon can I receive my band\\\\u2019s t-shirts?\\\"]\",\n \"url\": \"/agent-directory/band-t-shirt-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/band-tshirt-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Band T-Shirt Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670650257962-5f4e85762f74c4d5790a3d5e2d0a1d32-thumbnail.png\"\n },\n {\n \"id\": \"221571365375054\",\n \"slug\": \"sports-t-shirt-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Sports T-Shirt Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Sports Apparel Experts with over 8 years of experience in athletic team merchandise and custom apparel.\\\",\\\"expertise\\\":\\\"This AI Agent assists sports teams, leagues, and fans in ordering custom T-shirts for events, matches, or team spirit. It collects necessary details like sizes, colors, designs, and quantities, simplifying the process.\\\",\\\"personality\\\":\\\"Competitive, energetic, and team-oriented, this agent encourages smooth and efficient ordering while keeping the excitement of the game alive.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through form fields such as team logos, player names, and bulk orders, while answering questions about design options and delivery timelines.\\\"}\",\n \"description\": \"The Sports T-Shirt Order AI Agent revolutionizes the ordering process by turning it into an interactive conversation. It seamlessly fills out forms and provides instant answers to customer queries. You can train the agent with specific details and customize its tone, personality, and avatar to match your team's spirit, making every interaction engaging and fun for your fans and supporters.\",\n \"metaDescription\": \"The Sports T-Shirt Order AI Agent revolutionizes the ordering process by turning it into an interactive conversation. It seamlessly fills out forms and provides instant answers to customer queries. You can train the agent with specific details and customize its tone, personality, and avatar to match your team's spirit, making every interaction engaging and fun for your fans and supporters.\",\n \"furtherDescription\": \"The Sports T-Shirt Order AI Agent revolutionizes the ordering process by turning it into an interactive conversation. It seamlessly fills out forms and provides instant answers to customer queries. You can train the agent with specific details and customize its tone, personality, and avatar to match your team's spirit, making every interaction engaging and fun for your fans and supporters.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20101,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20101\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I add team names and numbers to the t-shirts?\\\",\\\"What materials do you offer for sports t-shirts?\\\",\\\"Do you offer youth and adult sizes?\\\",\\\"Can I order in multiple team colors?\\\",\\\"Is there a minimum order size?\\\"]\",\n \"url\": \"/agent-directory/sports-t-shirt-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/sports-t-shirt-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Sports T-Shirt Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/221571365375054-1af8b49ca603bfaac19aaf35ff0ed5c4-thumbnail.png\"\n },\n {\n \"id\": \"242670402376959\",\n \"slug\": \"state-football-championship-t-shirt-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"State Football Championship T-Shirt Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Merchandise Experts with 10+ years of experience in sports events and championship apparel.\\\",\\\"expertise\\\":\\\"This AI Agent manages the ordering process for custom T-shirts commemorating state football championships, helping teams, fans, and event organizers capture the excitement. It collects information like sizes, quantities, design preferences, and custom text for team names or slogans.\\\",\\\"personality\\\":\\\"Energetic and celebratory, this agent is all about team pride and championship spirit, ensuring an effortless experience for users.\\\",\\\"special_skills\\\":\\\"The AI Agent helps users specify championship logos, colors, and personalizations, while answering questions about design choices, printing, and shipping deadlines.\\\"}\",\n \"description\": \"The State Football Championship T-Shirt Order AI Agent transforms the ordering experience into an engaging conversation. It assists users by asking for essential information like size, quantity, delivery address, and payment details while answering any questions along the way. With customizable tone, personality, and avatar, this AI Agent creates a lively atmosphere for fans eager to show their team spirit while ensuring a seamless ordering process.\",\n \"metaDescription\": \"The State Football Championship T-Shirt Order AI Agent transforms the ordering experience into an engaging conversation. It assists users by asking for essential information like size, quantity, delivery address, and payment details while answering any questions along the way. With customizable tone, personality, and avatar, this AI Agent creates a lively atmosphere for fans eager to show their team spirit while ensuring a seamless ordering process.\",\n \"furtherDescription\": \"The State Football Championship T-Shirt Order AI Agent transforms the ordering experience into an engaging conversation. It assists users by asking for essential information like size, quantity, delivery address, and payment details while answering any questions along the way. With customizable tone, personality, and avatar, this AI Agent creates a lively atmosphere for fans eager to show their team spirit while ensuring a seamless ordering process.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20101,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20101\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I add the championship logo to the t-shirts?\\\",\\\"Do you offer sizes for the whole team and fans?\\\",\\\"What printing options do you offer for the t-shirts?\\\",\\\"Can I get expedited shipping to have the t-shirts in time for the game?\\\",\\\"Are there any discounts for bulk orders?\\\"]\",\n \"url\": \"/agent-directory/state-football-championship-t-shirt-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/state-football-championship-t-shirt-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"State Football Championship T-Shirt Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670402376959-74f9a250cb26fdfba4c40c4c755d687f-thumbnail.png\"\n },\n {\n \"id\": \"242670417669970\",\n \"slug\": \"family-reunion-t-shirt-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Family Reunion T-Shirt Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Event Planners with over 8 years of experience organizing family gatherings and designing custom event merchandise.\\\",\\\"expertise\\\":\\\"This AI Agent simplifies the ordering process for family reunion T-shirts, gathering details like sizes, colors, family names, and custom designs that represent family heritage and unity.\\\",\\\"personality\\\":\\\"Friendly and engaging, this agent fosters a sense of togetherness and joy, making the T-shirt order process feel like part of the reunion experience.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through options for personalized family crests, names, and event dates. It answers questions about shirt materials, printing styles, and bulk order logistics, ensuring every family member gets the perfect reunion keepsake.\\\"}\",\n \"description\": \"The Family Reunion T-Shirt Order AI Agent simplifies the ordering process through dynamic conversations. It gathers essential details such as sizes, quantities, and shipping addresses while answering any inquiries users may have. This AI Agent can be trained to align with your specific needs and can embody unique personalities, tones of voice, and appearances, making the experience both enjoyable and personalized for every family member involved.\",\n \"metaDescription\": \"The Family Reunion T-Shirt Order AI Agent simplifies the ordering process through dynamic conversations. It gathers essential details such as sizes, quantities, and shipping addresses while answering any inquiries users may have. This AI Agent can be trained to align with your specific needs and can embody unique personalities, tones of voice, and appearances, making the experience both enjoyable and personalized for every family member involved.\",\n \"furtherDescription\": \"The Family Reunion T-Shirt Order AI Agent simplifies the ordering process through dynamic conversations. It gathers essential details such as sizes, quantities, and shipping addresses while answering any inquiries users may have. This AI Agent can be trained to align with your specific needs and can embody unique personalities, tones of voice, and appearances, making the experience both enjoyable and personalized for every family member involved.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20101,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20101\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I add our family name and year to the t-shirts?\\\",\\\"Do you offer different colors for family members to choose from?\\\",\\\"Are there sizes available for all ages?\\\",\\\"Can I preview the design before placing the order?\\\",\\\"What\\\\u2019s the turnaround time for receiving the t-shirts?\\\"]\",\n \"url\": \"/agent-directory/family-reunion-t-shirt-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/family-reunion-t-shirt-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Family Reunion T-Shirt Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670417669970-0539656724720ee199dcbe7e0c7e5a82-thumbnail.png\"\n },\n {\n \"id\": \"242671188909973\",\n \"slug\": \"baseball-club-t-shirt-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Baseball Club T-Shirt Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Apparel Specialists with 5+ years of experience in sports team merchandising and custom gear.\\\",\\\"expertise\\\":\\\"This AI Agent handles the T-shirt ordering process for baseball clubs, collecting information on team sizes, colors, player names, and logo placements to ensure every member of the team has matching, personalized gear.\\\",\\\"personality\\\":\\\"Energetic and team-focused, this agent embodies the spirit of the game, encouraging team unity and pride through the custom apparel process.\\\",\\\"special_skills\\\":\\\"The AI Agent assists with choosing shirt styles, materials, and printing options, while answering questions about sizing, design options, and order deadlines, helping clubs get their custom shirts in time for the next big game.\\\"}\",\n \"description\": \"The Baseball Club T-Shirt Order AI Agent enhances the ordering experience for team merchandise by engaging users in dynamic conversations. It efficiently collects vital information such as player names, sizes, and quantities while answering any questions about the order process. With its user-friendly interface and conversational abilities, this AI Agent ensures that your baseball club’s apparel is ordered accurately and effortlessly, fostering team spirit among players and fans alike.\",\n \"metaDescription\": \"The Baseball Club T-Shirt Order AI Agent enhances the ordering experience for team merchandise by engaging users in dynamic conversations. It efficiently collects vital information such as player names, sizes, and quantities while answering any questions about the order process. With its user-friendly interface and conversational abilities, this AI Agent ensures that your baseball club’s apparel is ordered accurately and effortlessly, fostering team spirit among players and fans alike.\",\n \"furtherDescription\": \"The Baseball Club T-Shirt Order AI Agent enhances the ordering experience for team merchandise by engaging users in dynamic conversations. It efficiently collects vital information such as player names, sizes, and quantities while answering any questions about the order process. With its user-friendly interface and conversational abilities, this AI Agent ensures that your baseball club’s apparel is ordered accurately and effortlessly, fostering team spirit among players and fans alike.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20101,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20101\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I add the team logo and player names to the t-shirts?\\\",\\\"What fabric options do you have for baseball t-shirts?\\\",\\\"Can I order a mix of short-sleeve and long-sleeve t-shirts?\\\",\\\"How many t-shirts do I need to order at a minimum?\\\",\\\"Do you offer discounts for team orders?\\\"]\",\n \"url\": \"/agent-directory/baseball-club-t-shirt-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/baseball-club-t-shirt-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Baseball Club T-Shirt Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671188909973-c9d49c66d3287cd91eef4b9778a18847-thumbnail.png\"\n },\n {\n \"id\": \"242670641687969\",\n \"slug\": \"food-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Food Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Culinary Event Coordinators with 5+ years of experience in organizing food orders for events and gatherings.\\\",\\\"expertise\\\":\\\"Captures and processes food orders efficiently, accommodating dietary preferences and event specifications.\\\",\\\"personality\\\":\\\"Friendly, efficient, and detail-oriented, focused on providing a delightful ordering experience.\\\",\\\"special_skills\\\":\\\"Gathers information on menu selections, guest counts, and dietary restrictions to ensure a seamless food ordering process.\\\"}\",\n \"description\": \"Food Order AI Agent simplifies the process of managing food orders for events, catering services, or restaurants. From collecting menu choices to processing dietary restrictions and preferences, this AI Agent ensures that each order is recorded accurately. Trained with specific menu and service details, it offers relevant support to both organizers and customers. With its customizable tone of voice and unique avatar, this agent creates a friendly, efficient experience, making food ordering a breeze while ensuring everyone’s needs are met.\",\n \"metaDescription\": \"Food Order AI Agent simplifies the process of managing food orders for events, catering services, or restaurants. From collecting menu choices to processing dietary restrictions and preferences, this AI Agent ensures that each order is recorded accurately. Trained with specific menu and service details, it offers relevant support to both organizers and customers. With its customizable tone of voice and unique avatar, this agent creates a friendly, efficient experience, making food ordering a breeze while ensuring everyone’s needs are met.\",\n \"furtherDescription\": \"Food Order AI Agent simplifies the process of managing food orders for events, catering services, or restaurants. From collecting menu choices to processing dietary restrictions and preferences, this AI Agent ensures that each order is recorded accurately. Trained with specific menu and service details, it offers relevant support to both organizers and customers. With its customizable tone of voice and unique avatar, this agent creates a friendly, efficient experience, making food ordering a breeze while ensuring everyone’s needs are met.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30016,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30016\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I place a food order?\\\",\\\"Can I customize my food order?\\\",\\\"What is the estimated delivery time for food orders?\\\",\\\"Are there any minimum order requirements for food delivery?\\\",\\\"How can I check the status of my food order?\\\"]\",\n \"url\": \"/agent-directory/food-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/homeplate-online-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Food Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670641687969-a0665fff0ac070ddb7831182ae11bed5-thumbnail.png\"\n },\n {\n \"id\": \"242671192300953\",\n \"slug\": \"sandwich-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Sandwich Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Culinary Experts with over 7 years of experience in deli management and customer service.\\\",\\\"expertise\\\":\\\"This AI Agent facilitates the sandwich ordering process, helping customers customize their selections with options for bread, fillings, toppings, and sauces while also suggesting popular combinations and daily specials.\\\",\\\"personality\\\":\\\"Friendly and approachable, this agent embodies a laid-back vibe, encouraging customers to explore different flavors and create their perfect sandwich, making each interaction feel personalized and enjoyable.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through the menu, answers questions about ingredient sourcing and dietary preferences, and assists with order customization and delivery options, ensuring a satisfying and convenient sandwich experience.\\\"}\",\n \"description\": \"The Sandwich Order AI Agent revolutionizes the sandwich ordering experience by engaging customers in a conversational format to gather their preferences on bread, fillings, toppings, and extras. This AI Agent can be trained to reflect your brand’s unique voice and personality, while its visual avatar can be tailored to fit your business identity. Elevate customer interactions and streamline the ordering process with an intuitive and dynamic AI assistant.\",\n \"metaDescription\": \"The Sandwich Order AI Agent revolutionizes the sandwich ordering experience by engaging customers in a conversational format to gather their preferences on bread, fillings, toppings, and extras. This AI Agent can be trained to reflect your brand’s unique voice and personality, while its visual avatar can be tailored to fit your business identity. Elevate customer interactions and streamline the ordering process with an intuitive and dynamic AI assistant.\",\n \"furtherDescription\": \"The Sandwich Order AI Agent revolutionizes the sandwich ordering experience by engaging customers in a conversational format to gather their preferences on bread, fillings, toppings, and extras. This AI Agent can be trained to reflect your brand’s unique voice and personality, while its visual avatar can be tailored to fit your business identity. Elevate customer interactions and streamline the ordering process with an intuitive and dynamic AI assistant.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30016,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30016\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I choose different types of bread for the sandwiches?\\\",\\\"Do you offer vegetarian or vegan sandwich options?\\\",\\\"Can I add extra toppings to my sandwich?\\\",\\\"Is there a minimum number of sandwiches I need to order?\\\",\\\"How soon can I receive my sandwich order?\\\"]\",\n \"url\": \"/agent-directory/sandwich-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/sandwich-order-form-template\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Sandwich Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671192300953-5619c2b7b93dc02c4ea4a3d7d6c13643-thumbnail.png\"\n },\n {\n \"id\": \"242670908495972\",\n \"slug\": \"cookie-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Cookie Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Pastry Chefs with over 5 years of experience in cookie production and customer engagement.\\\",\\\"expertise\\\":\\\"This AI Agent streamlines the cookie ordering process, assisting customers in selecting flavors, sizes, and quantities, while also providing recommendations for seasonal specials and popular pairings.\\\",\\\"personality\\\":\\\"Cheerful and inviting, this agent brings a warm and friendly atmosphere to the ordering experience, making customers feel delighted and excited about their sweet choices.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through the menu, answers questions about ingredients, dietary restrictions, and cookie customizations, and supports order placement and delivery options, ensuring a delightful cookie experience from start to finish.\\\"}\",\n \"description\": \"The Cookie Order AI Agent transforms the cookie ordering process into a delightful conversation, guiding customers through choices of flavors, sizes, and special requests. With its ability to answer questions and offer suggestions, this AI Agent enhances user experience while ensuring accurate orders. Perfect for bakeries and online shops, it can be trained to embody your brand's personality, creating a unique and engaging interaction with every customer.\",\n \"metaDescription\": \"The Cookie Order AI Agent transforms the cookie ordering process into a delightful conversation, guiding customers through choices of flavors, sizes, and special requests. With its ability to answer questions and offer suggestions, this AI Agent enhances user experience while ensuring accurate orders. Perfect for bakeries and online shops, it can be trained to embody your brand's personality, creating a unique and engaging interaction with every customer.\",\n \"furtherDescription\": \"The Cookie Order AI Agent transforms the cookie ordering process into a delightful conversation, guiding customers through choices of flavors, sizes, and special requests. With its ability to answer questions and offer suggestions, this AI Agent enhances user experience while ensuring accurate orders. Perfect for bakeries and online shops, it can be trained to embody your brand's personality, creating a unique and engaging interaction with every customer.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20102,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20102\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I choose multiple types of cookies in one order?\\\",\\\"Do you offer gluten-free or sugar-free cookie options?\\\",\\\"Is there a minimum order for cookies?\\\",\\\"Can I get custom cookie designs for special occasions?\\\",\\\"How long does it take to get the cookies delivered?\\\"]\",\n \"url\": \"/agent-directory/cookie-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/cookie-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Cookie Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670908495972-dc6811f2a1a8ec29ba834a1d51af3516-thumbnail.png\"\n },\n {\n \"id\": \"242670213080951\",\n \"slug\": \"birthday-cake-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Birthday Cake Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Professional Bakers with over 7 years of experience in custom cake design and event planning.\\\",\\\"expertise\\\":\\\"This AI Agent assists customers in selecting the perfect birthday cake, offering options for flavors, sizes, and designs while accommodating special requests for themes and dietary needs.\\\",\\\"personality\\\":\\\"Festive and joyful, this agent creates an atmosphere of celebration, helping customers feel excited about their cake choices for that special day.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through the ordering process, answers questions about cake ingredients, delivery options, and cake care, ensuring a seamless and delightful experience.\\\"}\",\n \"description\": \"The Birthday Cake Order AI Agent engages customers in a friendly conversation to help them select the perfect cake for their celebration. It guides users through flavor choices, sizes, and customization options while answering questions in real time. This AI Agent can be trained to reflect your bakery's unique voice and personality, ensuring a fun and memorable ordering experience for every customer.\",\n \"metaDescription\": \"The Birthday Cake Order AI Agent engages customers in a friendly conversation to help them select the perfect cake for their celebration. It guides users through flavor choices, sizes, and customization options while answering questions in real time. This AI Agent can be trained to reflect your bakery's unique voice and personality, ensuring a fun and memorable ordering experience for every customer.\",\n \"furtherDescription\": \"The Birthday Cake Order AI Agent engages customers in a friendly conversation to help them select the perfect cake for their celebration. It guides users through flavor choices, sizes, and customization options while answering questions in real time. This AI Agent can be trained to reflect your bakery's unique voice and personality, ensuring a fun and memorable ordering experience for every customer.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20102,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20102\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I customize the design of the birthday cake?\\\",\\\"Do you offer different cake flavors?\\\",\\\"Can I request a specific message to be written on the cake?\\\",\\\"How far in advance should I place my birthday cake order?\\\",\\\"Do you offer delivery for birthday cakes?\\\"]\",\n \"url\": \"/agent-directory/birthday-cake-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/birthday-cake-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Birthday Cake Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670213080951-528e3988acd1eca8b52e1e6264054d62-thumbnail.png\"\n },\n {\n \"id\": \"201003063488042\",\n \"slug\": \"bagel-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Bagel Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Culinary Experts with over 5 years of experience in bakery operations and customer service.\\\",\\\"expertise\\\":\\\"This AI Agent facilitates the bagel ordering experience, helping customers choose from a variety of flavors, toppings, and spreads to create their ideal breakfast or snack.\\\",\\\"personality\\\":\\\"Friendly and approachable, this agent makes the ordering process enjoyable, inviting customers to explore their bagel options and discover new combinations.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users in placing their orders, answers questions about ingredients, nutritional information, and customization options, ensuring a satisfying bagel experience.\\\"}\",\n \"description\": \"The Bagel Order AI Agent engages customers in a lively conversation to help them place their bagel orders effortlessly. It prompts users to select their preferred flavors, toppings, spreads, and quantities while answering any questions they might have about the menu. This AI Agent can be trained to reflect your bakery's unique style and personality, ensuring a delightful ordering experience for all customers.\",\n \"metaDescription\": \"The Bagel Order AI Agent engages customers in a lively conversation to help them place their bagel orders effortlessly. It prompts users to select their preferred flavors, toppings, spreads, and quantities while answering any questions they might have about the menu. This AI Agent can be trained to reflect your bakery's unique style and personality, ensuring a delightful ordering experience for all customers.\",\n \"furtherDescription\": \"The Bagel Order AI Agent engages customers in a lively conversation to help them place their bagel orders effortlessly. It prompts users to select their preferred flavors, toppings, spreads, and quantities while answering any questions they might have about the menu. This AI Agent can be trained to reflect your bakery's unique style and personality, ensuring a delightful ordering experience for all customers.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20102,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20102\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I choose different types of bagels in one order?\\\",\\\"Do you offer gluten-free bagels?\\\",\\\"Is there a minimum number of bagels I need to order?\\\",\\\"Can I add cream cheese or other spreads to my order?\\\",\\\"How soon can I get my bagel order?\\\"]\",\n \"url\": \"/agent-directory/bagel-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/bagel-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Bagel Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/201003063488042-a99585ce891b1c4f6a03d7331067ffbc-thumbnail.png\"\n },\n {\n \"id\": \"93034639160960\",\n \"slug\": \"girl-scout-cookie-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Girl Scout Cookie Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Girl Scout Leaders with extensive knowledge of cookie sales and fundraising strategies.\\\",\\\"expertise\\\":\\\"This AI Agent simplifies the process of ordering Girl Scout cookies, guiding customers through the selection of popular flavors and supporting local troops in their fundraising efforts.\\\",\\\"personality\\\":\\\"Encouraging and community-focused, this agent embodies the spirit of Girl Scouts, making customers feel good about supporting their local troops.\\\",\\\"special_skills\\\":\\\"The AI Agent helps users place their orders, answers questions about cookie ingredients and availability, and provides information on how their purchase benefits local Girl Scout initiatives.\\\"}\",\n \"description\": \"The Girl Scout Cookie AI Agent guides customers through the exciting process of ordering their favorite cookies. It asks users for their cookie selections, desired quantities, and any special instructions while providing details about each cookie type. This AI Agent can be trained to embody the spirit of Girl Scouts, ensuring a fun and engaging experience while helping to collect important order information seamlessly.\",\n \"metaDescription\": \"The Girl Scout Cookie AI Agent guides customers through the exciting process of ordering their favorite cookies. It asks users for their cookie selections, desired quantities, and any special instructions while providing details about each cookie type. This AI Agent can be trained to embody the spirit of Girl Scouts, ensuring a fun and engaging experience while helping to collect important order information seamlessly.\",\n \"furtherDescription\": \"The Girl Scout Cookie AI Agent guides customers through the exciting process of ordering their favorite cookies. It asks users for their cookie selections, desired quantities, and any special instructions while providing details about each cookie type. This AI Agent can be trained to embody the spirit of Girl Scouts, ensuring a fun and engaging experience while helping to collect important order information seamlessly.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20102,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20102\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I order different types of Girl Scout cookies in one order?\\\",\\\"Is there a limit on how many boxes I can order?\\\",\\\"How long will it take for the cookies to be delivered?\\\",\\\"Can I purchase cookies as a donation for troops?\\\",\\\"Do you offer any gluten-free cookie options?\\\"]\",\n \"url\": \"/agent-directory/girl-scout-cookie-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/girl-scout-cookie-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Girl Scout Cookie Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/93034639160960-0269d2501d59c2a7957613ecf3d8eb76-thumbnail.png\"\n },\n {\n \"id\": \"242670724783968\",\n \"slug\": \"custom-cake-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Custom Cake Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Artisan Bakers with over 8 years of experience in custom cake design and client consultation.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in helping customers create personalized cakes for any occasion, guiding them through flavor, design, and size choices tailored to their unique vision.\\\",\\\"personality\\\":\\\"Creative and attentive, this agent inspires customers with ideas and options, ensuring they feel supported in bringing their cake dreams to life.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users in finalizing their custom orders, answers questions about pricing, delivery, and cake care, and ensures a memorable cake experience from concept to celebration.\\\"}\",\n \"description\": \"The Custom Cake AI Agent assists customers in creating their perfect cake for any occasion. It engages users by asking about cake flavors, sizes, design preferences, and special dietary requirements. By providing detailed guidance and answering questions, this AI Agent ensures a personalized cake-ordering experience while efficiently gathering all necessary details, making the process enjoyable and hassle-free.\",\n \"metaDescription\": \"The Custom Cake AI Agent assists customers in creating their perfect cake for any occasion. It engages users by asking about cake flavors, sizes, design preferences, and special dietary requirements. By providing detailed guidance and answering questions, this AI Agent ensures a personalized cake-ordering experience while efficiently gathering all necessary details, making the process enjoyable and hassle-free.\",\n \"furtherDescription\": \"The Custom Cake AI Agent assists customers in creating their perfect cake for any occasion. It engages users by asking about cake flavors, sizes, design preferences, and special dietary requirements. By providing detailed guidance and answering questions, this AI Agent ensures a personalized cake-ordering experience while efficiently gathering all necessary details, making the process enjoyable and hassle-free.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20102,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20102\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I customize the design of my cake?\\\",\\\"Can I add a personalized message on the cake?\\\",\\\"How far in advance do I need to place my order?\\\",\\\"Do you offer vegan or gluten-free cake options?\\\",\\\"Can I choose a specific flavor for each layer of the cake?\\\"]\",\n \"url\": \"/agent-directory/custom-cake-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/custom-cake-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Custom Cake Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670724783968-ad9b1bf0115976abe38cc6c4d396ecac-thumbnail.png\"\n },\n {\n \"id\": \"242670543975970\",\n \"slug\": \"office-supplies-order-request-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Office Supplies Order Request AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Procurement Specialists with over 6 years of experience in office management and supply chain logistics.\\\",\\\"expertise\\\":\\\"This AI Agent streamlines the ordering process for office supplies, helping employees find and request essential items efficiently while maintaining inventory levels.\\\",\\\"personality\\\":\\\"Helpful and organized, this agent creates a stress-free ordering environment, ensuring that all office needs are met promptly and accurately.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through product selection, answers questions about availability, pricing, and delivery timelines, and ensures a smooth ordering experience for office supplies.\\\"}\",\n \"description\": \"The Office Supplies Order AI Agent helps users efficiently order essential office supplies by engaging them in a conversation. It asks questions about items needed, quantities, and delivery preferences, while also answering any inquiries. This AI Agent can be trained to understand your specific needs and features customizable personalities, tones, and avatars, ensuring a unique experience for every user.\",\n \"metaDescription\": \"The Office Supplies Order AI Agent helps users efficiently order essential office supplies by engaging them in a conversation. It asks questions about items needed, quantities, and delivery preferences, while also answering any inquiries. This AI Agent can be trained to understand your specific needs and features customizable personalities, tones, and avatars, ensuring a unique experience for every user.\",\n \"furtherDescription\": \"The Office Supplies Order AI Agent helps users efficiently order essential office supplies by engaging them in a conversation. It asks questions about items needed, quantities, and delivery preferences, while also answering any inquiries. This AI Agent can be trained to understand your specific needs and features customizable personalities, tones, and avatars, ensuring a unique experience for every user.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20103,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20103\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I order multiple types of office supplies in one form submission?\\\",\\\"Is there a budget limit for office supply orders?\\\",\\\"How long will it take for the office supplies to arrive?\\\",\\\"Can I track my order after submitting the form?\\\",\\\"Are eco-friendly office supply options available?\\\"]\",\n \"url\": \"/agent-directory/office-supplies-order-request-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/requisition-of-supplies-materials-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Office Supplies Order Request AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670543975970-555725315d2ce7cc7edbe4a22e9052d5-thumbnail.png\"\n },\n {\n \"id\": \"242670476685973\",\n \"slug\": \"computer-request-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Computer Request AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"IT Professionals with over 8 years of experience in computer procurement and technical support.\\\",\\\"expertise\\\":\\\"This AI Agent assists employees in requesting new computers and peripherals, providing guidance on specifications and suitable configurations based on user needs.\\\",\\\"personality\\\":\\\"Tech-savvy and informative, this agent helps users navigate their options, making the computer request process straightforward and tailored to individual requirements.\\\",\\\"special_skills\\\":\\\"The AI Agent helps users fill out request forms, answers technical questions about hardware and software, and ensures timely processing of computer requests.\\\"}\",\n \"description\": \"The Computer Request AI Agent engages users in a dynamic conversation to assist with requesting new computers. It asks relevant questions about specifications, budget, and urgency while providing answers to any related inquiries. This AI Agent can be trained to align with your organization’s needs and can showcase customizable personalities, tones, and avatars, creating a personalized experience for every user.\",\n \"metaDescription\": \"The Computer Request AI Agent engages users in a dynamic conversation to assist with requesting new computers. It asks relevant questions about specifications, budget, and urgency while providing answers to any related inquiries. This AI Agent can be trained to align with your organization’s needs and can showcase customizable personalities, tones, and avatars, creating a personalized experience for every user.\",\n \"furtherDescription\": \"The Computer Request AI Agent engages users in a dynamic conversation to assist with requesting new computers. It asks relevant questions about specifications, budget, and urgency while providing answers to any related inquiries. This AI Agent can be trained to align with your organization’s needs and can showcase customizable personalities, tones, and avatars, creating a personalized experience for every user.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20103,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20103\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I specify the computer brand or model I want?\\\",\\\"Is there a warranty option available for the computers?\\\",\\\"How soon will the computer be delivered after I place an order?\\\",\\\"Can I order accessories like a mouse or keyboard along with the computer?\\\",\\\"Can I request software installation along with the computer order?\\\"]\",\n \"url\": \"/agent-directory/computer-request-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/computer-request-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Computer Request AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670476685973-e33fcde4a3c30d9c0d14f7ceaf230c8b-thumbnail.png\"\n },\n {\n \"id\": \"242670311169958\",\n \"slug\": \"kitchen-requisition-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Kitchen Requisition AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Culinary Managers with over 5 years of experience in kitchen operations and inventory management.\\\",\\\"expertise\\\":\\\"This AI Agent facilitates the ordering of kitchen supplies and ingredients, helping staff maintain necessary stock levels for meal preparation and service.\\\",\\\"personality\\\":\\\"Friendly and efficient, this agent promotes a collaborative kitchen environment, making the requisition process smooth and responsive to the team\\\\u2019s needs.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users in filling out requisition forms, answers questions about product availability and substitutions, and ensures a well-stocked kitchen.\\\"}\",\n \"description\": \"The Kitchen Requisition AI Agent assists users in efficiently requesting kitchen supplies and equipment. It prompts users for details such as item type, quantity, and urgency, while also answering any questions they may have. This AI Agent can be trained to suit your specific kitchen needs and features customizable personalities, tones, and avatars for a personalized experience.\",\n \"metaDescription\": \"The Kitchen Requisition AI Agent assists users in efficiently requesting kitchen supplies and equipment. It prompts users for details such as item type, quantity, and urgency, while also answering any questions they may have. This AI Agent can be trained to suit your specific kitchen needs and features customizable personalities, tones, and avatars for a personalized experience.\",\n \"furtherDescription\": \"The Kitchen Requisition AI Agent assists users in efficiently requesting kitchen supplies and equipment. It prompts users for details such as item type, quantity, and urgency, while also answering any questions they may have. This AI Agent can be trained to suit your specific kitchen needs and features customizable personalities, tones, and avatars for a personalized experience.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20103,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20103\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I request specific kitchen appliances or equipment?\\\",\\\"Is there a limit to how much I can order for the kitchen requisition?\\\",\\\"How soon will the requested items be delivered?\\\",\\\"Can I request eco-friendly or energy-efficient kitchen equipment?\\\",\\\"Can I modify my requisition after submitting it?\\\"]\",\n \"url\": \"/agent-directory/kitchen-requisition-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/kitchen-requisition-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Kitchen Requisition AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670311169958-2a44363981f61e4fce5d2c68aaede53d-thumbnail.png\"\n },\n {\n \"id\": \"242670333769968\",\n \"slug\": \"coffee-service-request-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Coffee Service Request AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Beverage Specialists with over 4 years of experience in coffee service and customer satisfaction.\\\",\\\"expertise\\\":\\\"This AI Agent manages requests for coffee and related supplies, helping employees customize their coffee service experience and ensure a steady supply of beverages.\\\",\\\"personality\\\":\\\"Inviting and energetic, this agent creates a welcoming atmosphere, encouraging users to enjoy their coffee breaks with personalized service.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users in placing orders, answers questions about coffee options, equipment, and service schedules, ensuring a delightful coffee experience.\\\"}\",\n \"description\": \"The Coffee Service Request AI Agent helps users easily order coffee and related supplies. It efficiently collects details like beverage type, quantity, and delivery time while providing answers to any inquiries. This AI Agent can be trained to reflect your unique service preferences and can have customizable personalities, tones of voice, and appearances, ensuring a friendly and engaging interaction for every user.\",\n \"metaDescription\": \"The Coffee Service Request AI Agent helps users easily order coffee and related supplies. It efficiently collects details like beverage type, quantity, and delivery time while providing answers to any inquiries. This AI Agent can be trained to reflect your unique service preferences and can have customizable personalities, tones of voice, and appearances, ensuring a friendly and engaging interaction for every user.\",\n \"furtherDescription\": \"The Coffee Service Request AI Agent helps users easily order coffee and related supplies. It efficiently collects details like beverage type, quantity, and delivery time while providing answers to any inquiries. This AI Agent can be trained to reflect your unique service preferences and can have customizable personalities, tones of voice, and appearances, ensuring a friendly and engaging interaction for every user.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20103,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20103\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I choose different types of coffee for my order?\\\",\\\"How often can I schedule coffee service deliveries?\\\",\\\"Are coffee supplies like cups, sugar, and creamer included?\\\",\\\"Can I request eco-friendly or compostable coffee supplies?\\\",\\\"How quickly will my coffee service request be processed?\\\"]\",\n \"url\": \"/agent-directory/coffee-service-request-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/coffee-service-request-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Coffee Service Request AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670333769968-e69344f93012b9c8b38ea2ea7469e7c3-thumbnail.png\"\n },\n {\n \"id\": \"242670653795972\",\n \"slug\": \"medical-needs-request-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Medical Needs Request AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Healthcare Professionals with over 7 years of experience in medical supply procurement and patient care.\\\",\\\"expertise\\\":\\\"This AI Agent streamlines the process of requesting medical supplies and equipment, ensuring healthcare staff have the necessary tools for effective patient care.\\\",\\\"personality\\\":\\\"Compassionate and knowledgeable, this agent prioritizes user needs, creating a supportive environment for staff to obtain medical resources.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users in filling out request forms, answers questions about medical supplies, and ensures timely processing of medical needs requests.\\\"}\",\n \"description\": \"The Medical Needs Request AI Agent assists users in submitting requests for medical supplies or services. It collects essential information such as item types, quantities, and specific requirements, while also addressing any questions users may have. This AI Agent can be trained to align with your organization's protocols and can feature customizable personalities, tones of voice, and appearances to ensure a supportive and informative experience for users.\",\n \"metaDescription\": \"The Medical Needs Request AI Agent assists users in submitting requests for medical supplies or services. It collects essential information such as item types, quantities, and specific requirements, while also addressing any questions users may have. This AI Agent can be trained to align with your organization's protocols and can feature customizable personalities, tones of voice, and appearances to ensure a supportive and informative experience for users.\",\n \"furtherDescription\": \"The Medical Needs Request AI Agent assists users in submitting requests for medical supplies or services. It collects essential information such as item types, quantities, and specific requirements, while also addressing any questions users may have. This AI Agent can be trained to align with your organization's protocols and can feature customizable personalities, tones of voice, and appearances to ensure a supportive and informative experience for users.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20103,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20103\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I specify the type of medical supplies I need?\\\",\\\"Are prescription items available for order through this service?\\\",\\\"How quickly will medical supplies be delivered?\\\",\\\"Can I order in bulk for medical needs?\\\",\\\"Is there an option for special equipment, like wheelchairs or oxygen tanks?\\\"]\",\n \"url\": \"/agent-directory/medical-needs-request-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/basic-medical-needs-request-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Medical Needs Request AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670653795972-23dab919169223ae42047ea3f9298c39-thumbnail.png\"\n },\n {\n \"id\": \"242670838160963\",\n \"slug\": \"programming-equipment-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Programming Equipment Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Technical Specialists with over 6 years of experience in software and hardware procurement for development teams.\\\",\\\"expertise\\\":\\\"This AI Agent helps developers request essential programming equipment and tools, guiding them in selecting the right resources for their projects.\\\",\\\"personality\\\":\\\"Analytical and supportive, this agent fosters a productive atmosphere, ensuring that programmers have access to the tools they need to succeed.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users in completing order forms, answers technical questions about equipment specifications, and facilitates a seamless ordering process.\\\"}\",\n \"description\": \"The Programming Equipment Order AI Agent streamlines the process of requesting tech gear and software for programming needs. It efficiently gathers information on required items, quantities, and specifications while answering any related inquiries. This AI Agent can be trained to suit your organization’s requirements and features customizable personalities, tones of voice, and visual designs to create a friendly and efficient ordering experience for users.\",\n \"metaDescription\": \"The Programming Equipment Order AI Agent streamlines the process of requesting tech gear and software for programming needs. It efficiently gathers information on required items, quantities, and specifications while answering any related inquiries. This AI Agent can be trained to suit your organization’s requirements and features customizable personalities, tones of voice, and visual designs to create a friendly and efficient ordering experience for users.\",\n \"furtherDescription\": \"The Programming Equipment Order AI Agent streamlines the process of requesting tech gear and software for programming needs. It efficiently gathers information on required items, quantities, and specifications while answering any related inquiries. This AI Agent can be trained to suit your organization’s requirements and features customizable personalities, tones of voice, and visual designs to create a friendly and efficient ordering experience for users.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20103,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20103\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I order specific programming hardware such as laptops or servers?\\\",\\\"Are there any software options included with the equipment order?\\\",\\\"How quickly will the programming equipment be delivered?\\\",\\\"Can I order multiple items in one form submission?\\\",\\\"Can I customize the equipment based on my programming needs?\\\"]\",\n \"url\": \"/agent-directory/programming-equipment-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/programming-equipment-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Programming Equipment Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670838160963-68486eb4f75bc0d8a8d842a622062b0d-thumbnail.png\"\n },\n {\n \"id\": \"242670768064968\",\n \"slug\": \"property-purchase-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Property Purchase Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Real Estate Professionals with over 7 years of experience in property transactions and market analysis.\\\",\\\"expertise\\\":\\\"This AI Agent supports users in initiating property purchase orders, guiding them through requirements and helping them find the perfect property for their needs.\\\",\\\"personality\\\":\\\"Knowledgeable and reassuring, this agent fosters trust and confidence, making the property purchasing process more approachable for users.\\\",\\\"special_skills\\\":\\\"The AI Agent assists with form completion, answers questions about properties, financing options, and the buying process, ensuring users are well-informed.\\\"}\",\n \"description\": \"The Property Purchase Order AI Agent simplifies the property purchase process by guiding users through critical form fields, such as property type, budget, and preferred location. It can be trained to provide insightful answers to user questions. The agent features a distinct personality, tone of voice, and avatar, ensuring an engaging experience while helping users confidently complete their property orders.\",\n \"metaDescription\": \"The Property Purchase Order AI Agent simplifies the property purchase process by guiding users through critical form fields, such as property type, budget, and preferred location. It can be trained to provide insightful answers to user questions. The agent features a distinct personality, tone of voice, and avatar, ensuring an engaging experience while helping users confidently complete their property orders.\",\n \"furtherDescription\": \"The Property Purchase Order AI Agent simplifies the property purchase process by guiding users through critical form fields, such as property type, budget, and preferred location. It can be trained to provide insightful answers to user questions. The agent features a distinct personality, tone of voice, and avatar, ensuring an engaging experience while helping users confidently complete their property orders.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20103,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20103\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I specify the type of property I want to purchase?\\\",\\\"Can I schedule a viewing through the form?\\\",\\\"Are there financing options available for property purchases?\\\",\\\"How soon will I hear back about the property purchase?\\\",\\\"Can I make an offer directly through the form?\\\"]\",\n \"url\": \"/agent-directory/property-purchase-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/property-purchase-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Property Purchase Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670768064968-933e928636eed9b6020f7466f8900817-thumbnail.png\"\n },\n {\n \"id\": \"242671071592962\",\n \"slug\": \"office-furniture-purchase-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Office Furniture Purchase Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Office Supply Specialists with over 6 years of experience in workplace design and furniture procurement.\\\",\\\"expertise\\\":\\\"This AI Agent streamlines the ordering of office furniture, helping businesses select the right pieces for their workspaces while considering budget and style.\\\",\\\"personality\\\":\\\"Practical and resourceful, this agent emphasizes functionality and aesthetics, ensuring users make informed decisions for their office environments.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through order forms, answers questions about furniture specifications and delivery timelines, and ensures timely processing of orders.\\\"}\",\n \"description\": \"The Office Furniture AI Agent helps users navigate the office furniture ordering process by guiding them through essential fields such as item selection, quantity, and delivery preferences. It can be trained to respond to user inquiries effectively. With a unique personality, tone of voice, and customizable avatar, this agent ensures a friendly and efficient experience while users complete their furniture orders.\",\n \"metaDescription\": \"The Office Furniture AI Agent helps users navigate the office furniture ordering process by guiding them through essential fields such as item selection, quantity, and delivery preferences. It can be trained to respond to user inquiries effectively. With a unique personality, tone of voice, and customizable avatar, this agent ensures a friendly and efficient experience while users complete their furniture orders.\",\n \"furtherDescription\": \"The Office Furniture AI Agent helps users navigate the office furniture ordering process by guiding them through essential fields such as item selection, quantity, and delivery preferences. It can be trained to respond to user inquiries effectively. With a unique personality, tone of voice, and customizable avatar, this agent ensures a friendly and efficient experience while users complete their furniture orders.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20103,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20103\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I order different types of office furniture in one submission?\\\",\\\"Are there any budget limitations for office furniture orders?\\\",\\\"How quickly will the furniture be delivered?\\\",\\\"Can I order custom-designed office furniture?\\\",\\\"Is there an option for eco-friendly office furniture?\\\"]\",\n \"url\": \"/agent-directory/office-furniture-purchase-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/office-furniture-purchase-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Office Furniture Purchase Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671071592962-673f1fd44154f7ff56fc1843253c8993-thumbnail.png\"\n },\n {\n \"id\": \"242670334097963\",\n \"slug\": \"generic-product-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Generic Product Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"E-commerce Experts with over 5 years of experience in online retail and inventory management.\\\",\\\"expertise\\\":\\\"This AI Agent facilitates the ordering of various generic products, helping users navigate their options while ensuring a straightforward and efficient purchasing process.\\\",\\\"personality\\\":\\\"Friendly and adaptable, this agent makes users feel comfortable exploring their product choices, promoting a hassle-free shopping experience.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users in completing order forms, answers inquiries about product availability, pricing, and delivery, ensuring smooth transactions.\\\"}\",\n \"description\": \"The Generic Product Order AI Agent assists users in completing their orders by guiding them through necessary details like product selection, quantity, and payment options. This AI Agent can be trained to handle specific queries and preferences, ensuring a tailored experience. With customizable personalities, tones of voice, and avatars, it creates an engaging and efficient ordering process that meets user needs seamlessly.\",\n \"metaDescription\": \"The Generic Product Order AI Agent assists users in completing their orders by guiding them through necessary details like product selection, quantity, and payment options. This AI Agent can be trained to handle specific queries and preferences, ensuring a tailored experience. With customizable personalities, tones of voice, and avatars, it creates an engaging and efficient ordering process that meets user needs seamlessly.\",\n \"furtherDescription\": \"The Generic Product Order AI Agent assists users in completing their orders by guiding them through necessary details like product selection, quantity, and payment options. This AI Agent can be trained to handle specific queries and preferences, ensuring a tailored experience. With customizable personalities, tones of voice, and avatars, it creates an engaging and efficient ordering process that meets user needs seamlessly.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20104,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20104\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I order multiple types of products in a single order?\\\",\\\"Can I track my order after it\\\\u2019s placed?\\\",\\\"How long will it take for the products to be delivered?\\\",\\\"Can I request specific brands for the products?\\\",\\\"Is there a minimum quantity I need to order?\\\"]\",\n \"url\": \"/agent-directory/generic-product-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/generic-product-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Generic Product Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670334097963-c3972b03466fc21e9b1d85823bfa956c-thumbnail.png\"\n },\n {\n \"id\": \"242670698514970\",\n \"slug\": \"wholesale-product-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Wholesale Product Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Wholesale Distribution Experts with over 8 years of experience in bulk purchasing and supply chain logistics.\\\",\\\"expertise\\\":\\\"This AI Agent assists businesses in placing wholesale orders, guiding users through minimum quantity requirements, pricing structures, and delivery options.\\\",\\\"personality\\\":\\\"Professional and efficient, this agent emphasizes reliability and service, ensuring users feel confident in their wholesale purchasing decisions.\\\",\\\"special_skills\\\":\\\"The AI Agent helps users navigate order forms, answers questions about product availability and bulk pricing, and ensures seamless order processing.\\\"}\",\n \"description\": \"The Wholesale Product Order AI Agent helps users efficiently place bulk orders by guiding them through essential details like product specifications, quantities, and shipping options. This AI Agent can be trained to understand specific business needs and answer common inquiries. It features customizable personalities, tones of voice, and appearances, creating a unique and engaging experience tailored to your brand and customer preferences.\",\n \"metaDescription\": \"The Wholesale Product Order AI Agent helps users efficiently place bulk orders by guiding them through essential details like product specifications, quantities, and shipping options. This AI Agent can be trained to understand specific business needs and answer common inquiries. It features customizable personalities, tones of voice, and appearances, creating a unique and engaging experience tailored to your brand and customer preferences.\",\n \"furtherDescription\": \"The Wholesale Product Order AI Agent helps users efficiently place bulk orders by guiding them through essential details like product specifications, quantities, and shipping options. This AI Agent can be trained to understand specific business needs and answer common inquiries. It features customizable personalities, tones of voice, and appearances, creating a unique and engaging experience tailored to your brand and customer preferences.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20104,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20104\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Is there a minimum order quantity for wholesale purchases?\\\",\\\"Can I mix different products in one wholesale order?\\\",\\\"How soon can I expect the wholesale order to arrive?\\\",\\\"Do you offer bulk pricing for large orders?\\\",\\\"Can I request samples before placing a large wholesale order?\\\"]\",\n \"url\": \"/agent-directory/wholesale-product-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/wholesale-product-order\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Wholesale Product Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670698514970-cadf47f6accdf4b56be37768104a22aa-thumbnail.png\"\n },\n {\n \"id\": \"242671224365960\",\n \"slug\": \"order-cancellation-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Order Cancellation AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Customer Service Specialists with over 4 years of experience in handling order inquiries and cancellations.\\\",\\\"expertise\\\":\\\"This AI Agent manages requests for order cancellations, ensuring users can easily navigate the process while understanding the implications of their requests.\\\",\\\"personality\\\":\\\"Empathetic and understanding, this agent addresses user concerns with patience, providing clear instructions and support throughout the cancellation process.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users in filling out cancellation forms, answers questions about policies and timelines, and confirms successful cancellations.\\\"}\",\n \"description\": \"The Order Cancellation AI Agent assists users in navigating the order cancellation process by answering questions and guiding them through form filling. This AI Agent can be trained to meet specific business requirements while ensuring a seamless experience. With customizable tones, personalities, and avatars, it delivers a personalized touch, making the cancellation process more user-friendly and engaging.\",\n \"metaDescription\": \"The Order Cancellation AI Agent assists users in navigating the order cancellation process by answering questions and guiding them through form filling. This AI Agent can be trained to meet specific business requirements while ensuring a seamless experience. With customizable tones, personalities, and avatars, it delivers a personalized touch, making the cancellation process more user-friendly and engaging.\",\n \"furtherDescription\": \"The Order Cancellation AI Agent assists users in navigating the order cancellation process by answering questions and guiding them through form filling. This AI Agent can be trained to meet specific business requirements while ensuring a seamless experience. With customizable tones, personalities, and avatars, it delivers a personalized touch, making the cancellation process more user-friendly and engaging.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20104,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20104\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I cancel an order after it\\\\u2019s been placed?\\\",\\\"How long will it take to process my cancellation request?\\\",\\\"Will I receive a refund if I cancel my order?\\\",\\\"Can I cancel only part of my order?\\\",\\\"Is there a fee for canceling an order?\\\"]\",\n \"url\": \"/agent-directory/order-cancellation-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/order-cancellation-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Order Cancellation AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671224365960-b305d815695042a72495ddb97d8061be-thumbnail.png\"\n },\n {\n \"id\": \"203104302897955\",\n \"slug\": \"beauty-products-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Beauty Products Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Cosmetics Experts with over 6 years of experience in beauty retail and customer consultation.\\\",\\\"expertise\\\":\\\"This AI Agent helps users order beauty products, guiding them through product selections based on preferences, skin types, and trends for a personalized experience.\\\",\\\"personality\\\":\\\"Charming and stylish, this agent promotes confidence and self-expression, ensuring users find the beauty products that suit them best.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users in completing order forms, answers questions about product features and recommendations, and ensures timely processing of beauty product orders.\\\"}\",\n \"description\": \"The Beauty Products Order AI Agent guides customers through the ordering process for their favorite beauty products. It asks for essential information such as product selection, quantity, and shipping details, while also answering user inquiries. This AI Agent can be trained to align with specific brand messaging and can feature unique tones, personalities, and avatars, making it an ideal tool for beauty brand managers or e-commerce specialists looking to improve customer interactions.\",\n \"metaDescription\": \"The Beauty Products Order AI Agent guides customers through the ordering process for their favorite beauty products. It asks for essential information such as product selection, quantity, and shipping details, while also answering user inquiries. This AI Agent can be trained to align with specific brand messaging and can feature unique tones, personalities, and avatars, making it an ideal tool for beauty brand managers or e-commerce specialists looking to improve customer interactions.\",\n \"furtherDescription\": \"The Beauty Products Order AI Agent guides customers through the ordering process for their favorite beauty products. It asks for essential information such as product selection, quantity, and shipping details, while also answering user inquiries. This AI Agent can be trained to align with specific brand messaging and can feature unique tones, personalities, and avatars, making it an ideal tool for beauty brand managers or e-commerce specialists looking to improve customer interactions.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20104,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20104\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I order multiple beauty products in one submission?\\\",\\\"Are there organic or vegan beauty products available?\\\",\\\"How long will it take for my beauty products to arrive?\\\",\\\"Can I order sample sizes before purchasing full-sized products?\\\",\\\"Do you offer discounts for bulk beauty product orders?\\\"]\",\n \"url\": \"/agent-directory/beauty-products-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/beauty-products-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Beauty Products Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/203104302897955-3a602d775be6b0698a0d0a740a11d052-thumbnail.png\"\n },\n {\n \"id\": \"242670396333964\",\n \"slug\": \"shoes-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Shoes Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Footwear Retail Experts with over 5 years of experience in shoe sales and customer service.\\\",\\\"expertise\\\":\\\"This AI Agent streamlines the shoe ordering process, helping users find the right styles and sizes while providing guidance on features and pricing.\\\",\\\"personality\\\":\\\"Trendy and approachable, this agent encourages users to express their style while making informed footwear choices.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users in filling out order forms, answers questions about sizing and availability, and ensures a smooth transaction for shoe purchases.\\\"}\",\n \"description\": \"The Shoes Order AI Agent assists customers in selecting and ordering their preferred footwear. It gathers key information, including shoe size, style preferences, and delivery options, while addressing any questions users may have. This AI Agent can be trained to reflect specific brand identities and can feature customizable personalities, tones, and avatars, making it a valuable asset for retail managers or e-commerce specialists aiming to enhance customer engagement.\",\n \"metaDescription\": \"The Shoes Order AI Agent assists customers in selecting and ordering their preferred footwear. It gathers key information, including shoe size, style preferences, and delivery options, while addressing any questions users may have. This AI Agent can be trained to reflect specific brand identities and can feature customizable personalities, tones, and avatars, making it a valuable asset for retail managers or e-commerce specialists aiming to enhance customer engagement.\",\n \"furtherDescription\": \"The Shoes Order AI Agent assists customers in selecting and ordering their preferred footwear. It gathers key information, including shoe size, style preferences, and delivery options, while addressing any questions users may have. This AI Agent can be trained to reflect specific brand identities and can feature customizable personalities, tones, and avatars, making it a valuable asset for retail managers or e-commerce specialists aiming to enhance customer engagement.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20104,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20104\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I specify different sizes and styles of shoes in one order?\\\",\\\"Is there a limit to how many pairs of shoes I can order?\\\",\\\"How quickly will my shoe order be delivered?\\\",\\\"Can I request a different color for the shoes I want to order?\\\",\\\"Can I return shoes if they don\\\\u2019t fit?\\\"]\",\n \"url\": \"/agent-directory/shoes-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/order-form-for-shoes\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Shoes Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670396333964-b27363516b4e024ad38974e1995ac8f1-thumbnail.png\"\n },\n {\n \"id\": \"242670352941961\",\n \"slug\": \"tumbler-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Tumbler Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Beverage Accessory Experts with over 5 years of experience in drinkware retail and customer service.\\\",\\\"expertise\\\":\\\"This AI Agent assists users in ordering tumblers, guiding them through choices of materials, sizes, and designs to find the perfect fit for their beverage needs.\\\",\\\"personality\\\":\\\"Refreshing and friendly, this agent promotes hydration and style, ensuring users enjoy a personalized and enjoyable ordering experience.\\\",\\\"special_skills\\\":\\\"The AI Agent helps users fill out order forms, answers questions about product features and customization options, and ensures prompt order processing.\\\"}\",\n \"description\": \"The Tumbler Order AI Agent helps customers choose and order their favorite drinkware with ease. It gathers essential details such as tumbler size, color preferences, and personalization options while answering any inquiries. This AI Agent can be trained to suit your brand's voice and can showcase unique personalities and avatars, making it an ideal tool for beverage retailers or promotional product managers looking to enhance customer interactions.\",\n \"metaDescription\": \"The Tumbler Order AI Agent helps customers choose and order their favorite drinkware with ease. It gathers essential details such as tumbler size, color preferences, and personalization options while answering any inquiries. This AI Agent can be trained to suit your brand's voice and can showcase unique personalities and avatars, making it an ideal tool for beverage retailers or promotional product managers looking to enhance customer interactions.\",\n \"furtherDescription\": \"The Tumbler Order AI Agent helps customers choose and order their favorite drinkware with ease. It gathers essential details such as tumbler size, color preferences, and personalization options while answering any inquiries. This AI Agent can be trained to suit your brand's voice and can showcase unique personalities and avatars, making it an ideal tool for beverage retailers or promotional product managers looking to enhance customer interactions.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20104,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20104\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I order personalized tumblers with custom designs?\\\",\\\"Is there a minimum quantity for ordering tumblers?\\\",\\\"How long will it take for my tumbler order to be processed?\\\",\\\"Are there options for different sizes of tumblers?\\\",\\\"Can I add a message or logo to my tumbler order?\\\"]\",\n \"url\": \"/agent-directory/tumbler-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/tumbler-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Tumbler Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670352941961-c64a178fa1c767a97bf0c7cd878f47a7-thumbnail.png\"\n },\n {\n \"id\": \"242671210557958\",\n \"slug\": \"gift-basket-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Gift Basket Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Gift Specialists with over 6 years of experience in curating and selling gift baskets for various occasions.\\\",\\\"expertise\\\":\\\"This AI Agent streamlines the ordering of gift baskets, guiding users in selecting items based on preferences, themes, and occasions for thoughtful gifting.\\\",\\\"personality\\\":\\\"Warm and cheerful, this agent embodies the spirit of giving, ensuring users feel excited and satisfied with their gift selections.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users in completing order forms, answers questions about customization and delivery options, and confirms successful gift basket orders.\\\"}\",\n \"description\": \"The Gift Basket Order AI Agent assists customers in selecting and ordering customized gift baskets. It collects key details such as basket type, contents, delivery date, and personalization requests while addressing any questions users may have. This AI Agent can be trained with your brand's personality, offering tailored tones of voice and customizable avatars to provide a seamless and engaging experience for gift shop owners or event planners.\",\n \"metaDescription\": \"The Gift Basket Order AI Agent assists customers in selecting and ordering customized gift baskets. It collects key details such as basket type, contents, delivery date, and personalization requests while addressing any questions users may have. This AI Agent can be trained with your brand's personality, offering tailored tones of voice and customizable avatars to provide a seamless and engaging experience for gift shop owners or event planners.\",\n \"furtherDescription\": \"The Gift Basket Order AI Agent assists customers in selecting and ordering customized gift baskets. It collects key details such as basket type, contents, delivery date, and personalization requests while addressing any questions users may have. This AI Agent can be trained with your brand's personality, offering tailored tones of voice and customizable avatars to provide a seamless and engaging experience for gift shop owners or event planners.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20104,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20104\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I customize the items in my gift basket?\\\",\\\"How long will it take for my gift basket to be delivered?\\\",\\\"Can I order multiple gift baskets at once?\\\",\\\"Are there options for dietary restrictions in gift baskets?\\\",\\\"Can I include a personalized message with my gift basket?\\\"]\",\n \"url\": \"/agent-directory/gift-basket-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/gift-basket-order-form-template\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Gift Basket Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671210557958-7e9d88721026af852d8119b444a59c74-thumbnail.png\"\n },\n {\n \"id\": \"242671223414954\",\n \"slug\": \"christmas-box-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Christmas Box Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Holiday Retail Experts with over 7 years of experience in seasonal merchandise and gift planning.\\\",\\\"expertise\\\":\\\"This AI Agent helps users order festive Christmas boxes, guiding them through selection options, themes, and personalization for the holiday season.\\\",\\\"personality\\\":\\\"Joyful and festive, this agent creates a magical shopping experience, making users feel the excitement of holiday gifting.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users with order forms, answers questions about contents and delivery timelines, and ensures a smooth transaction for Christmas box orders.\\\"}\",\n \"description\": \"The Christmas Box Order AI Agent helps customers order personalized Christmas gift boxes by gathering details like box size, contents, delivery preferences, and special requests. This AI Agent can be trained with your specific guidelines, answering customer questions in real-time. With customizable voices, avatars, and personalities, it creates a festive and engaging experience for holiday shop owners or corporate gift planners.\",\n \"metaDescription\": \"The Christmas Box Order AI Agent helps customers order personalized Christmas gift boxes by gathering details like box size, contents, delivery preferences, and special requests. This AI Agent can be trained with your specific guidelines, answering customer questions in real-time. With customizable voices, avatars, and personalities, it creates a festive and engaging experience for holiday shop owners or corporate gift planners.\",\n \"furtherDescription\": \"The Christmas Box Order AI Agent helps customers order personalized Christmas gift boxes by gathering details like box size, contents, delivery preferences, and special requests. This AI Agent can be trained with your specific guidelines, answering customer questions in real-time. With customizable voices, avatars, and personalities, it creates a festive and engaging experience for holiday shop owners or corporate gift planners.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20104,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20104\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I customize the contents of my Christmas box?\\\",\\\"Is there a deadline for placing Christmas box orders?\\\",\\\"How quickly will my Christmas box be delivered?\\\",\\\"Can I add a personalized holiday message to my Christmas box?\\\",\\\"Are there options for shipping my Christmas box directly to someone else?\\\"]\",\n \"url\": \"/agent-directory/christmas-box-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/christmas-box-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Christmas Box Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671223414954-d687e57a315ae8e31056a0ca71dc0eb6-thumbnail.png\"\n },\n {\n \"id\": \"242670627590966\",\n \"slug\": \"mask-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Mask Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Health and Safety Experts with over 5 years of experience in personal protective equipment and consumer safety.\\\",\\\"expertise\\\":\\\"This AI Agent aids users in ordering masks, guiding them through selections based on style, material, and intended use for effective protection.\\\",\\\"personality\\\":\\\"Caring and informative, this agent emphasizes safety and comfort, helping users make informed decisions about their mask purchases.\\\",\\\"special_skills\\\":\\\"The AI Agent helps users fill out order forms, answers questions about mask features and recommendations, and ensures prompt processing of orders.\\\"}\",\n \"description\": \"The Mask Order AI Agent assists customers in selecting and ordering masks by gathering details such as mask type, quantity, size, and delivery options. It can be trained to handle specific requirements and answer customer inquiries. With customizable avatars, tone of voice, and personality, this AI agent is ideal for e-commerce managers or medical supply vendors looking to provide a seamless order process for their clients.\",\n \"metaDescription\": \"The Mask Order AI Agent assists customers in selecting and ordering masks by gathering details such as mask type, quantity, size, and delivery options. It can be trained to handle specific requirements and answer customer inquiries. With customizable avatars, tone of voice, and personality, this AI agent is ideal for e-commerce managers or medical supply vendors looking to provide a seamless order process for their clients.\",\n \"furtherDescription\": \"The Mask Order AI Agent assists customers in selecting and ordering masks by gathering details such as mask type, quantity, size, and delivery options. It can be trained to handle specific requirements and answer customer inquiries. With customizable avatars, tone of voice, and personality, this AI agent is ideal for e-commerce managers or medical supply vendors looking to provide a seamless order process for their clients.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20104,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20104\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I order different styles and sizes of masks in one order?\\\",\\\"Is there a limit on how many masks I can order?\\\",\\\"How long will it take for my mask order to be delivered?\\\",\\\"Are there options for customizing my mask design?\\\",\\\"Can I return masks if they don\\\\u2019t meet my expectations?\\\"]\",\n \"url\": \"/agent-directory/mask-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/mask-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Mask Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670627590966-0f21897b8c254f3d8bd5263c4935d5f0-thumbnail.png\"\n },\n {\n \"id\": \"220380475088054\",\n \"slug\": \"scented-candle-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Scented Candle Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Home Fragrance Specialists with over 6 years of experience in candle production and customer consultation. \\\",\\\"expertise\\\":\\\"This AI Agent supports users in ordering scented candles, guiding them through fragrance options, sizes, and gift packaging to create a cozy atmosphere.\\\",\\\"personality\\\":\\\"Soothing and inviting, this agent enhances the shopping experience, making users feel relaxed and inspired in their choices.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users with order forms, answers questions about candle features and scents, and ensures timely processing of orders.\\\"}\",\n \"description\": \"The Scented Candle Order AI Agent guides customers through the process of selecting candles, asking for details like preferred fragrance, candle size, color, and packaging. It can be trained to suit your business needs, answering customer queries while collecting these details. With customizable avatars, personalities, and tones of voice, this AI agent is ideal for e-commerce managers and boutique retailers looking to offer a personalized, interactive shopping experience.\",\n \"metaDescription\": \"The Scented Candle Order AI Agent guides customers through the process of selecting candles, asking for details like preferred fragrance, candle size, color, and packaging. It can be trained to suit your business needs, answering customer queries while collecting these details. With customizable avatars, personalities, and tones of voice, this AI agent is ideal for e-commerce managers and boutique retailers looking to offer a personalized, interactive shopping experience.\",\n \"furtherDescription\": \"The Scented Candle Order AI Agent guides customers through the process of selecting candles, asking for details like preferred fragrance, candle size, color, and packaging. It can be trained to suit your business needs, answering customer queries while collecting these details. With customizable avatars, personalities, and tones of voice, this AI agent is ideal for e-commerce managers and boutique retailers looking to offer a personalized, interactive shopping experience.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20104,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20104\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I order different scents of candles in one submission?\\\",\\\"Is there a minimum order quantity for scented candles?\\\",\\\"How long will it take for my candle order to arrive?\\\",\\\"Can I add personalized labels or messages to my candles?\\\",\\\"Are there options for gift packaging for my candle order?\\\"]\",\n \"url\": \"/agent-directory/scented-candle-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/scented-candle-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Scented Candle Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/220380475088054-af55ee8f3467d23ee8db1a237321aac2-thumbnail.png\"\n },\n {\n \"id\": \"242670636584969\",\n \"slug\": \"barber-shop-products-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Barber Shop Products Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Grooming Professionals with over 5 years of experience in barber shop operations and product sales.\\\",\\\"expertise\\\":\\\"This AI Agent helps users order grooming products from barber shops, guiding them through product selections based on hair type and personal style.\\\",\\\"personality\\\":\\\"Confident and stylish, this agent promotes self-care and grooming, ensuring users feel good about their choices.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users in completing order forms, answers questions about product features and usage, and confirms successful product orders.\\\"}\",\n \"description\": \"The Barber Shop Products Order AI Agent guides customers through ordering essentials like grooming tools, hair products, and accessories. It asks for product type, quantity, and preferred brands while answering customer inquiries in real time. This AI agent can be trained to suit your specific needs and comes with customizable personalities, tone of voice, and appearance, providing a tailored and engaging experience for barber shops looking to streamline product orders.\",\n \"metaDescription\": \"The Barber Shop Products Order AI Agent guides customers through ordering essentials like grooming tools, hair products, and accessories. It asks for product type, quantity, and preferred brands while answering customer inquiries in real time. This AI agent can be trained to suit your specific needs and comes with customizable personalities, tone of voice, and appearance, providing a tailored and engaging experience for barber shops looking to streamline product orders.\",\n \"furtherDescription\": \"The Barber Shop Products Order AI Agent guides customers through ordering essentials like grooming tools, hair products, and accessories. It asks for product type, quantity, and preferred brands while answering customer inquiries in real time. This AI agent can be trained to suit your specific needs and comes with customizable personalities, tone of voice, and appearance, providing a tailored and engaging experience for barber shops looking to streamline product orders.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20104,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20104\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of products can I order from the barber shop?\\\",\\\"Are there options for professional-grade products or tools available?\\\",\\\"Can I request specific brands when ordering barber shop products?\\\",\\\"Is there a minimum order requirement for barber shop products?\\\",\\\"What payment methods are accepted through the Barber Shop Products Order form?\\\"]\",\n \"url\": \"/agent-directory/barber-shop-products-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/barber-shop-products-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Barber Shop Products Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670636584969-4dcb38e2c3b86f166a212a5b9a37de50-thumbnail.png\"\n },\n {\n \"id\": \"242670722009957\",\n \"slug\": \"screen-print-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Screen Print Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Printing Industry Experts with over 8 years of experience in custom apparel and screen printing services.\\\",\\\"expertise\\\":\\\"This AI Agent facilitates the ordering of screen-printed items, guiding users through design options, colors, and sizing for a customized look.\\\",\\\"personality\\\":\\\"Creative and enthusiastic, this agent encourages users to express their style through custom prints, making the ordering process fun and engaging.\\\",\\\"special_skills\\\":\\\"The AI Agent helps users navigate order forms, answers questions about printing techniques and timelines, and ensures smooth processing of orders.\\\"}\",\n \"description\": \"The Screen Print Order AI Agent assists customers in placing custom printing orders by gathering details like design specifications, garment type, print quantity, and preferred colors. It answers questions in real-time, guiding users through the process efficiently. This AI Agent can be trained to match your business needs, with customizable avatars, tone of voice, and personality to ensure an engaging and personalized experience for screen printing businesses.\",\n \"metaDescription\": \"The Screen Print Order AI Agent assists customers in placing custom printing orders by gathering details like design specifications, garment type, print quantity, and preferred colors. It answers questions in real-time, guiding users through the process efficiently. This AI Agent can be trained to match your business needs, with customizable avatars, tone of voice, and personality to ensure an engaging and personalized experience for screen printing businesses.\",\n \"furtherDescription\": \"The Screen Print Order AI Agent assists customers in placing custom printing orders by gathering details like design specifications, garment type, print quantity, and preferred colors. It answers questions in real-time, guiding users through the process efficiently. This AI Agent can be trained to match your business needs, with customizable avatars, tone of voice, and personality to ensure an engaging and personalized experience for screen printing businesses.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20105,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20105\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What items can I order for screen printing through this form?\\\",\\\"Can I upload my own design for the screen printing?\\\",\\\"Are there options to choose different ink colors for my prints?\\\",\\\"What is the minimum order quantity for screen printing?\\\",\\\"How long will it take to receive my screen-printed items?\\\"]\",\n \"url\": \"/agent-directory/screen-print-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/screen-print-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Screen Print Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670722009957-a48d2f1576ee916b5c526503cfbe7f6f-thumbnail.png\"\n },\n {\n \"id\": \"242670811895969\",\n \"slug\": \"clothing-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Clothing Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Fashion Retail Experts with over 6 years of experience in apparel sales and customer service.\\\",\\\"expertise\\\":\\\"This AI Agent streamlines the clothing ordering process, assisting users in finding the right styles, sizes, and fits for their wardrobe needs.\\\",\\\"personality\\\":\\\"Chic and approachable, this agent promotes confidence in fashion choices, ensuring users feel good about their selections.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users in filling out order forms, answers questions about product availability and sizing, and ensures timely processing of clothing orders.\\\"}\",\n \"description\": \"The Clothing Order AI Agent helps customers submit detailed clothing orders by collecting information like size, color, style preferences, and quantity. It responds to questions in real-time while guiding users through each step. This AI Agent can be trained to fit your business needs, and its customizable appearance, tone of voice, and personality ensure a seamless interaction tailored to your brand.\",\n \"metaDescription\": \"The Clothing Order AI Agent helps customers submit detailed clothing orders by collecting information like size, color, style preferences, and quantity. It responds to questions in real-time while guiding users through each step. This AI Agent can be trained to fit your business needs, and its customizable appearance, tone of voice, and personality ensure a seamless interaction tailored to your brand.\",\n \"furtherDescription\": \"The Clothing Order AI Agent helps customers submit detailed clothing orders by collecting information like size, color, style preferences, and quantity. It responds to questions in real-time while guiding users through each step. This AI Agent can be trained to fit your business needs, and its customizable appearance, tone of voice, and personality ensure a seamless interaction tailored to your brand.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20105,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20105\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of clothing can I order through this form?\\\",\\\"Is there an option to select specific colors and styles for my order?\\\",\\\"Are there size options available for each item?\\\",\\\"Can I request special handling or packaging for my clothing order?\\\",\\\"What is the estimated delivery time for my clothing order?\\\"]\",\n \"url\": \"/agent-directory/clothing-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/clothing-order-form-2\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Clothing Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670811895969-ed90ad7c7a43ecf817303b42c2bb9b94-thumbnail.png\"\n },\n {\n \"id\": \"242670951144961\",\n \"slug\": \"sports-shop-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Sports Shop Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Sports Retail Professionals with over 7 years of experience in athletic gear and equipment sales.\\\",\\\"expertise\\\":\\\"This AI Agent helps users order sporting goods, guiding them through equipment selections, sizes, and brand options to support their active lifestyles.\\\",\\\"personality\\\":\\\"Energetic and motivating, this agent encourages users to pursue their fitness goals while making informed purchasing decisions.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users in completing order forms, answers questions about product specifications and availability, and ensures a smooth transaction.\\\"}\",\n \"description\": \"The Sports Shop Order AI Agent assists customers in placing orders for sports equipment and apparel by collecting details such as size, brand preferences, and item quantities. This AI Agent can be trained to reflect your business’s specific offerings, while its customizable personality, tone of voice, and appearance create an engaging user experience. Perfect for sports shop owners looking to improve order management and customer interaction.\",\n \"metaDescription\": \"The Sports Shop Order AI Agent assists customers in placing orders for sports equipment and apparel by collecting details such as size, brand preferences, and item quantities. This AI Agent can be trained to reflect your business’s specific offerings, while its customizable personality, tone of voice, and appearance create an engaging user experience. Perfect for sports shop owners looking to improve order management and customer interaction.\",\n \"furtherDescription\": \"The Sports Shop Order AI Agent assists customers in placing orders for sports equipment and apparel by collecting details such as size, brand preferences, and item quantities. This AI Agent can be trained to reflect your business’s specific offerings, while its customizable personality, tone of voice, and appearance create an engaging user experience. Perfect for sports shop owners looking to improve order management and customer interaction.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20105,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20105\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What products can I purchase through the Sports Shop Order form?\\\",\\\"Is there a way to compare different products within the form?\\\",\\\"Can I inquire about specific brands or models in the order?\\\",\\\"Are bulk purchase discounts available for team orders?\\\",\\\"What payment methods are accepted through the Sports Shop Order form?\\\"]\",\n \"url\": \"/agent-directory/sports-shop-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/sports-shop-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Sports Shop Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670951144961-e666ef0164e0af23c356a8c403ed2115-thumbnail.png\"\n },\n {\n \"id\": \"242670858428972\",\n \"slug\": \"sports-apparel-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Sports Apparel Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Athletic Wear Specialists with over 6 years of experience in sports retail and customer service.\\\",\\\"expertise\\\":\\\"This AI Agent assists users in ordering sports apparel, guiding them through options for various activities, sizes, and styles to suit their athletic needs.\\\",\\\"personality\\\":\\\"Energetic and supportive, this agent motivates users to pursue their fitness goals while ensuring a seamless ordering experience.\\\",\\\"special_skills\\\":\\\"The AI Agent helps users fill out order forms, answers questions about fabric and sizing, and confirms successful apparel orders.\\\"}\",\n \"description\": \"The Sports Apparel Order AI Agent assists customers in selecting and ordering athletic wear, gathering details like sizes, styles, and preferred colors. This AI Agent provides instant responses to inquiries, ensuring a seamless ordering experience. Its capabilities include being trained with your specific offerings, while its unique personality, tone of voice, and visual design can enhance customer engagement for sports retailers.\",\n \"metaDescription\": \"The Sports Apparel Order AI Agent assists customers in selecting and ordering athletic wear, gathering details like sizes, styles, and preferred colors. This AI Agent provides instant responses to inquiries, ensuring a seamless ordering experience. Its capabilities include being trained with your specific offerings, while its unique personality, tone of voice, and visual design can enhance customer engagement for sports retailers.\",\n \"furtherDescription\": \"The Sports Apparel Order AI Agent assists customers in selecting and ordering athletic wear, gathering details like sizes, styles, and preferred colors. This AI Agent provides instant responses to inquiries, ensuring a seamless ordering experience. Its capabilities include being trained with your specific offerings, while its unique personality, tone of voice, and visual design can enhance customer engagement for sports retailers.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20105,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20105\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of sports apparel can I order through this form?\\\",\\\"Can I customize the apparel with my team's logo and colors?\\\",\\\"Are there size charts available to help me choose the right fit?\\\",\\\"What is the minimum order quantity for customized sports apparel?\\\",\\\"Can I order samples before placing a bulk order?\\\"]\",\n \"url\": \"/agent-directory/sports-apparel-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/sports-apparel-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Sports Apparel Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670858428972-e37023b9131ccbc316ec82f1d063d4fa-thumbnail.png\"\n },\n {\n \"id\": \"242670426544962\",\n \"slug\": \"school-uniform-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"School Uniform Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Educational Supply Coordinators with 5+ years of experience in managing school uniform orders.\\\",\\\"expertise\\\":\\\"Assists schools and parents in efficiently collecting uniform order details, ensuring a hassle-free ordering experience.\\\",\\\"personality\\\":\\\"Friendly, organized, and supportive, dedicated to helping families navigate the school uniform ordering process.\\\",\\\"special_skills\\\":\\\"Gathers information on sizes, quantities, and customization options to meet each school's requirements.\\\"}\",\n \"description\": \"School Uniform Order AI Agent streamlines the process of ordering uniforms for students and schools. It efficiently collects order information, ensuring that parents and administrators can easily place requests tailored to specific uniform requirements. Trained with school-specific details, this AI Agent provides relevant support for a seamless ordering experience. With customizable personalities, tones of voice, and avatars, it creates a friendly and approachable atmosphere, making uniform procurement smooth and hassle-free for all users.\\n\",\n \"metaDescription\": \"School Uniform Order AI Agent streamlines the process of ordering uniforms for students and schools. It efficiently collects order information, ensuring that parents and administrators can easily place requests tailored to specific uniform requirements. Trained with school-specific details, this AI Agent provides relevant support for a seamless ordering experience. With customizable personalities, tones of voice, and avatars, it creates a friendly and approachable atmosphere, making uniform procurement smooth and hassle-free for all users.\\n\",\n \"furtherDescription\": \"School Uniform Order AI Agent streamlines the process of ordering uniforms for students and schools. It efficiently collects order information, ensuring that parents and administrators can easily place requests tailored to specific uniform requirements. Trained with school-specific details, this AI Agent provides relevant support for a seamless ordering experience. With customizable personalities, tones of voice, and avatars, it creates a friendly and approachable atmosphere, making uniform procurement smooth and hassle-free for all users.\\n\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30014,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30014\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What sizes are available for school uniforms?\\\",\\\"How do I place a bulk order for school uniforms?\\\",\\\"Are there specific colors or styles that are mandatory for my school\\\\u2019s uniforms?\\\",\\\"What is the estimated delivery time for school uniforms?\\\",\\\"Can I return or exchange uniforms if they don\\\\u2019t fit?\\\"]\",\n \"url\": \"/agent-directory/school-uniform-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/school-uniform-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"School Uniform Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670426544962-45399d7b584346bf5d0f5dc09438cc40-thumbnail.png\"\n },\n {\n \"id\": \"242670525505959\",\n \"slug\": \"team-uniform-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Team Uniform Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Sports Coordinators with 6+ years of experience in managing team uniforms across various sports.\\\",\\\"expertise\\\":\\\"Assists teams in collecting and organizing uniform order details, ensuring a cohesive and professional appearance for all team members.\\\",\\\"personality\\\":\\\"Collaborative, enthusiastic, and detail-oriented, focused on delivering a seamless uniform ordering experience.\\\",\\\"special_skills\\\":\\\"Gathers information on sizes, colors, and customization options to meet specific team needs and branding.\\\"}\",\n \"description\": \"Team Uniform Order AI Agent simplifies the uniform ordering process for teams across various sports. It expertly gathers essential information, such as sizes, colors, and design preferences, ensuring that every team member looks sharp and unified. Designed to be trained with specific team details, this AI Agent offers personalized support tailored to each group’s unique needs. With a customizable personality and engaging avatar, it creates an inviting experience that makes ordering uniforms a seamless and enjoyable task for everyone involved.\",\n \"metaDescription\": \"Team Uniform Order AI Agent simplifies the uniform ordering process for teams across various sports. It expertly gathers essential information, such as sizes, colors, and design preferences, ensuring that every team member looks sharp and unified. Designed to be trained with specific team details, this AI Agent offers personalized support tailored to each group’s unique needs. With a customizable personality and engaging avatar, it creates an inviting experience that makes ordering uniforms a seamless and enjoyable task for everyone involved.\",\n \"furtherDescription\": \"Team Uniform Order AI Agent simplifies the uniform ordering process for teams across various sports. It expertly gathers essential information, such as sizes, colors, and design preferences, ensuring that every team member looks sharp and unified. Designed to be trained with specific team details, this AI Agent offers personalized support tailored to each group’s unique needs. With a customizable personality and engaging avatar, it creates an inviting experience that makes ordering uniforms a seamless and enjoyable task for everyone involved.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30014,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30014\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I order uniforms for multiple sports at once?\\\",\\\"How do I ensure the correct sizes for my team uniforms?\\\",\\\"What are the payment options for team uniform orders?\\\",\\\"Is there a minimum order quantity for team uniforms?\\\",\\\"Can I request samples before placing a bulk order?\\\"]\",\n \"url\": \"/agent-directory/team-uniform-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/team-uniform-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Team Uniform Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670525505959-ff1b9e923b1e09251a0c78e84f4024dc-thumbnail.png\"\n },\n {\n \"id\": \"242670667561968\",\n \"slug\": \"custom-jewelry-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Custom Jewelry Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Jewelry Design Experts with over 7 years of experience in crafting and selling custom pieces.\\\",\\\"expertise\\\":\\\"This AI Agent guides users in ordering custom jewelry, assisting them in selecting materials, designs, and personalization for meaningful gifts or self-expression.\\\",\\\"personality\\\":\\\"Elegant and attentive, this agent embodies sophistication, ensuring users feel valued while creating their unique jewelry pieces.\\\",\\\"special_skills\\\":\\\"The AI Agent helps users navigate order forms, answers questions about styles and gemstones, and ensures timely processing of custom orders.\\\"}\",\n \"description\": \"The Custom Jewelry Order AI Agent helps customers design and order personalized jewelry pieces by guiding them through form fields such as material, size, and gemstone preferences. This AI Agent can be trained to reflect your brand's unique offerings and style, ensuring a tailored customer experience. With customizable personalities, tones of voice, and avatars, it engages users while efficiently answering their questions and collecting essential information.\",\n \"metaDescription\": \"The Custom Jewelry Order AI Agent helps customers design and order personalized jewelry pieces by guiding them through form fields such as material, size, and gemstone preferences. This AI Agent can be trained to reflect your brand's unique offerings and style, ensuring a tailored customer experience. With customizable personalities, tones of voice, and avatars, it engages users while efficiently answering their questions and collecting essential information.\",\n \"furtherDescription\": \"The Custom Jewelry Order AI Agent helps customers design and order personalized jewelry pieces by guiding them through form fields such as material, size, and gemstone preferences. This AI Agent can be trained to reflect your brand's unique offerings and style, ensuring a tailored customer experience. With customizable personalities, tones of voice, and avatars, it engages users while efficiently answering their questions and collecting essential information.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20105,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20105\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of custom jewelry can I order through the form?\\\",\\\"Can I specify the materials and gemstones for my custom piece?\\\",\\\"Is there an option to provide design sketches or inspiration images?\\\",\\\"How long will it take to complete my custom jewelry order?\\\",\\\"Will I receive updates during the jewelry creation process?\\\"]\",\n \"url\": \"/agent-directory/custom-jewelry-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/custom-jewelry-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Custom Jewelry Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670667561968-7d4dc27716a45339a6b48b01be788cf3-thumbnail.png\"\n },\n {\n \"id\": \"242670924935969\",\n \"slug\": \"cheerleading-uniform-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Cheerleading Uniform Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Cheerleading Coaches with 5+ years of experience in managing cheerleading uniforms and apparel.\\\",\\\"expertise\\\":\\\"Facilitates the ordering process for cheerleading uniforms by efficiently collecting details from cheerleaders and coaches.\\\",\\\"personality\\\":\\\"Enthusiastic, motivational, and detail-focused, dedicated to ensuring cheer teams look their best during performances.\\\",\\\"special_skills\\\":\\\"Gathers information on sizes, styles, and customization options to reflect team spirit and identity.\\\"}\",\n \"description\": \"Cheerleading Uniform Order AI Agent makes the process of ordering cheer uniforms efficient and engaging for teams. This AI Agent collects essential details such as sizes, colors, and embellishments, ensuring that each cheerleader’s outfit meets the squad's unique style. With the capability to be trained on specific team preferences, it provides relevant support for every order. Sporting a customizable personality and dynamic avatar, this agent adds a lively touch, creating a fun and interactive experience that energizes the uniform ordering process!\",\n \"metaDescription\": \"Cheerleading Uniform Order AI Agent makes the process of ordering cheer uniforms efficient and engaging for teams. This AI Agent collects essential details such as sizes, colors, and embellishments, ensuring that each cheerleader’s outfit meets the squad's unique style. With the capability to be trained on specific team preferences, it provides relevant support for every order. Sporting a customizable personality and dynamic avatar, this agent adds a lively touch, creating a fun and interactive experience that energizes the uniform ordering process!\",\n \"furtherDescription\": \"Cheerleading Uniform Order AI Agent makes the process of ordering cheer uniforms efficient and engaging for teams. This AI Agent collects essential details such as sizes, colors, and embellishments, ensuring that each cheerleader’s outfit meets the squad's unique style. With the capability to be trained on specific team preferences, it provides relevant support for every order. Sporting a customizable personality and dynamic avatar, this agent adds a lively touch, creating a fun and interactive experience that energizes the uniform ordering process!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30014,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30014\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What customization options are available for cheerleading uniforms?\\\",\\\"How do I place an order for cheerleading uniforms for my squad?\\\",\\\"What is the turnaround time for cheerleading uniform orders?\\\",\\\"Do you provide sizing samples for cheerleading uniforms?\\\",\\\"What are the care instructions for cheerleading uniforms?\\\"]\",\n \"url\": \"/agent-directory/cheerleading-uniform-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/cheerleading-uniform-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Cheerleading Uniform Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670924935969-3107952f322fafcedd44f012f227bf0f-thumbnail.png\"\n },\n {\n \"id\": \"242670737745970\",\n \"slug\": \"game-t-shirt-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Game T-Shirt Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Sports Merchandise Professionals with over 5 years of experience in custom apparel and team gear.\\\",\\\"expertise\\\":\\\"This AI Agent streamlines the ordering of game t-shirts, helping users select designs, sizes, and colors that represent their favorite teams.\\\",\\\"personality\\\":\\\"Fun and enthusiastic, this agent engages users in the spirit of the game, ensuring they are excited about their apparel choices.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users with order forms, answers questions about team logos and printing options, and confirms successful t-shirt orders.\\\"}\",\n \"description\": \"The Game T-Shirt Order AI Agent guides users through ordering custom gaming-themed t-shirts by asking relevant questions about size, design, and color preferences. This AI Agent can be trained to align with your brand's specific offerings, creating a seamless experience. With unique personalities, customizable tones of voice, and distinct avatars, it engages customers while efficiently handling form filling and answering inquiries.\",\n \"metaDescription\": \"The Game T-Shirt Order AI Agent guides users through ordering custom gaming-themed t-shirts by asking relevant questions about size, design, and color preferences. This AI Agent can be trained to align with your brand's specific offerings, creating a seamless experience. With unique personalities, customizable tones of voice, and distinct avatars, it engages customers while efficiently handling form filling and answering inquiries.\",\n \"furtherDescription\": \"The Game T-Shirt Order AI Agent guides users through ordering custom gaming-themed t-shirts by asking relevant questions about size, design, and color preferences. This AI Agent can be trained to align with your brand's specific offerings, creating a seamless experience. With unique personalities, customizable tones of voice, and distinct avatars, it engages customers while efficiently handling form filling and answering inquiries.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20105,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20105\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What sizes are available for the game t-shirts?\\\",\\\"Can I customize the t-shirt design with specific colors or logos?\\\",\\\"Is there a minimum order quantity for the game t-shirts?\\\",\\\"What is the estimated delivery time for the t-shirts after placing the order?\\\",\\\"Can I track my t-shirt order after it\\\\u2019s placed?\\\"]\",\n \"url\": \"/agent-directory/game-t-shirt-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/game-t-shirt-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Game T-Shirt Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670737745970-285fac55d76ca7370f817f87eba5977a-thumbnail.png\"\n },\n {\n \"id\": \"220271395788061\",\n \"slug\": \"photo-booth-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Photo Booth Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Event Planning Experts with over 6 years of experience in coordinating photo booth services for various occasions.\\\",\\\"expertise\\\":\\\"This AI Agent assists users in ordering photo booth services, guiding them through package options, themes, and additional features for memorable events.\\\",\\\"personality\\\":\\\"Playful and engaging, this agent adds a fun element to the planning process, ensuring users enjoy selecting their photo booth experience.\\\",\\\"special_skills\\\":\\\"The AI Agent helps users complete order forms, answers questions about service options and availability, and ensures a smooth booking process.\\\"}\",\n \"description\": \"The Photo Booth Order AI Agent assists users in booking photo booth services by guiding them through essential details like event type, duration, and customization options. This AI Agent can be trained to reflect your brand’s voice while effectively filling out forms and answering common questions. With personalized tones, distinct personalities, and customizable avatars, it creates an engaging and memorable booking experience for customers.\",\n \"metaDescription\": \"The Photo Booth Order AI Agent assists users in booking photo booth services by guiding them through essential details like event type, duration, and customization options. This AI Agent can be trained to reflect your brand’s voice while effectively filling out forms and answering common questions. With personalized tones, distinct personalities, and customizable avatars, it creates an engaging and memorable booking experience for customers.\",\n \"furtherDescription\": \"The Photo Booth Order AI Agent assists users in booking photo booth services by guiding them through essential details like event type, duration, and customization options. This AI Agent can be trained to reflect your brand’s voice while effectively filling out forms and answering common questions. With personalized tones, distinct personalities, and customizable avatars, it creates an engaging and memorable booking experience for customers.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20106,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20106\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of photo booths are available for rental?\\\",\\\"Can I customize the photo booth backdrop?\\\",\\\"Are props included with the photo booth rental?\\\",\\\"How long can I rent the photo booth for my event?\\\",\\\"Will I receive digital copies of the photos taken at the booth?\\\"]\",\n \"url\": \"/agent-directory/photo-booth-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/photo-booth-rental-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Photo Booth Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/220271395788061-a25a75e0e20d483d2f88a3f5d87d618b-thumbnail.png\"\n },\n {\n \"id\": \"242670287554968\",\n \"slug\": \"school-photography-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"School Photography Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Educational Photography Specialists with over 6 years of experience in school portrait and event photography.\\\",\\\"expertise\\\":\\\"This AI Agent helps users order school photography services, guiding them through package options for individual and group portraits.\\\",\\\"personality\\\":\\\"Friendly and approachable, this agent creates a welcoming atmosphere, making the ordering process easy for students and parents alike.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users in filling out order forms, answers questions about photography sessions and pricing, and ensures prompt order processing.\\\"}\",\n \"description\": \"The School Photography Order AI Agent streamlines the process of organizing school photos by guiding users through essential details like student names, grades, and photo package selections. This AI Agent can be trained to fit your school's specific requirements, ensuring efficient form filling and responsive answers to questions. With customizable personalities, tones, and avatars, it creates an engaging interaction tailored to your school's needs.\",\n \"metaDescription\": \"The School Photography Order AI Agent streamlines the process of organizing school photos by guiding users through essential details like student names, grades, and photo package selections. This AI Agent can be trained to fit your school's specific requirements, ensuring efficient form filling and responsive answers to questions. With customizable personalities, tones, and avatars, it creates an engaging interaction tailored to your school's needs.\",\n \"furtherDescription\": \"The School Photography Order AI Agent streamlines the process of organizing school photos by guiding users through essential details like student names, grades, and photo package selections. This AI Agent can be trained to fit your school's specific requirements, ensuring efficient form filling and responsive answers to questions. With customizable personalities, tones, and avatars, it creates an engaging interaction tailored to your school's needs.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20106,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20106\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of school photography sessions are available?\\\",\\\"Can I choose the backdrop or setting for student portraits?\\\",\\\"Are there options for group photos of clubs or sports teams?\\\",\\\"How can I provide details about special needs or accommodations for students?\\\",\\\"When can I expect to receive the photos after the session?\\\"]\",\n \"url\": \"/agent-directory/school-photography-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/school-photography-order-form-template\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"School Photography Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670287554968-56adabc077af967d9a25dc16a9e9aa82-thumbnail.png\"\n },\n {\n \"id\": \"242671189177971\",\n \"slug\": \"prom-photography-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Prom Photography Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Event Photography Experts with over 7 years of experience in capturing memorable moments at proms and formal events.\\\",\\\"expertise\\\":\\\"This AI Agent facilitates the ordering of prom photography services, helping users select packages that best fit their special night.\\\",\\\"personality\\\":\\\"Excited and stylish, this agent enhances the anticipation of prom, ensuring users feel confident about preserving their memories.\\\",\\\"special_skills\\\":\\\"The AI Agent helps users complete order forms, answers questions about available services and photo styles, and confirms successful bookings.\\\"}\",\n \"description\": \"The Prom Photography Order AI Agent helps users effortlessly gather information for prom photo sessions. It prompts customers to provide details such as attendee names, preferred packages, and special requests. This AI Agent can be trained to meet your specific needs while answering questions in real time. With customizable tones, personalities, and avatars, it creates an engaging and personalized experience for users.\",\n \"metaDescription\": \"The Prom Photography Order AI Agent helps users effortlessly gather information for prom photo sessions. It prompts customers to provide details such as attendee names, preferred packages, and special requests. This AI Agent can be trained to meet your specific needs while answering questions in real time. With customizable tones, personalities, and avatars, it creates an engaging and personalized experience for users.\",\n \"furtherDescription\": \"The Prom Photography Order AI Agent helps users effortlessly gather information for prom photo sessions. It prompts customers to provide details such as attendee names, preferred packages, and special requests. This AI Agent can be trained to meet your specific needs while answering questions in real time. With customizable tones, personalities, and avatars, it creates an engaging and personalized experience for users.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20106,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20106\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of prom photography packages do you offer?\\\",\\\"Can I specify a particular location for pre-prom photos?\\\",\\\"Is there an option for group photos with friends before the prom?\\\",\\\"Can I include specific themes or props for the photo session?\\\",\\\"How long will it take to receive the prom photos after the event?\\\"]\",\n \"url\": \"/agent-directory/prom-photography-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/prom-photography-order-form-template\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Prom Photography Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671189177971-b818de33006081ea2b4a1874f2e33e9f-thumbnail.png\"\n },\n {\n \"id\": \"242670347865970\",\n \"slug\": \"public-event-photography-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Public Event Photography Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Event Photography Professionals with over 8 years of experience in covering public events and community gatherings.\\\",\\\"expertise\\\":\\\"This AI Agent assists users in ordering photography services for public events, guiding them through options tailored to their specific needs.\\\",\\\"personality\\\":\\\"Engaging and community-oriented, this agent emphasizes the importance of capturing moments that bring people together.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users with order forms, answers questions about event coverage and pricing, and ensures a smooth booking process.\\\"}\",\n \"description\": \"The Public Event Photography Order AI Agent assists users in gathering essential details for their event photography needs. It engages customers by asking for information such as event type, date, location, and desired package. This AI Agent can be trained to fit your specific requirements and answers questions seamlessly. With customizable personalities, tones, and avatars, it ensures a friendly and interactive experience for everyone involved.\",\n \"metaDescription\": \"The Public Event Photography Order AI Agent assists users in gathering essential details for their event photography needs. It engages customers by asking for information such as event type, date, location, and desired package. This AI Agent can be trained to fit your specific requirements and answers questions seamlessly. With customizable personalities, tones, and avatars, it ensures a friendly and interactive experience for everyone involved.\",\n \"furtherDescription\": \"The Public Event Photography Order AI Agent assists users in gathering essential details for their event photography needs. It engages customers by asking for information such as event type, date, location, and desired package. This AI Agent can be trained to fit your specific requirements and answers questions seamlessly. With customizable personalities, tones, and avatars, it ensures a friendly and interactive experience for everyone involved.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20106,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20106\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of public events can I book photography for?\\\",\\\"Can I specify particular moments or activities I want captured during the event?\\\",\\\"How many photographers can I request for my event?\\\",\\\"Is there an option for different photography styles, such as candid or posed?\\\",\\\"Can I receive a digital gallery of photos after the event?\\\"]\",\n \"url\": \"/agent-directory/public-event-photography-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/public-event-photography-contract\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Public Event Photography Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670347865970-a2e1a8998ef76d5689ea7fedb5830415-thumbnail.png\"\n },\n {\n \"id\": \"242670692705966\",\n \"slug\": \"youth-photography-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Youth Photography Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Family Photography Specialists with over 5 years of experience in capturing youth and family portraits.\\\",\\\"expertise\\\":\\\"This AI Agent helps users order youth photography services, guiding them through package options for individual or group sessions.\\\",\\\"personality\\\":\\\"Friendly and cheerful, this agent creates a fun environment, making the photography ordering process enjoyable for families.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users in completing order forms, answers questions about session details and pricing, and ensures timely processing of orders.\\\"}\",\n \"description\": \"The Youth Photography Order AI Agent guides users in capturing precious moments with young clients. It engages parents and guardians by collecting important details like event type, date, location, and specific photography preferences. This AI Agent can be trained to reflect your brand's personality and can answer common questions, ensuring a supportive and interactive experience while making the order process smooth and enjoyable.\\n\",\n \"metaDescription\": \"The Youth Photography Order AI Agent guides users in capturing precious moments with young clients. It engages parents and guardians by collecting important details like event type, date, location, and specific photography preferences. This AI Agent can be trained to reflect your brand's personality and can answer common questions, ensuring a supportive and interactive experience while making the order process smooth and enjoyable.\\n\",\n \"furtherDescription\": \"The Youth Photography Order AI Agent guides users in capturing precious moments with young clients. It engages parents and guardians by collecting important details like event type, date, location, and specific photography preferences. This AI Agent can be trained to reflect your brand's personality and can answer common questions, ensuring a supportive and interactive experience while making the order process smooth and enjoyable.\\n\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20106,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20106\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of youth photography sessions are available?\\\",\\\"Can I customize the location for the photography session?\\\",\\\"Are there packages that include multiple outfit changes or settings?\\\",\\\"Can I add props for the photography session?\\\",\\\"Is there an option for digital and print packages?\\\"]\",\n \"url\": \"/agent-directory/youth-photography-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/youth-photography-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Youth Photography Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670692705966-a76df18c079a2293945d29669bc343d5-thumbnail.png\"\n },\n {\n \"id\": \"242670528635966\",\n \"slug\": \"family-photo-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Family Photo Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Family Photography Experts with over 6 years of experience in capturing family memories and portraits.\\\",\\\"expertise\\\":\\\"This AI Agent facilitates the ordering of family photography sessions, guiding users through package selections to preserve their cherished moments.\\\",\\\"personality\\\":\\\"Warm and inviting, this agent fosters a sense of togetherness, ensuring families feel comfortable throughout the ordering process.\\\",\\\"special_skills\\\":\\\"The AI Agent helps users fill out order forms, answers questions about photography styles and availability, and confirms successful bookings.\\\"}\",\n \"description\": \"The Family Photo Order AI Agent assists users in organizing cherished family photo sessions. It collects essential details such as preferred dates, locations, and specific styles, ensuring a personalized experience. Trained with your unique information, this AI Agent engages users by answering questions and guiding them through the process, making it easier to create lasting memories with their loved ones.\",\n \"metaDescription\": \"The Family Photo Order AI Agent assists users in organizing cherished family photo sessions. It collects essential details such as preferred dates, locations, and specific styles, ensuring a personalized experience. Trained with your unique information, this AI Agent engages users by answering questions and guiding them through the process, making it easier to create lasting memories with their loved ones.\",\n \"furtherDescription\": \"The Family Photo Order AI Agent assists users in organizing cherished family photo sessions. It collects essential details such as preferred dates, locations, and specific styles, ensuring a personalized experience. Trained with your unique information, this AI Agent engages users by answering questions and guiding them through the process, making it easier to create lasting memories with their loved ones.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20106,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20106\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of family photography sessions do you offer?\\\",\\\"Can I choose the location for our family photo session?\\\",\\\"Are there packages that include extended family members?\\\",\\\"Can I specify a particular theme or style for our family photos?\\\",\\\"How long will it take to receive our photos after the session?\\\"]\",\n \"url\": \"/agent-directory/family-photo-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/family-photo-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Family Photo Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670528635966-f11214fb470102d2deaf9522d29856f5-thumbnail.png\"\n },\n {\n \"id\": \"203094962635965\",\n \"slug\": \"preschool-photo-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Preschool Photo Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Early Childhood Photography Specialists with over 5 years of experience in capturing preschool milestones and portraits.\\\",\\\"expertise\\\":\\\"This AI Agent assists users in ordering preschool photography services, guiding them through options that highlight their child's growth and achievements.\\\",\\\"personality\\\":\\\"Playful and nurturing, this agent connects with families, creating a joyful atmosphere during the ordering process.\\\",\\\"special_skills\\\":\\\"The AI Agent helps users complete order forms, answers questions about session details and pricing, and ensures prompt processing of orders.\\\"}\",\n \"description\": \"The Preschool Photo Order AI Agent simplifies photo session requests for parents and schools. It efficiently collects essential details, such as child names, class information, and photo package preferences. This AI agent is designed to answer questions and guide users through the ordering process, ensuring a smooth experience for families and educators alike. It can be trained to reflect the unique tone and style of your brand.\",\n \"metaDescription\": \"The Preschool Photo Order AI Agent simplifies photo session requests for parents and schools. It efficiently collects essential details, such as child names, class information, and photo package preferences. This AI agent is designed to answer questions and guide users through the ordering process, ensuring a smooth experience for families and educators alike. It can be trained to reflect the unique tone and style of your brand.\",\n \"furtherDescription\": \"The Preschool Photo Order AI Agent simplifies photo session requests for parents and schools. It efficiently collects essential details, such as child names, class information, and photo package preferences. This AI agent is designed to answer questions and guide users through the ordering process, ensuring a smooth experience for families and educators alike. It can be trained to reflect the unique tone and style of your brand.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20106,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20106\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of photography sessions are available for preschool children?\\\",\\\"Can I choose a specific location for the preschool photos?\\\",\\\"Are there options for seasonal themes or special occasions?\\\",\\\"How can I specify any special needs or accommodations for my child?\\\",\\\"Will I receive a digital gallery of the preschool photos?\\\"]\",\n \"url\": \"/agent-directory/preschool-photo-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/preschool-photo-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Preschool Photo Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/203094962635965-cc625f93f412512be9cb5023464e2159-thumbnail.png\"\n },\n {\n \"id\": \"242670603989972\",\n \"slug\": \"league-photo-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"League Photo Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Real League Photo Coordinators with 7+ years of experience in managing sports team photography and order fulfillment.\\\",\\\"expertise\\\":\\\"Facilitates seamless photo ordering processes for sports leagues, ensuring easy access to team photos and packages while addressing parents\\\\u2019 queries about photo dates, pricing, and delivery options.\\\",\\\"personality\\\":\\\"Friendly, organized, and enthusiastic, ready to assist families with photo inquiries and guide them through their ordering experience.\\\",\\\"special_skills\\\":\\\"Efficiently collects individual and team photo preferences while managing bulk orders and special requests with ease.\\\"}\",\n \"description\": \"\\nLeague Photo Order AI Agent simplifies the process of ordering team photos for sports leagues. It efficiently collects essential details, like team preferences and order quantities, while answering any questions that parents, coaches, or organizers may have. Trained by professional photographers, this AI ensures a seamless experience and can be further customized with your business data to fit your unique workflow perfectly.\",\n \"metaDescription\": \"\\nLeague Photo Order AI Agent simplifies the process of ordering team photos for sports leagues. It efficiently collects essential details, like team preferences and order quantities, while answering any questions that parents, coaches, or organizers may have. Trained by professional photographers, this AI ensures a seamless experience and can be further customized with your business data to fit your unique workflow perfectly.\",\n \"furtherDescription\": \"\\nLeague Photo Order AI Agent simplifies the process of ordering team photos for sports leagues. It efficiently collects essential details, like team preferences and order quantities, while answering any questions that parents, coaches, or organizers may have. Trained by professional photographers, this AI ensures a seamless experience and can be further customized with your business data to fit your unique workflow perfectly.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20106,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20106\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of photo packages do you offer?\\\",\\\"How can I add additional photos to my order?\\\",\\\"When will I receive my photos after placing an order?\\\",\\\"Can I change my order after it has been submitted?\\\",\\\"What payment methods do you accept?\\\"]\",\n \"url\": \"/agent-directory/league-photo-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/league-photo-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"League Photo Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670603989972-436103ad5aa605fc67b70783afe02400-thumbnail.png\"\n },\n {\n \"id\": \"242670388839976\",\n \"slug\": \"pet-photography-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Pet Photography Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Real Pet Photographers with 6+ years of experience in pet photography and customer service.\\\",\\\"expertise\\\":\\\"Supports pet owners in selecting and ordering photography sessions tailored to their furry friends, adeptly addressing questions related to session locations, styles, and pet-friendly tips.\\\",\\\"personality\\\":\\\"Warm, caring, and playful, making every interaction enjoyable for pet owners and ensuring they feel comfortable and excited about their photo sessions.\\\",\\\"special_skills\\\":\\\"Collects specific information about pets\\\\u2019 personalities and preferences to customize photography packages and create memorable experiences.\\\"}\",\n \"description\": \"Pet Photography Order AI Agent makes the process of ordering pet photos effortless and engaging for pet owners and photographers alike. From capturing pet details to managing order requests, this AI handles every step, while also answering questions about packages, sessions, or delivery. Tailored for pet photography businesses, it can be trained with your own data to provide a personalized experience, ensuring smooth, stress-free transactions for everyone involved.\",\n \"metaDescription\": \"Pet Photography Order AI Agent makes the process of ordering pet photos effortless and engaging for pet owners and photographers alike. From capturing pet details to managing order requests, this AI handles every step, while also answering questions about packages, sessions, or delivery. Tailored for pet photography businesses, it can be trained with your own data to provide a personalized experience, ensuring smooth, stress-free transactions for everyone involved.\",\n \"furtherDescription\": \"Pet Photography Order AI Agent makes the process of ordering pet photos effortless and engaging for pet owners and photographers alike. From capturing pet details to managing order requests, this AI handles every step, while also answering questions about packages, sessions, or delivery. Tailored for pet photography businesses, it can be trained with your own data to provide a personalized experience, ensuring smooth, stress-free transactions for everyone involved.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20106,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20106\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of pet photography sessions are available?\\\",\\\"How long does a typical pet photography session last?\\\",\\\"Can I bring props for my pet's photoshoot?\\\",\\\"What should I do if my pet is uncooperative during the shoot?\\\",\\\"Will I receive a digital copy of the photos?\\\"]\",\n \"url\": \"/agent-directory/pet-photography-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/pet-photography-order-form-template\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Pet Photography Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670388839976-72b31191d3c83b58b1996d79d39303ae-thumbnail.png\"\n },\n {\n \"id\": \"242671008396964\",\n \"slug\": \"office-supply-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Office Supply Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Real Office Managers with 10+ years of experience in procurement and inventory management.\\\",\\\"expertise\\\":\\\"Assists businesses in efficiently managing office supply orders, ensuring that essential items are always in stock while answering questions related to product availability and delivery schedules.\\\",\\\"personality\\\":\\\"Professional, detail-oriented, and proactive, dedicated to making the office supply ordering process straightforward and effective for all team members.\\\",\\\"special_skills\\\":\\\"Collects specific information regarding office needs and preferences, enabling tailored order recommendations and facilitating bulk order requests.\\\"}\",\n \"description\": \"Office Supply Order AI Agent transforms the way businesses manage their office supply orders. This intelligent AI streamlines the ordering process by effortlessly gathering details and providing prompt answers to common questions, ensuring employees and office managers have a smooth experience. By integrating business-specific information, it tailors responses to meet unique supply needs, enhancing efficiency and making sure your team always has the essentials at hand. Say goodbye to order confusion and hello to a more organized workspace!\",\n \"metaDescription\": \"Office Supply Order AI Agent transforms the way businesses manage their office supply orders. This intelligent AI streamlines the ordering process by effortlessly gathering details and providing prompt answers to common questions, ensuring employees and office managers have a smooth experience. By integrating business-specific information, it tailors responses to meet unique supply needs, enhancing efficiency and making sure your team always has the essentials at hand. Say goodbye to order confusion and hello to a more organized workspace!\",\n \"furtherDescription\": \"Office Supply Order AI Agent transforms the way businesses manage their office supply orders. This intelligent AI streamlines the ordering process by effortlessly gathering details and providing prompt answers to common questions, ensuring employees and office managers have a smooth experience. By integrating business-specific information, it tailors responses to meet unique supply needs, enhancing efficiency and making sure your team always has the essentials at hand. Say goodbye to order confusion and hello to a more organized workspace!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20107,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20107\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of office supplies can I order through this agent?\\\",\\\"How do I add items to my order?\\\",\\\"Can I specify brand preferences for my supplies?\\\",\\\"What is the estimated delivery time for my order?\\\",\\\"Are there discounts available for bulk orders?\\\"]\",\n \"url\": \"/agent-directory/office-supply-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/office-supply-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Office Supply Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671008396964-a081a2f3e66fc54674b42f5a9d9cbd89-thumbnail.png\"\n },\n {\n \"id\": \"242670609064962\",\n \"slug\": \"client-supply-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Client Supply Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Real Client Relationship Managers with 5+ years of experience in client service and order fulfillment.\\\",\\\"expertise\\\":\\\"Helps organizations streamline the ordering process for client supplies, effectively capturing client preferences and ensuring timely order delivery.\\\",\\\"personality\\\":\\\"Approachable, attentive, and client-focused, always ready to engage with clients and provide support throughout the ordering journey.\\\",\\\"special_skills\\\":\\\"Gathers critical client information to personalize orders, enabling a smooth and efficient experience for both clients and team members.\\\"}\",\n \"description\": \"Client Supply Order AI Agent revolutionizes how businesses handle supply orders for their clients. This intuitive AI efficiently collects order details while answering common questions about product availability and delivery schedules. Designed to support client interactions, it ensures a seamless ordering experience that enhances customer satisfaction. By incorporating specific business information, this AI agent adapts to your unique supply requirements, making the ordering process clear, efficient, and tailored to your clients’ needs.\",\n \"metaDescription\": \"Client Supply Order AI Agent revolutionizes how businesses handle supply orders for their clients. This intuitive AI efficiently collects order details while answering common questions about product availability and delivery schedules. Designed to support client interactions, it ensures a seamless ordering experience that enhances customer satisfaction. By incorporating specific business information, this AI agent adapts to your unique supply requirements, making the ordering process clear, efficient, and tailored to your clients’ needs.\",\n \"furtherDescription\": \"Client Supply Order AI Agent revolutionizes how businesses handle supply orders for their clients. This intuitive AI efficiently collects order details while answering common questions about product availability and delivery schedules. Designed to support client interactions, it ensures a seamless ordering experience that enhances customer satisfaction. By incorporating specific business information, this AI agent adapts to your unique supply requirements, making the ordering process clear, efficient, and tailored to your clients’ needs.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20107,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20107\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What supplies can I order for my clients?\\\",\\\"How do I customize the order for specific clients?\\\",\\\"Can I track my order once it\\\\u2019s placed?\\\",\\\"What payment options are available for my order?\\\",\\\"Is there a minimum order quantity for supplies?\\\"]\",\n \"url\": \"/agent-directory/client-supply-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/client-supply-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Client Supply Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670609064962-43487a10688d69ebf6c38db8ed474fa2-thumbnail.png\"\n },\n {\n \"id\": \"242670320412949\",\n \"slug\": \"school-supply-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"School Supply Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Real Educators with 7+ years of experience in managing school supply logistics.\\\",\\\"expertise\\\":\\\"Facilitates the ordering process for students and parents, ensuring that all necessary school supplies are easily accessible while addressing inquiries related to school requirements and recommendations.\\\",\\\"personality\\\":\\\"Friendly, knowledgeable, and supportive, creating a welcoming environment for parents and students as they navigate the ordering process.\\\",\\\"special_skills\\\":\\\"Captures individual student needs and school requirements to ensure that orders are complete and tailored to specific educational settings.\\\"}\",\n \"description\": \"School Supply Order AI Agent streamlines the process of ordering essential supplies for schools, making it easy for teachers and parents to get what they need. This AI Agent efficiently collects order details and answers questions related to the supply process. It can be trained with specific school information to enhance the experience, and offers customizable personalities, tones of voice, and appearances, ensuring that it aligns perfectly with your institution’s unique identity.\",\n \"metaDescription\": \"School Supply Order AI Agent streamlines the process of ordering essential supplies for schools, making it easy for teachers and parents to get what they need. This AI Agent efficiently collects order details and answers questions related to the supply process. It can be trained with specific school information to enhance the experience, and offers customizable personalities, tones of voice, and appearances, ensuring that it aligns perfectly with your institution’s unique identity.\",\n \"furtherDescription\": \"School Supply Order AI Agent streamlines the process of ordering essential supplies for schools, making it easy for teachers and parents to get what they need. This AI Agent efficiently collects order details and answers questions related to the supply process. It can be trained with specific school information to enhance the experience, and offers customizable personalities, tones of voice, and appearances, ensuring that it aligns perfectly with your institution’s unique identity.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20107,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20107\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of school supplies can I order?\\\",\\\"How can I add multiple items to my order?\\\",\\\"Are there recommendations for essential school supplies?\\\",\\\"When will my school supplies be delivered?\\\",\\\"Can I order supplies for multiple students?\\\"]\",\n \"url\": \"/agent-directory/school-supply-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/school-supply-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"School Supply Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670320412949-0e71c58c13bf60cf2eccb31df93e9f6e-thumbnail.png\"\n },\n {\n \"id\": \"242670721081956\",\n \"slug\": \"school-laboratory-supply-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"School Laboratory Supply Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Real Science Lab Managers with 8+ years of experience in laboratory supply procurement.\\\",\\\"expertise\\\":\\\"Assists educational institutions in efficiently ordering laboratory supplies, capturing essential details needed for lab setups and experiments.\\\",\\\"personality\\\":\\\"Inquisitive, meticulous, and safety-conscious, dedicated to fostering a productive laboratory environment through effective supply management.\\\",\\\"special_skills\\\":\\\"Gathers detailed information about laboratory needs, enabling accurate order fulfillment tailored to specific educational requirements.\\\"}\",\n \"description\": \"School Laboratory Supply Order AI Agent revolutionizes the way educational institutions manage their laboratory supply orders. This intelligent AI Agent streamlines the ordering process by efficiently gathering details and addressing specific supply needs for experiments and classroom projects. With the ability to be trained on unique laboratory requirements, it adapts to enhance user interactions. Additionally, its customizable personality, voice tone, and appearance ensure that it resonates perfectly with your school’s culture, making ordering supplies a more engaging experience for educators and students alike.\",\n \"metaDescription\": \"School Laboratory Supply Order AI Agent revolutionizes the way educational institutions manage their laboratory supply orders. This intelligent AI Agent streamlines the ordering process by efficiently gathering details and addressing specific supply needs for experiments and classroom projects. With the ability to be trained on unique laboratory requirements, it adapts to enhance user interactions. Additionally, its customizable personality, voice tone, and appearance ensure that it resonates perfectly with your school’s culture, making ordering supplies a more engaging experience for educators and students alike.\",\n \"furtherDescription\": \"School Laboratory Supply Order AI Agent revolutionizes the way educational institutions manage their laboratory supply orders. This intelligent AI Agent streamlines the ordering process by efficiently gathering details and addressing specific supply needs for experiments and classroom projects. With the ability to be trained on unique laboratory requirements, it adapts to enhance user interactions. Additionally, its customizable personality, voice tone, and appearance ensure that it resonates perfectly with your school’s culture, making ordering supplies a more engaging experience for educators and students alike.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20107,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20107\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of laboratory supplies can I order?\\\",\\\"How do I specify special requirements for my order?\\\",\\\"Are there bulk ordering options for laboratory supplies?\\\",\\\"What is the estimated delivery time for laboratory supplies?\\\",\\\"Can I request a quote for larger orders?\\\"]\",\n \"url\": \"/agent-directory/school-laboratory-supply-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/school-laboratory-supply-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"School Laboratory Supply Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670721081956-96e1f50023b78be807161798805a0853-thumbnail.png\"\n },\n {\n \"id\": \"242670728555969\",\n \"slug\": \"material-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Material Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Real Supply Chain Managers with 10+ years of experience in material procurement.\\\",\\\"expertise\\\":\\\"Streamlines the ordering process for various materials, capturing crucial details to facilitate seamless acquisitions.\\\",\\\"personality\\\":\\\"Organized, proactive, and detail-oriented, focused on making the ordering process efficient and straightforward for users.\\\",\\\"special_skills\\\":\\\"Collects specific information about material specifications and quantities, ensuring orders align with project needs.\\\"}\",\n \"description\": \"Material Order AI Agent transforms the way businesses manage their material procurement processes. This AI Agent efficiently collects order details while assisting users with their specific material needs, ensuring a hassle-free ordering experience. Designed to cater to various industries, it can be trained with business-specific information to enhance interactions. Additionally, its customizable personality, tone of voice, and appearance allow it to align seamlessly with your brand, making the ordering process not only efficient but also engaging for your team.\",\n \"metaDescription\": \"Material Order AI Agent transforms the way businesses manage their material procurement processes. This AI Agent efficiently collects order details while assisting users with their specific material needs, ensuring a hassle-free ordering experience. Designed to cater to various industries, it can be trained with business-specific information to enhance interactions. Additionally, its customizable personality, tone of voice, and appearance allow it to align seamlessly with your brand, making the ordering process not only efficient but also engaging for your team.\",\n \"furtherDescription\": \"Material Order AI Agent transforms the way businesses manage their material procurement processes. This AI Agent efficiently collects order details while assisting users with their specific material needs, ensuring a hassle-free ordering experience. Designed to cater to various industries, it can be trained with business-specific information to enhance interactions. Additionally, its customizable personality, tone of voice, and appearance allow it to align seamlessly with your brand, making the ordering process not only efficient but also engaging for your team.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20107,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20107\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of materials can I order through this agent?\\\",\\\"How can I check for the availability of specific materials?\\\",\\\"Is there a way to specify delivery instructions for my order?\\\",\\\"What payment methods do you accept for material orders?\\\",\\\"Can I place a recurring order for materials?\\\"]\",\n \"url\": \"/agent-directory/material-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/material-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Material Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670728555969-a6b0fcd7aa6b0256a81c5b07c4ec08f7-thumbnail.png\"\n },\n {\n \"id\": \"242670986718976\",\n \"slug\": \"dental-supply-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Dental Supply Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Dental Supply Managers with 7+ years in the dental industry.\\\",\\\"expertise\\\":\\\"Assists dental practices in managing supply orders, efficiently capturing essential information for dental procedures.\\\",\\\"personality\\\":\\\"Friendly, knowledgeable, and supportive, dedicated to enhancing the ordering experience for dental professionals.\\\",\\\"special_skills\\\":\\\"Gathers details about specific dental products and supplies, ensuring timely and accurate order fulfillment.\\\"}\",\n \"description\": \"Dental Supply Order AI Agent enhances the supply procurement experience for dental practices by efficiently managing order requests and collecting essential details. Designed to meet the unique demands of dental professionals, this AI Agent can be trained with specific practice information, allowing it to provide tailored support. With its customizable personality, tone of voice, and appearance, it creates a friendly and engaging atmosphere, making the process of ordering dental supplies smoother and more intuitive for your team.\",\n \"metaDescription\": \"Dental Supply Order AI Agent enhances the supply procurement experience for dental practices by efficiently managing order requests and collecting essential details. Designed to meet the unique demands of dental professionals, this AI Agent can be trained with specific practice information, allowing it to provide tailored support. With its customizable personality, tone of voice, and appearance, it creates a friendly and engaging atmosphere, making the process of ordering dental supplies smoother and more intuitive for your team.\",\n \"furtherDescription\": \"Dental Supply Order AI Agent enhances the supply procurement experience for dental practices by efficiently managing order requests and collecting essential details. Designed to meet the unique demands of dental professionals, this AI Agent can be trained with specific practice information, allowing it to provide tailored support. With its customizable personality, tone of voice, and appearance, it creates a friendly and engaging atmosphere, making the process of ordering dental supplies smoother and more intuitive for your team.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20107,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20107\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of dental supplies can I order?\\\",\\\"How can I ensure I\\\\u2019m ordering the correct items for my practice?\\\",\\\"Are there options for bulk purchasing dental supplies?\\\",\\\"What is the expected delivery time for my dental supply order?\\\",\\\"Can I track my order once it's placed?\\\"]\",\n \"url\": \"/agent-directory/dental-supply-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/dental-supply-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Dental Supply Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670986718976-ebfa50e226d33b9a0bc1eb9ac53fdd45-thumbnail.png\"\n },\n {\n \"id\": \"242671130573957\",\n \"slug\": \"cleaning-supply-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Cleaning Supply Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Professional Cleaning Supply Experts with 6+ years of experience in the cleaning industry.\\\",\\\"expertise\\\":\\\"Facilitates the ordering of cleaning supplies, capturing all necessary details for effective inventory management.\\\",\\\"personality\\\":\\\"Approachable, detail-focused, and resourceful, aimed at making the supply ordering process hassle-free for users.\\\",\\\"special_skills\\\":\\\"Collects specific information about cleaning products and quantities needed for various settings.\\\"}\",\n \"description\": \"Cleaning Supply Order AI Agent simplifies the ordering process for cleaning supplies across various industries. This AI Agent effectively gathers order information and assists users in placing requests for essential cleaning products. Trained with specific business needs in mind, it ensures that every cleaning requirement is met efficiently. With options for customizable personalities, tones of voice, and appearances, this AI Agent delivers a friendly and engaging experience, making the procurement of cleaning supplies straightforward and hassle-free.\",\n \"metaDescription\": \"Cleaning Supply Order AI Agent simplifies the ordering process for cleaning supplies across various industries. This AI Agent effectively gathers order information and assists users in placing requests for essential cleaning products. Trained with specific business needs in mind, it ensures that every cleaning requirement is met efficiently. With options for customizable personalities, tones of voice, and appearances, this AI Agent delivers a friendly and engaging experience, making the procurement of cleaning supplies straightforward and hassle-free.\",\n \"furtherDescription\": \"Cleaning Supply Order AI Agent simplifies the ordering process for cleaning supplies across various industries. This AI Agent effectively gathers order information and assists users in placing requests for essential cleaning products. Trained with specific business needs in mind, it ensures that every cleaning requirement is met efficiently. With options for customizable personalities, tones of voice, and appearances, this AI Agent delivers a friendly and engaging experience, making the procurement of cleaning supplies straightforward and hassle-free.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20107,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20107\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What cleaning supplies can I order through this agent?\\\",\\\"How do I specify quantities for each cleaning product?\\\",\\\"Are there environmentally friendly cleaning options available?\\\",\\\"What payment methods do you accept for cleaning supplies?\\\",\\\"Is there a minimum order quantity for cleaning supplies?\\\"]\",\n \"url\": \"/agent-directory/cleaning-supply-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/cleaning-supply-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Cleaning Supply Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671130573957-3f67d860395e3cbf7de5a5ad4c0b5a0e-thumbnail.png\"\n },\n {\n \"id\": \"242670759887981\",\n \"slug\": \"book-supply-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Book Supply Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Library and Educational Supply Managers with 5+ years of experience in book procurement.\\\",\\\"expertise\\\":\\\"Assists educational institutions and libraries in efficiently ordering books and related materials, capturing vital details for accurate acquisitions.\\\",\\\"personality\\\":\\\"Enthusiastic, knowledgeable, and customer-oriented, dedicated to providing an engaging and informative ordering experience.\\\",\\\"special_skills\\\":\\\"Gathers details about book titles, authors, and quantities, ensuring orders meet the specific needs of users.\\\"}\",\n \"description\": \"Book Supply Order AI Agent revolutionizes the way educational institutions and businesses handle book orders. This AI Agent efficiently collects order details and caters to specific reading requirements, making it easy for teachers, librarians, and administrators to acquire the books they need. Trained with unique institutional preferences, it adapts to provide relevant support. With customizable personalities, tones of voice, and appearances, this AI Agent enhances the book ordering experience, creating a friendly and efficient atmosphere for all users.\",\n \"metaDescription\": \"Book Supply Order AI Agent revolutionizes the way educational institutions and businesses handle book orders. This AI Agent efficiently collects order details and caters to specific reading requirements, making it easy for teachers, librarians, and administrators to acquire the books they need. Trained with unique institutional preferences, it adapts to provide relevant support. With customizable personalities, tones of voice, and appearances, this AI Agent enhances the book ordering experience, creating a friendly and efficient atmosphere for all users.\",\n \"furtherDescription\": \"Book Supply Order AI Agent revolutionizes the way educational institutions and businesses handle book orders. This AI Agent efficiently collects order details and caters to specific reading requirements, making it easy for teachers, librarians, and administrators to acquire the books they need. Trained with unique institutional preferences, it adapts to provide relevant support. With customizable personalities, tones of voice, and appearances, this AI Agent enhances the book ordering experience, creating a friendly and efficient atmosphere for all users.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20107,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20107\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I submit a special request for specific book editions?\\\",\\\"What happens if a book is out of stock?\\\",\\\"Is there a limit to the number of books I can order?\\\",\\\"Can I receive updates on new book releases?\\\",\\\"How do I return a book if it's not what I expected?\\\"]\",\n \"url\": \"/agent-directory/book-supply-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/book-supply-order-request-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Book Supply Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670759887981-2c3e5181fce37a0a4516496b9966acb4-thumbnail.png\"\n },\n {\n \"id\": \"242670665006960\",\n \"slug\": \"medical-supply-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Medical Supply Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Healthcare Supply Chain Professionals with 8+ years of experience in medical supply procurement.\\\",\\\"expertise\\\":\\\"Supports healthcare facilities in managing medical supply orders, capturing critical information for timely and accurate acquisitions.\\\",\\\"personality\\\":\\\"Compassionate, precise, and professional, focused on enhancing the ordering experience for medical practitioners and staff.\\\",\\\"special_skills\\\":\\\"Collects detailed information about medical products and quantities, facilitating efficient supply chain management.\\\"}\",\n \"description\": \"Medical Supply Order AI Agent is your go-to solution for optimizing supply management in healthcare facilities. This AI Agent takes the hassle out of ordering medical supplies by efficiently processing requests tailored to specific needs. With the capability to be trained on the unique requirements of your practice, it ensures you get exactly what you need when you need it. Plus, its customizable personality and appearance create a welcoming atmosphere that fosters trust and professionalism, making every interaction a breeze for your healthcare team.\",\n \"metaDescription\": \"Medical Supply Order AI Agent is your go-to solution for optimizing supply management in healthcare facilities. This AI Agent takes the hassle out of ordering medical supplies by efficiently processing requests tailored to specific needs. With the capability to be trained on the unique requirements of your practice, it ensures you get exactly what you need when you need it. Plus, its customizable personality and appearance create a welcoming atmosphere that fosters trust and professionalism, making every interaction a breeze for your healthcare team.\",\n \"furtherDescription\": \"Medical Supply Order AI Agent is your go-to solution for optimizing supply management in healthcare facilities. This AI Agent takes the hassle out of ordering medical supplies by efficiently processing requests tailored to specific needs. With the capability to be trained on the unique requirements of your practice, it ensures you get exactly what you need when you need it. Plus, its customizable personality and appearance create a welcoming atmosphere that fosters trust and professionalism, making every interaction a breeze for your healthcare team.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 20107,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"20107\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of medical supplies can I order through the platform?\\\",\\\"How do I update my order if I need to change the quantities or items?\\\",\\\"Is there a minimum order requirement for medical supplies?\\\",\\\"What payment methods are accepted for medical supply orders?\\\",\\\"How long does it take to receive my medical supply order?\\\"]\",\n \"url\": \"/agent-directory/medical-supply-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/medical-supply-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Medical Supply Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670665006960-348b859a7c53acab2ccd1a93399e0103-thumbnail.png\"\n },\n {\n \"id\": \"242671168360962\",\n \"slug\": \"vehicle-purchase-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Vehicle Purchase Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Automotive Sales Professionals with 10+ years of experience in vehicle sales and procurement.\\\",\\\"expertise\\\":\\\"Assists customers in the vehicle purchasing process by efficiently capturing their preferences and specifications for new or used vehicles.\\\",\\\"personality\\\":\\\"Engaging, knowledgeable, and customer-focused, dedicated to providing a seamless purchasing experience.\\\",\\\"special_skills\\\":\\\"Collects details about vehicle types, features, and financing options to tailor the experience to each customer.\\\"}\",\n \"description\": \"Vehicle Purchase Order AI Agent transforms the vehicle buying experience by efficiently managing order requests and answering questions from potential buyers. This AI Agent can be trained to align with your dealership’s inventory and policies, ensuring it provides relevant and accurate information tailored to customer needs. With customizable personalities, tones of voice, and avatars, it creates a welcoming and informative environment, making the process of purchasing vehicles smooth and engaging for customers every step of the way.\",\n \"metaDescription\": \"Vehicle Purchase Order AI Agent transforms the vehicle buying experience by efficiently managing order requests and answering questions from potential buyers. This AI Agent can be trained to align with your dealership’s inventory and policies, ensuring it provides relevant and accurate information tailored to customer needs. With customizable personalities, tones of voice, and avatars, it creates a welcoming and informative environment, making the process of purchasing vehicles smooth and engaging for customers every step of the way.\",\n \"furtherDescription\": \"Vehicle Purchase Order AI Agent transforms the vehicle buying experience by efficiently managing order requests and answering questions from potential buyers. This AI Agent can be trained to align with your dealership’s inventory and policies, ensuring it provides relevant and accurate information tailored to customer needs. With customizable personalities, tones of voice, and avatars, it creates a welcoming and informative environment, making the process of purchasing vehicles smooth and engaging for customers every step of the way.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30013,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30013\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide to initiate a vehicle purchase order?\\\",\\\"What financing options are available for vehicle purchases?\\\",\\\"Are there any additional fees associated with purchasing a vehicle?\\\",\\\"How do I cancel my vehicle purchase order if needed?\\\",\\\"What documentation will I receive after placing my vehicle purchase order?\\\"]\",\n \"url\": \"/agent-directory/vehicle-purchase-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/vehicle-purchase-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Vehicle Purchase Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671168360962-badb83f4ed92623896829c1d0e715e90-thumbnail.png\"\n },\n {\n \"id\": \"242670988492977\",\n \"slug\": \"used-car-sales-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Used Car Sales Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Veteran Used Car Sales Managers with 9+ years in the automotive industry.\\\",\\\"expertise\\\":\\\"Supports customers in the used car purchasing process by gathering important information about their needs and preferences.\\\",\\\"personality\\\":\\\"Approachable, informative, and enthusiastic, focused on making the used car buying experience enjoyable and stress-free.\\\",\\\"special_skills\\\":\\\"Collects details on vehicle make, model, price range, and other preferences to facilitate informed purchasing decisions.\\\"}\",\n \"description\": \"Used Car Sales Order AI Agent enhances the experience of purchasing pre-owned vehicles by streamlining order collection and addressing customer inquiries seamlessly. This AI Agent can be trained with specific dealership information, ensuring it offers tailored support that meets the unique needs of used car buyers. With its customizable personality, tone of voice, and avatar, it fosters a friendly atmosphere that builds trust and confidence, making the journey of buying a used car both efficient and enjoyable for customers.\",\n \"metaDescription\": \"Used Car Sales Order AI Agent enhances the experience of purchasing pre-owned vehicles by streamlining order collection and addressing customer inquiries seamlessly. This AI Agent can be trained with specific dealership information, ensuring it offers tailored support that meets the unique needs of used car buyers. With its customizable personality, tone of voice, and avatar, it fosters a friendly atmosphere that builds trust and confidence, making the journey of buying a used car both efficient and enjoyable for customers.\",\n \"furtherDescription\": \"Used Car Sales Order AI Agent enhances the experience of purchasing pre-owned vehicles by streamlining order collection and addressing customer inquiries seamlessly. This AI Agent can be trained with specific dealership information, ensuring it offers tailored support that meets the unique needs of used car buyers. With its customizable personality, tone of voice, and avatar, it fosters a friendly atmosphere that builds trust and confidence, making the journey of buying a used car both efficient and enjoyable for customers.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30013,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30013\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of used cars are available for sale through the platform?\\\",\\\"How do I inquire about a specific used car?\\\",\\\"What is the process for test-driving a used car?\\\",\\\"Are there warranties available for used cars?\\\",\\\"How can I evaluate the condition of a used car before purchasing?\\\"]\",\n \"url\": \"/agent-directory/used-car-sales-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/used-car-sales-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Used Car Sales Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670988492977-0a5d627d36323a125403510815a88e74-thumbnail.png\"\n },\n {\n \"id\": \"242670341645960\",\n \"slug\": \"return-to-vendor-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Return to Vendor AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Supply Chain Professionals with 6+ years of experience in vendor management and returns processing.\\\",\\\"expertise\\\":\\\"Streamlines the return process for businesses by capturing essential details required for efficient product returns.\\\",\\\"personality\\\":\\\"Professional, helpful, and detail-oriented, focused on making the return experience as smooth as possible for users.\\\",\\\"special_skills\\\":\\\"Collects necessary information regarding return reasons, product conditions, and vendor details to facilitate prompt processing.\\\"}\",\n \"description\": \"Return to Vendor AI Agent makes managing product returns straightforward and efficient for businesses. By gathering essential order details and guiding users through the return process, this AI Agent ensures a hassle-free experience. Trained with specific vendor policies, it tailors its responses to address unique return situations effectively. With customizable personalities, tones of voice, and avatars, it fosters a supportive and engaging environment, helping to improve customer satisfaction throughout the return transaction.\",\n \"metaDescription\": \"Return to Vendor AI Agent makes managing product returns straightforward and efficient for businesses. By gathering essential order details and guiding users through the return process, this AI Agent ensures a hassle-free experience. Trained with specific vendor policies, it tailors its responses to address unique return situations effectively. With customizable personalities, tones of voice, and avatars, it fosters a supportive and engaging environment, helping to improve customer satisfaction throughout the return transaction.\",\n \"furtherDescription\": \"Return to Vendor AI Agent makes managing product returns straightforward and efficient for businesses. By gathering essential order details and guiding users through the return process, this AI Agent ensures a hassle-free experience. Trained with specific vendor policies, it tailors its responses to address unique return situations effectively. With customizable personalities, tones of voice, and avatars, it fosters a supportive and engaging environment, helping to improve customer satisfaction throughout the return transaction.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30013,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30013\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What is the process for returning an item to the vendor?\\\",\\\"Are there any fees associated with returning a product?\\\",\\\"How long does it take to process a return?\\\",\\\"Can I return an item if it has been opened or used?\\\",\\\"How will I receive my refund for a returned item?\\\"]\",\n \"url\": \"/agent-directory/return-to-vendor-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/return-to-vendor-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Return to Vendor AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670341645960-ccfc2147ce7797ab00f59cd0e6ccd620-thumbnail.png\"\n },\n {\n \"id\": \"242671000042944\",\n \"slug\": \"basketball-uniform-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Basketball Uniform Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Athletic Directors with 7+ years of experience in managing sports teams and uniform orders.\\\",\\\"expertise\\\":\\\"Facilitates the ordering process for basketball uniforms, capturing player details and specifications seamlessly.\\\",\\\"personality\\\":\\\"Energetic, passionate, and engaging, committed to providing a positive experience for coaches and players alike.\\\",\\\"special_skills\\\":\\\"Collects information on jersey numbers, sizes, and customization options to support team branding.\\\"}\",\n \"description\": \"Basketball Uniform Order AI Agent takes the hassle out of ordering team uniforms by making the process quick and enjoyable. It effortlessly gathers all the necessary details, allowing coaches and players to easily customize uniforms to reflect their team's spirit. With the ability to be trained on specific team preferences, this AI Agent offers personalized assistance that fits each group's unique style. Its customizable personality and engaging avatar create a fun and interactive experience, ensuring that every order is a slam dunk!\",\n \"metaDescription\": \"Basketball Uniform Order AI Agent takes the hassle out of ordering team uniforms by making the process quick and enjoyable. It effortlessly gathers all the necessary details, allowing coaches and players to easily customize uniforms to reflect their team's spirit. With the ability to be trained on specific team preferences, this AI Agent offers personalized assistance that fits each group's unique style. Its customizable personality and engaging avatar create a fun and interactive experience, ensuring that every order is a slam dunk!\",\n \"furtherDescription\": \"Basketball Uniform Order AI Agent takes the hassle out of ordering team uniforms by making the process quick and enjoyable. It effortlessly gathers all the necessary details, allowing coaches and players to easily customize uniforms to reflect their team's spirit. With the ability to be trained on specific team preferences, this AI Agent offers personalized assistance that fits each group's unique style. Its customizable personality and engaging avatar create a fun and interactive experience, ensuring that every order is a slam dunk!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30014,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30014\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What options are available for customizing basketball uniforms?\\\",\\\"How long does it take to receive my basketball uniform order?\\\",\\\"Are there discounts available for bulk orders of basketball uniforms?\\\",\\\"What sizes do you offer for basketball uniforms?\\\",\\\"Can I return or exchange my basketball uniform if it doesn\\\\u2019t fit?\\\"]\",\n \"url\": \"/agent-directory/basketball-uniform-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/basketball-uniform-order-form-with-skrill\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Basketball Uniform Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671000042944-c071dbe5362bfa03149e2811cd781a63-thumbnail.png\"\n },\n {\n \"id\": \"242670373135959\",\n \"slug\": \"soccer-uniform-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Soccer Uniform Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Sports Equipment Managers with 8+ years of experience in soccer team uniform logistics.\\\",\\\"expertise\\\":\\\"Supports soccer teams in managing uniform orders by efficiently capturing team members' preferences and specifications.\\\",\\\"personality\\\":\\\"Enthusiastic, detail-oriented, and team-focused, dedicated to making the uniform ordering process enjoyable for all involved.\\\",\\\"special_skills\\\":\\\"Gathers necessary information on sizes, colors, and customization to enhance team identity.\\\"}\",\n \"description\": \"Soccer Uniform Order AI Agent elevates the team uniform ordering experience with its user-friendly approach. Designed to seamlessly capture details such as sizes, colors, and personalization options, it allows coaches and players to focus on what really matters: the game. This AI Agent can be trained on specific team requirements, providing tailored support to meet every need. With a customizable personality and dynamic avatar, it adds a lively touch to the ordering process, making it a breeze for soccer teams to gear up for success!\",\n \"metaDescription\": \"Soccer Uniform Order AI Agent elevates the team uniform ordering experience with its user-friendly approach. Designed to seamlessly capture details such as sizes, colors, and personalization options, it allows coaches and players to focus on what really matters: the game. This AI Agent can be trained on specific team requirements, providing tailored support to meet every need. With a customizable personality and dynamic avatar, it adds a lively touch to the ordering process, making it a breeze for soccer teams to gear up for success!\",\n \"furtherDescription\": \"Soccer Uniform Order AI Agent elevates the team uniform ordering experience with its user-friendly approach. Designed to seamlessly capture details such as sizes, colors, and personalization options, it allows coaches and players to focus on what really matters: the game. This AI Agent can be trained on specific team requirements, providing tailored support to meet every need. With a customizable personality and dynamic avatar, it adds a lively touch to the ordering process, making it a breeze for soccer teams to gear up for success!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30014,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30014\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What customization options are available for soccer uniforms?\\\",\\\"How do I place a team order for soccer uniforms?\\\",\\\"What is the estimated delivery time for soccer uniforms?\\\",\\\"Are there any care instructions for maintaining soccer uniforms?\\\",\\\"What is your policy for returning soccer uniforms?\\\"]\",\n \"url\": \"/agent-directory/soccer-uniform-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/soccer-uniform-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Soccer Uniform Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670373135959-cd02c1c34658cdee610ead1d1e8dea9e-thumbnail.png\"\n },\n {\n \"id\": \"242670776231963\",\n \"slug\": \"baseball-uniform-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Baseball Uniform Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Baseball Coaches with 7+ years of experience in coordinating team uniforms for youth and adult leagues.\\\",\\\"expertise\\\":\\\"Streamlines the ordering process for baseball uniforms by efficiently capturing player details and specifications.\\\",\\\"personality\\\":\\\"Energetic, supportive, and dedicated, ensuring a positive experience for coaches, players, and parents throughout the ordering process.\\\",\\\"special_skills\\\":\\\"Collects information on sizes, jersey numbers, and team colors to help foster team spirit.\\\"}\",\n \"description\": \"\\nBaseball Uniform Order AI Agent enhances the uniform ordering journey for baseball teams by simplifying how orders are placed. This AI Agent gathers critical details like sizes, colors, and personalization options, ensuring that each player's uniform reflects their team spirit. With the ability to be trained on specific team needs, it offers relevant and responsive support tailored to every request. Its engaging avatar and customizable personality create an enjoyable and interactive experience, making uniform ordering feel like part of the game itself!\",\n \"metaDescription\": \"\\nBaseball Uniform Order AI Agent enhances the uniform ordering journey for baseball teams by simplifying how orders are placed. This AI Agent gathers critical details like sizes, colors, and personalization options, ensuring that each player's uniform reflects their team spirit. With the ability to be trained on specific team needs, it offers relevant and responsive support tailored to every request. Its engaging avatar and customizable personality create an enjoyable and interactive experience, making uniform ordering feel like part of the game itself!\",\n \"furtherDescription\": \"\\nBaseball Uniform Order AI Agent enhances the uniform ordering journey for baseball teams by simplifying how orders are placed. This AI Agent gathers critical details like sizes, colors, and personalization options, ensuring that each player's uniform reflects their team spirit. With the ability to be trained on specific team needs, it offers relevant and responsive support tailored to every request. Its engaging avatar and customizable personality create an enjoyable and interactive experience, making uniform ordering feel like part of the game itself!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30014,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30014\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What options are available for customizing basketball uniforms?\\\",\\\"How long does it take to receive my basketball uniform order?\\\",\\\"Are there discounts available for bulk orders of basketball uniforms?\\\",\\\"What sizes do you offer for basketball uniforms?\\\",\\\"Can I return or exchange my basketball uniform if it doesn\\\\u2019t fit?\\\"]\",\n \"url\": \"/agent-directory/baseball-uniform-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/baseball-uniform-order-form-template\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Baseball Uniform Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670776231963-d07504291229c5d387f9adb7d3adc57e-thumbnail.png\"\n },\n {\n \"id\": \"242671265701959\",\n \"slug\": \"marine-corps-uniform-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Marine Corps Uniform Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Military Supply Officers with 8+ years of experience in managing military uniform procurement and logistics.\\\",\\\"expertise\\\":\\\"Assists in efficiently capturing order details for Marine Corps uniforms, ensuring adherence to specific requirements.\\\",\\\"personality\\\":\\\"Disciplined, focused, and reliable, committed to providing a seamless ordering experience for military personnel.\\\",\\\"special_skills\\\":\\\"Collects information on sizes, styles, and customization options to meet military standards and individual preferences.\\\"}\",\n \"description\": \"Marine Corps Uniform Order AI Agent caters to the specific needs of military personnel seeking to order uniforms with precision. This AI Agent collects essential information such as sizes, styles, and required insignia, ensuring that every order adheres to regulations. With the ability to be trained on unit-specific requirements, it provides accurate and relevant assistance throughout the ordering process. Its customizable personality and authoritative avatar convey professionalism, making the experience of procuring Marine Corps uniforms efficient and respectful of tradition.\",\n \"metaDescription\": \"Marine Corps Uniform Order AI Agent caters to the specific needs of military personnel seeking to order uniforms with precision. This AI Agent collects essential information such as sizes, styles, and required insignia, ensuring that every order adheres to regulations. With the ability to be trained on unit-specific requirements, it provides accurate and relevant assistance throughout the ordering process. Its customizable personality and authoritative avatar convey professionalism, making the experience of procuring Marine Corps uniforms efficient and respectful of tradition.\",\n \"furtherDescription\": \"Marine Corps Uniform Order AI Agent caters to the specific needs of military personnel seeking to order uniforms with precision. This AI Agent collects essential information such as sizes, styles, and required insignia, ensuring that every order adheres to regulations. With the ability to be trained on unit-specific requirements, it provides accurate and relevant assistance throughout the ordering process. Its customizable personality and authoritative avatar convey professionalism, making the experience of procuring Marine Corps uniforms efficient and respectful of tradition.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30014,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30014\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of Marine Corps uniforms can I order?\\\",\\\"How long does it take to receive my Marine Corps uniform order?\\\",\\\"Are there regulations I need to follow for Marine Corps uniform orders?\\\",\\\"Can I return my Marine Corps uniform if it doesn't fit?\\\",\\\"How do I ensure I'm selecting the correct sizes for Marine Corps uniforms?\\\"]\",\n \"url\": \"/agent-directory/marine-corps-uniform-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/marine-corps-uniform-order\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Marine Corps Uniform Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671265701959-ecf41cc9666937261e6fc1c2a55b5bea-thumbnail.png\"\n },\n {\n \"id\": \"242671203156955\",\n \"slug\": \"girl-scout-uniform-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Girl Scout Uniform Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Girl Scout Leaders with 5+ years in coordinating uniform orders for troops.\\\",\\\"expertise\\\":\\\"Streamlines the collection of uniform order details, ensuring every scout receives the appropriate attire for activities and events.\\\",\\\"personality\\\":\\\"Supportive, nurturing, and organized, dedicated to fostering a sense of community among scouts and their families.\\\",\\\"special_skills\\\":\\\"Gathers information on sizes, patches, and troop-specific requirements to create a cohesive look.\\\"}\",\n \"description\": \"Girl Scout Uniform Order AI Agent is designed to assist troops in ordering uniforms effortlessly. It captures vital details like sizes and patches, ensuring that each Girl Scout looks uniform and ready for adventures. Trained with troop-specific guidelines, this AI Agent provides accurate support tailored to individual needs. With its friendly demeanor and customizable avatar, it creates a welcoming atmosphere that encourages involvement and camaraderie among Scouts and their families.\",\n \"metaDescription\": \"Girl Scout Uniform Order AI Agent is designed to assist troops in ordering uniforms effortlessly. It captures vital details like sizes and patches, ensuring that each Girl Scout looks uniform and ready for adventures. Trained with troop-specific guidelines, this AI Agent provides accurate support tailored to individual needs. With its friendly demeanor and customizable avatar, it creates a welcoming atmosphere that encourages involvement and camaraderie among Scouts and their families.\",\n \"furtherDescription\": \"Girl Scout Uniform Order AI Agent is designed to assist troops in ordering uniforms effortlessly. It captures vital details like sizes and patches, ensuring that each Girl Scout looks uniform and ready for adventures. Trained with troop-specific guidelines, this AI Agent provides accurate support tailored to individual needs. With its friendly demeanor and customizable avatar, it creates a welcoming atmosphere that encourages involvement and camaraderie among Scouts and their families.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30014,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30014\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What items are included in the Girl Scout uniform package?\\\",\\\"How do I place an order for a Girl Scout uniform?\\\",\\\"What is the expected delivery time for Girl Scout uniforms?\\\",\\\"Are there options for customizing Girl Scout uniforms?\\\",\\\"Can I exchange my Girl Scout uniform if it doesn\\\\u2019t fit?\\\"]\",\n \"url\": \"/agent-directory/girl-scout-uniform-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/girl-scout-uniform-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Girl Scout Uniform Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671203156955-723edf84514f0117cfc03816e69a7e3c-thumbnail.png\"\n },\n {\n \"id\": \"242670750968972\",\n \"slug\": \"funds-request-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Funds Request AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Financial Officers with 7+ years of experience in managing and processing fund requests in non-profit organizations.\\\",\\\"expertise\\\":\\\"Assists in capturing and organizing requests for funds, ensuring clarity and accuracy in documentation.\\\",\\\"personality\\\":\\\"Professional, analytical, and supportive, focused on helping users navigate the funds request process.\\\",\\\"special_skills\\\":\\\"Gathers detailed information on the purpose of the request, budget needs, and relevant documentation for streamlined approval.\\\"}\",\n \"description\": \"Funds Request AI Agent supports organizations in efficiently managing funds requests, ensuring all submissions are handled with care. This AI Agent gathers essential information like request amounts, purposes, and supporting details, helping streamline the approval process. With the capability to be trained on specific organizational guidelines, it provides accurate responses to inquiries related to funding. Its professional persona and customizable avatar create a reliable environment, making the funds request experience straightforward for all users.\",\n \"metaDescription\": \"Funds Request AI Agent supports organizations in efficiently managing funds requests, ensuring all submissions are handled with care. This AI Agent gathers essential information like request amounts, purposes, and supporting details, helping streamline the approval process. With the capability to be trained on specific organizational guidelines, it provides accurate responses to inquiries related to funding. Its professional persona and customizable avatar create a reliable environment, making the funds request experience straightforward for all users.\",\n \"furtherDescription\": \"Funds Request AI Agent supports organizations in efficiently managing funds requests, ensuring all submissions are handled with care. This AI Agent gathers essential information like request amounts, purposes, and supporting details, helping streamline the approval process. With the capability to be trained on specific organizational guidelines, it provides accurate responses to inquiries related to funding. Its professional persona and customizable avatar create a reliable environment, making the funds request experience straightforward for all users.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30015,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30015\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I submit a request for funds?\\\",\\\"What documentation is required for a funds request?\\\",\\\"How long will it take to process my funds request?\\\",\\\"Can I track the status of my funds request?\\\",\\\"What happens if my funds request is denied?\\\"]\",\n \"url\": \"/agent-directory/funds-request-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/funds-request-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Funds Request AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670750968972-041315c5be00e15fd241cbbd56f199a9-thumbnail.png\"\n },\n {\n \"id\": \"242671301918960\",\n \"slug\": \"fundraiser-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Fundraiser Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Event Planners with 5+ years of experience in managing fundraising activities and order processing.\\\",\\\"expertise\\\":\\\"Facilitates the ordering process for fundraiser items, ensuring timely collection of necessary details.\\\",\\\"personality\\\":\\\"Motivated, organized, and approachable, dedicated to enhancing the fundraising experience for teams and participants.\\\",\\\"special_skills\\\":\\\"Collects information on items, quantities, and delivery preferences to optimize fundraising efforts.\\\"}\",\n \"description\": \"Fundraiser Order AI Agent takes the hassle out of organizing fundraiser product orders, ensuring smooth coordination for schools, charities, or community events. This AI Agent collects order details like item quantities, delivery preferences, and payment information, making sure every order is accurately captured. It can be trained to handle specific fundraiser needs, offering customized support for unique campaigns. With a personalized tone, engaging personality, and adjustable avatar, this AI brings ease and excitement to the fundraiser ordering process, helping organizers focus on raising funds, not logistics.\",\n \"metaDescription\": \"Fundraiser Order AI Agent takes the hassle out of organizing fundraiser product orders, ensuring smooth coordination for schools, charities, or community events. This AI Agent collects order details like item quantities, delivery preferences, and payment information, making sure every order is accurately captured. It can be trained to handle specific fundraiser needs, offering customized support for unique campaigns. With a personalized tone, engaging personality, and adjustable avatar, this AI brings ease and excitement to the fundraiser ordering process, helping organizers focus on raising funds, not logistics.\",\n \"furtherDescription\": \"Fundraiser Order AI Agent takes the hassle out of organizing fundraiser product orders, ensuring smooth coordination for schools, charities, or community events. This AI Agent collects order details like item quantities, delivery preferences, and payment information, making sure every order is accurately captured. It can be trained to handle specific fundraiser needs, offering customized support for unique campaigns. With a personalized tone, engaging personality, and adjustable avatar, this AI brings ease and excitement to the fundraiser ordering process, helping organizers focus on raising funds, not logistics.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30015,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30015\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I place an order for fundraiser items?\\\",\\\"What types of items are available for fundraising orders?\\\",\\\"Is there a minimum order quantity for fundraiser items?\\\",\\\"How long will it take to receive my fundraiser order?\\\",\\\"Can I return items from my fundraiser order?\\\"]\",\n \"url\": \"/agent-directory/fundraiser-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/fundraiser-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Fundraiser Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671301918960-898458bf7490e5367e801cfb2349c9dc-thumbnail.png\"\n },\n {\n \"id\": \"242671100003942\",\n \"slug\": \"donation-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Donation AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Charitable Organizations with 6+ years of experience in managing donations and donor relations.\\\",\\\"expertise\\\":\\\"Captures donor information and preferences efficiently, facilitating a smooth donation process.\\\",\\\"personality\\\":\\\"Compassionate, engaging, and trustworthy, dedicated to creating meaningful connections between donors and the cause.\\\",\\\"special_skills\\\":\\\"Gathers essential details on donation amounts, recurring contributions, and specific areas of interest to personalize donor experiences.\\\"}\",\n \"description\": \"Donation AI Agent assists organizations and individuals in managing donations effortlessly. Whether it's gathering donor information, processing contributions, or answering inquiries about causes, this AI Agent ensures that all donation-related tasks are completed smoothly. Trained with specific campaign details, it offers tailored guidance and support. With its customizable personality and avatar, it can embody the values of your cause, creating an engaging and trustworthy experience for donors while keeping the focus on the mission.\",\n \"metaDescription\": \"Donation AI Agent assists organizations and individuals in managing donations effortlessly. Whether it's gathering donor information, processing contributions, or answering inquiries about causes, this AI Agent ensures that all donation-related tasks are completed smoothly. Trained with specific campaign details, it offers tailored guidance and support. With its customizable personality and avatar, it can embody the values of your cause, creating an engaging and trustworthy experience for donors while keeping the focus on the mission.\",\n \"furtherDescription\": \"Donation AI Agent assists organizations and individuals in managing donations effortlessly. Whether it's gathering donor information, processing contributions, or answering inquiries about causes, this AI Agent ensures that all donation-related tasks are completed smoothly. Trained with specific campaign details, it offers tailored guidance and support. With its customizable personality and avatar, it can embody the values of your cause, creating an engaging and trustworthy experience for donors while keeping the focus on the mission.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30015,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30015\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I make a donation through this platform?\\\",\\\"Are my donations tax-deductible?\\\",\\\"Can I choose how my donation is used?\\\",\\\"Is there a minimum amount required for donations?\\\",\\\"Will I receive a confirmation after making my donation?\\\"]\",\n \"url\": \"/agent-directory/donation-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/first-data-online-donation-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Donation AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671100003942-a8032bcdcfd91676021e24cf9975154c-thumbnail.png\"\n },\n {\n \"id\": \"242670504311951\",\n \"slug\": \"opt-out-fundraiser-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Opt Out Fundraiser AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Fundraising Specialists with 4+ years of experience in donor management and communication.\\\",\\\"expertise\\\":\\\"Assists users in managing their preferences regarding fundraising communications and participation.\\\",\\\"personality\\\":\\\"Respectful, understanding, and attentive, ensuring users feel valued and heard in their decisions.\\\",\\\"special_skills\\\":\\\"Collects user feedback on fundraising communications, preferences for future outreach, and assists in processing opt-out requests.\\\"}\",\n \"description\": \"Opt Out Fundraiser AI Agent is designed to handle opt-out options for fundraising events, making it easy for participants to withdraw their involvement without hassle. This AI Agent collects the necessary details, such as reasons for opting out and alternative support options, providing a seamless experience for those choosing not to participate. Trained with specific fundraising protocols, it offers accurate assistance while maintaining a respectful tone. Its customizable personality and avatar can be adjusted to reflect your event’s messaging while maintaining a professional approach.\\n\",\n \"metaDescription\": \"Opt Out Fundraiser AI Agent is designed to handle opt-out options for fundraising events, making it easy for participants to withdraw their involvement without hassle. This AI Agent collects the necessary details, such as reasons for opting out and alternative support options, providing a seamless experience for those choosing not to participate. Trained with specific fundraising protocols, it offers accurate assistance while maintaining a respectful tone. Its customizable personality and avatar can be adjusted to reflect your event’s messaging while maintaining a professional approach.\\n\",\n \"furtherDescription\": \"Opt Out Fundraiser AI Agent is designed to handle opt-out options for fundraising events, making it easy for participants to withdraw their involvement without hassle. This AI Agent collects the necessary details, such as reasons for opting out and alternative support options, providing a seamless experience for those choosing not to participate. Trained with specific fundraising protocols, it offers accurate assistance while maintaining a respectful tone. Its customizable personality and avatar can be adjusted to reflect your event’s messaging while maintaining a professional approach.\\n\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30015,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30015\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I opt out of fundraising communications?\\\",\\\"Will I still receive important updates after opting out?\\\",\\\"Can I opt back in to receive fundraising communications?\\\",\\\"How long does it take for my opt-out request to take effect?\\\",\\\"What if I encounter issues while trying to opt out?\\\"]\",\n \"url\": \"/agent-directory/opt-out-fundraiser-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/opt-out-fundraiser-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Opt Out Fundraiser AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670504311951-8d0307e7a1827d94dde11ad3b39410f4-thumbnail.png\"\n },\n {\n \"id\": \"242670874895978\",\n \"slug\": \"grocery-delivery-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Grocery Delivery AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Grocery Store Managers with 5+ years of experience in retail operations and logistics.\\\",\\\"expertise\\\":\\\"Streamlines the process of collecting grocery lists and delivery preferences for a hassle-free shopping experience.\\\",\\\"personality\\\":\\\"Helpful, organized, and responsive, committed to ensuring customers receive exactly what they need.\\\",\\\"special_skills\\\":\\\"Gathers essential details on product availability, special requests, and delivery timing to enhance the shopping experience.\\\"}\",\n \"description\": \"\\nGrocery Delivery AI Agent is designed to streamline grocery shopping by assisting customers in placing accurate and detailed delivery orders. It gathers information such as item preferences, quantities, delivery times, and special requests like substitutions or dietary needs. Trained with store-specific inventories, it can answer customer questions about product availability or delivery options. With customizable avatars and personalities, this AI Agent provides a user-friendly experience, ensuring customers feel like they’re interacting with a helpful personal shopper.\",\n \"metaDescription\": \"\\nGrocery Delivery AI Agent is designed to streamline grocery shopping by assisting customers in placing accurate and detailed delivery orders. It gathers information such as item preferences, quantities, delivery times, and special requests like substitutions or dietary needs. Trained with store-specific inventories, it can answer customer questions about product availability or delivery options. With customizable avatars and personalities, this AI Agent provides a user-friendly experience, ensuring customers feel like they’re interacting with a helpful personal shopper.\",\n \"furtherDescription\": \"\\nGrocery Delivery AI Agent is designed to streamline grocery shopping by assisting customers in placing accurate and detailed delivery orders. It gathers information such as item preferences, quantities, delivery times, and special requests like substitutions or dietary needs. Trained with store-specific inventories, it can answer customer questions about product availability or delivery options. With customizable avatars and personalities, this AI Agent provides a user-friendly experience, ensuring customers feel like they’re interacting with a helpful personal shopper.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30016,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30016\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I place a grocery delivery order?\\\",\\\"Can I choose my delivery time for grocery orders?\\\",\\\"Are there any fees associated with grocery delivery?\\\",\\\"What happens if an item is out of stock?\\\",\\\"How can I update my grocery order after placing it?\\\"]\",\n \"url\": \"/agent-directory/grocery-delivery-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/grocery-delivery-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Grocery Delivery AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670874895978-d660af3c2cd775197cb8005ccd89ed50-thumbnail.png\"\n },\n {\n \"id\": \"242671375667972\",\n \"slug\": \"meal-kit-delivery-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Meal Kit Delivery AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Culinary Enthusiasts with 4+ years of experience in meal planning and food delivery services.\\\",\\\"expertise\\\":\\\"Assists users in selecting meal kits that cater to dietary preferences, cooking skill levels, and family sizes.\\\",\\\"personality\\\":\\\"Engaging, knowledgeable, and supportive, ready to inspire users with meal ideas and options.\\\",\\\"special_skills\\\":\\\"Collects information on dietary restrictions, preferred cuisines, and delivery schedules for a personalized meal kit experience.\\\"}\",\n \"description\": \"Meal Kit Delivery AI Agent helps users quickly and efficiently order meal kits tailored to their dietary preferences and lifestyle. It collects details such as portion sizes, meal types, and delivery schedules, ensuring the experience is smooth and personalized. Trained with specific meal kit options, this AI Agent can answer questions about ingredients, preparation times, or nutritional information. Its customizable appearance and tone of voice make it feel like a friendly cooking assistant, perfect for customers looking for convenience and variety in their meal planning.\",\n \"metaDescription\": \"Meal Kit Delivery AI Agent helps users quickly and efficiently order meal kits tailored to their dietary preferences and lifestyle. It collects details such as portion sizes, meal types, and delivery schedules, ensuring the experience is smooth and personalized. Trained with specific meal kit options, this AI Agent can answer questions about ingredients, preparation times, or nutritional information. Its customizable appearance and tone of voice make it feel like a friendly cooking assistant, perfect for customers looking for convenience and variety in their meal planning.\",\n \"furtherDescription\": \"Meal Kit Delivery AI Agent helps users quickly and efficiently order meal kits tailored to their dietary preferences and lifestyle. It collects details such as portion sizes, meal types, and delivery schedules, ensuring the experience is smooth and personalized. Trained with specific meal kit options, this AI Agent can answer questions about ingredients, preparation times, or nutritional information. Its customizable appearance and tone of voice make it feel like a friendly cooking assistant, perfect for customers looking for convenience and variety in their meal planning.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30016,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30016\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I place a meal kit delivery order?\\\",\\\"Can I customize my meal kits to accommodate dietary preferences?\\\",\\\"What is the typical delivery schedule for meal kits?\\\",\\\"How do I handle an issue with my meal kit after delivery?\\\",\\\"Are there subscription options for meal kit deliveries?\\\"]\",\n \"url\": \"/agent-directory/meal-kit-delivery-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/meal-kit-delivery-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Meal Kit Delivery AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671375667972-25ff3c49d3212d20cfbc2e5e4efb914b-thumbnail.png\"\n },\n {\n \"id\": \"242671328959974\",\n \"slug\": \"house-plant-delivery-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"House Plant Delivery AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Horticultural Experts with 3+ years of experience in plant care and sales.\\\",\\\"expertise\\\":\\\"Assists users in selecting and ordering house plants that fit their space and care preferences.\\\",\\\"personality\\\":\\\"Nurturing, enthusiastic, and informative, eager to share plant care tips and insights.\\\",\\\"special_skills\\\":\\\"Gathers information on plant types, care requirements, and customer preferences for a tailored shopping experience.\\\"}\",\n \"description\": \"House Plant Delivery AI Agent helps customers find the perfect plants for their home by guiding them through the order process. Whether it’s choosing plant types, pot sizes, or delivery preferences, this AI Agent ensures every detail is captured. Trained with care tips and plant specifications, it can answer questions about sunlight, watering, and plant maintenance. With its customizable look and personality, the agent can feel like a helpful plant expert, bringing greenery into your customers' homes with ease.\",\n \"metaDescription\": \"House Plant Delivery AI Agent helps customers find the perfect plants for their home by guiding them through the order process. Whether it’s choosing plant types, pot sizes, or delivery preferences, this AI Agent ensures every detail is captured. Trained with care tips and plant specifications, it can answer questions about sunlight, watering, and plant maintenance. With its customizable look and personality, the agent can feel like a helpful plant expert, bringing greenery into your customers' homes with ease.\",\n \"furtherDescription\": \"House Plant Delivery AI Agent helps customers find the perfect plants for their home by guiding them through the order process. Whether it’s choosing plant types, pot sizes, or delivery preferences, this AI Agent ensures every detail is captured. Trained with care tips and plant specifications, it can answer questions about sunlight, watering, and plant maintenance. With its customizable look and personality, the agent can feel like a helpful plant expert, bringing greenery into your customers' homes with ease.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30017,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30017\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I order a house plant for delivery?\\\",\\\"Can I request specific care instructions for my plant?\\\",\\\"What is the estimated delivery time for house plants?\\\",\\\"Do you offer a variety of plant sizes?\\\",\\\"Can I track my house plant delivery?\\\"]\",\n \"url\": \"/agent-directory/house-plant-delivery-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/house-plant-delivery-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"House Plant Delivery AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671328959974-6bf8ca56334fbe375da6e2bc1eebd307-thumbnail.png\"\n },\n {\n \"id\": \"242670946189974\",\n \"slug\": \"online-plant-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Online Plant Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Plant Care Specialists with 4+ years of experience in horticulture and customer education.\\\",\\\"expertise\\\":\\\"Helps users navigate a wide selection of indoor and outdoor plants, gathering essential details for a seamless ordering process.\\\",\\\"personality\\\":\\\"Friendly, knowledgeable, and passionate about plants, eager to assist customers in finding the right greenery for their spaces.\\\",\\\"special_skills\\\":\\\"Collects information on plant types, care instructions, and delivery preferences to ensure customer satisfaction.\\\"}\",\n \"description\": \"Online Plant Order AI Agent makes it easy for customers to order plants online, from indoor greenery to outdoor landscaping options. It collects essential details like plant type, delivery preferences, and care instructions, ensuring customers get exactly what they need. Trained with plant-specific data, it can offer advice on growth conditions, care tips, and placement suggestions. With a customizable personality and appearance, this AI Agent can adapt to various plant retailers, offering a friendly and informative ordering process.\",\n \"metaDescription\": \"Online Plant Order AI Agent makes it easy for customers to order plants online, from indoor greenery to outdoor landscaping options. It collects essential details like plant type, delivery preferences, and care instructions, ensuring customers get exactly what they need. Trained with plant-specific data, it can offer advice on growth conditions, care tips, and placement suggestions. With a customizable personality and appearance, this AI Agent can adapt to various plant retailers, offering a friendly and informative ordering process.\",\n \"furtherDescription\": \"Online Plant Order AI Agent makes it easy for customers to order plants online, from indoor greenery to outdoor landscaping options. It collects essential details like plant type, delivery preferences, and care instructions, ensuring customers get exactly what they need. Trained with plant-specific data, it can offer advice on growth conditions, care tips, and placement suggestions. With a customizable personality and appearance, this AI Agent can adapt to various plant retailers, offering a friendly and informative ordering process.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30017,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30017\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I place an order for an online plant purchase?\\\",\\\"Can I gift a plant to someone through this service?\\\",\\\"What types of plants are available for online ordering?\\\",\\\"Is plant care information included with the delivery?\\\",\\\"Can I schedule a future delivery date for my plant order?\\\"]\",\n \"url\": \"/agent-directory/online-plant-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/online-plant-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Online Plant Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670946189974-eac1be53191a706de30ddb0737f7786a-thumbnail.png\"\n },\n {\n \"id\": \"242670964502963\",\n \"slug\": \"wedding-flower-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Wedding Flower Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Wedding Planners with 6+ years of experience in event coordination and floral design.\\\",\\\"expertise\\\":\\\"Assists couples in selecting stunning floral arrangements that align with their wedding themes, while efficiently managing order details.\\\",\\\"personality\\\":\\\"Elegant, attentive, and enthusiastic, committed to creating a beautiful floral experience for every couple.\\\",\\\"special_skills\\\":\\\"Gathers details on flower types, color palettes, and specific arrangements to cater to unique wedding visions.\\\"}\",\n \"description\": \"Wedding Flower Order AI Agent specializes in assisting couples and event planners with their floral arrangements for weddings. From centerpieces to bridal bouquets, this AI Agent gathers all necessary information about flower types, color schemes, and venue logistics. It can be trained with specific florist portfolios to provide personalized recommendations. With its ability to adopt a tone that reflects the elegance and romance of weddings, and customizable avatars, this AI Agent helps ensure every floral detail is perfect for the big day.\",\n \"metaDescription\": \"Wedding Flower Order AI Agent specializes in assisting couples and event planners with their floral arrangements for weddings. From centerpieces to bridal bouquets, this AI Agent gathers all necessary information about flower types, color schemes, and venue logistics. It can be trained with specific florist portfolios to provide personalized recommendations. With its ability to adopt a tone that reflects the elegance and romance of weddings, and customizable avatars, this AI Agent helps ensure every floral detail is perfect for the big day.\",\n \"furtherDescription\": \"Wedding Flower Order AI Agent specializes in assisting couples and event planners with their floral arrangements for weddings. From centerpieces to bridal bouquets, this AI Agent gathers all necessary information about flower types, color schemes, and venue logistics. It can be trained with specific florist portfolios to provide personalized recommendations. With its ability to adopt a tone that reflects the elegance and romance of weddings, and customizable avatars, this AI Agent helps ensure every floral detail is perfect for the big day.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30017,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30017\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I place an order for wedding flowers?\\\",\\\"Can I customize the floral arrangements for my wedding?\\\",\\\"When should I place my wedding flower order?\\\",\\\"Can I order flowers for both the ceremony and reception?\\\",\\\"How do I handle any changes to my wedding flower order?\\\"]\",\n \"url\": \"/agent-directory/wedding-flower-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/wedding-flower-order-form-template\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Wedding Flower Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670964502963-8cd943414460e0101144fad103df1e9a-thumbnail.png\"\n },\n {\n \"id\": \"242670412035952\",\n \"slug\": \"funeral-flower-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Funeral Flower Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Compassionate Customer Service Professionals with 5+ years of experience in funeral services and floral arrangements.\\\",\\\"expertise\\\":\\\"Provides sensitive assistance in selecting appropriate floral tributes, gathering necessary details with empathy and respect.\\\",\\\"personality\\\":\\\"Caring, respectful, and supportive, dedicated to helping families honor their loved ones with thoughtful arrangements.\\\",\\\"special_skills\\\":\\\"Collects information on flower preferences, arrangement types, and delivery instructions to ensure a meaningful tribute.\\\"}\",\n \"description\": \"Funeral Flower Order AI Agent offers compassionate and efficient support for ordering flowers during a difficult time. It helps customers select appropriate arrangements, gather delivery details, and coordinate with funeral services. Trained with sensitive knowledge about floral traditions for different cultures and ceremonies, this AI Agent provides a respectful, caring experience while answering any questions about the process. With customizable tones of voice and avatars, it can maintain a comforting, supportive demeanor, ensuring families feel cared for during such moments.\",\n \"metaDescription\": \"Funeral Flower Order AI Agent offers compassionate and efficient support for ordering flowers during a difficult time. It helps customers select appropriate arrangements, gather delivery details, and coordinate with funeral services. Trained with sensitive knowledge about floral traditions for different cultures and ceremonies, this AI Agent provides a respectful, caring experience while answering any questions about the process. With customizable tones of voice and avatars, it can maintain a comforting, supportive demeanor, ensuring families feel cared for during such moments.\",\n \"furtherDescription\": \"Funeral Flower Order AI Agent offers compassionate and efficient support for ordering flowers during a difficult time. It helps customers select appropriate arrangements, gather delivery details, and coordinate with funeral services. Trained with sensitive knowledge about floral traditions for different cultures and ceremonies, this AI Agent provides a respectful, caring experience while answering any questions about the process. With customizable tones of voice and avatars, it can maintain a comforting, supportive demeanor, ensuring families feel cared for during such moments.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30017,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30017\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I order flowers for a funeral?\\\",\\\"Can I include a condolence message with the flowers?\\\",\\\"What types of arrangements are suitable for funerals?\\\",\\\"How soon can the flowers be delivered to the funeral home?\\\",\\\"Can I request specific flowers for the arrangement?\\\"]\",\n \"url\": \"/agent-directory/funeral-flower-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/funeral-flower-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Funeral Flower Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670412035952-8f759e1788254039e97b2051ef5eabd8-thumbnail.png\"\n },\n {\n \"id\": \"242671345816965\",\n \"slug\": \"live-plant-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Live Plant Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Horticulturists with 5+ years of experience in live plant sales and customer education.\\\",\\\"expertise\\\":\\\"Assists customers in selecting vibrant live plants that fit their preferences, efficiently gathering order information to enhance the shopping experience.\\\",\\\"personality\\\":\\\"Enthusiastic, knowledgeable, and engaging, ready to share tips and insights about plant care and selection.\\\",\\\"special_skills\\\":\\\"Collects preferences for plant types, sizes, and care requirements, ensuring customers receive the best match for their needs.\\\"}\",\n \"description\": \"Live Plant Order AI Agent assists customers in selecting and ordering live plants for their homes, gardens, or as gifts. It helps collect important details, like plant type, care preferences, and delivery instructions, ensuring the order process is simple. Trained with plant care knowledge, it can answer questions about sunlight, watering, and ideal growing conditions. Its customizable personality and appearance allow it to fit any plant retailer’s brand while providing customers with a friendly, knowledgeable service.\",\n \"metaDescription\": \"Live Plant Order AI Agent assists customers in selecting and ordering live plants for their homes, gardens, or as gifts. It helps collect important details, like plant type, care preferences, and delivery instructions, ensuring the order process is simple. Trained with plant care knowledge, it can answer questions about sunlight, watering, and ideal growing conditions. Its customizable personality and appearance allow it to fit any plant retailer’s brand while providing customers with a friendly, knowledgeable service.\",\n \"furtherDescription\": \"Live Plant Order AI Agent assists customers in selecting and ordering live plants for their homes, gardens, or as gifts. It helps collect important details, like plant type, care preferences, and delivery instructions, ensuring the order process is simple. Trained with plant care knowledge, it can answer questions about sunlight, watering, and ideal growing conditions. Its customizable personality and appearance allow it to fit any plant retailer’s brand while providing customers with a friendly, knowledgeable service.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30017,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30017\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I place an order for live plants?\\\",\\\"Can I order live plants as gifts for someone?\\\",\\\"What types of live plants are available?\\\",\\\"Can I schedule a specific delivery date for live plants?\\\",\\\"Will my live plant order include care instructions?\\\"]\",\n \"url\": \"/agent-directory/live-plant-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/live-plant-delivery-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Live Plant Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671345816965-9fa4f03964e186900a89aa5c490bb612-thumbnail.png\"\n },\n {\n \"id\": \"242671107859968\",\n \"slug\": \"easter-lily-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Easter Lily Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Floral specialists with 4+ years of experience in seasonal plant sales.\\\",\\\"expertise\\\":\\\"Guides customers in selecting the perfect Easter lilies while efficiently collecting order details for timely delivery.\\\",\\\"personality\\\":\\\"Cheerful, helpful, and knowledgeable, eager to share insights on care and the significance of Easter lilies.\\\",\\\"special_skills\\\":\\\"Gathers preferences for flower colors, sizes, and delivery dates, ensuring a delightful shopping experience.\\\"}\",\n \"description\": \"Easter Lily Order AI Agent helps customers select and order beautiful Easter lilies for their celebrations. It gathers details on preferred sizes, quantities, and delivery options, ensuring a seamless ordering process. Trained with knowledge of seasonal floral traditions, it can answer questions about care instructions, ideal display locations, and religious symbolism associated with Easter lilies. With its customizable personality, tone of voice, and avatar, this AI Agent can bring a warm, festive touch to the lily ordering experience.\\n\",\n \"metaDescription\": \"Easter Lily Order AI Agent helps customers select and order beautiful Easter lilies for their celebrations. It gathers details on preferred sizes, quantities, and delivery options, ensuring a seamless ordering process. Trained with knowledge of seasonal floral traditions, it can answer questions about care instructions, ideal display locations, and religious symbolism associated with Easter lilies. With its customizable personality, tone of voice, and avatar, this AI Agent can bring a warm, festive touch to the lily ordering experience.\\n\",\n \"furtherDescription\": \"Easter Lily Order AI Agent helps customers select and order beautiful Easter lilies for their celebrations. It gathers details on preferred sizes, quantities, and delivery options, ensuring a seamless ordering process. Trained with knowledge of seasonal floral traditions, it can answer questions about care instructions, ideal display locations, and religious symbolism associated with Easter lilies. With its customizable personality, tone of voice, and avatar, this AI Agent can bring a warm, festive touch to the lily ordering experience.\\n\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30017,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30017\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I order Easter lilies for the holiday?\\\",\\\"Can I send Easter lilies as a gift?\\\",\\\"Are there different sizes or types of Easter lilies available?\\\",\\\"Can I schedule a delivery for a specific date around Easter?\\\",\\\"Is there an option to include a vase or pot with my Easter lilies?\\\"]\",\n \"url\": \"/agent-directory/easter-lily-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/easter-lily-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Easter Lily Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671107859968-04be8014e2d78d0714246007f29b402e-thumbnail.png\"\n },\n {\n \"id\": \"242670418989976\",\n \"slug\": \"flower-seeds-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Flower Seeds Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Gardening experts with 6+ years of experience in seed sales and cultivation.\\\",\\\"expertise\\\":\\\"Assists customers in choosing the right flower seeds for their gardens, capturing detailed order information seamlessly.\\\",\\\"personality\\\":\\\"Friendly, passionate, and informative, dedicated to helping customers grow their dream gardens.\\\",\\\"special_skills\\\":\\\"Collects details on preferred flower types, quantities, and planting conditions, enhancing the customer\\\\u2019s planting journey.\\\"}\",\n \"description\": \"Flower Seeds Order AI Agent assists gardening enthusiasts in purchasing flower seeds tailored to their planting needs. Whether it’s annuals or perennials, this AI Agent collects information on preferred flower types, growing conditions, and planting timelines. Trained with data on seed varieties and planting tips, it can offer advice on the best choices for different climates and seasons. Its appearance and personality can be adjusted to reflect a fun, educational, or even expert-level tone, making it the perfect gardening companion for all skill levels.\",\n \"metaDescription\": \"Flower Seeds Order AI Agent assists gardening enthusiasts in purchasing flower seeds tailored to their planting needs. Whether it’s annuals or perennials, this AI Agent collects information on preferred flower types, growing conditions, and planting timelines. Trained with data on seed varieties and planting tips, it can offer advice on the best choices for different climates and seasons. Its appearance and personality can be adjusted to reflect a fun, educational, or even expert-level tone, making it the perfect gardening companion for all skill levels.\",\n \"furtherDescription\": \"Flower Seeds Order AI Agent assists gardening enthusiasts in purchasing flower seeds tailored to their planting needs. Whether it’s annuals or perennials, this AI Agent collects information on preferred flower types, growing conditions, and planting timelines. Trained with data on seed varieties and planting tips, it can offer advice on the best choices for different climates and seasons. Its appearance and personality can be adjusted to reflect a fun, educational, or even expert-level tone, making it the perfect gardening companion for all skill levels.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30017,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30017\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I order flower seeds?\\\",\\\"Can I request specific flower species in bulk?\\\",\\\"What kinds of flower seeds are available for purchase?\\\",\\\"Are there planting instructions provided with the seeds?\\\",\\\"Can I schedule the delivery of my seed order?\\\"]\",\n \"url\": \"/agent-directory/flower-seeds-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/flower-seeds-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Flower Seeds Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670418989976-c9dbb87bcf0ec84179b2ecf7d821bf9b-thumbnail.png\"\n },\n {\n \"id\": \"242670484765971\",\n \"slug\": \"holiday-wreath-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Holiday Wreath Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Seasonal decor professionals with 5+ years of experience in festive decorations.\\\",\\\"expertise\\\":\\\"Aids customers in selecting beautiful holiday wreaths while effectively gathering order preferences and delivery details.\\\",\\\"personality\\\":\\\"Warm, festive, and creative, focused on spreading holiday cheer through personalized customer service.\\\",\\\"special_skills\\\":\\\"Captures customer preferences for wreath styles, colors, and sizes, ensuring a perfect fit for their holiday celebrations.\\\"}\",\n \"description\": \"Holiday Wreath Order AI Agent makes ordering festive wreaths for holidays simple and enjoyable. Whether for Christmas, Thanksgiving, or other special occasions, it helps customers choose styles, decorations, and delivery options. Trained with knowledge about wreath materials and care instructions, this AI Agent can offer advice on how to keep wreaths looking fresh throughout the holiday season. Its customizable avatar and friendly, holiday-themed personality create a warm, welcoming experience for customers looking to bring cheer to their homes.\\n\",\n \"metaDescription\": \"Holiday Wreath Order AI Agent makes ordering festive wreaths for holidays simple and enjoyable. Whether for Christmas, Thanksgiving, or other special occasions, it helps customers choose styles, decorations, and delivery options. Trained with knowledge about wreath materials and care instructions, this AI Agent can offer advice on how to keep wreaths looking fresh throughout the holiday season. Its customizable avatar and friendly, holiday-themed personality create a warm, welcoming experience for customers looking to bring cheer to their homes.\\n\",\n \"furtherDescription\": \"Holiday Wreath Order AI Agent makes ordering festive wreaths for holidays simple and enjoyable. Whether for Christmas, Thanksgiving, or other special occasions, it helps customers choose styles, decorations, and delivery options. Trained with knowledge about wreath materials and care instructions, this AI Agent can offer advice on how to keep wreaths looking fresh throughout the holiday season. Its customizable avatar and friendly, holiday-themed personality create a warm, welcoming experience for customers looking to bring cheer to their homes.\\n\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30017,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30017\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I place an order for holiday wreaths?\\\",\\\"Are custom-designed holiday wreaths available?\\\",\\\"Can I send holiday wreaths to multiple addresses?\\\",\\\"What are the delivery options for holiday wreaths?\\\",\\\"Can I add a personalized holiday card with the wreath?\\\"]\",\n \"url\": \"/agent-directory/holiday-wreath-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/holiday-wreath-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Holiday Wreath Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670484765971-f557d40d0ab59c1604104f1c242a6b8a-thumbnail.png\"\n },\n {\n \"id\": \"242670420011945\",\n \"slug\": \"change-request-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Change Request AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Customer service professionals with 7+ years of experience in handling order modifications.\\\",\\\"expertise\\\":\\\"Facilitates the process of submitting change requests for existing orders, capturing all necessary information for smooth adjustments.\\\",\\\"personality\\\":\\\"Patient, attentive, and proactive, committed to ensuring customer satisfaction through effective communication.\\\",\\\"special_skills\\\":\\\"Collects details regarding order changes, including item adjustments and delivery modifications, streamlining the customer experience.\\\"}\",\n \"description\": \"Change Request AI Agent efficiently handles customer requests for changes to existing orders or service agreements. Whether modifying a product order, updating delivery details, or adjusting service preferences, this AI Agent collects the necessary information and guides users through the process. Trained with flexibility in mind, it answers questions related to the requested changes while maintaining clear communication. Its customizable personality and tone can be adapted to match a professional or customer-centric approach, ensuring users feel supported throughout their change request journey.\\n\\n\\n\\n\\n\\n\",\n \"metaDescription\": \"Change Request AI Agent efficiently handles customer requests for changes to existing orders or service agreements. Whether modifying a product order, updating delivery details, or adjusting service preferences, this AI Agent collects the necessary information and guides users through the process. Trained with flexibility in mind, it answers questions related to the requested changes while maintaining clear communication. Its customizable personality and tone can be adapted to match a professional or customer-centric approach, ensuring users feel supported throughout their change request journey.\\n\\n\\n\\n\\n\\n\",\n \"furtherDescription\": \"Change Request AI Agent efficiently handles customer requests for changes to existing orders or service agreements. Whether modifying a product order, updating delivery details, or adjusting service preferences, this AI Agent collects the necessary information and guides users through the process. Trained with flexibility in mind, it answers questions related to the requested changes while maintaining clear communication. Its customizable personality and tone can be adapted to match a professional or customer-centric approach, ensuring users feel supported throughout their change request journey.\\n\\n\\n\\n\\n\\n\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30018,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30018\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I request a change to my existing order?\\\",\\\"What kind of changes can I request?\\\",\\\"Can I cancel my order through the change request?\\\",\\\"How soon can my change request be processed?\\\",\\\"Is there a fee for making changes to an order?\\\"]\",\n \"url\": \"/agent-directory/change-request-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/change-request-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Change Request AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670420011945-c175cbbb61f65600dab9c1ac1bfe0c51-thumbnail.png\"\n },\n {\n \"id\": \"92344601419959\",\n \"slug\": \"construction-change-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Construction Change Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Construction management professionals with 8+ years of experience in handling change orders on projects.\\\",\\\"expertise\\\":\\\"Assists in documenting and processing change orders related to construction projects, ensuring clarity and precision in the information collected.\\\",\\\"personality\\\":\\\"Pragmatic, meticulous, and solution-focused, dedicated to supporting construction teams and clients alike.\\\",\\\"special_skills\\\":\\\"Captures essential details regarding scope changes, materials, and timelines, ensuring smooth project adjustments.\\\"}\",\n \"description\": \"Construction Change Order AI Agent manages revisions in construction projects by guiding contractors and clients through updates to scope, timelines, or materials. It efficiently collects details on the required changes and ensures that both parties are informed about cost implications and scheduling adjustments. Trained with industry-specific knowledge, it can address questions on construction standards and regulations. With customizable personality and tone, this AI Agent can suit a professional, clear, and reliable role, providing a seamless change order process.\",\n \"metaDescription\": \"Construction Change Order AI Agent manages revisions in construction projects by guiding contractors and clients through updates to scope, timelines, or materials. It efficiently collects details on the required changes and ensures that both parties are informed about cost implications and scheduling adjustments. Trained with industry-specific knowledge, it can address questions on construction standards and regulations. With customizable personality and tone, this AI Agent can suit a professional, clear, and reliable role, providing a seamless change order process.\",\n \"furtherDescription\": \"Construction Change Order AI Agent manages revisions in construction projects by guiding contractors and clients through updates to scope, timelines, or materials. It efficiently collects details on the required changes and ensures that both parties are informed about cost implications and scheduling adjustments. Trained with industry-specific knowledge, it can address questions on construction standards and regulations. With customizable personality and tone, this AI Agent can suit a professional, clear, and reliable role, providing a seamless change order process.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30018,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30018\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I request a change to the construction project?\\\",\\\"Can I request multiple changes in a single form?\\\",\\\"How do I submit supporting documents for my change request?\\\",\\\"Can I change the materials being used in the project?\\\",\\\"How do I know if my change request was accepted?\\\"]\",\n \"url\": \"/agent-directory/construction-change-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/construction-change-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Construction Change Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/92344601419959-e5bc56d1c7b736c1527fbe8fb7c0cf40-thumbnail.png\"\n },\n {\n \"id\": \"242671408282962\",\n \"slug\": \"engineering-change-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Engineering Change Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Engineering experts with 7+ years of experience in project change management.\\\",\\\"expertise\\\":\\\"Streamlines the process of engineering change orders by gathering relevant details and supporting documentation.\\\",\\\"personality\\\":\\\"Analytical, thorough, and innovative, aimed at enhancing communication between engineering teams and stakeholders.\\\",\\\"special_skills\\\":\\\"Collects information on design changes, technical specifications, and implementation timelines for efficient project updates.\\\"}\",\n \"description\": \"Engineering Change Order AI Agent handles modifications to engineering designs or specifications by collecting detailed information about the revisions. Whether changes relate to design, components, or materials, this AI Agent ensures engineers, managers, and clients remain aligned. It’s trained to respond to questions on engineering standards, compliance, and material sourcing, making it a helpful tool for complex projects. With adjustable tone, personality, and appearance, it fits into any engineering team’s workflow while keeping the process efficient and smooth.\",\n \"metaDescription\": \"Engineering Change Order AI Agent handles modifications to engineering designs or specifications by collecting detailed information about the revisions. Whether changes relate to design, components, or materials, this AI Agent ensures engineers, managers, and clients remain aligned. It’s trained to respond to questions on engineering standards, compliance, and material sourcing, making it a helpful tool for complex projects. With adjustable tone, personality, and appearance, it fits into any engineering team’s workflow while keeping the process efficient and smooth.\",\n \"furtherDescription\": \"Engineering Change Order AI Agent handles modifications to engineering designs or specifications by collecting detailed information about the revisions. Whether changes relate to design, components, or materials, this AI Agent ensures engineers, managers, and clients remain aligned. It’s trained to respond to questions on engineering standards, compliance, and material sourcing, making it a helpful tool for complex projects. With adjustable tone, personality, and appearance, it fits into any engineering team’s workflow while keeping the process efficient and smooth.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30018,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30018\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I submit an engineering change request?\\\",\\\"Can I attach supporting documents to the engineering change request?\\\",\\\"Will an engineering change request require approval from different departments?\\\",\\\"How do I specify the impact of the change on cost or materials?\\\",\\\"Can I update or modify my change request after submission?\\\"]\",\n \"url\": \"/agent-directory/engineering-change-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/engineering-change-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Engineering Change Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671408282962-391826f96c8df7c8240515b11da713da-thumbnail.png\"\n },\n {\n \"id\": \"242671388908974\",\n \"slug\": \"project-change-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Project Change Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Project management professionals with 9+ years of experience in managing change orders across various industries.\\\",\\\"expertise\\\":\\\"Coordinates the collection of information necessary for project change orders, ensuring all details are accurately captured for effective implementation.\\\",\\\"personality\\\":\\\"Strategic, adaptable, and detail-focused, dedicated to driving project success through effective change management.\\\",\\\"special_skills\\\":\\\"Gathers insights on project timelines, budget adjustments, and resource reallocations to facilitate seamless transitions.\\\"}\",\n \"description\": \"Project Change Order AI Agent assists project managers and stakeholders in navigating updates to existing project plans, collecting details on the changes and ensuring they’re properly documented. Whether it's changes in scope, budget, or timeline, this AI Agent is trained to address typical concerns and keep communication clear. With the ability to be trained using project-specific information, it becomes a tailored assistant that helps ensure everyone is on the same page. Its customizable avatar and voice make it adaptable to various project environments.\\n\",\n \"metaDescription\": \"Project Change Order AI Agent assists project managers and stakeholders in navigating updates to existing project plans, collecting details on the changes and ensuring they’re properly documented. Whether it's changes in scope, budget, or timeline, this AI Agent is trained to address typical concerns and keep communication clear. With the ability to be trained using project-specific information, it becomes a tailored assistant that helps ensure everyone is on the same page. Its customizable avatar and voice make it adaptable to various project environments.\\n\",\n \"furtherDescription\": \"Project Change Order AI Agent assists project managers and stakeholders in navigating updates to existing project plans, collecting details on the changes and ensuring they’re properly documented. Whether it's changes in scope, budget, or timeline, this AI Agent is trained to address typical concerns and keep communication clear. With the ability to be trained using project-specific information, it becomes a tailored assistant that helps ensure everyone is on the same page. Its customizable avatar and voice make it adaptable to various project environments.\\n\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30018,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30018\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I request a change to the overall project?\\\",\\\"What types of changes can I request through the project change order?\\\",\\\"How does a project change request affect the project budget?\\\",\\\"Can I request a change in the project manager through this form?\\\",\\\"Will the client be notified of the project change request?\\\"]\",\n \"url\": \"/agent-directory/project-change-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/project-change-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Project Change Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671388908974-804c823655af550cd1d8ce17cf59b9fe-thumbnail.png\"\n },\n {\n \"id\": \"242670482254962\",\n \"slug\": \"contract-change-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Contract Change Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Contract management specialists with 7+ years of experience in handling contractual amendments.\\\",\\\"expertise\\\":\\\"Assists in documenting and processing contract change orders, ensuring all modifications are accurately captured and communicated.\\\",\\\"personality\\\":\\\"Professional, meticulous, and proactive, dedicated to supporting clients and legal teams in navigating contract adjustments.\\\",\\\"special_skills\\\":\\\"Collects critical details on contract terms, deadlines, and requirements for smooth execution of amendments.\\\"}\",\n \"description\": \"Contract Change Order AI Agent facilitates adjustments to contractual agreements by guiding parties through the details of the requested modifications. Whether amending terms, pricing, or delivery schedules, this AI Agent ensures that all necessary information is captured, tracked, and properly communicated. Trained with legal and contractual insights, it can assist in clarifying procedural questions, helping maintain transparency. With customizable tone and appearance, it can handle anything from formal legal adjustments to friendly business contract modifications.\",\n \"metaDescription\": \"Contract Change Order AI Agent facilitates adjustments to contractual agreements by guiding parties through the details of the requested modifications. Whether amending terms, pricing, or delivery schedules, this AI Agent ensures that all necessary information is captured, tracked, and properly communicated. Trained with legal and contractual insights, it can assist in clarifying procedural questions, helping maintain transparency. With customizable tone and appearance, it can handle anything from formal legal adjustments to friendly business contract modifications.\",\n \"furtherDescription\": \"Contract Change Order AI Agent facilitates adjustments to contractual agreements by guiding parties through the details of the requested modifications. Whether amending terms, pricing, or delivery schedules, this AI Agent ensures that all necessary information is captured, tracked, and properly communicated. Trained with legal and contractual insights, it can assist in clarifying procedural questions, helping maintain transparency. With customizable tone and appearance, it can handle anything from formal legal adjustments to friendly business contract modifications.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30018,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30018\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I request changes to the contract terms?\\\",\\\"Can I request changes to multiple sections of the contract at once?\\\",\\\"Will legal review be necessary for contract change requests?\\\",\\\"How long does it take for a contract change to be approved?\\\",\\\"Can I upload a new contract draft through this form?\\\"]\",\n \"url\": \"/agent-directory/contract-change-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/contract-change-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Contract Change Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670482254962-a98b5bb64f037e7df6d0a9c03f3cb5af-thumbnail.png\"\n },\n {\n \"id\": \"242670538841966\",\n \"slug\": \"work-change-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Work Change Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Operations managers with 6+ years of experience in work order processing and management.\\\",\\\"expertise\\\":\\\"Facilitates the collection of information related to work change orders, ensuring accurate documentation and clear communication.\\\",\\\"personality\\\":\\\"Efficient, detail-oriented, and responsive, focused on enhancing workflow and operational efficiency.\\\",\\\"special_skills\\\":\\\"Gathers specifics on task modifications, resource allocations, and timelines to streamline work order adjustments.\\\"}\",\n \"description\": \"Work Change Order AI Agent assists teams and businesses in managing adjustments to task assignments, workflow changes, or process revisions. This AI Agent collects updated details on work orders, ensuring that both employees and management stay informed about any alterations. Trained to handle common work order scenarios, it helps answer questions and resolve confusion around new tasks or workflows. Fully customizable in tone, personality, and look, this agent can seamlessly fit into any work environment, from casual to corporate settings.\",\n \"metaDescription\": \"Work Change Order AI Agent assists teams and businesses in managing adjustments to task assignments, workflow changes, or process revisions. This AI Agent collects updated details on work orders, ensuring that both employees and management stay informed about any alterations. Trained to handle common work order scenarios, it helps answer questions and resolve confusion around new tasks or workflows. Fully customizable in tone, personality, and look, this agent can seamlessly fit into any work environment, from casual to corporate settings.\",\n \"furtherDescription\": \"Work Change Order AI Agent assists teams and businesses in managing adjustments to task assignments, workflow changes, or process revisions. This AI Agent collects updated details on work orders, ensuring that both employees and management stay informed about any alterations. Trained to handle common work order scenarios, it helps answer questions and resolve confusion around new tasks or workflows. Fully customizable in tone, personality, and look, this agent can seamlessly fit into any work environment, from casual to corporate settings.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30018,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30018\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I submit a work change request for ongoing tasks?\\\",\\\"Can I change the assigned personnel for specific tasks?\\\",\\\"Will the change impact the project deadline?\\\",\\\"How are cost impacts handled in a work change order?\\\",\\\"Can I cancel a previously submitted work change request?\\\"]\",\n \"url\": \"/agent-directory/work-change-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/work-change-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Work Change Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670538841966-ad0c78a4548b676fe123c3c1f28a3af7-thumbnail.png\"\n },\n {\n \"id\": \"242670461565964\",\n \"slug\": \"field-change-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Field Change Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Field operations specialists with 5+ years of experience in managing on-site change orders.\\\",\\\"expertise\\\":\\\"Supports the collection of essential information for field change orders, ensuring quick and effective updates to ongoing projects.\\\",\\\"personality\\\":\\\"Agile, resourceful, and approachable, dedicated to facilitating communication between field teams and project managers.\\\",\\\"special_skills\\\":\\\"Captures details about location changes, material adjustments, and scheduling impacts for efficient project management.\\\"}\",\n \"description\": \"Field Change Order AI Agent navigates on-the-spot adjustments during field operations, collecting key information related to project or worksite changes in real-time. From unexpected alterations in job site conditions to equipment adjustments, this AI Agent ensures that changes are properly documented and communicated across teams. It can be trained with field-specific protocols to address questions related to compliance, logistics, or safety, while offering a customizable personality and tone that can reflect the fast-paced, hands-on nature of fieldwork.\",\n \"metaDescription\": \"Field Change Order AI Agent navigates on-the-spot adjustments during field operations, collecting key information related to project or worksite changes in real-time. From unexpected alterations in job site conditions to equipment adjustments, this AI Agent ensures that changes are properly documented and communicated across teams. It can be trained with field-specific protocols to address questions related to compliance, logistics, or safety, while offering a customizable personality and tone that can reflect the fast-paced, hands-on nature of fieldwork.\",\n \"furtherDescription\": \"Field Change Order AI Agent navigates on-the-spot adjustments during field operations, collecting key information related to project or worksite changes in real-time. From unexpected alterations in job site conditions to equipment adjustments, this AI Agent ensures that changes are properly documented and communicated across teams. It can be trained with field-specific protocols to address questions related to compliance, logistics, or safety, while offering a customizable personality and tone that can reflect the fast-paced, hands-on nature of fieldwork.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30018,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30018\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I submit a field change request?\\\",\\\"Can I request changes to different sections of the project?\\\",\\\"What kind of documentation is required for a field change?\\\",\\\"Can I cancel a previous field change request?\\\",\\\"Is there a section to describe safety concerns related to the change?\\\"]\",\n \"url\": \"/agent-directory/field-change-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/field-change-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Field Change Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670461565964-2575f88c0d2487b2f8017d9319d54c60-thumbnail.png\"\n },\n {\n \"id\": \"242671191377966\",\n \"slug\": \"pizza-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Pizza Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Culinary Professionals with over 8 years of experience in restaurant operations and customer service.\\\",\\\"expertise\\\":\\\"This AI Agent simplifies the pizza ordering process, allowing customers to customize their orders with various crusts, sauces, toppings, and sizes while providing information on meal deals and special promotions.\\\",\\\"personality\\\":\\\"Energetic and approachable, this agent embodies the fun and excitement of pizza night, making customers feel enthusiastic about their choices and eager to enjoy their meals.\\\",\\\"special_skills\\\":\\\"The AI Agent assists users in navigating the menu, answers questions about ingredients and dietary options, and handles delivery or pickup arrangements, ensuring a fast and enjoyable ordering experience.\\\"}\",\n \"description\": \"The Pizza Order AI Agent revolutionizes the ordering process by engaging customers in a lively conversation about their pizza preferences. It efficiently gathers details like size, toppings, and special requests while answering questions about menu items and delivery options. Ideal for restaurant managers and owners, this AI Agent enhances customer experience and streamlines order management, ensuring every pizza lover enjoys a seamless ordering experience.\",\n \"metaDescription\": \"The Pizza Order AI Agent revolutionizes the ordering process by engaging customers in a lively conversation about their pizza preferences. It efficiently gathers details like size, toppings, and special requests while answering questions about menu items and delivery options. Ideal for restaurant managers and owners, this AI Agent enhances customer experience and streamlines order management, ensuring every pizza lover enjoys a seamless ordering experience.\",\n \"furtherDescription\": \"The Pizza Order AI Agent revolutionizes the ordering process by engaging customers in a lively conversation about their pizza preferences. It efficiently gathers details like size, toppings, and special requests while answering questions about menu items and delivery options. Ideal for restaurant managers and owners, this AI Agent enhances customer experience and streamlines order management, ensuring every pizza lover enjoys a seamless ordering experience.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30019,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30019\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I customize the pizza toppings?\\\",\\\"Do you offer vegan or vegetarian pizza options?\\\",\\\"What sizes of pizzas are available?\\\",\\\"How long will it take to get my pizza order delivered?\\\",\\\"Can I order half-and-half pizzas with different toppings?\\\"]\",\n \"url\": \"/agent-directory/pizza-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/pizza-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Pizza Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671191377966-77e00737ce9ba95d0dd862f3821223c3-thumbnail.png\"\n },\n {\n \"id\": \"242670758912969\",\n \"slug\": \"grocery-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Grocery Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Grocery industry professionals with 7+ years of experience in retail management.\\\",\\\"expertise\\\":\\\"Supports customers in compiling their grocery lists, helping to navigate through product categories and dietary needs.\\\",\\\"personality\\\":\\\"Helpful, organized, and friendly, dedicated to providing a seamless shopping experience.\\\",\\\"special_skills\\\":\\\"Collects detailed information about product selections, quantities, and preferred delivery or pickup times.\\\"}\",\n \"description\": \"Grocery Order AI Agent helps customers navigate their grocery shopping needs by collecting detailed information on items, preferences, and quantities. Whether it’s a regular weekly list or a special request for organic or gluten-free options, this AI Agent can be trained with store-specific inventory, ensuring customers get exactly what they need. The AI's customizable personality and tone allow it to fit a range of grocery environments, from a friendly neighborhood store to a high-end market, creating a smooth and efficient ordering experience.\",\n \"metaDescription\": \"Grocery Order AI Agent helps customers navigate their grocery shopping needs by collecting detailed information on items, preferences, and quantities. Whether it’s a regular weekly list or a special request for organic or gluten-free options, this AI Agent can be trained with store-specific inventory, ensuring customers get exactly what they need. The AI's customizable personality and tone allow it to fit a range of grocery environments, from a friendly neighborhood store to a high-end market, creating a smooth and efficient ordering experience.\",\n \"furtherDescription\": \"Grocery Order AI Agent helps customers navigate their grocery shopping needs by collecting detailed information on items, preferences, and quantities. Whether it’s a regular weekly list or a special request for organic or gluten-free options, this AI Agent can be trained with store-specific inventory, ensuring customers get exactly what they need. The AI's customizable personality and tone allow it to fit a range of grocery environments, from a friendly neighborhood store to a high-end market, creating a smooth and efficient ordering experience.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30019,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30019\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I add specific items to my grocery list?\\\",\\\"Can I order groceries for multiple locations?\\\",\\\"Is there a way to substitute items if they\\\\u2019re out of stock?\\\",\\\"How do I apply a discount or coupon code to my order?\\\",\\\"Can I schedule recurring grocery deliveries?\\\"]\",\n \"url\": \"/agent-directory/grocery-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/grocery-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Grocery Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670758912969-840c8509c70ef1a647f1a0d0d8589de9-thumbnail.png\"\n },\n {\n \"id\": \"242671010747957\",\n \"slug\": \"festival-food-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Festival Food Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Event coordinators with 5+ years of experience in food service for festivals and large gatherings.\\\",\\\"expertise\\\":\\\"Facilitates food orders for festivals, capturing guest preferences, dietary restrictions, and logistics for large-scale events.\\\",\\\"personality\\\":\\\"Energetic, enthusiastic, and detail-oriented, focused on enhancing the festival experience for attendees.\\\",\\\"special_skills\\\":\\\"Gathers information about menu selections, serving sizes, and timing to ensure smooth food service during events.\\\"}\",\n \"description\": \"Festival Food Order AI Agent takes the hassle out of ordering food at festivals and large events by engaging attendees in a fun, conversational way. It collects details on food choices, dietary needs, and even drink pairings, ensuring fast, accurate orders without the wait. Trained with festival menus and specific vendor offerings, it answers any questions about available options, portion sizes, or special dietary requests. With customizable appearance and personality, this AI can reflect the vibrant, lively energy of a festival, adding excitement to the food ordering process.\\n\",\n \"metaDescription\": \"Festival Food Order AI Agent takes the hassle out of ordering food at festivals and large events by engaging attendees in a fun, conversational way. It collects details on food choices, dietary needs, and even drink pairings, ensuring fast, accurate orders without the wait. Trained with festival menus and specific vendor offerings, it answers any questions about available options, portion sizes, or special dietary requests. With customizable appearance and personality, this AI can reflect the vibrant, lively energy of a festival, adding excitement to the food ordering process.\\n\",\n \"furtherDescription\": \"Festival Food Order AI Agent takes the hassle out of ordering food at festivals and large events by engaging attendees in a fun, conversational way. It collects details on food choices, dietary needs, and even drink pairings, ensuring fast, accurate orders without the wait. Trained with festival menus and specific vendor offerings, it answers any questions about available options, portion sizes, or special dietary requests. With customizable appearance and personality, this AI can reflect the vibrant, lively energy of a festival, adding excitement to the food ordering process.\\n\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30019,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30019\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I place an order for specific festival food vendors?\\\",\\\"How can I order food for a group attending the festival?\\\",\\\"Are there options for special festival-themed meals?\\\",\\\"Can I schedule my food pickup time to avoid long lines?\\\",\\\"Is there a way to see what food vendors are offering vegan or gluten-free options?\\\"]\",\n \"url\": \"/agent-directory/festival-food-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/festival-food-order-template\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Festival Food Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671010747957-8a7ce46c14775278c97fab2ce6671396-thumbnail.png\"\n },\n {\n \"id\": \"242671324675965\",\n \"slug\": \"drink-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Drink Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Beverage industry professionals with 4+ years of experience in mixology and beverage service.\\\",\\\"expertise\\\":\\\"Assists customers in ordering a variety of drinks, from soft drinks to cocktails, while capturing specific preferences and dietary restrictions.\\\",\\\"personality\\\":\\\"Energetic, refreshing, and approachable, dedicated to enhancing the drink ordering experience.\\\",\\\"special_skills\\\":\\\"Collects detailed information on drink choices, serving sizes, and any special requests to ensure customer satisfaction.\\\"}\",\n \"description\": \"Drink Order AI Agent makes it easy for customers to order drinks, whether in a bar, restaurant, or event setting. It interacts with guests to collect their drink preferences, special requests, and even cocktail customizations. This AI Agent can be trained with bar-specific offerings and drink recipes, so it can also answer questions about ingredients or suggest pairings. With a personality and tone that can be adjusted to reflect a chill cocktail lounge or an upbeat event, the agent seamlessly enhances the ordering experience.\",\n \"metaDescription\": \"Drink Order AI Agent makes it easy for customers to order drinks, whether in a bar, restaurant, or event setting. It interacts with guests to collect their drink preferences, special requests, and even cocktail customizations. This AI Agent can be trained with bar-specific offerings and drink recipes, so it can also answer questions about ingredients or suggest pairings. With a personality and tone that can be adjusted to reflect a chill cocktail lounge or an upbeat event, the agent seamlessly enhances the ordering experience.\",\n \"furtherDescription\": \"Drink Order AI Agent makes it easy for customers to order drinks, whether in a bar, restaurant, or event setting. It interacts with guests to collect their drink preferences, special requests, and even cocktail customizations. This AI Agent can be trained with bar-specific offerings and drink recipes, so it can also answer questions about ingredients or suggest pairings. With a personality and tone that can be adjusted to reflect a chill cocktail lounge or an upbeat event, the agent seamlessly enhances the ordering experience.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30019,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30019\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I specify drink sizes in my order?\\\",\\\"Can I order a variety of drinks in one submission?\\\",\\\"How do I customize my drink, like adding extra ice or changing sweetness levels?\\\",\\\"Can I request drink pairings with food orders?\\\",\\\"Is there an option to order alcoholic beverages?\\\"]\",\n \"url\": \"/agent-directory/drink-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/drink-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Drink Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671324675965-ec6b4fcf20647e0851b583c81a25274d-thumbnail.png\"\n },\n {\n \"id\": \"242670745143961\",\n \"slug\": \"coffee-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Coffee Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Coffee connoisseurs with 6+ years of experience in caf\\\\u00e9 operations and beverage service.\\\",\\\"expertise\\\":\\\"Assists customers in selecting and ordering a variety of coffee drinks, accommodating preferences for brew styles, sizes, and flavorings.\\\",\\\"personality\\\":\\\"Friendly, energetic, and knowledgeable about coffee, ready to create a personalized ordering experience.\\\",\\\"special_skills\\\":\\\"Collects detailed information about drink preferences, including milk alternatives, sweetness levels, and pickup or delivery options.\\\"}\",\n \"description\": \"Coffee Order AI Agent delivers a smooth ordering experience for coffee lovers, guiding them through options for different blends, milk alternatives, and flavor shots. Whether the order is for a simple espresso or a complex latte, this AI Agent can be trained to reflect café-specific offerings and seasonal specialties. With a warm, inviting tone and customizable appearance, it creates a personalized interaction that makes each coffee order feel special, whether in a cozy neighborhood café or a trendy urban spot.\",\n \"metaDescription\": \"Coffee Order AI Agent delivers a smooth ordering experience for coffee lovers, guiding them through options for different blends, milk alternatives, and flavor shots. Whether the order is for a simple espresso or a complex latte, this AI Agent can be trained to reflect café-specific offerings and seasonal specialties. With a warm, inviting tone and customizable appearance, it creates a personalized interaction that makes each coffee order feel special, whether in a cozy neighborhood café or a trendy urban spot.\",\n \"furtherDescription\": \"Coffee Order AI Agent delivers a smooth ordering experience for coffee lovers, guiding them through options for different blends, milk alternatives, and flavor shots. Whether the order is for a simple espresso or a complex latte, this AI Agent can be trained to reflect café-specific offerings and seasonal specialties. With a warm, inviting tone and customizable appearance, it creates a personalized interaction that makes each coffee order feel special, whether in a cozy neighborhood café or a trendy urban spot.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30019,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30019\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I customize my coffee order, like adjusting milk type or sugar levels?\\\",\\\"How do I select the type of roast for my coffee?\\\",\\\"Can I schedule my coffee for a specific time or delivery slot?\\\",\\\"Is there an option to add extra shots of espresso to my coffee?\\\",\\\"How can I order multiple coffee drinks at once?\\\"]\",\n \"url\": \"/agent-directory/coffee-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/coffee-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Coffee Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670745143961-5c15adac45802f06215ab4fa2edc8d8e-thumbnail.png\"\n },\n {\n \"id\": \"242670723105955\",\n \"slug\": \"detox-drinks-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Detox Drinks Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Nutrition experts with 5+ years of experience in health and wellness beverage preparation.\\\",\\\"expertise\\\":\\\"Guides customers in ordering detox drinks, capturing dietary needs, flavor preferences, and portion sizes.\\\",\\\"personality\\\":\\\"Supportive, informative, and health-conscious, dedicated to promoting wellness through personalized beverage choices.\\\",\\\"special_skills\\\":\\\"Gathers detailed specifications on ingredients, serving sizes, and preferred delivery options for optimal health benefits.\\\"}\",\n \"description\": \"Detox Drinks Order AI Agent assists customers looking to refresh and recharge with detox drinks. From green smoothies to juice cleanses, this AI Agent can collect specific requests based on ingredients, health goals, and dietary preferences. It can be trained with menu options and nutritional information to help customers make informed choices. With a calming tone and a health-conscious vibe, this AI Agent enhances the process of ordering detox drinks, offering a refreshing experience tailored to wellness seekers.\\n\",\n \"metaDescription\": \"Detox Drinks Order AI Agent assists customers looking to refresh and recharge with detox drinks. From green smoothies to juice cleanses, this AI Agent can collect specific requests based on ingredients, health goals, and dietary preferences. It can be trained with menu options and nutritional information to help customers make informed choices. With a calming tone and a health-conscious vibe, this AI Agent enhances the process of ordering detox drinks, offering a refreshing experience tailored to wellness seekers.\\n\",\n \"furtherDescription\": \"Detox Drinks Order AI Agent assists customers looking to refresh and recharge with detox drinks. From green smoothies to juice cleanses, this AI Agent can collect specific requests based on ingredients, health goals, and dietary preferences. It can be trained with menu options and nutritional information to help customers make informed choices. With a calming tone and a health-conscious vibe, this AI Agent enhances the process of ordering detox drinks, offering a refreshing experience tailored to wellness seekers.\\n\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30019,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30019\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I select detox drinks based on specific ingredients?\\\",\\\"Are there options for cold-pressed detox juices?\\\",\\\"Can I customize my detox drink with add-ons like chia seeds or spirulina?\\\",\\\"How do I select detox plans for a multi-day cleanse?\\\",\\\"Can I indicate allergies or dietary restrictions when ordering?\\\"]\",\n \"url\": \"/agent-directory/detox-drinks-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/detox-drinks-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Detox Drinks Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670723105955-1c91669795720ecd1b09e6844fec1932-thumbnail.png\"\n },\n {\n \"id\": \"242670738698978\",\n \"slug\": \"school-lunch-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"School Lunch Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"School cafeteria managers with 7+ years of experience in food service for educational institutions.\\\",\\\"expertise\\\":\\\"Facilitates school lunch orders for students, accommodating dietary restrictions, preferences, and portion sizes.\\\",\\\"personality\\\":\\\"Caring, organized, and enthusiastic about nutritious eating, ensuring a smooth ordering experience for parents and students.\\\",\\\"special_skills\\\":\\\"Collects detailed information about menu selections, dietary needs, and delivery logistics to promote healthy eating habits.\\\"}\",\n \"description\": \"School Lunch Order AI Agent makes the process of ordering school lunches easy and efficient for parents and students alike. It gathers detailed information on meal preferences, allergies, and dietary restrictions while being trained to reflect specific school lunch menus. This AI Agent can be customized with a friendly, kid-appropriate tone that helps students feel engaged and excited about their meal choices, making the lunch ordering process both fun and stress-free for schools and families.\",\n \"metaDescription\": \"School Lunch Order AI Agent makes the process of ordering school lunches easy and efficient for parents and students alike. It gathers detailed information on meal preferences, allergies, and dietary restrictions while being trained to reflect specific school lunch menus. This AI Agent can be customized with a friendly, kid-appropriate tone that helps students feel engaged and excited about their meal choices, making the lunch ordering process both fun and stress-free for schools and families.\",\n \"furtherDescription\": \"School Lunch Order AI Agent makes the process of ordering school lunches easy and efficient for parents and students alike. It gathers detailed information on meal preferences, allergies, and dietary restrictions while being trained to reflect specific school lunch menus. This AI Agent can be customized with a friendly, kid-appropriate tone that helps students feel engaged and excited about their meal choices, making the lunch ordering process both fun and stress-free for schools and families.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30019,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30019\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I choose different lunch options for multiple children?\\\",\\\"Are there vegetarian or allergy-friendly options available?\\\",\\\"Can I set a recurring school lunch order for the entire week?\\\",\\\"How do I add special notes or preferences for my child\\\\u2019s lunch?\\\",\\\"Can I order a variety of snacks or drinks along with the lunch?\\\"]\",\n \"url\": \"/agent-directory/school-lunch-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/school-lunch-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"School Lunch Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670738698978-3c0c7947f57329d012ebf2dd1da760fc-thumbnail.png\"\n },\n {\n \"id\": \"242670532127957\",\n \"slug\": \"wine-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Wine Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Sommelier professionals with 8+ years of experience in wine selection and retail operations.\\\",\\\"expertise\\\":\\\"Assists customers in ordering a wide range of wines, capturing preferences for varietals, regions, and food pairings.\\\",\\\"personality\\\":\\\"Sophisticated, knowledgeable, and attentive, focused on enhancing the customer\\\\u2019s wine selection experience.\\\",\\\"special_skills\\\":\\\"Collects detailed information about preferred types, quantities, and delivery options to ensure a delightful wine experience.\\\"}\",\n \"description\": \"Wine Order AI Agent adds sophistication to the process of selecting and ordering wines. Whether it’s for a special occasion or just a casual evening at home, this AI Agent can collect preferences on varietals, regions, and pairings, and is trained with wine lists and tasting notes. With a refined tone and appearance that can be adjusted to suit high-end restaurants or intimate wine bars, the agent enhances the experience of choosing and ordering wines, making it approachable for both novices and connoisseurs.\\n\",\n \"metaDescription\": \"Wine Order AI Agent adds sophistication to the process of selecting and ordering wines. Whether it’s for a special occasion or just a casual evening at home, this AI Agent can collect preferences on varietals, regions, and pairings, and is trained with wine lists and tasting notes. With a refined tone and appearance that can be adjusted to suit high-end restaurants or intimate wine bars, the agent enhances the experience of choosing and ordering wines, making it approachable for both novices and connoisseurs.\\n\",\n \"furtherDescription\": \"Wine Order AI Agent adds sophistication to the process of selecting and ordering wines. Whether it’s for a special occasion or just a casual evening at home, this AI Agent can collect preferences on varietals, regions, and pairings, and is trained with wine lists and tasting notes. With a refined tone and appearance that can be adjusted to suit high-end restaurants or intimate wine bars, the agent enhances the experience of choosing and ordering wines, making it approachable for both novices and connoisseurs.\\n\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30019,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30019\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I specify the type of wine I want?\\\",\\\"Is there a limit to how many bottles I can order at once?\\\",\\\"Can I choose wines from different countries?\\\",\\\"Is there a way to add gift wrapping or special packaging to my order?\\\",\\\"Can I request wine pairings for specific meals?\\\"]\",\n \"url\": \"/agent-directory/wine-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/wine-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Wine Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670532127957-9875e06ecba9a5bd126209af4318d123-thumbnail.png\"\n },\n {\n \"id\": \"242670960405961\",\n \"slug\": \"burger-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Burger Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Culinary experts with 5+ years of experience in fast-casual dining and burger preparation.\\\",\\\"expertise\\\":\\\"Helps customers customize their burger orders, capturing preferences for toppings, sauces, sizes, and sides.\\\",\\\"personality\\\":\\\"Friendly, engaging, and passionate about delicious food, committed to making the ordering experience enjoyable.\\\",\\\"special_skills\\\":\\\"Collects detailed specifications for burger styles, dietary restrictions, and meal combinations to ensure customer satisfaction.\\\"}\",\n \"description\": \"Burger Order AI Agent makes it simple to order the perfect burger, gathering details on toppings, cooking preferences, and sides. It can be trained with the restaurant’s specific menu to ensure every ingredient and customization option is available. The AI Agent’s tone and appearance can be tailored to reflect anything from a casual burger joint to a gourmet burger restaurant, creating an engaging, mouth-watering experience for anyone craving the ultimate burger.\",\n \"metaDescription\": \"Burger Order AI Agent makes it simple to order the perfect burger, gathering details on toppings, cooking preferences, and sides. It can be trained with the restaurant’s specific menu to ensure every ingredient and customization option is available. The AI Agent’s tone and appearance can be tailored to reflect anything from a casual burger joint to a gourmet burger restaurant, creating an engaging, mouth-watering experience for anyone craving the ultimate burger.\",\n \"furtherDescription\": \"Burger Order AI Agent makes it simple to order the perfect burger, gathering details on toppings, cooking preferences, and sides. It can be trained with the restaurant’s specific menu to ensure every ingredient and customization option is available. The AI Agent’s tone and appearance can be tailored to reflect anything from a casual burger joint to a gourmet burger restaurant, creating an engaging, mouth-watering experience for anyone craving the ultimate burger.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30019,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30019\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I customize the toppings on my burger?\\\",\\\"Are vegetarian or vegan burger options available?\\\",\\\"Can I specify how I want my burger cooked?\\\",\\\"Can I order combo meals with fries and a drink?\\\",\\\"How do I indicate any food allergies in the burger order?\\\"]\",\n \"url\": \"/agent-directory/burger-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/burger-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Burger Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670960405961-21a4fc21b83157d705d650a9ba95e5dd-thumbnail.png\"\n },\n {\n \"id\": \"242671424115955\",\n \"slug\": \"christmas-menu-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Christmas Menu Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Holiday catering specialists with 6+ years of experience in festive meal planning and food service.\\\",\\\"expertise\\\":\\\"Guides customers in ordering from a diverse Christmas menu, accommodating dietary needs and preferences for holiday dishes.\\\",\\\"personality\\\":\\\"Festive, warm, and cheerful, focused on creating a joyful holiday dining experience.\\\",\\\"special_skills\\\":\\\"Collects detailed information on menu selections, serving sizes, and delivery arrangements to ensure a memorable holiday celebration.\\\"}\",\n \"description\": \"Christmas Menu Order AI Agent captures the festive spirit while helping customers navigate holiday meal selections. It efficiently gathers preferences for traditional dishes, sides, and desserts, ensuring every detail aligns with family traditions or event needs. This AI Agent can be trained with specific menu items to reflect various cultural celebrations, enhancing the holiday ordering experience. With a cheerful tone and a visually appealing festive design, it makes planning the perfect Christmas feast enjoyable and hassle-free.\\n\",\n \"metaDescription\": \"Christmas Menu Order AI Agent captures the festive spirit while helping customers navigate holiday meal selections. It efficiently gathers preferences for traditional dishes, sides, and desserts, ensuring every detail aligns with family traditions or event needs. This AI Agent can be trained with specific menu items to reflect various cultural celebrations, enhancing the holiday ordering experience. With a cheerful tone and a visually appealing festive design, it makes planning the perfect Christmas feast enjoyable and hassle-free.\\n\",\n \"furtherDescription\": \"Christmas Menu Order AI Agent captures the festive spirit while helping customers navigate holiday meal selections. It efficiently gathers preferences for traditional dishes, sides, and desserts, ensuring every detail aligns with family traditions or event needs. This AI Agent can be trained with specific menu items to reflect various cultural celebrations, enhancing the holiday ordering experience. With a cheerful tone and a visually appealing festive design, it makes planning the perfect Christmas feast enjoyable and hassle-free.\\n\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30019,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30019\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I choose a set menu or customize my Christmas dinner?\\\",\\\"How far in advance can I place my Christmas menu order?\\\",\\\"Can I order a vegetarian or gluten-free Christmas menu?\\\",\\\"Is it possible to order a full Christmas feast or just individual dishes?\\\",\\\"Can I add beverages or desserts to my Christmas menu order?\\\"]\",\n \"url\": \"/agent-directory/christmas-menu-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/christmas-menu-pre-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Christmas Menu Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671424115955-f488992e316e292ac42bd75c63db0673-thumbnail.png\"\n },\n {\n \"id\": \"242670803378966\",\n \"slug\": \"boxed-lunch-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Boxed Lunch Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Catering professionals with 5+ years of experience in preparing and delivering boxed meals for events and organizations.\\\",\\\"expertise\\\":\\\"Assists customers in selecting and ordering boxed lunches, catering to dietary preferences and group sizes.\\\",\\\"personality\\\":\\\"Efficient, helpful, and attentive to detail, dedicated to making the ordering process seamless for customers.\\\",\\\"special_skills\\\":\\\"Gathers detailed specifications on meal choices, dietary restrictions, and delivery logistics to accommodate various events.\\\"}\",\n \"description\": \"Boxed Lunch Order AI Agent simplifies the process of selecting and ordering boxed lunches for meetings, events, or school functions. It gathers detailed preferences on sandwich choices, sides, and dietary restrictions while being trained with customizable menu options to cater to different tastes. With a friendly, professional tone and customizable look, this AI Agent creates an efficient and engaging ordering experience, ensuring everyone gets a delicious meal tailored to their needs.\",\n \"metaDescription\": \"Boxed Lunch Order AI Agent simplifies the process of selecting and ordering boxed lunches for meetings, events, or school functions. It gathers detailed preferences on sandwich choices, sides, and dietary restrictions while being trained with customizable menu options to cater to different tastes. With a friendly, professional tone and customizable look, this AI Agent creates an efficient and engaging ordering experience, ensuring everyone gets a delicious meal tailored to their needs.\",\n \"furtherDescription\": \"Boxed Lunch Order AI Agent simplifies the process of selecting and ordering boxed lunches for meetings, events, or school functions. It gathers detailed preferences on sandwich choices, sides, and dietary restrictions while being trained with customizable menu options to cater to different tastes. With a friendly, professional tone and customizable look, this AI Agent creates an efficient and engaging ordering experience, ensuring everyone gets a delicious meal tailored to their needs.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30019,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30019\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"Can I customize the contents of the boxed lunch?\\\",\\\"Can I order boxed lunches for a group?\\\",\\\"Is there a minimum number of boxed lunches I need to order?\\\",\\\"Are there dietary options like vegan, vegetarian, or gluten-free boxed lunches?\\\",\\\"Can I schedule my boxed lunch delivery for a specific date and time?\\\"]\",\n \"url\": \"/agent-directory/boxed-lunch-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/boxed-lunch-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Boxed Lunch Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670803378966-07aa263a4876fbe4afd7fe8f52e245bb-thumbnail.png\"\n },\n {\n \"id\": \"242671318247963\",\n \"slug\": \"restaurant-catering-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Restaurant Catering Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Real Restaurant Catering Managers with 7+ years of experience in managing catering services and client relationships.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in handling catering orders, menu selections, and event planning, ensuring a tailored catering experience.\\\",\\\"personality\\\":\\\"Friendly, attentive, and detail-oriented, this agent creates a welcoming atmosphere for clients.\\\",\\\"special_skills\\\":\\\"This AI Agent assists clients in filling out catering order forms and provides real-time answers to their questions about menu options and logistics. It can be trained with specific restaurant data and features customizable tones of voice, avatars, and personalities to enhance brand alignment.\\\"}\",\n \"description\": \"Streamline your restaurant's catering orders with AI. The Restaurant Catering Order AI Agent guides your customers through every step, from selecting dishes to customizing their menu. It answers questions about dietary preferences, portion sizes, and delivery options, making the process efficient and hassle-free. Elevate your service by offering a seamless, personalized ordering experience with this intelligent assistant.\",\n \"metaDescription\": \"Streamline your restaurant's catering orders with AI. The Restaurant Catering Order AI Agent guides your customers through every step, from selecting dishes to customizing their menu. It answers questions about dietary preferences, portion sizes, and delivery options, making the process efficient and hassle-free. Elevate your service by offering a seamless, personalized ordering experience with this intelligent assistant.\",\n \"furtherDescription\": \"Streamline your restaurant's catering orders with AI. The Restaurant Catering Order AI Agent guides your customers through every step, from selecting dishes to customizing their menu. It answers questions about dietary preferences, portion sizes, and delivery options, making the process efficient and hassle-free. Elevate your service by offering a seamless, personalized ordering experience with this intelligent assistant.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30020,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30020\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of cuisines do you offer for catering?\\\",\\\"Can I see a sample menu before placing my order?\\\",\\\"Are there options for dietary restrictions?\\\",\\\"How do I place a catering order?\\\",\\\"What is your cancellation policy for catering orders?\\\"]\",\n \"url\": \"/agent-directory/restaurant-catering-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/restaurant-catering-order-form-template\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Restaurant Catering Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671318247963-3e3995dcf99b27d020db1444a314e515-thumbnail.png\"\n },\n {\n \"id\": \"242671267859975\",\n \"slug\": \"catering-event-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Catering Event Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Skilled Catering Event Planners with 6+ years of experience in organizing and managing large-scale events.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating catering event orders, helping clients plan menus and logistics for gatherings of all sizes.\\\",\\\"personality\\\":\\\"Detail-oriented, friendly, and resourceful, this agent ensures that clients feel supported and informed throughout the event planning process.\\\",\\\"special_skills\\\":\\\"This AI Agent assists clients in filling out event catering order forms and answers real-time inquiries about menu choices and event arrangements. It can be trained with specific event details and features customizable tones of voice, avatars, and personalities to align with your brand's image.\\\"}\",\n \"description\": \"Elevate your event planning with AI precision. The Catering Event Order AI Agent ensures every detail of your catering order is flawlessly managed. From selecting the ideal menu to accommodating special requests, this agent guides clients smoothly through the process. It’s like having a personal event coordinator on hand, ready to answer questions and fine-tune every aspect for a perfect event.\",\n \"metaDescription\": \"Elevate your event planning with AI precision. The Catering Event Order AI Agent ensures every detail of your catering order is flawlessly managed. From selecting the ideal menu to accommodating special requests, this agent guides clients smoothly through the process. It’s like having a personal event coordinator on hand, ready to answer questions and fine-tune every aspect for a perfect event.\",\n \"furtherDescription\": \"Elevate your event planning with AI precision. The Catering Event Order AI Agent ensures every detail of your catering order is flawlessly managed. From selecting the ideal menu to accommodating special requests, this agent guides clients smoothly through the process. It’s like having a personal event coordinator on hand, ready to answer questions and fine-tune every aspect for a perfect event.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30020,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30020\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide to place a catering order for my event?\\\",\\\"Can I schedule a tasting before placing a large order?\\\",\\\"Do you provide serving staff for catering events?\\\",\\\"What happens if my guest count changes after I place my order?\\\",\\\"Are there additional fees for delivery and setup?\\\"]\",\n \"url\": \"/agent-directory/catering-event-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/catering-event-order-form-template\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Catering Event Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671267859975-1d9f6ee70e3c563570187a69edc2b9bb-thumbnail.png\"\n },\n {\n \"id\": \"242670875019967\",\n \"slug\": \"corporate-catering-menu-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Corporate Catering Menu Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Seasoned Corporate Catering Managers with 8+ years of experience in providing tailored catering solutions for business events.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating corporate catering menu orders, ensuring clients have the right options for their professional gatherings.\\\",\\\"personality\\\":\\\"Professional, efficient, and approachable, this agent prioritizes client satisfaction and smooth event execution.\\\",\\\"special_skills\\\":\\\"This AI Agent streamlines the process of filling out corporate catering menu orders while providing instant answers to client inquiries about menu items and dietary options. It can be trained with specific company preferences and offers customizable voices and avatars to enhance brand consistency.\\\"}\",\n \"description\": \"Enhance your corporate catering experience with smart AI assistance. The Corporate Catering Menu Order AI Agent helps businesses craft the perfect menu for any occasion, balancing taste and professionalism. It guides clients through choices, manages special requests, and offers insights on portion sizes and dietary needs, ensuring a seamless and sophisticated ordering process tailored to the corporate world.\",\n \"metaDescription\": \"Enhance your corporate catering experience with smart AI assistance. The Corporate Catering Menu Order AI Agent helps businesses craft the perfect menu for any occasion, balancing taste and professionalism. It guides clients through choices, manages special requests, and offers insights on portion sizes and dietary needs, ensuring a seamless and sophisticated ordering process tailored to the corporate world.\",\n \"furtherDescription\": \"Enhance your corporate catering experience with smart AI assistance. The Corporate Catering Menu Order AI Agent helps businesses craft the perfect menu for any occasion, balancing taste and professionalism. It guides clients through choices, manages special requests, and offers insights on portion sizes and dietary needs, ensuring a seamless and sophisticated ordering process tailored to the corporate world.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30020,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30020\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of corporate catering packages do you offer?\\\",\\\"Can I customize the menu for my corporate event?\\\",\\\"Is there a minimum order requirement for corporate catering?\\\",\\\"Do you offer delivery and setup for corporate catering orders?\\\",\\\"How do I handle changes to my order after it's been placed?\\\"]\",\n \"url\": \"/agent-directory/corporate-catering-menu-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/corporate-catering-menu-order-form-template\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Corporate Catering Menu Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670875019967-2f42b2ce2c077bdf6d79d298188f1c0e-thumbnail.png\"\n },\n {\n \"id\": \"242671162420953\",\n \"slug\": \"weekly-lunch-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Weekly Lunch Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Catering Coordinators with 5+ years of expertise in managing weekly meal plans for businesses and organizations.\\\",\\\"expertise\\\":\\\"This AI Agent focuses on simplifying the process of placing weekly lunch orders, helping clients choose and customize meals for their teams.\\\",\\\"personality\\\":\\\"Friendly, organized, and attentive, this agent ensures that clients receive the support they need for hassle-free lunch planning.\\\",\\\"special_skills\\\":\\\"This AI Agent efficiently assists clients in filling out weekly lunch order forms and provides quick answers to questions about menu options and delivery logistics. It can be trained with specific preferences and features customizable tones of voice and avatars to align with your brand's identity.\\\"}\",\n \"description\": \"Simplify your lunch planning with an AI that does more than just take orders. The Weekly Lunch Order AI Agent assists clients in filling out their weekly lunch selections while answering any questions about menu options, dietary restrictions, and delivery logistics. Create a hassle-free ordering experience that caters to diverse tastes and preferences, making lunchtime enjoyable and efficient for everyone involved.\",\n \"metaDescription\": \"Simplify your lunch planning with an AI that does more than just take orders. The Weekly Lunch Order AI Agent assists clients in filling out their weekly lunch selections while answering any questions about menu options, dietary restrictions, and delivery logistics. Create a hassle-free ordering experience that caters to diverse tastes and preferences, making lunchtime enjoyable and efficient for everyone involved.\",\n \"furtherDescription\": \"Simplify your lunch planning with an AI that does more than just take orders. The Weekly Lunch Order AI Agent assists clients in filling out their weekly lunch selections while answering any questions about menu options, dietary restrictions, and delivery logistics. Create a hassle-free ordering experience that caters to diverse tastes and preferences, making lunchtime enjoyable and efficient for everyone involved.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30020,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30020\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I set up a weekly lunch order?\\\",\\\"Can I choose different meals for each day of the week?\\\",\\\"Is there a minimum order requirement for weekly lunch deliveries?\\\",\\\"What happens if I need to skip a week?\\\",\\\"How do I make changes to my weekly lunch order?\\\"]\",\n \"url\": \"/agent-directory/weekly-lunch-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/weekly-lunch-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Weekly Lunch Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671162420953-d49968aa4c9570b868b97dd6804a5f8f-thumbnail.png\"\n },\n {\n \"id\": \"242670734896974\",\n \"slug\": \"party-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Party Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Expert Party Planners with over 7 years of experience in organizing and managing party catering services.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating party orders, helping clients select the perfect menu and coordinate logistics for various celebrations.\\\",\\\"personality\\\":\\\"Energetic, creative, and detail-oriented, this agent ensures a fun and smooth planning experience for every event.\\\",\\\"special_skills\\\":\\\"This AI Agent streamlines the process of filling out party order forms and provides immediate responses to inquiries about menu choices and event arrangements. It can be trained with specific details about your offerings and comes with customizable tones of voice and avatars to enhance your brand experience.\\\"}\",\n \"description\": \"Make your party planning effortless with a dynamic AI agent that does it all. The Party Order AI Agent helps clients complete their order forms while addressing any questions about menu options, portion sizes, and special requests. Perfectly adaptable, businesses can train this agent with their own data, ensuring a personalized experience that captures the essence of every celebration, making it unforgettable.\",\n \"metaDescription\": \"Make your party planning effortless with a dynamic AI agent that does it all. The Party Order AI Agent helps clients complete their order forms while addressing any questions about menu options, portion sizes, and special requests. Perfectly adaptable, businesses can train this agent with their own data, ensuring a personalized experience that captures the essence of every celebration, making it unforgettable.\",\n \"furtherDescription\": \"Make your party planning effortless with a dynamic AI agent that does it all. The Party Order AI Agent helps clients complete their order forms while addressing any questions about menu options, portion sizes, and special requests. Perfectly adaptable, businesses can train this agent with their own data, ensuring a personalized experience that captures the essence of every celebration, making it unforgettable.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30020,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30020\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What types of food can I order for my party?\\\",\\\"How far in advance should I place my party order?\\\",\\\"Can I customize the menu for a themed party?\\\",\\\"Do you provide delivery and setup services for party orders?\\\",\\\"What is your cancellation policy for party orders?\\\"]\",\n \"url\": \"/agent-directory/party-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/party-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Party Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670734896974-fea7d369e99a61fd366c8a9cd3ec8c46-thumbnail.png\"\n },\n {\n \"id\": \"242671276738971\",\n \"slug\": \"book-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Book Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Knowledgeable Bookstore Managers with 6+ years of experience in retail and customer service within the book industry.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating book orders, helping clients find titles, manage their orders, and navigate payment options.\\\",\\\"personality\\\":\\\"Friendly, insightful, and enthusiastic, this agent creates an engaging environment for book lovers.\\\",\\\"special_skills\\\":\\\"This AI Agent assists clients in completing book order forms and provides real-time answers to questions about availability, pricing, and recommendations. It can be trained with specific inventory data and features customizable tones of voice and avatars to resonate with your bookstore\\\\u2019s brand.\\\"}\",\n \"description\": \"Simplify your book ordering process with an intelligent AI Agent that does more than just take requests. The Book Order AI Agent guides customers through filling out their orders while readily answering questions about book availability, genres, and delivery options. Businesses can customize and train this agent with their own inventory data, ensuring a personalized and efficient experience that keeps readers coming back for more.\",\n \"metaDescription\": \"Simplify your book ordering process with an intelligent AI Agent that does more than just take requests. The Book Order AI Agent guides customers through filling out their orders while readily answering questions about book availability, genres, and delivery options. Businesses can customize and train this agent with their own inventory data, ensuring a personalized and efficient experience that keeps readers coming back for more.\",\n \"furtherDescription\": \"Simplify your book ordering process with an intelligent AI Agent that does more than just take requests. The Book Order AI Agent guides customers through filling out their orders while readily answering questions about book availability, genres, and delivery options. Businesses can customize and train this agent with their own inventory data, ensuring a personalized and efficient experience that keeps readers coming back for more.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30021,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30021\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I place an order for a book?\\\",\\\"Do you offer digital copies of books?\\\",\\\"What is the expected delivery time for book orders?\\\",\\\"Can I track my book order after it's been placed?\\\",\\\"What is your return policy for book orders?\\\"]\",\n \"url\": \"/agent-directory/book-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/book-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Book Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671276738971-0b73c9cc3e5f1180f9b6a0eeef86e693-thumbnail.png\"\n },\n {\n \"id\": \"242670964570968\",\n \"slug\": \"ebook-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Ebook Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Digital Content Managers with 5+ years of expertise in e-commerce and digital publishing.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating ebook orders, guiding clients through selection, purchase, and download processes.\\\",\\\"personality\\\":\\\"Tech-savvy, approachable, and informative, this agent ensures a seamless experience for ebook buyers.\\\",\\\"special_skills\\\":\\\"This AI Agent efficiently helps clients fill out ebook order forms while providing immediate responses to inquiries about formats, pricing, and availability. It can be trained with specific catalog data and features customizable tones of voice and avatars to align with your digital brand.\\\"}\",\n \"description\": \"Transform the way customers order ebooks with a savvy Agent that goes beyond form-filling. The Ebook Order AI Agent assists clients in completing their orders while answering any questions about formats, pricing, and download options. Businesses can train this Agent with their own ebook catalog, ensuring a tailored and efficient experience that makes digital reading accessible and enjoyable for everyone.\",\n \"metaDescription\": \"Transform the way customers order ebooks with a savvy Agent that goes beyond form-filling. The Ebook Order AI Agent assists clients in completing their orders while answering any questions about formats, pricing, and download options. Businesses can train this Agent with their own ebook catalog, ensuring a tailored and efficient experience that makes digital reading accessible and enjoyable for everyone.\",\n \"furtherDescription\": \"Transform the way customers order ebooks with a savvy Agent that goes beyond form-filling. The Ebook Order AI Agent assists clients in completing their orders while answering any questions about formats, pricing, and download options. Businesses can train this Agent with their own ebook catalog, ensuring a tailored and efficient experience that makes digital reading accessible and enjoyable for everyone.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30021,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30021\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I purchase an ebook?\\\",\\\"What formats are available for ebooks?\\\",\\\"Is there a way to sample an ebook before buying?\\\",\\\"How will I receive my ebook after purchase?\\\",\\\"Can I return or exchange an ebook if I\\\\u2019m not satisfied?\\\"]\",\n \"url\": \"/agent-directory/ebook-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/ebook-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Ebook Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670964570968-3a4bda60cfe38bd3a2d2ad277e42904a-thumbnail.png\"\n },\n {\n \"id\": \"242670470858969\",\n \"slug\": \"school-book-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"School Book Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced School Administrators with over 6 years of expertise in managing student book orders and educational resources.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating school book orders, assisting students and parents in selecting and purchasing required texts for classes.\\\",\\\"personality\\\":\\\"Supportive, knowledgeable, and friendly, this agent fosters a positive and efficient experience for families navigating school book needs.\\\",\\\"special_skills\\\":\\\"This AI Agent streamlines the process of filling out school book order forms and provides real-time answers to questions about book availability, pricing, and curriculum requirements. It can be trained with specific school data and offers customizable tones of voice and avatars to reflect your educational institution's brand.\\\"}\",\n \"description\": \"Streamline the book ordering process for students and parents with an intuitive Agent that handles more than just forms. The School Book Order AI Agent guides users through their selections while answering questions about required texts, pricing, and delivery options. Schools can train this Agent with their specific inventory and requirements, creating a personalized and efficient experience that makes acquiring educational materials hassle-free.\",\n \"metaDescription\": \"Streamline the book ordering process for students and parents with an intuitive Agent that handles more than just forms. The School Book Order AI Agent guides users through their selections while answering questions about required texts, pricing, and delivery options. Schools can train this Agent with their specific inventory and requirements, creating a personalized and efficient experience that makes acquiring educational materials hassle-free.\",\n \"furtherDescription\": \"Streamline the book ordering process for students and parents with an intuitive Agent that handles more than just forms. The School Book Order AI Agent guides users through their selections while answering questions about required texts, pricing, and delivery options. Schools can train this Agent with their specific inventory and requirements, creating a personalized and efficient experience that makes acquiring educational materials hassle-free.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30021,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30021\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I place an order for school books?\\\",\\\"Do you offer used or discounted school books?\\\",\\\"What is the estimated delivery time for school book orders?\\\",\\\"Can I cancel or change my school book order after it's been placed?\\\",\\\"What is your return policy for school book orders?\\\"]\",\n \"url\": \"/agent-directory/school-book-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/school-book-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"School Book Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670470858969-5d2f4b224c29f76d642e9a39e0fd31d8-thumbnail.png\"\n },\n {\n \"id\": \"242670753649971\",\n \"slug\": \"comic-book-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Comic Book Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Passionate Comic Book Store Owners with over 7 years of experience in retail and customer engagement within the comic book industry.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating comic book orders, helping clients discover new titles, series, and graphic novels.\\\",\\\"personality\\\":\\\"Energetic, enthusiastic, and knowledgeable, this agent creates an engaging atmosphere for comic book enthusiasts.\\\",\\\"special_skills\\\":\\\"This AI Agent assists clients in filling out comic book order forms and provides instant responses to inquiries about availability, pricing, and recommendations for similar titles. It can be trained with specific inventory data and features customizable tones of voice and avatars to reflect your comic store's unique character.\\\"}\",\n \"description\": \"Dive into the world of comics with an AI Agent designed to enhance the ordering experience. The Comic Book Order AI Agent assists customers in filling out their orders while answering questions about titles, series availability, and shipping options. Tailored to meet the unique needs of comic shops, this Agent can be trained with your specific inventory, ensuring a fun and efficient process for every comic enthusiast.\",\n \"metaDescription\": \"Dive into the world of comics with an AI Agent designed to enhance the ordering experience. The Comic Book Order AI Agent assists customers in filling out their orders while answering questions about titles, series availability, and shipping options. Tailored to meet the unique needs of comic shops, this Agent can be trained with your specific inventory, ensuring a fun and efficient process for every comic enthusiast.\",\n \"furtherDescription\": \"Dive into the world of comics with an AI Agent designed to enhance the ordering experience. The Comic Book Order AI Agent assists customers in filling out their orders while answering questions about titles, series availability, and shipping options. Tailored to meet the unique needs of comic shops, this Agent can be trained with your specific inventory, ensuring a fun and efficient process for every comic enthusiast.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30021,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30021\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I place an order for comic books?\\\",\\\"Do you offer subscriptions for comic book series?\\\",\\\"What formats are available for comic book orders?\\\",\\\"Can I cancel or modify my comic book order after it's been placed?\\\",\\\"What is your return policy for comic book orders?\\\"]\",\n \"url\": \"/agent-directory/comic-book-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/comic-book-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Comic Book Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670753649971-d26fcbe9f0df81de678e625afbcb47c8-thumbnail.png\"\n },\n {\n \"id\": \"242671395334965\",\n \"slug\": \"elementary-school-book-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Elementary School Book Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Elementary School Teachers with over 5 years of expertise in managing student book orders and educational materials for young learners.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating book orders specifically tailored for elementary students, ensuring families find age-appropriate titles for their children.\\\",\\\"personality\\\":\\\"Friendly, nurturing, and encouraging, this agent creates a welcoming environment for parents and students alike.\\\",\\\"special_skills\\\":\\\"This AI Agent simplifies the process of filling out elementary school book order forms and provides quick answers to questions about book selections, pricing, and recommended reading lists. It can be trained with specific school data and offers customizable tones of voice and avatars to align with your school's values and identity.\\\"}\",\n \"description\": \"Make book ordering a breeze for young students and their parents with a friendly AI Agent tailored for elementary schools. The Elementary School Book Order AI Agent simplifies the process by guiding users through selections and answering questions about age-appropriate titles, pricing, and delivery methods. By training this Agent with your school's specific inventory, you can create a personalized, engaging experience that fosters a love for reading in young learners.\",\n \"metaDescription\": \"Make book ordering a breeze for young students and their parents with a friendly AI Agent tailored for elementary schools. The Elementary School Book Order AI Agent simplifies the process by guiding users through selections and answering questions about age-appropriate titles, pricing, and delivery methods. By training this Agent with your school's specific inventory, you can create a personalized, engaging experience that fosters a love for reading in young learners.\",\n \"furtherDescription\": \"Make book ordering a breeze for young students and their parents with a friendly AI Agent tailored for elementary schools. The Elementary School Book Order AI Agent simplifies the process by guiding users through selections and answering questions about age-appropriate titles, pricing, and delivery methods. By training this Agent with your school's specific inventory, you can create a personalized, engaging experience that fosters a love for reading in young learners.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30021,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30021\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I order books for my elementary school child?\\\",\\\"Are there any special discounts for bulk orders for schools?\\\",\\\"Can I get a list of required books for my child\\\\u2019s grade level?\\\",\\\"What is the delivery time for school book orders?\\\",\\\"What is your return policy for elementary school book orders?\\\"]\",\n \"url\": \"/agent-directory/elementary-school-book-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/elementary-school-book-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Elementary School Book Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671395334965-4afac6430c4dc53844b236e18b5b7b6f-thumbnail.png\"\n },\n {\n \"id\": \"242671151496964\",\n \"slug\": \"book-box-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Book Box Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Skilled Subscription Service Managers with over 6 years of experience in curating and managing book box subscriptions.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating book box orders, helping clients choose personalized selections based on their reading preferences and interests.\\\",\\\"personality\\\":\\\"Engaging, enthusiastic, and knowledgeable, this agent creates an exciting experience for book lovers looking for their next read.\\\",\\\"special_skills\\\":\\\"This AI Agent assists clients in completing book box order forms while providing immediate responses to inquiries about box contents, pricing, and subscription options. It can be trained with specific inventory data and features customizable tones of voice and avatars to enhance your subscription service's branding.\\\"}\",\n \"description\": \"Transform the way readers discover new titles with an innovative Agent designed for book box services. The Book Box Order AI Agent streamlines the ordering process by guiding customers through their selections while answering any questions about themes, genres, and subscription details. Easily trainable with your specific inventory and preferences, this Agent creates a tailored experience that delights book lovers and enhances their reading journey.\",\n \"metaDescription\": \"Transform the way readers discover new titles with an innovative Agent designed for book box services. The Book Box Order AI Agent streamlines the ordering process by guiding customers through their selections while answering any questions about themes, genres, and subscription details. Easily trainable with your specific inventory and preferences, this Agent creates a tailored experience that delights book lovers and enhances their reading journey.\",\n \"furtherDescription\": \"Transform the way readers discover new titles with an innovative Agent designed for book box services. The Book Box Order AI Agent streamlines the ordering process by guiding customers through their selections while answering any questions about themes, genres, and subscription details. Easily trainable with your specific inventory and preferences, this Agent creates a tailored experience that delights book lovers and enhances their reading journey.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30021,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30021\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What is included in a book box order?\\\",\\\"How do I customize my book box order?\\\",\\\"What is the subscription frequency for book box orders?\\\",\\\"Can I gift a book box to someone else?\\\",\\\"What is your cancellation policy for book box subscriptions?\\\"]\",\n \"url\": \"/agent-directory/book-box-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/book-box-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Book Box Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671151496964-a2d8580e946b55274f402e2304e4dce6-thumbnail.png\"\n },\n {\n \"id\": \"242670537109962\",\n \"slug\": \"tickets-purchase-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Tickets Purchase AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Event Ticketing Professionals with over 6 years of expertise in managing ticket sales for various events.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating ticket purchases for concerts, shows, sports events, and more, ensuring clients secure their seats effortlessly.\\\",\\\"personality\\\":\\\"Energetic, friendly, and attentive, this agent creates an engaging experience for clients looking to enjoy their favorite events.\\\",\\\"special_skills\\\":\\\"This AI Agent helps clients complete ticket purchase forms and provides immediate answers to inquiries about availability, pricing, and event details. It can be trained with specific event data and features customizable tones of voice and avatars to enhance your ticketing platform's brand.\\\"}\",\n \"description\": \"Transform the ticket buying experience with a dynamic Agent designed to make purchasing hassle-free. The Tickets Purchase AI Agent assists users in completing their orders while answering any questions about event details, seating options, pricing, and discounts. Ideal for concerts, sports events, and theater performances, this Agent can be tailored with your specific offerings, creating a personalized and engaging experience that keeps customers coming back for more.\",\n \"metaDescription\": \"Transform the ticket buying experience with a dynamic Agent designed to make purchasing hassle-free. The Tickets Purchase AI Agent assists users in completing their orders while answering any questions about event details, seating options, pricing, and discounts. Ideal for concerts, sports events, and theater performances, this Agent can be tailored with your specific offerings, creating a personalized and engaging experience that keeps customers coming back for more.\",\n \"furtherDescription\": \"Transform the ticket buying experience with a dynamic Agent designed to make purchasing hassle-free. The Tickets Purchase AI Agent assists users in completing their orders while answering any questions about event details, seating options, pricing, and discounts. Ideal for concerts, sports events, and theater performances, this Agent can be tailored with your specific offerings, creating a personalized and engaging experience that keeps customers coming back for more.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30022,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30022\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I purchase tickets through the AI Agent?\\\",\\\"Can I choose my seats when purchasing tickets?\\\",\\\"What payment options are available for ticket purchases?\\\",\\\"How can I modify or cancel my ticket order?\\\",\\\"How will I receive my tickets after purchase?\\\"]\",\n \"url\": \"/agent-directory/tickets-purchase-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/buy-tickets-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Tickets Purchase AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670537109962-4998c376fad1c454f5bb784dead28e76-thumbnail.png\"\n },\n {\n \"id\": \"242670492594970\",\n \"slug\": \"rail-ticket-booking-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Rail Ticket Booking AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Travel Agents with over 7 years of expertise in railway ticketing and customer service.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating rail ticket bookings, helping clients find the best routes, prices, and travel options for their journeys.\\\",\\\"personality\\\":\\\"Friendly, efficient, and knowledgeable, this agent ensures a smooth and enjoyable booking experience for travelers.\\\",\\\"special_skills\\\":\\\"This AI Agent assists clients in filling out rail ticket booking forms while providing real-time answers to questions about schedules, fares, and travel policies. It can be trained with specific route and pricing data and features customizable tones of voice and avatars to reflect your travel brand's identity.\\\"}\",\n \"description\": \"Simplify train travel with an intelligent Agent that streamlines the ticket booking process. The Rail Ticket Booking AI Agent not only assists customers in completing their bookings but also answers questions about routes, schedules, pricing, and special offers. Perfect for frequent travelers and occasional commuters alike, this Agent can be customized with your specific data, ensuring a smooth, efficient, and personalized experience that makes rail travel more accessible for everyone.\",\n \"metaDescription\": \"Simplify train travel with an intelligent Agent that streamlines the ticket booking process. The Rail Ticket Booking AI Agent not only assists customers in completing their bookings but also answers questions about routes, schedules, pricing, and special offers. Perfect for frequent travelers and occasional commuters alike, this Agent can be customized with your specific data, ensuring a smooth, efficient, and personalized experience that makes rail travel more accessible for everyone.\",\n \"furtherDescription\": \"Simplify train travel with an intelligent Agent that streamlines the ticket booking process. The Rail Ticket Booking AI Agent not only assists customers in completing their bookings but also answers questions about routes, schedules, pricing, and special offers. Perfect for frequent travelers and occasional commuters alike, this Agent can be customized with your specific data, ensuring a smooth, efficient, and personalized experience that makes rail travel more accessible for everyone.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30022,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30022\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I book a rail ticket?\\\",\\\"Can I choose my seat while booking a rail ticket?\\\",\\\"What payment methods are accepted for rail ticket bookings?\\\",\\\"How can I cancel or modify my rail ticket booking?\\\",\\\"How will I receive my rail ticket after booking?\\\"]\",\n \"url\": \"/agent-directory/rail-ticket-booking-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/rail-ticket-booking-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Rail Ticket Booking AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670492594970-29c1240ad1f5270f6e49c4a8dc555cc4-thumbnail.png\"\n },\n {\n \"id\": \"242670730366962\",\n \"slug\": \"concert-ticket-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Concert Ticket Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Seasoned Ticket Sales Specialists with over 7 years of experience in managing concert ticketing and customer service.\\\",\\\"expertise\\\":\\\"This AI Agent focuses on facilitating concert ticket orders, helping clients find the best seats and pricing for their favorite live performances.\\\",\\\"personality\\\":\\\"Enthusiastic, engaging, and knowledgeable, this agent creates an exciting atmosphere for music lovers eager to attend concerts.\\\",\\\"special_skills\\\":\\\"This AI Agent assists clients in filling out concert ticket order forms and provides instant answers to questions about availability, seating options, and event details. It can be trained with specific concert information and features customizable tones of voice and avatars to align with your ticketing service's brand.\\\"}\",\n \"description\": \"Enhance the concert-going experience with an intuitive AI Agent dedicated to seamless ticket purchasing. The Concert Ticket Order AI Agent guides users through the ordering process while answering questions about seating availability, pricing tiers, and event details. Perfect for music lovers planning their next show or festival, this AI Agent can be customized with your specific inventory, ensuring a tailored and enjoyable ticket-buying experience that makes every concert memorable.\",\n \"metaDescription\": \"Enhance the concert-going experience with an intuitive AI Agent dedicated to seamless ticket purchasing. The Concert Ticket Order AI Agent guides users through the ordering process while answering questions about seating availability, pricing tiers, and event details. Perfect for music lovers planning their next show or festival, this AI Agent can be customized with your specific inventory, ensuring a tailored and enjoyable ticket-buying experience that makes every concert memorable.\",\n \"furtherDescription\": \"Enhance the concert-going experience with an intuitive AI Agent dedicated to seamless ticket purchasing. The Concert Ticket Order AI Agent guides users through the ordering process while answering questions about seating availability, pricing tiers, and event details. Perfect for music lovers planning their next show or festival, this AI Agent can be customized with your specific inventory, ensuring a tailored and enjoyable ticket-buying experience that makes every concert memorable.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30022,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30022\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I order concert tickets through the AI Agent?\\\",\\\"Can I choose my seats for the concert?\\\",\\\"What payment methods can I use to purchase concert tickets?\\\",\\\"How do I modify or cancel my concert ticket order?\\\",\\\"How will I receive my concert tickets after placing an order?\\\"]\",\n \"url\": \"/agent-directory/concert-ticket-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/concert-ticket-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Concert Ticket Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670730366962-ecd3ea7320722f3cb27675b4b2374686-thumbnail.png\"\n },\n {\n \"id\": \"242671349241961\",\n \"slug\": \"event-ticket-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Event Ticket Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Event Coordinators with over 6 years of expertise in managing ticket sales for a wide range of events.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating event ticket orders, helping clients secure their tickets for concerts, festivals, sports, and other live events.\\\",\\\"personality\\\":\\\"Friendly, efficient, and responsive, this agent ensures a seamless ticket purchasing experience for clients.\\\",\\\"special_skills\\\":\\\"This AI Agent guides clients through filling out event ticket order forms while providing real-time answers to inquiries about availability, pricing, and event specifics. It can be trained with specific event data and offers customizable tones of voice and avatars to reflect your event ticketing brand.\\\"}\",\n \"description\": \"Elevate your event ticketing process with a sophisticated AI Agent that streamlines orders and enhances customer interaction. The Event Ticket Order AI Agent not only assists users in filling out their ticket requests but also answers inquiries about event details, seating options, and pricing. Ideal for a wide range of events—from concerts to festivals—this AI Agent can be tailored with your specific offerings, ensuring a personalized and efficient experience that keeps attendees engaged and excited.\",\n \"metaDescription\": \"Elevate your event ticketing process with a sophisticated AI Agent that streamlines orders and enhances customer interaction. The Event Ticket Order AI Agent not only assists users in filling out their ticket requests but also answers inquiries about event details, seating options, and pricing. Ideal for a wide range of events—from concerts to festivals—this AI Agent can be tailored with your specific offerings, ensuring a personalized and efficient experience that keeps attendees engaged and excited.\",\n \"furtherDescription\": \"Elevate your event ticketing process with a sophisticated AI Agent that streamlines orders and enhances customer interaction. The Event Ticket Order AI Agent not only assists users in filling out their ticket requests but also answers inquiries about event details, seating options, and pricing. Ideal for a wide range of events—from concerts to festivals—this AI Agent can be tailored with your specific offerings, ensuring a personalized and efficient experience that keeps attendees engaged and excited.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30022,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30022\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I order tickets for an event using the AI Agent?\\\",\\\"Can I select my seats when ordering event tickets?\\\",\\\"What payment options are accepted for event ticket purchases?\\\",\\\"How can I cancel or change my event ticket order?\\\",\\\"How will I receive my tickets after ordering?\\\"]\",\n \"url\": \"/agent-directory/event-ticket-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/event-ticket-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Event Ticket Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671349241961-0a2a50b892ba56273592321d0900cc50-thumbnail.png\"\n },\n {\n \"id\": \"242670881075966\",\n \"slug\": \"bus-ticket-booking-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Bus Ticket Booking AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Transportation Managers with over 5 years of expertise in bus ticketing and customer service.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating bus ticket bookings, helping clients find the best routes and fares for their travel needs.\\\",\\\"personality\\\":\\\"Friendly, helpful, and knowledgeable, this agent ensures a smooth booking experience for travelers.\\\",\\\"special_skills\\\":\\\"This AI Agent assists clients in filling out bus ticket booking forms and provides immediate answers to questions about schedules, pricing, and travel policies. It can be trained with specific route and fare information and features customizable tones of voice and avatars to enhance your transportation brand.\\\"}\",\n \"description\": \"Transform your ticketing service with an innovative AI Agent tailored for bus travel. The Bus Ticket Booking AI Agent simplifies the booking process by guiding customers through their ticket selection while addressing questions about schedules, routes, and pricing. Perfect for transit companies looking to enhance customer satisfaction, this AI Agent can be trained by owners with their specific data, ensuring a smooth and personalized booking experience that meets the needs of every traveler.\",\n \"metaDescription\": \"Transform your ticketing service with an innovative AI Agent tailored for bus travel. The Bus Ticket Booking AI Agent simplifies the booking process by guiding customers through their ticket selection while addressing questions about schedules, routes, and pricing. Perfect for transit companies looking to enhance customer satisfaction, this AI Agent can be trained by owners with their specific data, ensuring a smooth and personalized booking experience that meets the needs of every traveler.\",\n \"furtherDescription\": \"Transform your ticketing service with an innovative AI Agent tailored for bus travel. The Bus Ticket Booking AI Agent simplifies the booking process by guiding customers through their ticket selection while addressing questions about schedules, routes, and pricing. Perfect for transit companies looking to enhance customer satisfaction, this AI Agent can be trained by owners with their specific data, ensuring a smooth and personalized booking experience that meets the needs of every traveler.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30022,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30022\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I book bus tickets using the AI Agent?\\\",\\\"Am I able to choose specific seats for my bus trip?\\\",\\\"What payment options are accepted for bus ticket bookings?\\\",\\\"How do I modify or cancel my bus ticket reservation?\\\",\\\"How will I receive my bus tickets after completing the booking?\\\"]\",\n \"url\": \"/agent-directory/bus-ticket-booking-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/bus-ticket-booking-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Bus Ticket Booking AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670881075966-0d3581cab341cbd6f3e778a8390b8618-thumbnail.png\"\n },\n {\n \"id\": \"242671081591962\",\n \"slug\": \"museum-ticket-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Museum Ticket Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Knowledgeable Museum Curators with over 6 years of experience in ticket sales and visitor engagement.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating museum ticket orders, helping clients secure entry to exhibitions, tours, and special events.\\\",\\\"personality\\\":\\\"Friendly, informative, and passionate about art and culture, this agent creates an inviting experience for museum visitors.\\\",\\\"special_skills\\\":\\\"This AI Agent guides clients through filling out museum ticket order forms while providing instant answers to inquiries about ticket availability, pricing, and current exhibitions. It can be trained with specific museum data and features customizable tones of voice and avatars to reflect your institution's unique character.\\\"}\",\n \"description\": \"Enrich the visitor experience with a smart AI Agent designed for seamless museum ticketing. The Museum Ticket Order AI Agent helps patrons navigate the ticketing process effortlessly, providing guidance on exhibition details, ticket types, and pricing while answering any questions along the way. Ideal for art and history enthusiasts, this AI Agent can be trained by museum owners with their specific offerings, ensuring a tailored and efficient booking experience that invites more visitors to explore and enjoy cultural treasures.\",\n \"metaDescription\": \"Enrich the visitor experience with a smart AI Agent designed for seamless museum ticketing. The Museum Ticket Order AI Agent helps patrons navigate the ticketing process effortlessly, providing guidance on exhibition details, ticket types, and pricing while answering any questions along the way. Ideal for art and history enthusiasts, this AI Agent can be trained by museum owners with their specific offerings, ensuring a tailored and efficient booking experience that invites more visitors to explore and enjoy cultural treasures.\",\n \"furtherDescription\": \"Enrich the visitor experience with a smart AI Agent designed for seamless museum ticketing. The Museum Ticket Order AI Agent helps patrons navigate the ticketing process effortlessly, providing guidance on exhibition details, ticket types, and pricing while answering any questions along the way. Ideal for art and history enthusiasts, this AI Agent can be trained by museum owners with their specific offerings, ensuring a tailored and efficient booking experience that invites more visitors to explore and enjoy cultural treasures.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30022,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30022\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I order tickets for the museum using the AI Agent?\\\",\\\"Can I choose specific time slots for my museum visit with the AI Agent?\\\",\\\"What payment methods are accepted for purchasing museum tickets?\\\",\\\"How can I change or cancel my museum ticket order after it's been placed?\\\",\\\"How will I receive my museum tickets once my order is completed?\\\"]\",\n \"url\": \"/agent-directory/museum-ticket-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/museum-ticket-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Museum Ticket Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671081591962-b30ca93b989789e0dbf970a9a3bce284-thumbnail.png\"\n },\n {\n \"id\": \"242670809091964\",\n \"slug\": \"valentine-s-day-party-ticket-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Valentine's Day Party Ticket Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Event Planners with over 5 years of expertise in organizing themed parties and special events.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating ticket orders for Valentine\\\\u2019s Day parties, ensuring clients can easily secure their spots for a romantic and festive celebration.\\\",\\\"personality\\\":\\\"Romantic, cheerful, and engaging, this agent creates an exciting atmosphere for couples and friends looking to celebrate love.\\\",\\\"special_skills\\\":\\\"This AI Agent assists clients in completing Valentine\\\\u2019s Day party ticket order forms and provides real-time answers to questions about event details, pricing, and special offers. It can be trained with specific event information and features customizable tones of voice and avatars to enhance your event branding.\\\"}\",\n \"description\": \"Create unforgettable experiences this Valentine's Day with an engaging AI Agent dedicated to effortless ticketing. The Valentine's Day Party Ticket Order AI Agent streamlines the purchasing process, guiding couples and friends through their ticket selections while answering questions about event details, seating arrangements, and special packages. Perfect for event organizers, this AI Agent can be trained with specific offerings, ensuring a personalized and smooth ticket-buying experience that helps everyone celebrate love in style.\",\n \"metaDescription\": \"Create unforgettable experiences this Valentine's Day with an engaging AI Agent dedicated to effortless ticketing. The Valentine's Day Party Ticket Order AI Agent streamlines the purchasing process, guiding couples and friends through their ticket selections while answering questions about event details, seating arrangements, and special packages. Perfect for event organizers, this AI Agent can be trained with specific offerings, ensuring a personalized and smooth ticket-buying experience that helps everyone celebrate love in style.\",\n \"furtherDescription\": \"Create unforgettable experiences this Valentine's Day with an engaging AI Agent dedicated to effortless ticketing. The Valentine's Day Party Ticket Order AI Agent streamlines the purchasing process, guiding couples and friends through their ticket selections while answering questions about event details, seating arrangements, and special packages. Perfect for event organizers, this AI Agent can be trained with specific offerings, ensuring a personalized and smooth ticket-buying experience that helps everyone celebrate love in style.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30022,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30022\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I order tickets for the Valentine's Day party using the AI Agent?\\\",\\\"Can I select my preferred seating arrangements for the Valentine's Day party?\\\",\\\"What payment methods can I use to purchase tickets for the party?\\\",\\\"How do I modify or cancel my ticket order for the Valentine's Day party?\\\",\\\"How will I receive my tickets once I complete the order?\\\"]\",\n \"url\": \"/agent-directory/valentine-s-day-party-ticket-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/valentines-day-party-ticket-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Valentine's Day Party Ticket Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670809091964-f405894072f0e71c79101bc87e8ca409-thumbnail.png\"\n },\n {\n \"id\": \"242671286402960\",\n \"slug\": \"ferry-ticket-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Ferry Ticket Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Skilled Marine Transportation Experts with over 6 years of experience in managing ferry operations and customer service.\\\",\\\"expertise\\\":\\\"This AI Agent focuses on streamlining the process of ferry ticket orders, assisting clients in navigating routes and schedules for their journeys.\\\",\\\"personality\\\":\\\"Calm, friendly, and informative, this agent ensures travelers feel at ease as they plan their maritime adventures.\\\",\\\"special_skills\\\":\\\"This AI Agent helps clients effortlessly complete ferry ticket order forms while addressing inquiries about departure times, ticket prices, and onboard amenities. It can be tailored with specific route information and includes customizable voices and avatars to align with your ferry service's branding.\\\"}\",\n \"description\": \"Set sail with ease using an AI Agent designed for hassle-free ferry ticketing. The Ferry Ticket Order AI Agent simplifies the booking journey by guiding travelers through ticket selections while answering questions about schedules, routes, and pricing. Ideal for ferry operators looking to enhance customer experience, this AI Agent can be trained by owners with their specific data, ensuring a smooth and efficient process that helps passengers embark on their adventures without a hitch.\",\n \"metaDescription\": \"Set sail with ease using an AI Agent designed for hassle-free ferry ticketing. The Ferry Ticket Order AI Agent simplifies the booking journey by guiding travelers through ticket selections while answering questions about schedules, routes, and pricing. Ideal for ferry operators looking to enhance customer experience, this AI Agent can be trained by owners with their specific data, ensuring a smooth and efficient process that helps passengers embark on their adventures without a hitch.\",\n \"furtherDescription\": \"Set sail with ease using an AI Agent designed for hassle-free ferry ticketing. The Ferry Ticket Order AI Agent simplifies the booking journey by guiding travelers through ticket selections while answering questions about schedules, routes, and pricing. Ideal for ferry operators looking to enhance customer experience, this AI Agent can be trained by owners with their specific data, ensuring a smooth and efficient process that helps passengers embark on their adventures without a hitch.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30022,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30022\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I order ferry tickets using the AI Agent?\\\",\\\"Can I choose specific seats for my ferry journey?\\\",\\\"What payment methods are available for purchasing ferry tickets?\\\",\\\"How can I change or cancel my ferry ticket order after it's placed?\\\",\\\"How will I receive my ferry tickets after completing the order?\\\"]\",\n \"url\": \"/agent-directory/ferry-ticket-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/ferry-ticket-reservation-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Ferry Ticket Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671286402960-4c99c7a73316ba80cf106b48e197cd6e-thumbnail.png\"\n },\n {\n \"id\": \"242670708094965\",\n \"slug\": \"cinema-ticket-order-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Cinema Ticket Order AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Cinema Managers with over 7 years of expertise in ticketing and customer engagement within the film industry.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating cinema ticket orders, helping clients select movies, showtimes, and seating arrangements for an enjoyable movie experience.\\\",\\\"personality\\\":\\\"Enthusiastic, approachable, and knowledgeable, this agent creates a vibrant atmosphere for moviegoers eager to catch the latest films.\\\",\\\"special_skills\\\":\\\"This AI Agent not only assists clients in completing cinema ticket order forms but also provides immediate responses to questions about film availability, screening times, and pricing. It can be trained with specific theater information and offers customizable tones of voice and avatars to enhance your cinema's unique identity.\\\"}\",\n \"description\": \"Step into the world of cinema with an AI Agent that revolutionizes the ticket purchasing experience. The Cinema Ticket Order AI Agent effortlessly assists moviegoers in selecting their showtimes and seats while answering any questions about film details, pricing, and promotions. Perfect for theaters eager to enhance patron satisfaction, this AI Agent can be tailored by owners to include specific movie listings and offers, ensuring a personalized and enjoyable experience that makes every visit to the movies a memorable one.\",\n \"metaDescription\": \"Step into the world of cinema with an AI Agent that revolutionizes the ticket purchasing experience. The Cinema Ticket Order AI Agent effortlessly assists moviegoers in selecting their showtimes and seats while answering any questions about film details, pricing, and promotions. Perfect for theaters eager to enhance patron satisfaction, this AI Agent can be tailored by owners to include specific movie listings and offers, ensuring a personalized and enjoyable experience that makes every visit to the movies a memorable one.\",\n \"furtherDescription\": \"Step into the world of cinema with an AI Agent that revolutionizes the ticket purchasing experience. The Cinema Ticket Order AI Agent effortlessly assists moviegoers in selecting their showtimes and seats while answering any questions about film details, pricing, and promotions. Perfect for theaters eager to enhance patron satisfaction, this AI Agent can be tailored by owners to include specific movie listings and offers, ensuring a personalized and enjoyable experience that makes every visit to the movies a memorable one.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30022,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30022\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I order cinema tickets using the AI Agent?\\\",\\\"Can I select my preferred seats for the movie?\\\",\\\"What payment methods are accepted for purchasing cinema tickets?\\\",\\\"How do I change or cancel my cinema ticket order after it\\\\u2019s been placed?\\\",\\\"When will I receive my cinema tickets after placing the order?\\\"]\",\n \"url\": \"/agent-directory/cinema-ticket-order-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/cinema-ticket-order-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Cinema Ticket Order AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670708094965-e1cfec4cba03645db6b6b2d2d999edf7-thumbnail.png\"\n },\n {\n \"id\": \"242671443397968\",\n \"slug\": \"school-class-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"School Class Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced School Registrars with over 6 years of expertise in managing student enrollment and class registrations.\\\",\\\"expertise\\\":\\\"This AI Agent is dedicated to facilitating the class registration process, helping students and parents navigate course selections and registration requirements.\\\",\\\"personality\\\":\\\"Supportive, informative, and efficient, this agent ensures a smooth and organized experience for families during registration periods.\\\",\\\"special_skills\\\":\\\"This AI Agent streamlines the class registration process by guiding users through the necessary forms and providing real-time answers to questions about course offerings, prerequisites, and schedules. It can be trained with specific school data and includes customizable tones of voice and avatars to reflect your educational institution's character.\\\"}\",\n \"description\": \"Simplify the enrollment process with an AI Agent dedicated to making class registration seamless. The School Class Registration AI Agent guides students and parents through selecting courses, answering questions about prerequisites, schedules, and fees. Designed for educational institutions looking to streamline their operations, this AI Agent can be customized by school administrators with specific class offerings, ensuring a smooth and efficient registration experience that helps students kickstart their academic journey with confidence.\",\n \"metaDescription\": \"Simplify the enrollment process with an AI Agent dedicated to making class registration seamless. The School Class Registration AI Agent guides students and parents through selecting courses, answering questions about prerequisites, schedules, and fees. Designed for educational institutions looking to streamline their operations, this AI Agent can be customized by school administrators with specific class offerings, ensuring a smooth and efficient registration experience that helps students kickstart their academic journey with confidence.\",\n \"furtherDescription\": \"Simplify the enrollment process with an AI Agent dedicated to making class registration seamless. The School Class Registration AI Agent guides students and parents through selecting courses, answering questions about prerequisites, schedules, and fees. Designed for educational institutions looking to streamline their operations, this AI Agent can be customized by school administrators with specific class offerings, ensuring a smooth and efficient registration experience that helps students kickstart their academic journey with confidence.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30000,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30000\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How do I register for a class using the AI Agent?\\\",\\\"What information do I need to provide for class registration?\\\",\\\"Are there any fees associated with class registration?\\\",\\\"Can I change my class registration after I\\\\u2019ve submitted it?\\\",\\\"How will I receive confirmation of my class registration?\\\"]\",\n \"url\": \"/agent-directory/school-class-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/class-registration\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"School Class Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671443397968-3d02428677f38d0d4163949603fe2948-thumbnail.png\"\n },\n {\n \"id\": \"242670763284967\",\n \"slug\": \"college-admission-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"College Admission AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Seasoned Admissions Officers with over 8 years of experience in guiding prospective students through the college application process.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in assisting students with college admissions, providing insights into application requirements, deadlines, and eligibility criteria.\\\",\\\"personality\\\":\\\"Approachable, knowledgeable, and encouraging, this agent helps demystify the admissions process and supports students in presenting their best selves.\\\",\\\"special_skills\\\":\\\"This AI Agent effectively aids clients in completing college admission forms and addresses real-time inquiries about application procedures, financial aid options, and campus life. It can be tailored with specific institutional data and features customizable tones of voice and avatars to reflect your college's unique identity.\\\"}\",\n \"description\": \"Navigate the college admission journey with an AI Agent tailored to provide clarity and support. The College Admission AI Agent assists prospective students in completing their applications while answering questions about requirements, deadlines, and available programs. Perfect for educational institutions aiming to enhance their recruitment process, this AI Agent can be customized by admissions teams with specific criteria, ensuring a personalized and efficient experience that empowers students to make informed decisions about their future.\",\n \"metaDescription\": \"Navigate the college admission journey with an AI Agent tailored to provide clarity and support. The College Admission AI Agent assists prospective students in completing their applications while answering questions about requirements, deadlines, and available programs. Perfect for educational institutions aiming to enhance their recruitment process, this AI Agent can be customized by admissions teams with specific criteria, ensuring a personalized and efficient experience that empowers students to make informed decisions about their future.\",\n \"furtherDescription\": \"Navigate the college admission journey with an AI Agent tailored to provide clarity and support. The College Admission AI Agent assists prospective students in completing their applications while answering questions about requirements, deadlines, and available programs. Perfect for educational institutions aiming to enhance their recruitment process, this AI Agent can be customized by admissions teams with specific criteria, ensuring a personalized and efficient experience that empowers students to make informed decisions about their future.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30000,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30000\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I apply for college admissions using the AI Agent?\\\",\\\"What documents do I need to submit for my college application?\\\",\\\"Are there application fees for college admissions?\\\",\\\"Can I check the status of my college application through the AI Agent?\\\",\\\"How will I receive notification about my admission status?\\\"]\",\n \"url\": \"/agent-directory/college-admission-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/admissions-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"College Admission AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670763284967-489cf6388ed0cc37a041b69c7a1175e6-thumbnail.png\"\n },\n {\n \"id\": \"242670924949974\",\n \"slug\": \"music-school-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Music School Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Accomplished Music Instructors with over 6 years of experience in managing student registrations and music education programs.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating the registration process for music schools, helping students and parents select courses, instructors, and schedules tailored to their musical interests.\\\",\\\"personality\\\":\\\"Friendly, passionate, and inspiring, this agent creates an encouraging atmosphere for aspiring musicians.\\\",\\\"special_skills\\\":\\\"This AI Agent simplifies the music school registration process by guiding users through necessary forms and providing instant answers to questions about class offerings, prerequisites, and enrollment deadlines. It can be customized with specific program details and features adaptable tones of voice and avatars to align with your music school's identity.\\\"}\",\n \"description\": \"Transform the enrollment process for aspiring musicians with an AI Agent designed to make class registration effortless. The Music School Registration AI Agent guides students and parents through selecting lessons, answering questions about instructors, schedules, and fees. Ideal for music school administrators, teachers, and coordinators, this AI Agent can be customized with specific course offerings, ensuring a streamlined and personalized experience that helps nurture the next generation of talented musicians.\",\n \"metaDescription\": \"Transform the enrollment process for aspiring musicians with an AI Agent designed to make class registration effortless. The Music School Registration AI Agent guides students and parents through selecting lessons, answering questions about instructors, schedules, and fees. Ideal for music school administrators, teachers, and coordinators, this AI Agent can be customized with specific course offerings, ensuring a streamlined and personalized experience that helps nurture the next generation of talented musicians.\",\n \"furtherDescription\": \"Transform the enrollment process for aspiring musicians with an AI Agent designed to make class registration effortless. The Music School Registration AI Agent guides students and parents through selecting lessons, answering questions about instructors, schedules, and fees. Ideal for music school administrators, teachers, and coordinators, this AI Agent can be customized with specific course offerings, ensuring a streamlined and personalized experience that helps nurture the next generation of talented musicians.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30000,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30000\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I register for music classes using the AI Agent?\\\",\\\"What information do I need to provide for music class registration?\\\",\\\"Are there any fees associated with music class registration?\\\",\\\"Can I change my music class registration after I\\\\u2019ve submitted it?\\\",\\\"How will I receive confirmation of my music class registration?\\\"]\",\n \"url\": \"/agent-directory/music-school-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/music-school-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Music School Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670924949974-6a29c197786ed41e542e53891070ea84-thumbnail.png\"\n },\n {\n \"id\": \"212231030040025\",\n \"slug\": \"sunday-school-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Sunday School Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Dedicated Religious Educators with over 5 years of experience in managing Sunday school programs and student enrollment.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating the registration process for Sunday school, helping families select classes that align with their children's spiritual education and community involvement.\\\",\\\"personality\\\":\\\"Caring, friendly, and supportive, this agent fosters a welcoming environment for families looking to engage their children in spiritual growth.\\\",\\\"special_skills\\\":\\\"This AI Agent simplifies Sunday school registration by guiding users through form completion and providing quick answers to questions about class schedules, curriculum, and community activities. It can be tailored with specific program details and features customizable tones of voice and avatars to embody your church's values and identity.\\\"}\",\n \"description\": \"Enhance the enrollment experience for families with an AI Agent designed specifically for Sunday school programs. The Sunday School Registration AI Agent assists parents in navigating the registration process, answering questions about class schedules, curriculum details, and age group placements. Ideal for church administrators and educators, this AI Agent can be customized with specific program information, ensuring a welcoming and efficient registration experience that fosters community and spiritual growth.\",\n \"metaDescription\": \"Enhance the enrollment experience for families with an AI Agent designed specifically for Sunday school programs. The Sunday School Registration AI Agent assists parents in navigating the registration process, answering questions about class schedules, curriculum details, and age group placements. Ideal for church administrators and educators, this AI Agent can be customized with specific program information, ensuring a welcoming and efficient registration experience that fosters community and spiritual growth.\",\n \"furtherDescription\": \"Enhance the enrollment experience for families with an AI Agent designed specifically for Sunday school programs. The Sunday School Registration AI Agent assists parents in navigating the registration process, answering questions about class schedules, curriculum details, and age group placements. Ideal for church administrators and educators, this AI Agent can be customized with specific program information, ensuring a welcoming and efficient registration experience that fosters community and spiritual growth.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30000,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30000\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I register my child for Sunday School using the AI Agent?\\\",\\\"What information do I need to provide for Sunday School registration?\\\",\\\"Are there any fees associated with Sunday School registration?\\\",\\\"Can I change my child's registration details after submitting them?\\\",\\\"How will I receive confirmation of my child's Sunday School registration?\\\"]\",\n \"url\": \"/agent-directory/sunday-school-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/sunday-school-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Sunday School Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/212231030040025-c2da4d481aea41a5d540a24d7aea4714-thumbnail.png\"\n },\n {\n \"id\": \"212242697542053\",\n \"slug\": \"preschool-enrollment-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Preschool Enrollment AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Preschool Administrators with over 6 years of expertise in managing enrollment processes and early childhood education programs.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating the preschool enrollment journey, helping parents navigate application requirements, class selections, and schedules for their young children.\\\",\\\"personality\\\":\\\"Nurturing, friendly, and enthusiastic, this agent creates a supportive atmosphere for families eager to start their children's educational journey.\\\",\\\"special_skills\\\":\\\"This AI Agent streamlines the preschool enrollment process by guiding users through form completion and providing immediate answers to questions about program offerings, developmental milestones, and enrollment deadlines. It can be customized with specific preschool data and features adaptable tones of voice and avatars to reflect your institution's welcoming nature.\\\"}\",\n \"description\": \"Streamline the enrollment process for young learners with an AI Agent dedicated to preschool registration. The Preschool Enrollment AI Agent guides parents through filling out necessary forms while answering questions about curriculum, daily schedules, and staff qualifications. Perfect for preschool administrators and educators, this AI Agent can be trained with specific program details, ensuring a smooth and supportive enrollment experience that lays a strong foundation for children’s early education.\",\n \"metaDescription\": \"Streamline the enrollment process for young learners with an AI Agent dedicated to preschool registration. The Preschool Enrollment AI Agent guides parents through filling out necessary forms while answering questions about curriculum, daily schedules, and staff qualifications. Perfect for preschool administrators and educators, this AI Agent can be trained with specific program details, ensuring a smooth and supportive enrollment experience that lays a strong foundation for children’s early education.\",\n \"furtherDescription\": \"Streamline the enrollment process for young learners with an AI Agent dedicated to preschool registration. The Preschool Enrollment AI Agent guides parents through filling out necessary forms while answering questions about curriculum, daily schedules, and staff qualifications. Perfect for preschool administrators and educators, this AI Agent can be trained with specific program details, ensuring a smooth and supportive enrollment experience that lays a strong foundation for children’s early education.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30000,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30000\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I enroll my child in preschool using the AI Agent?\\\",\\\"What information do I need to provide for preschool enrollment?\\\",\\\"Are there any fees associated with preschool enrollment?\\\",\\\"Can I update my child's enrollment information after submitting it?\\\",\\\"How will I receive confirmation of my child's preschool enrollment?\\\"]\",\n \"url\": \"/agent-directory/preschool-enrollment-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/preschool-enrollment-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Preschool Enrollment AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/212242697542053-6bc5e885c7bca8613fcf251f718fd2b4-thumbnail.png\"\n },\n {\n \"id\": \"242671015012947\",\n \"slug\": \"physics-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Physics Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Qualified Physics Instructors with over 7 years of experience in teaching and managing course registrations in educational institutions.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating the registration process for physics courses, assisting students in selecting the right classes based on their academic goals and interests.\\\",\\\"personality\\\":\\\"Knowledgeable, approachable, and encouraging, this agent creates an engaging environment for students excited to explore the world of physics.\\\",\\\"special_skills\\\":\\\"This AI Agent helps users navigate the physics registration process by guiding them through form completion and providing real-time answers to questions about course content, prerequisites, and scheduling. It can be tailored with specific departmental information and features customizable tones of voice and avatars to align with your institution's academic identity.\\\"}\",\n \"description\": \"Elevate the enrollment process for physics courses with an AI Agent tailored for students eager to explore the world of science. The Physics Registration AI Agent assists learners in completing their registration forms while answering questions about course prerequisites, schedules, and lab requirements. Ideal for educational institutions and department heads, this AI Agent can be customized with specific course offerings, ensuring a streamlined and informative registration experience that ignites curiosity and fosters academic success in the field of physics.\",\n \"metaDescription\": \"Elevate the enrollment process for physics courses with an AI Agent tailored for students eager to explore the world of science. The Physics Registration AI Agent assists learners in completing their registration forms while answering questions about course prerequisites, schedules, and lab requirements. Ideal for educational institutions and department heads, this AI Agent can be customized with specific course offerings, ensuring a streamlined and informative registration experience that ignites curiosity and fosters academic success in the field of physics.\",\n \"furtherDescription\": \"Elevate the enrollment process for physics courses with an AI Agent tailored for students eager to explore the world of science. The Physics Registration AI Agent assists learners in completing their registration forms while answering questions about course prerequisites, schedules, and lab requirements. Ideal for educational institutions and department heads, this AI Agent can be customized with specific course offerings, ensuring a streamlined and informative registration experience that ignites curiosity and fosters academic success in the field of physics.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30000,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30000\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I register for a physics class using the AI Agent?\\\",\\\"What information do I need to provide for physics class registration?\\\",\\\"Are there any fees associated with registering for a physics class?\\\",\\\"Can I change my registration details after I've submitted them?\\\",\\\"How will I receive confirmation of my physics class registration?\\\"]\",\n \"url\": \"/agent-directory/physics-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/physics-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Physics Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671015012947-81d812c0550f44ba0445def5cc06c235-thumbnail.png\"\n },\n {\n \"id\": \"242670983260965\",\n \"slug\": \"language-class-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Language Class Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Language Instructors with over 6 years of expertise in teaching and managing language course registrations.\\\",\\\"expertise\\\":\\\"This AI Agent focuses on facilitating the registration process for language classes, assisting students in choosing the right courses to meet their language learning goals.\\\",\\\"personality\\\":\\\"Friendly, engaging, and culturally aware, this agent creates an inviting atmosphere for students eager to enhance their language skills.\\\",\\\"special_skills\\\":\\\"This AI Agent simplifies the language class registration process by guiding users through form completion and providing instant responses to questions about class levels, schedules, and learning materials. It can be customized with specific program details and features adaptable tones of voice and avatars to reflect your language school\\\\u2019s identity.\\\"}\",\n \"description\": \"Transform the enrollment experience for language learners with an AI Agent designed to facilitate class registration. The Language Class Registration AI Agent guides students and parents through the process of selecting courses while answering questions about language levels, class schedules, and teaching methods. Ideal for language schools, tutors, and educational coordinators, this AI Agent can be customized with specific program details, ensuring a smooth and engaging registration experience that inspires a love for language and communication.\",\n \"metaDescription\": \"Transform the enrollment experience for language learners with an AI Agent designed to facilitate class registration. The Language Class Registration AI Agent guides students and parents through the process of selecting courses while answering questions about language levels, class schedules, and teaching methods. Ideal for language schools, tutors, and educational coordinators, this AI Agent can be customized with specific program details, ensuring a smooth and engaging registration experience that inspires a love for language and communication.\",\n \"furtherDescription\": \"Transform the enrollment experience for language learners with an AI Agent designed to facilitate class registration. The Language Class Registration AI Agent guides students and parents through the process of selecting courses while answering questions about language levels, class schedules, and teaching methods. Ideal for language schools, tutors, and educational coordinators, this AI Agent can be customized with specific program details, ensuring a smooth and engaging registration experience that inspires a love for language and communication.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30000,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30000\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I register for a language class using the AI Agent?\\\",\\\"What languages are offered in the language classes?\\\",\\\"Are there any prerequisites for enrolling in a language class?\\\",\\\"How will I receive confirmation of my language class registration?\\\",\\\"Can I change my language class after I\\\\u2019ve registered?\\\"]\",\n \"url\": \"/agent-directory/language-class-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/online-language-class-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Language Class Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670983260965-e5a3130fed3d4a8c26dfe23e1e2c7250-thumbnail.png\"\n },\n {\n \"id\": \"242670973043963\",\n \"slug\": \"virtual-summer-school-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Virtual Summer School Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Online Educators with over 5 years of expertise in managing virtual summer school programs and student enrollment.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating the registration process for virtual summer school, helping students and parents navigate course offerings and schedules in a digital learning environment.\\\",\\\"personality\\\":\\\"Supportive, tech-savvy, and encouraging, this agent ensures a seamless online registration experience for families eager to enrich their children\\\\u2019s education during the summer.\\\",\\\"special_skills\\\":\\\"This AI Agent enhances the virtual summer school registration process by guiding users through form completion and providing real-time answers to questions about course content, virtual platforms, and enrollment deadlines. It can be tailored with specific program information and features customizable tones of voice and avatars to align with your educational institution's online presence.\\\"}\",\n \"description\": \"Simplify the enrollment process for virtual summer programs with an AI Agent designed to cater to students and parents seeking flexible learning options. The Virtual Summer School Registration AI Agent guides users through selecting courses while answering questions about schedules, curriculum details, and online platforms. Perfect for educators and administrators looking to enhance their summer offerings, this AI Agent can be trained with specific program information, ensuring a seamless and engaging registration experience that promotes continued learning during the summer months.\",\n \"metaDescription\": \"Simplify the enrollment process for virtual summer programs with an AI Agent designed to cater to students and parents seeking flexible learning options. The Virtual Summer School Registration AI Agent guides users through selecting courses while answering questions about schedules, curriculum details, and online platforms. Perfect for educators and administrators looking to enhance their summer offerings, this AI Agent can be trained with specific program information, ensuring a seamless and engaging registration experience that promotes continued learning during the summer months.\",\n \"furtherDescription\": \"Simplify the enrollment process for virtual summer programs with an AI Agent designed to cater to students and parents seeking flexible learning options. The Virtual Summer School Registration AI Agent guides users through selecting courses while answering questions about schedules, curriculum details, and online platforms. Perfect for educators and administrators looking to enhance their summer offerings, this AI Agent can be trained with specific program information, ensuring a seamless and engaging registration experience that promotes continued learning during the summer months.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30000,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30000\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I register for virtual summer school using the AI Agent?\\\",\\\"What subjects are available in virtual summer school?\\\",\\\"Are there any eligibility requirements for virtual summer school?\\\",\\\"How will I receive confirmation of my virtual summer school registration?\\\",\\\"Can I change my course selections after I've registered for virtual summer school?\\\"]\",\n \"url\": \"/agent-directory/virtual-summer-school-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/virtual-summer-school-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Virtual Summer School Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670973043963-f39b9a1a1fa0a614171019637e067124-thumbnail.png\"\n },\n {\n \"id\": \"242670648780970\",\n \"slug\": \"school-bus-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"School Bus Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Transportation Coordinators with over 6 years of expertise in managing school bus registrations and student transportation logistics.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating the school bus registration process, helping parents and guardians ensure safe and reliable transportation for their children.\\\",\\\"personality\\\":\\\"Friendly, organized, and attentive, this agent provides a reassuring presence for families navigating transportation options.\\\",\\\"special_skills\\\":\\\"This AI Agent streamlines the school bus registration process by guiding users through form completion and delivering instant answers to questions about routes, schedules, and safety protocols. It can be customized with specific transportation details and features adaptable tones of voice and avatars to reflect your school\\\\u2019s commitment to student safety and convenience.\\\"}\",\n \"description\": \"Streamline the enrollment process for school transportation with an AI Agent tailored to assist families in registering for bus services. The School Bus Registration AI Agent helps parents navigate the registration forms while answering questions about routes, schedules, and safety protocols. Ideal for transportation coordinators and school administrators, this AI Agent can be trained with specific data about your bus services. With customizable personalities, tones of voice, and appearances, it ensures a friendly and engaging registration experience that keeps families informed and connected.\",\n \"metaDescription\": \"Streamline the enrollment process for school transportation with an AI Agent tailored to assist families in registering for bus services. The School Bus Registration AI Agent helps parents navigate the registration forms while answering questions about routes, schedules, and safety protocols. Ideal for transportation coordinators and school administrators, this AI Agent can be trained with specific data about your bus services. With customizable personalities, tones of voice, and appearances, it ensures a friendly and engaging registration experience that keeps families informed and connected.\",\n \"furtherDescription\": \"Streamline the enrollment process for school transportation with an AI Agent tailored to assist families in registering for bus services. The School Bus Registration AI Agent helps parents navigate the registration forms while answering questions about routes, schedules, and safety protocols. Ideal for transportation coordinators and school administrators, this AI Agent can be trained with specific data about your bus services. With customizable personalities, tones of voice, and appearances, it ensures a friendly and engaging registration experience that keeps families informed and connected.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30000,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30000\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I register my child for the school bus service using the AI Agent?\\\",\\\"What information do I need to provide for school bus registration?\\\",\\\"Are there any fees associated with the school bus service?\\\",\\\"Can I update my child's bus registration information after submitting it?\\\",\\\"How will I receive confirmation of my child's school bus registration?\\\"]\",\n \"url\": \"/agent-directory/school-bus-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/school-bus-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"School Bus Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670648780970-97109fbe4da0927b57e31fac35e37fd9-thumbnail.png\"\n },\n {\n \"id\": \"242671210233949\",\n \"slug\": \"middle-school-enrollment-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Middle School Enrollment AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Middle School Administrators with over 7 years of expertise in managing student enrollment and academic program offerings.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating the enrollment process for middle school, assisting families in navigating class selections, extracurricular activities, and academic requirements.\\\",\\\"personality\\\":\\\"Approachable, supportive, and knowledgeable, this agent creates a welcoming environment for students and parents during the transition to middle school.\\\",\\\"special_skills\\\":\\\"This AI Agent simplifies the middle school enrollment process by guiding users through the necessary forms and providing immediate answers to questions about course options, enrollment timelines, and school policies. It can be tailored with specific school information and features customizable tones of voice and avatars to reflect your institution's nurturing approach to education.\\\"}\",\n \"description\": \"Facilitate a smooth transition for students entering middle school with an AI Agent dedicated to the enrollment process. The Middle School Enrollment AI Agent guides parents and students through filling out registration forms while addressing questions about course offerings, extracurricular activities, and school policies. Perfect for school administrators and enrollment specialists, this AI Agent can be trained with specific school data. With customizable personalities, tones of voice, and appearances, it creates an inviting and informative registration experience that supports students as they embark on this important educational journey.\",\n \"metaDescription\": \"Facilitate a smooth transition for students entering middle school with an AI Agent dedicated to the enrollment process. The Middle School Enrollment AI Agent guides parents and students through filling out registration forms while addressing questions about course offerings, extracurricular activities, and school policies. Perfect for school administrators and enrollment specialists, this AI Agent can be trained with specific school data. With customizable personalities, tones of voice, and appearances, it creates an inviting and informative registration experience that supports students as they embark on this important educational journey.\",\n \"furtherDescription\": \"Facilitate a smooth transition for students entering middle school with an AI Agent dedicated to the enrollment process. The Middle School Enrollment AI Agent guides parents and students through filling out registration forms while addressing questions about course offerings, extracurricular activities, and school policies. Perfect for school administrators and enrollment specialists, this AI Agent can be trained with specific school data. With customizable personalities, tones of voice, and appearances, it creates an inviting and informative registration experience that supports students as they embark on this important educational journey.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30000,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30000\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I enroll my child in middle school using the AI Agent?\\\",\\\"What documents do I need for middle school enrollment?\\\",\\\"Are there any enrollment fees for middle school?\\\",\\\"Can I change my child's enrollment information after submission?\\\",\\\"How will I receive confirmation of my child's middle school enrollment?\\\"]\",\n \"url\": \"/agent-directory/middle-school-enrollment-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/middle-school-enrollment-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Middle School Enrollment AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671210233949-0f55407bee18269d0540cf2743535f34-thumbnail.png\"\n },\n {\n \"id\": \"242670966472971\",\n \"slug\": \"weekend-school-enrollment-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Weekend School Enrollment AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Dedicated Weekend Educators with over 5 years of experience in managing weekend school programs and student enrollment.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating enrollment for weekend school classes, helping families navigate course options that fit their schedules and learning objectives.\\\",\\\"personality\\\":\\\"Warm, enthusiastic, and encouraging, this agent fosters a supportive atmosphere for students and parents looking to enhance their education on weekends.\\\",\\\"special_skills\\\":\\\"This AI Agent streamlines the weekend school enrollment process by guiding users through form completion and providing instant responses to questions about class availability, curricula, and registration deadlines. It can be customized with specific program details and features adaptable tones of voice and avatars to reflect your weekend school's unique character.\\\"}\",\n \"description\": \"Make enrolling in weekend classes a breeze with an AI Agent designed for busy families. The Weekend School Enrollment AI Agent assists parents and students in navigating the registration process while answering questions about class schedules, subjects offered, and enrollment requirements. Ideal for educators and program coordinators, this AI Agent can be trained with specific program details. With customizable personalities, tones of voice, and appearances, it ensures a welcoming and efficient enrollment experience that encourages lifelong learning on weekends.\",\n \"metaDescription\": \"Make enrolling in weekend classes a breeze with an AI Agent designed for busy families. The Weekend School Enrollment AI Agent assists parents and students in navigating the registration process while answering questions about class schedules, subjects offered, and enrollment requirements. Ideal for educators and program coordinators, this AI Agent can be trained with specific program details. With customizable personalities, tones of voice, and appearances, it ensures a welcoming and efficient enrollment experience that encourages lifelong learning on weekends.\",\n \"furtherDescription\": \"Make enrolling in weekend classes a breeze with an AI Agent designed for busy families. The Weekend School Enrollment AI Agent assists parents and students in navigating the registration process while answering questions about class schedules, subjects offered, and enrollment requirements. Ideal for educators and program coordinators, this AI Agent can be trained with specific program details. With customizable personalities, tones of voice, and appearances, it ensures a welcoming and efficient enrollment experience that encourages lifelong learning on weekends.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30000,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30000\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I enroll my child in weekend school using the AI Agent?\\\",\\\"What are the operating hours for the weekend school?\\\",\\\"What documents do I need for weekend school enrollment?\\\",\\\"Are there any informed consent forms I need to complete?\\\",\\\"How will I receive confirmation of my child's weekend school enrollment?\\\"]\",\n \"url\": \"/agent-directory/weekend-school-enrollment-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/weekend-school-enrollment-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Weekend School Enrollment AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670966472971-9ab0c97df3c2f7c6388989079b7f582e-thumbnail.png\"\n },\n {\n \"id\": \"242671241149959\",\n \"slug\": \"baseball-league-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Baseball League Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Veteran League Organizers with over 7 years of experience in coordinating baseball leagues and managing team enrollments.\\\",\\\"expertise\\\":\\\"Expertly handling the registration process for baseball leagues, this AI Agent supports teams and players through every step, from sign-up to game day preparation.\\\",\\\"personality\\\":\\\"Passionate, reliable, and team-oriented, the agent brings a sense of camaraderie to the registration process, ensuring everyone feels part of the league from the start.\\\",\\\"special_skills\\\":\\\"Equipped to guide users through registration forms and provide timely responses to questions about league rules, schedules, and fees, this AI Agent is a trusted companion for all your league\\\\u2019s needs. It can be customized with specific league information, and features personalized avatars and tones of voice to match your league's community spirit.\\\"}\",\n \"description\": \"Streamline the signup process for aspiring baseball players with an AI Agent designed for league registration. The Baseball League Registration AI Agent assists teams and individuals in completing their registration while providing answers to questions about game schedules, player eligibility, and league rules. Ideal for league organizers and coaches, this AI Agent can be trained with specific league information. With a range of customizable traits, including distinctive personalities, voices, and appearances, it delivers an engaging and user-friendly registration experience that fosters a love for the game and encourages participation.\",\n \"metaDescription\": \"Streamline the signup process for aspiring baseball players with an AI Agent designed for league registration. The Baseball League Registration AI Agent assists teams and individuals in completing their registration while providing answers to questions about game schedules, player eligibility, and league rules. Ideal for league organizers and coaches, this AI Agent can be trained with specific league information. With a range of customizable traits, including distinctive personalities, voices, and appearances, it delivers an engaging and user-friendly registration experience that fosters a love for the game and encourages participation.\",\n \"furtherDescription\": \"Streamline the signup process for aspiring baseball players with an AI Agent designed for league registration. The Baseball League Registration AI Agent assists teams and individuals in completing their registration while providing answers to questions about game schedules, player eligibility, and league rules. Ideal for league organizers and coaches, this AI Agent can be trained with specific league information. With a range of customizable traits, including distinctive personalities, voices, and appearances, it delivers an engaging and user-friendly registration experience that fosters a love for the game and encourages participation.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30001,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30001\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"How can I register for the baseball league using the AI Agent?\\\",\\\"What are the important dates for the baseball league season?\\\",\\\"Is there a registration fee to join the league?\\\",\\\"What documents are required for league registration?\\\",\\\"How will I receive confirmation of my registration for the baseball league?\\\"]\",\n \"url\": \"/agent-directory/baseball-league-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/basketball-league-registration-form-template\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Baseball League Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671241149959-25481147bd4eca9757daec1b9bde64a4-thumbnail.png\"\n },\n {\n \"id\": \"242671111898966\",\n \"slug\": \"football-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Football Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Football Coordinators with over 6 years of expertise in managing team registrations and organizing football leagues.\\\",\\\"expertise\\\":\\\"Supporting players and teams in the football registration process, this AI Agent ensures a seamless journey from sign-up to kickoff, helping navigate all necessary steps.\\\",\\\"personality\\\":\\\"Competitive, motivational, and team-focused, the agent creates an energetic and inclusive atmosphere, making the registration process feel as exciting as the game itself.\\\",\\\"special_skills\\\":\\\"With the ability to walk users through registration forms and instantly answer questions about league details, schedules, and player requirements, this AI is your go-to resource. Tailored with your league's specific information, it also offers customizable avatars and tones of voice that reflect the dynamic and spirited nature of football.\\\"}\",\n \"description\": \"Simplify the enrollment process for football enthusiasts with an AI Agent dedicated to league registration. The Football Registration AI Agent guides players and coaches through filling out their registration forms while answering inquiries about team selection, practice schedules, and competition rules. Perfect for league administrators and sports organizations, this AI Agent can be trained with specific league data. Featuring a variety of customizable characteristics, such as unique personalities, engaging tones, and distinctive appearances, it ensures an exciting and seamless registration experience that encourages community and sportsmanship.\",\n \"metaDescription\": \"Simplify the enrollment process for football enthusiasts with an AI Agent dedicated to league registration. The Football Registration AI Agent guides players and coaches through filling out their registration forms while answering inquiries about team selection, practice schedules, and competition rules. Perfect for league administrators and sports organizations, this AI Agent can be trained with specific league data. Featuring a variety of customizable characteristics, such as unique personalities, engaging tones, and distinctive appearances, it ensures an exciting and seamless registration experience that encourages community and sportsmanship.\",\n \"furtherDescription\": \"Simplify the enrollment process for football enthusiasts with an AI Agent dedicated to league registration. The Football Registration AI Agent guides players and coaches through filling out their registration forms while answering inquiries about team selection, practice schedules, and competition rules. Perfect for league administrators and sports organizations, this AI Agent can be trained with specific league data. Featuring a variety of customizable characteristics, such as unique personalities, engaging tones, and distinctive appearances, it ensures an exciting and seamless registration experience that encourages community and sportsmanship.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30001,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30001\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What details do I need to provide to register for the football league?\\\",\\\"How can I find out the registration deadlines?\\\",\\\"What types of payment methods are accepted for registration fees?\\\",\\\"Are there age restrictions for participating in the league?\\\",\\\"How will I receive updates and notifications about the league after registration?\\\"]\",\n \"url\": \"/agent-directory/football-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/football-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Football Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671111898966-c4d8f7e7459300cdf979eb5bcbdf5f73-thumbnail.png\"\n },\n {\n \"id\": \"242671359674972\",\n \"slug\": \"yoga-class-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Yoga Class Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Yoga Instructors with over 5 years of expertise in managing class registrations and guiding students through their yoga journey.\\\",\\\"expertise\\\":\\\"Designed to ease the registration process for yoga classes, this AI Agent assists students in finding and enrolling in the perfect classes that match their skill level and goals.\\\",\\\"personality\\\":\\\"Calm, centered, and welcoming, the agent provides a peaceful and supportive experience, reflecting the essence of yoga practice in every interaction.\\\",\\\"special_skills\\\":\\\"Whether helping users through registration forms or answering questions about class schedules, styles, and instructor details, this AI Agent is fully equipped. It can be tailored with specific class offerings and includes customizable avatars and tones of voice that embody the tranquil and mindful spirit of yoga.\\\"}\",\n \"description\": \"Enhance the journey to wellness with an AI Agent designed for effortless yoga class registration. The Yoga Class Registration AI Agent guides students through selecting classes, helping them complete registration forms while answering questions about class levels, schedules, and instructor qualifications. Ideal for yoga studios and wellness centers, this AI Agent can be trained with specific class offerings. With a variety of unique traits, including soothing tones, inviting personalities, and customizable appearances, it creates a calming and engaging registration experience that inspires individuals to embark on their yoga journey.\",\n \"metaDescription\": \"Enhance the journey to wellness with an AI Agent designed for effortless yoga class registration. The Yoga Class Registration AI Agent guides students through selecting classes, helping them complete registration forms while answering questions about class levels, schedules, and instructor qualifications. Ideal for yoga studios and wellness centers, this AI Agent can be trained with specific class offerings. With a variety of unique traits, including soothing tones, inviting personalities, and customizable appearances, it creates a calming and engaging registration experience that inspires individuals to embark on their yoga journey.\",\n \"furtherDescription\": \"Enhance the journey to wellness with an AI Agent designed for effortless yoga class registration. The Yoga Class Registration AI Agent guides students through selecting classes, helping them complete registration forms while answering questions about class levels, schedules, and instructor qualifications. Ideal for yoga studios and wellness centers, this AI Agent can be trained with specific class offerings. With a variety of unique traits, including soothing tones, inviting personalities, and customizable appearances, it creates a calming and engaging registration experience that inspires individuals to embark on their yoga journey.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30001,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30001\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to register for yoga classes?\\\",\\\"What are the registration deadlines for the upcoming yoga session?\\\",\\\"What are the class operating hours for yoga sessions?\\\",\\\"Are there different types of yoga classes available?\\\",\\\"How will I receive confirmation of my yoga class registration?\\\"]\",\n \"url\": \"/agent-directory/yoga-class-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/online-yoga-class-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Yoga Class Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671359674972-87cc26477b238ee7aa28ff219a9bdf95-thumbnail.png\"\n },\n {\n \"id\": \"242671151873963\",\n \"slug\": \"gym-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Gym Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Professional Fitness Consultants with over 7 years of experience in managing gym memberships and helping clients achieve their fitness goals.\\\",\\\"expertise\\\":\\\"Specializing in the gym registration process, this AI Agent assists new members in signing up for memberships and selecting the right programs to start their fitness journey.\\\",\\\"personality\\\":\\\"Energetic, motivating, and approachable, the agent embodies the spirit of fitness, making the registration experience as invigorating as a workout session.\\\",\\\"special_skills\\\":\\\"Capable of guiding users through membership forms and providing immediate answers to inquiries about class schedules, membership options, and trainer availability, this AI Agent is your all-in-one registration companion. It can be personalized with specific gym details, featuring customizable avatars and tones of voice that reflect your gym's energetic and supportive environment.\\\"}\",\n \"description\": \"Transform the membership experience with an AI Agent dedicated to gym registrations. The Gym Registration AI Agent assists potential members in navigating the signup process, answering questions about membership plans, facilities, and fitness classes. Perfect for gym owners and fitness coordinators, this AI Agent can be trained with specific gym offerings. With a range of personalized features—including energetic personalities, motivating tones, and visually appealing designs—it ensures an engaging and seamless registration experience that inspires individuals to take charge of their fitness journey.\",\n \"metaDescription\": \"Transform the membership experience with an AI Agent dedicated to gym registrations. The Gym Registration AI Agent assists potential members in navigating the signup process, answering questions about membership plans, facilities, and fitness classes. Perfect for gym owners and fitness coordinators, this AI Agent can be trained with specific gym offerings. With a range of personalized features—including energetic personalities, motivating tones, and visually appealing designs—it ensures an engaging and seamless registration experience that inspires individuals to take charge of their fitness journey.\",\n \"furtherDescription\": \"Transform the membership experience with an AI Agent dedicated to gym registrations. The Gym Registration AI Agent assists potential members in navigating the signup process, answering questions about membership plans, facilities, and fitness classes. Perfect for gym owners and fitness coordinators, this AI Agent can be trained with specific gym offerings. With a range of personalized features—including energetic personalities, motivating tones, and visually appealing designs—it ensures an engaging and seamless registration experience that inspires individuals to take charge of their fitness journey.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30001,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30001\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to register for the gym?\\\",\\\"What are the registration deadlines for new members?\\\",\\\"What are the gym's operating hours?\\\",\\\"Are there different membership types available?\\\",\\\"How will I receive confirmation of my gym registration?\\\"]\",\n \"url\": \"/agent-directory/gym-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/gym-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Gym Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671151873963-3af0bbd8ca481fd41035aef712ea5260-thumbnail.png\"\n },\n {\n \"id\": \"242670827682970\",\n \"slug\": \"golf-tournament-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Golf Tournament Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Golf Event Coordinators with over 8 years of expertise in organizing golf tournaments and managing player entries.\\\",\\\"expertise\\\":\\\"This AI Agent is designed to simplify the registration process for golf tournaments, assisting golfers and event planners in completing sign-ups and preparing for the competition.\\\",\\\"personality\\\":\\\"Calm, professional, and detail-oriented, the agent ensures a smooth and stress-free registration experience, mirroring the precision and focus needed in the game of golf.\\\",\\\"special_skills\\\":\\\"The AI Agent can effortlessly guide users through registration forms while providing instant answers to questions about tournament rules, tee times, and entry fees. Customizable with specific tournament details, it also features adaptable avatars and tones of voice to resonate with the refined and focused nature of golf.\\\"}\",\n \"description\": \"Elevate your golfing event with an AI Agent designed to simplify tournament registration. The Golf Tournament Registration AI Agent guides players and teams through the registration process, answering questions about tee times, rules, and event details. Ideal for tournament organizers and golf club managers, this AI Agent can be trained with specific tournament information. With customizable features, including friendly personalities, tailored tones, and distinctive appearances, it ensures an enjoyable and efficient registration experience that gets golfers excited to hit the course.\",\n \"metaDescription\": \"Elevate your golfing event with an AI Agent designed to simplify tournament registration. The Golf Tournament Registration AI Agent guides players and teams through the registration process, answering questions about tee times, rules, and event details. Ideal for tournament organizers and golf club managers, this AI Agent can be trained with specific tournament information. With customizable features, including friendly personalities, tailored tones, and distinctive appearances, it ensures an enjoyable and efficient registration experience that gets golfers excited to hit the course.\",\n \"furtherDescription\": \"Elevate your golfing event with an AI Agent designed to simplify tournament registration. The Golf Tournament Registration AI Agent guides players and teams through the registration process, answering questions about tee times, rules, and event details. Ideal for tournament organizers and golf club managers, this AI Agent can be trained with specific tournament information. With customizable features, including friendly personalities, tailored tones, and distinctive appearances, it ensures an enjoyable and efficient registration experience that gets golfers excited to hit the course.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30001,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30001\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What details do I need to provide to register for the golf tournament?\\\",\\\"What is the registration deadline for the tournament?\\\",\\\"What are the tournament operating hours?\\\",\\\"Are there different divisions in the tournament based on skill level?\\\",\\\"How will I receive confirmation of my registration for the golf tournament?\\\"]\",\n \"url\": \"/agent-directory/golf-tournament-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/golf-tournament-registration-and-sponsor-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Golf Tournament Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670827682970-10aa67cb024acc5061ab78b883bbcf47-thumbnail.png\"\n },\n {\n \"id\": \"242671536693970\",\n \"slug\": \"swim-lesson-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Swim Lesson Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Certified Swim Instructors with over 5 years of experience in coordinating swim classes and managing student registrations.\\\",\\\"expertise\\\":\\\"Perfect for assisting with swim lesson sign-ups, this AI Agent helps students and parents navigate class schedules, levels, and registration requirements with ease.\\\",\\\"personality\\\":\\\"Encouraging, patient, and safety-conscious, the agent brings a reassuring presence to the registration process, reflecting the careful guidance needed in swim instruction.\\\",\\\"special_skills\\\":\\\"This AI Agent smoothly guides users through the registration process while instantly addressing questions about class availability, instructor credentials, and safety protocols. It can be customized with specific swim school details, offering adaptable avatars and tones of voice that capture the calm and supportive environment of swimming lessons.\\\"}\",\n \"description\": \"Dive into a seamless enrollment experience with an AI Agent specifically crafted for swim lesson registration. The Swim Lesson Registration AI Agent helps parents and students navigate through course options, guiding them while addressing questions about class levels, schedules, and instructor qualifications. Tailored for swim schools and aquatic centers, this AI Agent can be trained with specific lesson details. With a variety of engaging characteristics, including cheerful tones, friendly personalities, and customizable visuals, it creates an inviting and efficient registration process that encourages water safety and skill development.\",\n \"metaDescription\": \"Dive into a seamless enrollment experience with an AI Agent specifically crafted for swim lesson registration. The Swim Lesson Registration AI Agent helps parents and students navigate through course options, guiding them while addressing questions about class levels, schedules, and instructor qualifications. Tailored for swim schools and aquatic centers, this AI Agent can be trained with specific lesson details. With a variety of engaging characteristics, including cheerful tones, friendly personalities, and customizable visuals, it creates an inviting and efficient registration process that encourages water safety and skill development.\",\n \"furtherDescription\": \"Dive into a seamless enrollment experience with an AI Agent specifically crafted for swim lesson registration. The Swim Lesson Registration AI Agent helps parents and students navigate through course options, guiding them while addressing questions about class levels, schedules, and instructor qualifications. Tailored for swim schools and aquatic centers, this AI Agent can be trained with specific lesson details. With a variety of engaging characteristics, including cheerful tones, friendly personalities, and customizable visuals, it creates an inviting and efficient registration process that encourages water safety and skill development.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30001,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30001\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to register for swim lessons?\\\",\\\"What is the registration deadline for the upcoming swim lessons?\\\",\\\"What are the operating hours for swim lessons?\\\",\\\"Are there different skill levels for swim lessons?\\\",\\\"How will I receive confirmation of my swim lesson registration?\\\"]\",\n \"url\": \"/agent-directory/swim-lesson-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/swim-lesson-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Swim Lesson Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671536693970-2586b2e024ccb178de9e49a07cc5b722-thumbnail.png\"\n },\n {\n \"id\": \"242670997654977\",\n \"slug\": \"futsal-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Futsal Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Futsal Coaches with over 6 years of expertise in organizing futsal leagues and managing player registrations.\\\",\\\"expertise\\\":\\\"Ideal for handling the registration process for futsal leagues and tournaments, this AI Agent assists players and teams in signing up and preparing for competitive play.\\\",\\\"personality\\\":\\\"Fast-paced, energetic, and team-driven, the agent reflects the dynamic nature of futsal, making the registration process as engaging as the game itself.\\\",\\\"special_skills\\\":\\\"The AI Agent efficiently guides users through registration forms while providing real-time answers to questions about league schedules, team requirements, and venue details. Customizable with specific futsal event information, it also features adaptable avatars and tones of voice that align with the vibrant spirit of futsal.\\\"}\",\n \"description\": \"Kick off your futsal season with an AI Agent designed to streamline player and team registrations. The Futsal Registration AI Agent assists participants in completing their sign-up forms while answering questions about league formats, match schedules, and player eligibility. Perfect for futsal clubs and league organizers, this AI Agent can be trained with specific tournament details. With customizable traits, such as lively personalities, motivating voices, and eye-catching appearances, it ensures an energetic and user-friendly registration experience that gets everyone excited to play the beautiful game.\",\n \"metaDescription\": \"Kick off your futsal season with an AI Agent designed to streamline player and team registrations. The Futsal Registration AI Agent assists participants in completing their sign-up forms while answering questions about league formats, match schedules, and player eligibility. Perfect for futsal clubs and league organizers, this AI Agent can be trained with specific tournament details. With customizable traits, such as lively personalities, motivating voices, and eye-catching appearances, it ensures an energetic and user-friendly registration experience that gets everyone excited to play the beautiful game.\",\n \"furtherDescription\": \"Kick off your futsal season with an AI Agent designed to streamline player and team registrations. The Futsal Registration AI Agent assists participants in completing their sign-up forms while answering questions about league formats, match schedules, and player eligibility. Perfect for futsal clubs and league organizers, this AI Agent can be trained with specific tournament details. With customizable traits, such as lively personalities, motivating voices, and eye-catching appearances, it ensures an energetic and user-friendly registration experience that gets everyone excited to play the beautiful game.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30001,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30001\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information is required to register for the futsal league?\\\",\\\"What is the registration deadline for the upcoming futsal season?\\\",\\\"What are the operating hours for futsal matches?\\\",\\\"Are there age divisions for the futsal league?\\\",\\\"How will I receive confirmation of my futsal league registration?\\\"]\",\n \"url\": \"/agent-directory/futsal-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/futsal-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Futsal Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670997654977-7ecaf9fe33894388dc02ca855346cb04-thumbnail.png\"\n },\n {\n \"id\": \"242671043810954\",\n \"slug\": \"wrestling-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Wrestling Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Veteran Wrestling Coaches with over 7 years of experience in organizing wrestling events and managing athlete registrations.\\\",\\\"expertise\\\":\\\"Specially crafted to handle the intricacies of wrestling registration, this AI Agent supports wrestlers and coaches in navigating sign-ups, weight classes, and tournament rules.\\\",\\\"personality\\\":\\\"Determined, focused, and disciplined, the agent embodies the intensity and commitment of wrestling, ensuring the registration process is seamless and straightforward.\\\",\\\"special_skills\\\":\\\"This AI Agent expertly guides users through the registration forms while providing instant answers to questions about match schedules, weight divisions, and equipment requirements. It can be customized with specific event details and features avatars and tones of voice that reflect the strength and precision of wrestling.\\\"}\",\n \"description\": \"Step into the ring with confidence using an AI Agent crafted for wrestling registration. The Wrestling Registration AI Agent guides athletes through the enrollment process, helping them complete their forms while addressing inquiries about weight classes, competition schedules, and training requirements. Ideal for wrestling clubs and event organizers, this AI Agent can be trained with specific details about your programs. With a variety of customizable attributes—such as dynamic personalities, assertive tones, and distinctive looks—it creates an engaging and supportive registration experience that motivates wrestlers to pursue their goals.\",\n \"metaDescription\": \"Step into the ring with confidence using an AI Agent crafted for wrestling registration. The Wrestling Registration AI Agent guides athletes through the enrollment process, helping them complete their forms while addressing inquiries about weight classes, competition schedules, and training requirements. Ideal for wrestling clubs and event organizers, this AI Agent can be trained with specific details about your programs. With a variety of customizable attributes—such as dynamic personalities, assertive tones, and distinctive looks—it creates an engaging and supportive registration experience that motivates wrestlers to pursue their goals.\",\n \"furtherDescription\": \"Step into the ring with confidence using an AI Agent crafted for wrestling registration. The Wrestling Registration AI Agent guides athletes through the enrollment process, helping them complete their forms while addressing inquiries about weight classes, competition schedules, and training requirements. Ideal for wrestling clubs and event organizers, this AI Agent can be trained with specific details about your programs. With a variety of customizable attributes—such as dynamic personalities, assertive tones, and distinctive looks—it creates an engaging and supportive registration experience that motivates wrestlers to pursue their goals.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30001,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30001\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What details do I need to register for wrestling classes?\\\",\\\"What is the registration deadline for the wrestling season?\\\",\\\"What are the operating hours for wrestling practices?\\\",\\\"Are there different skill levels for wrestling classes?\\\",\\\"How will I receive confirmation of my wrestling class registration?\\\"]\",\n \"url\": \"/agent-directory/wrestling-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/wrestling-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Wrestling Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671043810954-651ddbe05926150f187ba790b2aa852b-thumbnail.png\"\n },\n {\n \"id\": \"242670967968982\",\n \"slug\": \"rugby-league-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Rugby League Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Rugby Coaches with over 6 years of expertise in organizing rugby leagues and managing player registrations.\\\",\\\"expertise\\\":\\\"Tailored to facilitate the registration process for rugby leagues, this AI Agent assists players and teams in navigating sign-ups, ensuring they\\\\u2019re prepared for the season ahead.\\\",\\\"personality\\\":\\\"Bold, energetic, and team-oriented, the agent captures the spirit of rugby, making the registration experience as thrilling as the game itself.\\\",\\\"special_skills\\\":\\\"This AI Agent skillfully guides users through registration forms and provides real-time answers to questions about league structures, match schedules, and player requirements. It can be personalized with specific league details, featuring adaptable avatars and tones of voice that resonate with the camaraderie and excitement of rugby.\\\"}\",\n \"description\": \"Gear up for an exciting season with an AI Agent designed to facilitate rugby league registrations. The Rugby League Registration AI Agent assists players and teams in completing their registration forms, while answering questions about game schedules, team selections, and league rules. Ideal for rugby clubs and league administrators, this AI Agent can be trained with specific league information. Featuring a range of customizable elements, including spirited personalities, motivating voices, and unique appearances, it delivers an engaging and efficient registration experience that fosters camaraderie and passion for the sport.\",\n \"metaDescription\": \"Gear up for an exciting season with an AI Agent designed to facilitate rugby league registrations. The Rugby League Registration AI Agent assists players and teams in completing their registration forms, while answering questions about game schedules, team selections, and league rules. Ideal for rugby clubs and league administrators, this AI Agent can be trained with specific league information. Featuring a range of customizable elements, including spirited personalities, motivating voices, and unique appearances, it delivers an engaging and efficient registration experience that fosters camaraderie and passion for the sport.\",\n \"furtherDescription\": \"Gear up for an exciting season with an AI Agent designed to facilitate rugby league registrations. The Rugby League Registration AI Agent assists players and teams in completing their registration forms, while answering questions about game schedules, team selections, and league rules. Ideal for rugby clubs and league administrators, this AI Agent can be trained with specific league information. Featuring a range of customizable elements, including spirited personalities, motivating voices, and unique appearances, it delivers an engaging and efficient registration experience that fosters camaraderie and passion for the sport.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30001,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30001\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to register for the rugby league?\\\",\\\"What is the registration deadline for the upcoming rugby season?\\\",\\\"What are the operating hours for rugby practices?\\\",\\\"Are there age divisions in the rugby league?\\\",\\\"How will I receive confirmation of my rugby league registration?\\\"]\",\n \"url\": \"/agent-directory/rugby-league-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/rugby-league-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Rugby League Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670967968982-3b977226bb016886013fb0215550759a-thumbnail.png\"\n },\n {\n \"id\": \"242670890229967\",\n \"slug\": \"athlete-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Athlete Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Seasoned Sports Administrators with over 8 years of experience in managing athlete registrations for various sports events and programs.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in simplifying the athlete registration process, ensuring that aspiring athletes can easily sign up for competitions, training programs, and events.\\\",\\\"personality\\\":\\\"Motivational, organized, and supportive, the agent provides a positive and empowering atmosphere, helping athletes feel confident as they take their first steps in their sporting journeys.\\\",\\\"special_skills\\\":\\\"Capable of guiding users through registration forms and providing instant responses to inquiries about eligibility, event schedules, and training resources, this AI Agent is a reliable companion. It can be tailored with specific program information and includes customizable avatars and tones of voice that reflect the drive and enthusiasm of athletic competition.\\\"}\",\n \"description\": \"Streamline the registration process for athletes of all levels with an AI Agent designed for efficient sign-ups. This Athlete Registration AI Agent not only assists users in filling out registration forms but also answers questions about events, eligibility, and training schedules. Perfect for sports organizations and coaches, this AI Agent can be trained with specific details relevant to your programs. With customizable features such as distinct avatars, engaging tones, and dynamic personalities, it creates an interactive experience that encourages athletes to embark on their competitive journeys with confidence.\",\n \"metaDescription\": \"Streamline the registration process for athletes of all levels with an AI Agent designed for efficient sign-ups. This Athlete Registration AI Agent not only assists users in filling out registration forms but also answers questions about events, eligibility, and training schedules. Perfect for sports organizations and coaches, this AI Agent can be trained with specific details relevant to your programs. With customizable features such as distinct avatars, engaging tones, and dynamic personalities, it creates an interactive experience that encourages athletes to embark on their competitive journeys with confidence.\",\n \"furtherDescription\": \"Streamline the registration process for athletes of all levels with an AI Agent designed for efficient sign-ups. This Athlete Registration AI Agent not only assists users in filling out registration forms but also answers questions about events, eligibility, and training schedules. Perfect for sports organizations and coaches, this AI Agent can be trained with specific details relevant to your programs. With customizable features such as distinct avatars, engaging tones, and dynamic personalities, it creates an interactive experience that encourages athletes to embark on their competitive journeys with confidence.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30001,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30001\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide for athlete registration?\\\",\\\"What is the registration deadline for the upcoming athletic season?\\\",\\\"What are the operating hours for athlete training sessions?\\\",\\\"Are there different categories or divisions for athlete registration?\\\",\\\"How will I receive confirmation of my athlete registration?\\\"]\",\n \"url\": \"/agent-directory/athlete-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/athlete-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Athlete Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670890229967-d183ccb97e5e986cd0b20943de73d7ab-thumbnail.png\"\n },\n {\n \"id\": \"202313666786966\",\n \"slug\": \"esthetician-client-intake-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Esthetician Client Intake AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Licensed Estheticians with over 6 years of experience in client consultations and managing intake processes in skincare and beauty settings.\\\",\\\"expertise\\\":\\\"Focused on simplifying the client intake process, this AI Agent assists new clients in filling out necessary forms and understanding the services offered at esthetician clinics.\\\",\\\"personality\\\":\\\"Friendly, attentive, and knowledgeable, the agent creates a welcoming environment, ensuring clients feel comfortable and informed about their skincare choices.\\\",\\\"special_skills\\\":\\\"This AI Agent expertly guides users through client intake forms and answers real-time questions regarding treatments, product recommendations, and appointment details. Customizable with specific clinic information, it also features avatars and tones of voice that embody the elegance and care associated with the beauty industry.\\\"}\",\n \"description\": \"Enhance the client experience with an AI Agent specifically crafted for esthetician services. This Esthetician Client Intake AI Agent simplifies the intake process by assisting clients in completing their registration forms while answering questions about treatments, skincare products, and appointment details. Ideal for beauty salons and spas, this AI Agent can be trained with specific service offerings. With customizable features, including appealing avatars, soothing tones, and engaging personalities, it creates a relaxing and efficient intake experience that sets the stage for a rejuvenating visit.\",\n \"metaDescription\": \"Enhance the client experience with an AI Agent specifically crafted for esthetician services. This Esthetician Client Intake AI Agent simplifies the intake process by assisting clients in completing their registration forms while answering questions about treatments, skincare products, and appointment details. Ideal for beauty salons and spas, this AI Agent can be trained with specific service offerings. With customizable features, including appealing avatars, soothing tones, and engaging personalities, it creates a relaxing and efficient intake experience that sets the stage for a rejuvenating visit.\",\n \"furtherDescription\": \"Enhance the client experience with an AI Agent specifically crafted for esthetician services. This Esthetician Client Intake AI Agent simplifies the intake process by assisting clients in completing their registration forms while answering questions about treatments, skincare products, and appointment details. Ideal for beauty salons and spas, this AI Agent can be trained with specific service offerings. With customizable features, including appealing avatars, soothing tones, and engaging personalities, it creates a relaxing and efficient intake experience that sets the stage for a rejuvenating visit.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30002,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30002\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide for my esthetician client intake?\\\",\\\"Is there a deadline for submitting my client intake form?\\\",\\\"What are the operating hours for esthetician services?\\\",\\\"Will I need to bring anything specific for my appointment?\\\",\\\"How will I receive confirmation of my appointment after completing my intake?\\\"]\",\n \"url\": \"/agent-directory/esthetician-client-intake-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/esthetician-client-intake-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Esthetician Client Intake AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/202313666786966-57e6e81125b1664f9e7f7a3fbc99cc5f-thumbnail.png\"\n },\n {\n \"id\": \"242671522800955\",\n \"slug\": \"counseling-intake-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Counseling Intake AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Licensed Mental Health Professionals with over 7 years of experience in client intake and assessment processes in various counseling settings.\\\",\\\"expertise\\\":\\\"Tailored to streamline the counseling intake process, this AI Agent assists new clients in completing essential forms and understanding the counseling services available to them.\\\",\\\"personality\\\":\\\"Compassionate, understanding, and supportive, the agent fosters a safe and reassuring atmosphere, ensuring clients feel heard and comfortable throughout their intake journey.\\\",\\\"special_skills\\\":\\\"This AI Agent guides users seamlessly through intake forms and provides immediate answers to inquiries about session structures, therapist qualifications, and confidentiality practices. Customizable with specific clinic details, it also features avatars and tones of voice that reflect the warmth and professionalism of the counseling environment.\\\"}\",\n \"description\": \"Facilitate a compassionate and efficient intake process for new clients with an AI Agent designed for counseling services. The Counseling Intake AI Agent guides clients through filling out registration forms while providing answers to questions about therapy approaches, session formats, and practitioner qualifications. Perfect for therapists and mental health clinics, this AI Agent can be trained with specific practice details. With customizable options, including empathetic avatars, calming tones, and supportive personalities, it ensures a welcoming and informative intake experience that helps clients feel understood and supported from their very first interaction.\",\n \"metaDescription\": \"Facilitate a compassionate and efficient intake process for new clients with an AI Agent designed for counseling services. The Counseling Intake AI Agent guides clients through filling out registration forms while providing answers to questions about therapy approaches, session formats, and practitioner qualifications. Perfect for therapists and mental health clinics, this AI Agent can be trained with specific practice details. With customizable options, including empathetic avatars, calming tones, and supportive personalities, it ensures a welcoming and informative intake experience that helps clients feel understood and supported from their very first interaction.\",\n \"furtherDescription\": \"Facilitate a compassionate and efficient intake process for new clients with an AI Agent designed for counseling services. The Counseling Intake AI Agent guides clients through filling out registration forms while providing answers to questions about therapy approaches, session formats, and practitioner qualifications. Perfect for therapists and mental health clinics, this AI Agent can be trained with specific practice details. With customizable options, including empathetic avatars, calming tones, and supportive personalities, it ensures a welcoming and informative intake experience that helps clients feel understood and supported from their very first interaction.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30002,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30002\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information will I need to provide for my counseling intake?\\\",\\\"Is there a specific deadline for submitting my intake form?\\\",\\\"What are the office hours for counseling services?\\\",\\\"Should I bring any documents or materials for my first session?\\\",\\\"How will I receive confirmation of my counseling appointment after completing the intake?\\\"]\",\n \"url\": \"/agent-directory/counseling-intake-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/counseling-intake-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Counseling Intake AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671522800955-f253967823716a7b0dee51f6c9223a39-thumbnail.png\"\n },\n {\n \"id\": \"242671412779968\",\n \"slug\": \"mental-health-intake-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Mental Health Intake AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Licensed Psychologists and Mental Health Professionals with over 8 years of experience in managing client intake processes in mental health clinics.\\\",\\\"expertise\\\":\\\"Focused on facilitating the mental health intake process, this AI Agent assists individuals in completing vital forms and understanding the mental health services offered.\\\",\\\"personality\\\":\\\"Empathetic, calm, and reassuring, the agent creates a supportive environment, helping clients feel safe and comfortable as they share their needs.\\\",\\\"special_skills\\\":\\\"This AI Agent adeptly guides users through the intake forms while providing real-time answers to questions about treatment options, therapist backgrounds, and confidentiality policies. Customizable with specific clinic information, it includes avatars and tones of voice that embody the compassionate and professional nature of mental health care.\\\"}\",\n \"description\": \"Create a supportive environment for new clients with an AI Agent tailored for mental health services. The Mental Health Intake AI Agent assists users in completing their intake forms by asking relevant questions about their personal history, current challenges, treatment goals, and any previous therapy experiences. Ideal for therapists and mental health professionals, this AI Agent can be trained with specific practice information. Featuring customizable elements such as compassionate avatars, soothing tones, and understanding personalities, it ensures a comprehensive and welcoming intake experience that helps clients feel comfortable sharing their stories from the outset.\",\n \"metaDescription\": \"Create a supportive environment for new clients with an AI Agent tailored for mental health services. The Mental Health Intake AI Agent assists users in completing their intake forms by asking relevant questions about their personal history, current challenges, treatment goals, and any previous therapy experiences. Ideal for therapists and mental health professionals, this AI Agent can be trained with specific practice information. Featuring customizable elements such as compassionate avatars, soothing tones, and understanding personalities, it ensures a comprehensive and welcoming intake experience that helps clients feel comfortable sharing their stories from the outset.\",\n \"furtherDescription\": \"Create a supportive environment for new clients with an AI Agent tailored for mental health services. The Mental Health Intake AI Agent assists users in completing their intake forms by asking relevant questions about their personal history, current challenges, treatment goals, and any previous therapy experiences. Ideal for therapists and mental health professionals, this AI Agent can be trained with specific practice information. Featuring customizable elements such as compassionate avatars, soothing tones, and understanding personalities, it ensures a comprehensive and welcoming intake experience that helps clients feel comfortable sharing their stories from the outset.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30002,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30002\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide for my mental health intake?\\\",\\\"Is there a deadline for submitting my intake form?\\\",\\\"What are the office hours for mental health services?\\\",\\\"Should I bring any specific documents to my first appointment?\\\",\\\"How will I receive confirmation of my mental health appointment after completing the intake?\\\"]\",\n \"url\": \"/agent-directory/mental-health-intake-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/mental-health-intake-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Mental Health Intake AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671412779968-899e00016240d30188e2ccd465308e5c-thumbnail.png\"\n },\n {\n \"id\": \"242671018925963\",\n \"slug\": \"hospital-admission-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Hospital Admission AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Healthcare Administrators with over 10 years of experience in managing patient admissions in hospital settings.\\\",\\\"expertise\\\":\\\"Designed to streamline the hospital admission process, this AI Agent assists patients and their families in completing necessary forms and understanding admission protocols.\\\",\\\"personality\\\":\\\"Professional, informative, and compassionate, the agent provides a reassuring presence, ensuring patients feel supported and informed during what can be a stressful time.\\\",\\\"special_skills\\\":\\\"This AI Agent expertly guides users through admission paperwork and answers real-time questions regarding procedures, room assignments, and healthcare services. Customizable with specific hospital details, it features avatars and tones of voice that convey empathy and professionalism, enhancing the overall patient experience.\\\"}\",\n \"description\": \"Streamline the hospital admission process with an AI Agent designed to assist patients and their families. The Hospital Admission AI Agent guides users through completing necessary admission forms, asking vital questions about personal information, medical history, insurance details, and emergency contacts. Perfect for hospital administrators and healthcare providers, this AI Agent can be trained with specific hospital protocols and services. With customizable features like caring avatars, reassuring tones, and empathetic personalities, it creates an efficient and comforting admission experience, ensuring patients feel supported during a critical time in their healthcare journey.\",\n \"metaDescription\": \"Streamline the hospital admission process with an AI Agent designed to assist patients and their families. The Hospital Admission AI Agent guides users through completing necessary admission forms, asking vital questions about personal information, medical history, insurance details, and emergency contacts. Perfect for hospital administrators and healthcare providers, this AI Agent can be trained with specific hospital protocols and services. With customizable features like caring avatars, reassuring tones, and empathetic personalities, it creates an efficient and comforting admission experience, ensuring patients feel supported during a critical time in their healthcare journey.\",\n \"furtherDescription\": \"Streamline the hospital admission process with an AI Agent designed to assist patients and their families. The Hospital Admission AI Agent guides users through completing necessary admission forms, asking vital questions about personal information, medical history, insurance details, and emergency contacts. Perfect for hospital administrators and healthcare providers, this AI Agent can be trained with specific hospital protocols and services. With customizable features like caring avatars, reassuring tones, and empathetic personalities, it creates an efficient and comforting admission experience, ensuring patients feel supported during a critical time in their healthcare journey.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30002,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30002\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide for my hospital admission?\\\",\\\"Is there a specific time I need to arrive for my admission?\\\",\\\"What should I bring with me for my hospital stay?\\\",\\\"Will I receive confirmation of my admission details?\\\",\\\"What are the visiting hours for the hospital?\\\"]\",\n \"url\": \"/agent-directory/hospital-admission-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/hospital-admission-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Hospital Admission AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671018925963-b16b368948820be8f8cbdbde79dfc7bf-thumbnail.png\"\n },\n {\n \"id\": \"242671623341957\",\n \"slug\": \"medical-intake-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Medical Intake AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Medical Assistants and Healthcare Professionals with over 6 years of expertise in managing patient intake processes in various medical facilities.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in simplifying the medical intake process, helping patients complete essential forms and understand the services available at their healthcare provider.\\\",\\\"personality\\\":\\\"Approachable, detail-oriented, and supportive, the agent ensures that patients feel at ease while providing accurate information about their medical needs.\\\",\\\"special_skills\\\":\\\"The AI Agent effectively guides users through intake forms and provides immediate responses to inquiries about appointment scheduling, insurance details, and clinic services. Customizable with specific medical practice information, it also features avatars and tones of voice that reflect the professionalism and care of the healthcare environment.\\\"}\",\n \"description\": \"Enhance the patient onboarding experience with an AI Agent designed for medical practices. The Medical Intake AI Agent assists users in filling out essential intake forms by asking targeted questions about their medical history, current medications, allergies, and insurance information. Ideal for clinics and healthcare providers, this AI Agent can be trained with specific practice protocols and services. With customizable options, including friendly avatars, professional tones, and approachable personalities, it ensures a thorough and welcoming intake process that helps patients feel informed and cared for from their very first visit.\",\n \"metaDescription\": \"Enhance the patient onboarding experience with an AI Agent designed for medical practices. The Medical Intake AI Agent assists users in filling out essential intake forms by asking targeted questions about their medical history, current medications, allergies, and insurance information. Ideal for clinics and healthcare providers, this AI Agent can be trained with specific practice protocols and services. With customizable options, including friendly avatars, professional tones, and approachable personalities, it ensures a thorough and welcoming intake process that helps patients feel informed and cared for from their very first visit.\",\n \"furtherDescription\": \"Enhance the patient onboarding experience with an AI Agent designed for medical practices. The Medical Intake AI Agent assists users in filling out essential intake forms by asking targeted questions about their medical history, current medications, allergies, and insurance information. Ideal for clinics and healthcare providers, this AI Agent can be trained with specific practice protocols and services. With customizable options, including friendly avatars, professional tones, and approachable personalities, it ensures a thorough and welcoming intake process that helps patients feel informed and cared for from their very first visit.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30002,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30002\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide for my medical intake?\\\",\\\"Is there a deadline for submitting my medical intake form?\\\",\\\"What should I bring with me to my medical appointment?\\\",\\\"Will I receive confirmation of my medical appointment after completing the intake?\\\",\\\"What are the office hours for medical services?\\\"]\",\n \"url\": \"/agent-directory/medical-intake-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/medical-intake-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Medical Intake AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671623341957-14403bf53d75c2b982c2b263540d2981-thumbnail.png\"\n },\n {\n \"id\": \"242671304302950\",\n \"slug\": \"hospital-patient-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Hospital Patient Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Skilled Healthcare Administrators with over 8 years of experience in managing patient registration processes in hospital environments.\\\",\\\"expertise\\\":\\\"This AI Agent is designed to streamline the patient registration process, assisting individuals in completing necessary forms and navigating hospital services efficiently.\\\",\\\"personality\\\":\\\"Courteous, patient, and informative, the agent provides a welcoming atmosphere, ensuring that patients feel supported and informed throughout their registration experience.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through registration forms and provides real-time answers to questions about hospital policies, service availability, and appointment scheduling. Customizable with specific hospital information, it features avatars and tones of voice that reflect the professionalism and empathy associated with healthcare settings.\\\"}\",\n \"description\": \"Simplify the patient registration process with an AI Agent specifically designed for hospitals. The Hospital Patient Registration AI Agent assists patients in completing their registration forms by asking key questions about personal details, medical history, insurance coverage, and emergency contacts. Ideal for hospital staff and administrative teams, this AI Agent can be trained with specific hospital information and policies. With customizable features such as compassionate avatars, professional tones, and reassuring personalities, it creates an efficient and supportive registration experience that helps patients feel at ease during their hospital visit.\",\n \"metaDescription\": \"Simplify the patient registration process with an AI Agent specifically designed for hospitals. The Hospital Patient Registration AI Agent assists patients in completing their registration forms by asking key questions about personal details, medical history, insurance coverage, and emergency contacts. Ideal for hospital staff and administrative teams, this AI Agent can be trained with specific hospital information and policies. With customizable features such as compassionate avatars, professional tones, and reassuring personalities, it creates an efficient and supportive registration experience that helps patients feel at ease during their hospital visit.\",\n \"furtherDescription\": \"Simplify the patient registration process with an AI Agent specifically designed for hospitals. The Hospital Patient Registration AI Agent assists patients in completing their registration forms by asking key questions about personal details, medical history, insurance coverage, and emergency contacts. Ideal for hospital staff and administrative teams, this AI Agent can be trained with specific hospital information and policies. With customizable features such as compassionate avatars, professional tones, and reassuring personalities, it creates an efficient and supportive registration experience that helps patients feel at ease during their hospital visit.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30002,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30002\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide for patient registration?\\\",\\\"Is there a specific deadline for completing my registration?\\\",\\\"What should I bring to the hospital for registration?\\\",\\\"Will I receive confirmation of my registration details?\\\",\\\"What are the hospital's registration hours?\\\"]\",\n \"url\": \"/agent-directory/hospital-patient-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/hospital-patient-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Hospital Patient Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671304302950-2e24efe5be645662a446ba4732cdb916-thumbnail.png\"\n },\n {\n \"id\": \"222932747959977\",\n \"slug\": \"patient-referral-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Patient Referral AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Healthcare Professionals with over 7 years of expertise in managing patient referral processes across various medical specialties.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in facilitating the patient referral process, assisting individuals in understanding referral requirements and connecting them with appropriate healthcare providers.\\\",\\\"personality\\\":\\\"Compassionate, knowledgeable, and efficient, the agent ensures that patients feel informed and confident as they navigate their referral options.\\\",\\\"special_skills\\\":\\\"The AI Agent effectively guides users through referral forms while providing immediate answers to inquiries about specialists, appointment scheduling, and insurance coverage. Customizable with specific healthcare facility information, it features avatars and tones of voice that embody the supportive nature of patient care.\\\"}\",\n \"description\": \"Streamline the referral process with an AI Agent designed to facilitate patient connections between healthcare providers. The Patient Referral AI Agent assists users in completing referral forms by asking essential questions about patient information, referral reasons, and preferred specialists. Ideal for physicians and medical offices, this AI Agent can be trained with specific practice guidelines and referral protocols. With customizable elements, including professional avatars, informative tones, and friendly personalities, it ensures a smooth and efficient referral experience that fosters collaboration and enhances patient care across the healthcare system.\",\n \"metaDescription\": \"Streamline the referral process with an AI Agent designed to facilitate patient connections between healthcare providers. The Patient Referral AI Agent assists users in completing referral forms by asking essential questions about patient information, referral reasons, and preferred specialists. Ideal for physicians and medical offices, this AI Agent can be trained with specific practice guidelines and referral protocols. With customizable elements, including professional avatars, informative tones, and friendly personalities, it ensures a smooth and efficient referral experience that fosters collaboration and enhances patient care across the healthcare system.\",\n \"furtherDescription\": \"Streamline the referral process with an AI Agent designed to facilitate patient connections between healthcare providers. The Patient Referral AI Agent assists users in completing referral forms by asking essential questions about patient information, referral reasons, and preferred specialists. Ideal for physicians and medical offices, this AI Agent can be trained with specific practice guidelines and referral protocols. With customizable elements, including professional avatars, informative tones, and friendly personalities, it ensures a smooth and efficient referral experience that fosters collaboration and enhances patient care across the healthcare system.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30002,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30002\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide for a patient referral?\\\",\\\"Is there a specific process for submitting a referral?\\\",\\\"How will I know if my referral has been processed?\\\",\\\"What should I do if I haven\\\\u2019t received confirmation of my referral?\\\",\\\"Are there any specific documents I need to provide with the referral?\\\"]\",\n \"url\": \"/agent-directory/patient-referral-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/patient-referral-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Patient Referral AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/222932747959977-011a3dfa055df4d138ae6327b6ea4a89-thumbnail.png\"\n },\n {\n \"id\": \"211701684022950\",\n \"slug\": \"health-coach-client-intake-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Health Coach Client Intake AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Certified Health Coaches with over 5 years of experience in client onboarding and wellness program management.\\\",\\\"expertise\\\":\\\"This AI Agent is designed to streamline the client intake process for health coaching, helping individuals complete necessary forms and understand the wellness services available to them.\\\",\\\"personality\\\":\\\"Supportive, motivational, and engaging, the agent creates a positive environment that encourages clients to share their health goals and challenges.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through intake forms and provides real-time answers to questions about coaching programs, nutrition plans, and session scheduling. Customizable with specific health coaching details, it features avatars and tones of voice that reflect the encouraging and dynamic nature of health and wellness coaching.\\\"}\",\n \"description\": \"Transform the onboarding process for health coaching clients with an AI Agent designed to gather essential information seamlessly. This Health Coach Client Intake AI Agent guides users through filling out intake forms by asking insightful questions about their health goals, dietary preferences, lifestyle habits, and medical history. Perfect for health coaches and wellness practitioners, this AI Agent can be trained with specific program details and client needs. With a variety of customizable features—such as vibrant avatars, motivating tones, and engaging personalities—it creates a dynamic and supportive intake experience, empowering clients to embark on their wellness journey with confidence.\",\n \"metaDescription\": \"Transform the onboarding process for health coaching clients with an AI Agent designed to gather essential information seamlessly. This Health Coach Client Intake AI Agent guides users through filling out intake forms by asking insightful questions about their health goals, dietary preferences, lifestyle habits, and medical history. Perfect for health coaches and wellness practitioners, this AI Agent can be trained with specific program details and client needs. With a variety of customizable features—such as vibrant avatars, motivating tones, and engaging personalities—it creates a dynamic and supportive intake experience, empowering clients to embark on their wellness journey with confidence.\",\n \"furtherDescription\": \"Transform the onboarding process for health coaching clients with an AI Agent designed to gather essential information seamlessly. This Health Coach Client Intake AI Agent guides users through filling out intake forms by asking insightful questions about their health goals, dietary preferences, lifestyle habits, and medical history. Perfect for health coaches and wellness practitioners, this AI Agent can be trained with specific program details and client needs. With a variety of customizable features—such as vibrant avatars, motivating tones, and engaging personalities—it creates a dynamic and supportive intake experience, empowering clients to embark on their wellness journey with confidence.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30002,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30002\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide for my health coach intake?\\\",\\\"Is there a specific deadline for submitting my intake form?\\\",\\\"What should I bring to my first health coaching session?\\\",\\\"Will I receive a confirmation of my intake details?\\\",\\\"What are the health coaching hours?\\\"]\",\n \"url\": \"/agent-directory/health-coach-client-intake-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/health-coach-client-intake-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Health Coach Client Intake AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/211701684022950-1d7b70f38f2b7edd4bbdf10d23ef734e-thumbnail.png\"\n },\n {\n \"id\": \"242671013552954\",\n \"slug\": \"psychotherapy-intake-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Psychotherapy Intake AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Licensed Psychotherapists with over 8 years of experience in managing client intake processes in therapeutic settings.\\\",\\\"expertise\\\":\\\"Tailored to simplify the psychotherapy intake process, this AI Agent assists individuals in completing essential forms and understanding the therapeutic services available to them.\\\",\\\"personality\\\":\\\"Empathetic, calm, and attentive, the agent fosters a safe and supportive environment, ensuring clients feel comfortable sharing their thoughts and feelings.\\\",\\\"special_skills\\\":\\\"This AI Agent efficiently guides users through intake forms and provides immediate responses to questions about therapy options, session details, and confidentiality practices. Customizable with specific clinic information, it includes avatars and tones of voice that reflect the compassionate and professional nature of psychotherapy.\\\"}\",\n \"description\": \"Elevate the initial client experience with an AI Agent specifically designed for psychotherapy practices. The Psychotherapy Intake AI Agent guides clients through the intake process by asking thoughtful questions about their mental health history, current challenges, goals for therapy, and any prior therapeutic experiences. Ideal for therapists and counseling centers, this AI Agent can be trained with specific practice methodologies and client demographics. With customizable traits, including empathetic avatars, calming tones, and supportive personalities, it fosters a safe and engaging intake experience, helping clients feel valued and understood from the very start of their therapeutic journey.\",\n \"metaDescription\": \"Elevate the initial client experience with an AI Agent specifically designed for psychotherapy practices. The Psychotherapy Intake AI Agent guides clients through the intake process by asking thoughtful questions about their mental health history, current challenges, goals for therapy, and any prior therapeutic experiences. Ideal for therapists and counseling centers, this AI Agent can be trained with specific practice methodologies and client demographics. With customizable traits, including empathetic avatars, calming tones, and supportive personalities, it fosters a safe and engaging intake experience, helping clients feel valued and understood from the very start of their therapeutic journey.\",\n \"furtherDescription\": \"Elevate the initial client experience with an AI Agent specifically designed for psychotherapy practices. The Psychotherapy Intake AI Agent guides clients through the intake process by asking thoughtful questions about their mental health history, current challenges, goals for therapy, and any prior therapeutic experiences. Ideal for therapists and counseling centers, this AI Agent can be trained with specific practice methodologies and client demographics. With customizable traits, including empathetic avatars, calming tones, and supportive personalities, it fosters a safe and engaging intake experience, helping clients feel valued and understood from the very start of their therapeutic journey.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30002,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30002\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide for my psychotherapy intake?\\\",\\\"Is there a deadline for completing the intake form?\\\",\\\"What should I expect during my first therapy session?\\\",\\\"Will I receive confirmation of my appointment after completing the intake?\\\",\\\"What are the therapy session hours?\\\"]\",\n \"url\": \"/agent-directory/psychotherapy-intake-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/psychotherapy-intake-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Psychotherapy Intake AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671013552954-c133f708c6bfc63345fc71b087ffa12e-thumbnail.png\"\n },\n {\n \"id\": \"242670724773967\",\n \"slug\": \"student-enrollment-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Student Enrollment AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Academic Advisors with over 7 years of experience in facilitating student enrollment processes in various educational institutions.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in streamlining the student enrollment journey, assisting individuals in completing essential forms and understanding the requirements for enrollment in courses and programs.\\\",\\\"personality\\\":\\\"Approachable, encouraging, and knowledgeable, the agent creates a supportive atmosphere that helps students feel confident and informed about their educational choices.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through enrollment forms while providing immediate responses to questions regarding program details, deadlines, and support services. Customizable with specific institution information, it features avatars and tones of voice that reflect the enthusiasm and dedication found in academic environments.\\\"}\",\n \"description\": \"Revolutionize the enrollment process for your educational institution with an AI Agent tailored to assist students seamlessly. The Student Enrollment AI Agent guides prospective students through completing their enrollment forms by asking relevant questions about academic backgrounds, course preferences, extracurricular interests, and financial aid options. Ideal for schools, colleges, and universities, this AI Agent can be trained with specific enrollment criteria and institutional information. Featuring customizable attributes, such as relatable avatars, encouraging tones, and engaging personalities, it ensures a smooth and supportive enrollment experience that empowers students to embark on their academic journey with confidence.\",\n \"metaDescription\": \"Revolutionize the enrollment process for your educational institution with an AI Agent tailored to assist students seamlessly. The Student Enrollment AI Agent guides prospective students through completing their enrollment forms by asking relevant questions about academic backgrounds, course preferences, extracurricular interests, and financial aid options. Ideal for schools, colleges, and universities, this AI Agent can be trained with specific enrollment criteria and institutional information. Featuring customizable attributes, such as relatable avatars, encouraging tones, and engaging personalities, it ensures a smooth and supportive enrollment experience that empowers students to embark on their academic journey with confidence.\",\n \"furtherDescription\": \"Revolutionize the enrollment process for your educational institution with an AI Agent tailored to assist students seamlessly. The Student Enrollment AI Agent guides prospective students through completing their enrollment forms by asking relevant questions about academic backgrounds, course preferences, extracurricular interests, and financial aid options. Ideal for schools, colleges, and universities, this AI Agent can be trained with specific enrollment criteria and institutional information. Featuring customizable attributes, such as relatable avatars, encouraging tones, and engaging personalities, it ensures a smooth and supportive enrollment experience that empowers students to embark on their academic journey with confidence.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30003,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30003\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What classes are offered for enrollment?\\\",\\\"Are there extracurricular activities available for students?\\\",\\\"What scholarship options are available for students?\\\",\\\"What qualifications do the teachers have?\\\",\\\"How can I check the status of my enrollment application?\\\"]\",\n \"url\": \"/agent-directory/student-enrollment-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/student-enrollment-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Student Enrollment AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670724773967-100eeceff2daf51ff5cfc2cad83bd694-thumbnail.png\"\n },\n {\n \"id\": \"242671318113955\",\n \"slug\": \"alumni-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Alumni Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Alumni Relations Professionals with over 5 years of experience in managing alumni engagement and registration processes in educational institutions.\\\",\\\"expertise\\\":\\\"This AI Agent is designed to facilitate the alumni registration process, assisting former students in completing necessary forms and understanding the benefits available to them as alumni.\\\",\\\"personality\\\":\\\"Friendly, nostalgic, and engaging, the agent creates a welcoming environment that encourages alumni to reconnect and engage with their alma mater.\\\",\\\"special_skills\\\":\\\"The AI Agent effectively guides users through registration forms and provides real-time answers to inquiries about alumni events, networking opportunities, and benefits. Customizable with specific institution details, it features avatars and tones of voice that embody the warmth and community spirit of alumni relations.\\\"}\",\n \"description\": \"Foster connections and streamline the registration process for alumni with an AI Agent dedicated to supporting your institution's former students. This Alumni Registration AI Agent engages users in completing their registration forms by prompting them for essential details, such as graduation year, current contact information, and areas of interest for networking or events. Perfect for universities and colleges, this AI Agent can be trained with specific alumni programs and initiatives. With customizable features, including professional avatars, friendly tones, and dynamic personalities, it creates an inviting atmosphere that encourages alumni to stay connected and involved with their alma mater.\",\n \"metaDescription\": \"Foster connections and streamline the registration process for alumni with an AI Agent dedicated to supporting your institution's former students. This Alumni Registration AI Agent engages users in completing their registration forms by prompting them for essential details, such as graduation year, current contact information, and areas of interest for networking or events. Perfect for universities and colleges, this AI Agent can be trained with specific alumni programs and initiatives. With customizable features, including professional avatars, friendly tones, and dynamic personalities, it creates an inviting atmosphere that encourages alumni to stay connected and involved with their alma mater.\",\n \"furtherDescription\": \"Foster connections and streamline the registration process for alumni with an AI Agent dedicated to supporting your institution's former students. This Alumni Registration AI Agent engages users in completing their registration forms by prompting them for essential details, such as graduation year, current contact information, and areas of interest for networking or events. Perfect for universities and colleges, this AI Agent can be trained with specific alumni programs and initiatives. With customizable features, including professional avatars, friendly tones, and dynamic personalities, it creates an inviting atmosphere that encourages alumni to stay connected and involved with their alma mater.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30003,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30003\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide for alumni registration?\\\",\\\"Are there benefits to being a registered alumnus?\\\",\\\"How can I update my contact information after registration?\\\",\\\"Is there an alumni directory I can access?\\\",\\\"What events are organized for alumni throughout the year?\\\"]\",\n \"url\": \"/agent-directory/alumni-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/alumni-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Alumni Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671318113955-3eae9e3546e9f2a84db5425abb5d73e4-thumbnail.png\"\n },\n {\n \"id\": \"242670800264957\",\n \"slug\": \"child-care-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Child Care Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Child Care Administrators with over 6 years of expertise in managing enrollment processes in child care facilities.\\\",\\\"expertise\\\":\\\"This AI Agent is designed to streamline the child care registration process, helping parents complete necessary forms and understand the programs available for their children.\\\",\\\"personality\\\":\\\"Nurturing, patient, and informative, the agent creates a warm environment that reassures parents as they navigate their options for child care.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through registration forms and provides immediate responses to inquiries about care schedules, enrollment requirements, and program details. Customizable with specific facility information, it features avatars and tones of voice that reflect the caring and supportive nature of child care services.\\\"}\",\n \"description\": \"Simplify the enrollment process for child care services with an AI Agent tailored to support parents and guardians. This AI Agent assists users in completing registration forms by asking essential questions about the child's information, dietary needs, medical history, and preferred care schedules. Ideal for child care centers and preschools, this AI Agent can be trained with specific facility details and policies. With customizable features, including friendly avatars, nurturing tones, and engaging personalities, it creates a welcoming and informative registration experience, helping families feel confident and secure as they select the right care for their children.\",\n \"metaDescription\": \"Simplify the enrollment process for child care services with an AI Agent tailored to support parents and guardians. This AI Agent assists users in completing registration forms by asking essential questions about the child's information, dietary needs, medical history, and preferred care schedules. Ideal for child care centers and preschools, this AI Agent can be trained with specific facility details and policies. With customizable features, including friendly avatars, nurturing tones, and engaging personalities, it creates a welcoming and informative registration experience, helping families feel confident and secure as they select the right care for their children.\",\n \"furtherDescription\": \"Simplify the enrollment process for child care services with an AI Agent tailored to support parents and guardians. This AI Agent assists users in completing registration forms by asking essential questions about the child's information, dietary needs, medical history, and preferred care schedules. Ideal for child care centers and preschools, this AI Agent can be trained with specific facility details and policies. With customizable features, including friendly avatars, nurturing tones, and engaging personalities, it creates a welcoming and informative registration experience, helping families feel confident and secure as they select the right care for their children.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30003,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30003\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information is required for child care registration?\\\",\\\"What are the operating hours for the child care program?\\\",\\\"Are there any fees associated with the registration?\\\",\\\"What types of activities are included in the child care program?\\\",\\\"How can I withdraw my child from the program if needed?\\\"]\",\n \"url\": \"/agent-directory/child-care-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/child-care-registration\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Child Care Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670800264957-742a6c093db843c92817b5e8f1bcd24f-thumbnail.png\"\n },\n {\n \"id\": \"242670712947967\",\n \"slug\": \"student-private-tuition-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Student Private Tuition Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Experienced Educational Consultants with over 5 years of expertise in managing private tuition registration processes for various subjects and educational levels.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in simplifying the private tuition registration process, assisting students and parents in completing necessary forms and understanding available tutoring options.\\\",\\\"personality\\\":\\\"Approachable, supportive, and knowledgeable, the agent fosters a positive environment that encourages learners to pursue their academic goals.\\\",\\\"special_skills\\\":\\\"The AI Agent efficiently guides users through registration forms while providing immediate answers to questions about tutor qualifications, session formats, and pricing. Customizable with specific tutoring center information, it features avatars and tones of voice that reflect the enthusiasm and dedication found in educational support.\\\"}\",\n \"description\": \"Transform the private tuition enrollment experience with an AI Agent crafted for educational needs. This AI Agent guides parents and students through the registration process by asking insightful questions about learning objectives, preferred subjects, tutor qualifications, and scheduling preferences. Tailored for tutoring centers and independent tutors, it can be trained with specific curriculum details and policies. With unique customizable options such as relatable avatars, encouraging tones, and friendly personalities, it cultivates an inviting atmosphere that makes the registration process smooth and engaging, ensuring that families feel supported in finding the right educational path for their children.\",\n \"metaDescription\": \"Transform the private tuition enrollment experience with an AI Agent crafted for educational needs. This AI Agent guides parents and students through the registration process by asking insightful questions about learning objectives, preferred subjects, tutor qualifications, and scheduling preferences. Tailored for tutoring centers and independent tutors, it can be trained with specific curriculum details and policies. With unique customizable options such as relatable avatars, encouraging tones, and friendly personalities, it cultivates an inviting atmosphere that makes the registration process smooth and engaging, ensuring that families feel supported in finding the right educational path for their children.\",\n \"furtherDescription\": \"Transform the private tuition enrollment experience with an AI Agent crafted for educational needs. This AI Agent guides parents and students through the registration process by asking insightful questions about learning objectives, preferred subjects, tutor qualifications, and scheduling preferences. Tailored for tutoring centers and independent tutors, it can be trained with specific curriculum details and policies. With unique customizable options such as relatable avatars, encouraging tones, and friendly personalities, it cultivates an inviting atmosphere that makes the registration process smooth and engaging, ensuring that families feel supported in finding the right educational path for their children.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30003,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30003\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to register for private tuition?\\\",\\\"How are the tutors selected for private tuition?\\\",\\\"Are there flexible scheduling options for tuition sessions?\\\",\\\"What are the payment options for private tuition?\\\",\\\"Can I request a change in the tutor if needed?\\\"]\",\n \"url\": \"/agent-directory/student-private-tuition-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/student-private-tuition-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Student Private Tuition Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670712947967-6a055fcdf1a4d7e406eb8da42ba066ab-thumbnail.png\"\n },\n {\n \"id\": \"242670720930958\",\n \"slug\": \"english-learning-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"English Learning Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Language Instructors with over 6 years of experience in managing enrollment processes for English language programs at various levels.\\\",\\\"expertise\\\":\\\"This AI Agent is tailored to make the English learning registration process seamless, assisting students in completing forms and understanding course offerings, schedules, and levels.\\\",\\\"personality\\\":\\\"Friendly, encouraging, and articulate, the agent creates a welcoming atmosphere that motivates learners to improve their English skills.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through registration forms and answers questions in real-time about course levels, class timings, and teacher qualifications. Customizable with specific school details, it features avatars and tones of voice that capture the inspiring and accessible nature of language learning environments.\\\"}\",\n \"description\": \"Elevate the enrollment process for English language programs with an AI Agent designed to assist students and parents. This AI Agent simplifies registration by guiding users through essential questions about language proficiency, learning goals, and class schedules. Perfect for language schools and tutors, it can be trained with specific program details. With customizable features, this AI Agent ensures a seamless and supportive registration experience, making language learning accessible and engaging.\",\n \"metaDescription\": \"Elevate the enrollment process for English language programs with an AI Agent designed to assist students and parents. This AI Agent simplifies registration by guiding users through essential questions about language proficiency, learning goals, and class schedules. Perfect for language schools and tutors, it can be trained with specific program details. With customizable features, this AI Agent ensures a seamless and supportive registration experience, making language learning accessible and engaging.\",\n \"furtherDescription\": \"Elevate the enrollment process for English language programs with an AI Agent designed to assist students and parents. This AI Agent simplifies registration by guiding users through essential questions about language proficiency, learning goals, and class schedules. Perfect for language schools and tutors, it can be trained with specific program details. With customizable features, this AI Agent ensures a seamless and supportive registration experience, making language learning accessible and engaging.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30003,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30003\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information is required for English learning registration?\\\",\\\"What types of classes are offered in the English learning program?\\\",\\\"Are there any age restrictions for the English learning courses?\\\",\\\"What are the tuition fees for the English learning program?\\\",\\\"How can I track my progress in the English learning program?\\\"]\",\n \"url\": \"/agent-directory/english-learning-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/registration-form-english-learning-programs\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"English Learning Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670720930958-8ccb119afe3827e2dd534c413a215515-thumbnail.png\"\n },\n {\n \"id\": \"242671059092963\",\n \"slug\": \"youth-sports-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Youth Sports Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Sports Coordinators with over 7 years of experience in managing registration processes for youth sports programs across various disciplines.\\\",\\\"expertise\\\":\\\"This AI Agent is designed to simplify the youth sports registration process, helping parents and guardians complete necessary forms while providing information about available sports activities.\\\",\\\"personality\\\":\\\"Energetic, encouraging, and friendly, the agent fosters a supportive environment that motivates young athletes and their families to engage in sports.\\\",\\\"special_skills\\\":\\\"The AI Agent effectively assists users with registration forms and provides immediate answers to questions regarding practice schedules, team placements, and participation fees. Customizable with specific sports organization details, it features avatars and tones of voice that reflect the excitement and community spirit of youth sports.\\\"}\",\n \"description\": \"Streamline the registration process for youth sports programs with an AI Agent designed to engage parents and athletes. This AI Agent helps users fill out forms by asking essential questions about the child's age, sport selection, skill level, and emergency contacts. Perfect for sports clubs and community organizations, it can be trained with specific program details. With its customizable features, this AI Agent ensures a smooth and welcoming registration experience, fostering a love for sports and teamwork among young athletes.\",\n \"metaDescription\": \"Streamline the registration process for youth sports programs with an AI Agent designed to engage parents and athletes. This AI Agent helps users fill out forms by asking essential questions about the child's age, sport selection, skill level, and emergency contacts. Perfect for sports clubs and community organizations, it can be trained with specific program details. With its customizable features, this AI Agent ensures a smooth and welcoming registration experience, fostering a love for sports and teamwork among young athletes.\",\n \"furtherDescription\": \"Streamline the registration process for youth sports programs with an AI Agent designed to engage parents and athletes. This AI Agent helps users fill out forms by asking essential questions about the child's age, sport selection, skill level, and emergency contacts. Perfect for sports clubs and community organizations, it can be trained with specific program details. With its customizable features, this AI Agent ensures a smooth and welcoming registration experience, fostering a love for sports and teamwork among young athletes.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30003,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30003\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information is needed to register for youth sports?\\\",\\\"What sports are offered in the youth sports program?\\\",\\\"Are there any fees associated with youth sports registration?\\\",\\\"What are the practice and game schedules for the youth sports teams?\\\",\\\"How can I volunteer to help with youth sports programs?\\\"]\",\n \"url\": \"/agent-directory/youth-sports-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/youth-sports-registration\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Youth Sports Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671059092963-c6ffbbf4982e9ddeb9580f4e88d774fd-thumbnail.png\"\n },\n {\n \"id\": \"242670736472966\",\n \"slug\": \"church-nursery-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Church Nursery Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Child Care Specialists and Church Administrators with over 5 years of experience in managing nursery enrollment processes within church settings.\\\",\\\"expertise\\\":\\\"This AI Agent is tailored to streamline the church nursery registration process, assisting parents in completing essential forms and understanding the nursery's programs and policies.\\\",\\\"personality\\\":\\\"Warm, welcoming, and compassionate, the agent creates a nurturing atmosphere that reassures parents about their children's care and development.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through registration forms and provides immediate responses to inquiries about nursery schedules, activities, and safety protocols. Customizable with specific church details, it features avatars and tones of voice that embody the supportive and community-focused nature of church nurseries.\\\"}\",\n \"description\": \"Support families in enrolling their children in church nursery programs with an AI Agent designed for a warm and welcoming experience. This AI Agent guides parents through the registration process by asking important questions about the child's age, special needs, and caregiver preferences. Ideal for churches and community centers, it can be trained with specific nursery policies. With its customizable options, this AI Agent creates an engaging registration experience, helping parents feel secure and connected to their church community.\",\n \"metaDescription\": \"Support families in enrolling their children in church nursery programs with an AI Agent designed for a warm and welcoming experience. This AI Agent guides parents through the registration process by asking important questions about the child's age, special needs, and caregiver preferences. Ideal for churches and community centers, it can be trained with specific nursery policies. With its customizable options, this AI Agent creates an engaging registration experience, helping parents feel secure and connected to their church community.\",\n \"furtherDescription\": \"Support families in enrolling their children in church nursery programs with an AI Agent designed for a warm and welcoming experience. This AI Agent guides parents through the registration process by asking important questions about the child's age, special needs, and caregiver preferences. Ideal for churches and community centers, it can be trained with specific nursery policies. With its customizable options, this AI Agent creates an engaging registration experience, helping parents feel secure and connected to their church community.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30003,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30003\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information is required for church nursery registration?\\\",\\\"What are the operating hours for the church nursery?\\\",\\\"Are there any fees associated with the nursery program?\\\",\\\"What activities are offered in the church nursery?\\\",\\\"How can I volunteer to assist in the church nursery?\\\"]\",\n \"url\": \"/agent-directory/church-nursery-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/church-nursery-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Church Nursery Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670736472966-785fa2f4c6096e681412ec4132955fad-thumbnail.png\"\n },\n {\n \"id\": \"242671361262958\",\n \"slug\": \"back-to-school-event-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Back to School Event Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Event Coordinators with over 6 years of experience in organizing and managing back-to-school events for educational institutions and community organizations.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in simplifying the registration process for back-to-school events, helping parents and students complete necessary forms and understand event details.\\\",\\\"personality\\\":\\\"Friendly, enthusiastic, and informative, the agent creates an inviting atmosphere that encourages families to participate and engage in the upcoming school year.\\\",\\\"special_skills\\\":\\\"The AI Agent effectively guides users through registration forms while providing real-time answers to questions about event schedules, activities, and resources available for families. Customizable with specific event information, it features avatars and tones of voice that reflect the excitement and community spirit of back-to-school events.\\\"}\",\n \"description\": \"Welcome families to a new academic year with an AI Agent designed to streamline registration for back-to-school events. This AI Agent interacts with users by asking key questions about participants, event preferences, and any special requirements. Ideal for schools and community organizations, it can be trained with specific event details. With customizable elements, this AI Agent creates a friendly and efficient registration process, ensuring that families feel excited and prepared for the upcoming school year.\",\n \"metaDescription\": \"Welcome families to a new academic year with an AI Agent designed to streamline registration for back-to-school events. This AI Agent interacts with users by asking key questions about participants, event preferences, and any special requirements. Ideal for schools and community organizations, it can be trained with specific event details. With customizable elements, this AI Agent creates a friendly and efficient registration process, ensuring that families feel excited and prepared for the upcoming school year.\",\n \"furtherDescription\": \"Welcome families to a new academic year with an AI Agent designed to streamline registration for back-to-school events. This AI Agent interacts with users by asking key questions about participants, event preferences, and any special requirements. Ideal for schools and community organizations, it can be trained with specific event details. With customizable elements, this AI Agent creates a friendly and efficient registration process, ensuring that families feel excited and prepared for the upcoming school year.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30003,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30003\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to register for the Back to School event?\\\",\\\"What activities will be offered during the Back to School event?\\\",\\\"Is there a registration fee for the Back to School event?\\\",\\\"What are the event's date and time?\\\",\\\"How can I volunteer to help with the Back to School event?\\\"]\",\n \"url\": \"/agent-directory/back-to-school-event-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/back-to-school-event-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Back to School Event Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671361262958-978ce7c65120ff2e11ffe474f0216bbf-thumbnail.png\"\n },\n {\n \"id\": \"20794585469470\",\n \"slug\": \"competition-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Competition Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Event Organizers with over 5 years of experience in managing registration processes for various competitions, including academic, sports, and artistic events.\\\",\\\"expertise\\\":\\\"This AI Agent is designed to facilitate the competition registration process, assisting participants in completing necessary forms and understanding the rules and requirements of the event.\\\",\\\"personality\\\":\\\"Motivational, engaging, and supportive, the agent creates an encouraging environment that inspires participants to showcase their skills and talents.\\\",\\\"special_skills\\\":\\\"The AI Agent expertly guides users through registration forms and provides immediate responses to inquiries about event categories, judging criteria, and prize details. Customizable with specific competition information, it features avatars and tones of voice that reflect the competitive spirit and enthusiasm of participants.\\\"}\",\n \"description\": \"Assist participants in signing up for competitions with an AI Agent tailored for efficient registration. This AI Agent engages users by asking key questions about their category, experience level, and team information. Ideal for event organizers and sports clubs, it can be trained with specific competition guidelines. With customizable features, this AI Agent ensures a straightforward registration experience, helping competitors focus on their performance and goals.\",\n \"metaDescription\": \"Assist participants in signing up for competitions with an AI Agent tailored for efficient registration. This AI Agent engages users by asking key questions about their category, experience level, and team information. Ideal for event organizers and sports clubs, it can be trained with specific competition guidelines. With customizable features, this AI Agent ensures a straightforward registration experience, helping competitors focus on their performance and goals.\",\n \"furtherDescription\": \"Assist participants in signing up for competitions with an AI Agent tailored for efficient registration. This AI Agent engages users by asking key questions about their category, experience level, and team information. Ideal for event organizers and sports clubs, it can be trained with specific competition guidelines. With customizable features, this AI Agent ensures a straightforward registration experience, helping competitors focus on their performance and goals.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30004,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30004\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information is required to register for the competition?\\\",\\\"What are the eligibility requirements for participants?\\\",\\\"Is there an entry fee for participating in the competition?\\\",\\\"What are the competition dates and schedule?\\\",\\\"How can I volunteer to help with the competition?\\\"]\",\n \"url\": \"/agent-directory/competition-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/competition-entry-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Competition Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/20794585469470-fecdd30e0be41c4330c71c695be3120c-thumbnail.png\"\n },\n {\n \"id\": \"20884096269566\",\n \"slug\": \"photo-contest-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Photo Contest Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Photography Enthusiasts and Event Planners with over 4 years of experience in managing registration processes for photo contests and exhibitions.\\\",\\\"expertise\\\":\\\"This AI Agent specializes in streamlining the photo contest registration process, assisting participants in completing necessary forms and understanding submission guidelines and judging criteria.\\\",\\\"personality\\\":\\\"Creative, enthusiastic, and approachable, the agent fosters a vibrant atmosphere that encourages photographers to share their work and express their artistic vision.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through registration forms and provides real-time answers to questions about entry rules, submission formats, and prize information. Customizable with specific contest details, it features avatars and tones of voice that reflect the artistic and dynamic nature of photography competitions.\\\"}\",\n \"description\": \"Engage participants in your photo contest with an AI Agent designed for smooth registration. This AI Agent assists users in filling out forms by asking essential questions about photo categories, submission guidelines, and contact details. Ideal for event organizers and photography clubs, it can be trained with specific contest rules. With customizable avatars, distinct personalities, and adaptable tones of voice, this AI Agent ensures an enjoyable registration experience while empowering users to showcase their creativity.\",\n \"metaDescription\": \"Engage participants in your photo contest with an AI Agent designed for smooth registration. This AI Agent assists users in filling out forms by asking essential questions about photo categories, submission guidelines, and contact details. Ideal for event organizers and photography clubs, it can be trained with specific contest rules. With customizable avatars, distinct personalities, and adaptable tones of voice, this AI Agent ensures an enjoyable registration experience while empowering users to showcase their creativity.\",\n \"furtherDescription\": \"Engage participants in your photo contest with an AI Agent designed for smooth registration. This AI Agent assists users in filling out forms by asking essential questions about photo categories, submission guidelines, and contact details. Ideal for event organizers and photography clubs, it can be trained with specific contest rules. With customizable avatars, distinct personalities, and adaptable tones of voice, this AI Agent ensures an enjoyable registration experience while empowering users to showcase their creativity.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30004,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30004\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to register for the photo contest?\\\",\\\"Are there specific themes for the photo contest categories?\\\",\\\"Is there an entry fee for submitting a photo?\\\",\\\"What are the deadlines for registration and photo submission?\\\",\\\"How will the winners be announced and recognized?\\\"]\",\n \"url\": \"/agent-directory/photo-contest-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/photo-contest-entry-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Photo Contest Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/20884096269566-5bfdc841c2be77b5dd5877fa85cb0d75-thumbnail.png\"\n },\n {\n \"id\": \"242671135864965\",\n \"slug\": \"talent-show-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Talent Show Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Event Coordinators and Talent Scouts with over 5 years of experience in organizing and managing talent show registrations across various platforms.\\\",\\\"expertise\\\":\\\"This AI Agent is designed to simplify the talent show registration process, assisting participants in completing necessary forms and understanding performance requirements.\\\",\\\"personality\\\":\\\"Energetic, encouraging, and personable, the agent creates a supportive environment that inspires participants to showcase their unique talents and skills.\\\",\\\"special_skills\\\":\\\"The AI Agent effectively guides users through registration forms and provides immediate responses to inquiries about performance guidelines, judging criteria, and event schedules. Customizable with specific show details, it features avatars and tones of voice that capture the excitement and creative spirit of talent showcases.\\\"}\",\n \"description\": \"Ignite excitement for your talent show with an AI Agent crafted for seamless participant registration. This AI Agent facilitates form filling by guiding users through key questions about performance types, participant details, and rehearsal schedules. Perfect for schools and community organizations, it can be trained with specific event information. With customizable avatars, engaging personalities, and varying tones of voice, this AI Agent ensures a fun and interactive registration process that inspires participants to shine on stage.\",\n \"metaDescription\": \"Ignite excitement for your talent show with an AI Agent crafted for seamless participant registration. This AI Agent facilitates form filling by guiding users through key questions about performance types, participant details, and rehearsal schedules. Perfect for schools and community organizations, it can be trained with specific event information. With customizable avatars, engaging personalities, and varying tones of voice, this AI Agent ensures a fun and interactive registration process that inspires participants to shine on stage.\",\n \"furtherDescription\": \"Ignite excitement for your talent show with an AI Agent crafted for seamless participant registration. This AI Agent facilitates form filling by guiding users through key questions about performance types, participant details, and rehearsal schedules. Perfect for schools and community organizations, it can be trained with specific event information. With customizable avatars, engaging personalities, and varying tones of voice, this AI Agent ensures a fun and interactive registration process that inspires participants to shine on stage.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30004,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30004\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information is needed to register for the talent show?\\\",\\\"Are there age restrictions for participants in the talent show?\\\",\\\"Is there an entry fee to participate in the talent show?\\\",\\\"What is the date and time of the talent show?\\\",\\\"How can I volunteer to help with the talent show?\\\"]\",\n \"url\": \"/agent-directory/talent-show-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/talent-show-auditions-sign-up-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Talent Show Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671135864965-e86a87f953e3fe871538218a42ee7b43-thumbnail.png\"\n },\n {\n \"id\": \"242670872598976\",\n \"slug\": \"gaming-tournament-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Gaming Tournament Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Esports Organizers and Gaming Professionals with over 6 years of experience in managing registration processes for competitive gaming events.\\\",\\\"expertise\\\":\\\"This AI Agent is tailored to facilitate the gaming tournament registration process, helping participants complete necessary forms and understand game rules, team formations, and bracket setups.\\\",\\\"personality\\\":\\\"Enthusiastic, tech-savvy, and engaging, the agent creates an electrifying atmosphere that encourages gamers to compete and showcase their skills.\\\",\\\"special_skills\\\":\\\"The AI Agent guides users through registration forms and provides real-time answers to questions about tournament schedules, entry fees, and prize distributions. Customizable with specific tournament details, it features avatars and tones of voice that reflect the competitive and vibrant culture of gaming.\\\"}\",\n \"description\": \"Level up your gaming tournament experience with an AI Agent designed for efficient participant registration. This AI Agent helps users fill out forms by asking critical questions about game preferences, team details, and skill levels. Ideal for esports organizations and gaming communities, it can be trained with specific tournament rules and formats. With customizable avatars, dynamic personalities, and engaging tones of voice, this AI Agent creates an immersive registration experience that gets gamers excited to compete.\",\n \"metaDescription\": \"Level up your gaming tournament experience with an AI Agent designed for efficient participant registration. This AI Agent helps users fill out forms by asking critical questions about game preferences, team details, and skill levels. Ideal for esports organizations and gaming communities, it can be trained with specific tournament rules and formats. With customizable avatars, dynamic personalities, and engaging tones of voice, this AI Agent creates an immersive registration experience that gets gamers excited to compete.\",\n \"furtherDescription\": \"Level up your gaming tournament experience with an AI Agent designed for efficient participant registration. This AI Agent helps users fill out forms by asking critical questions about game preferences, team details, and skill levels. Ideal for esports organizations and gaming communities, it can be trained with specific tournament rules and formats. With customizable avatars, dynamic personalities, and engaging tones of voice, this AI Agent creates an immersive registration experience that gets gamers excited to compete.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30004,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30004\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide to register for the gaming tournament?\\\",\\\"Are there any age restrictions for participating in the tournament?\\\",\\\"Is there an entry fee for the gaming tournament?\\\",\\\"What is the date and schedule for the gaming tournament?\\\",\\\"How will the winners be announced and what prizes will they receive?\\\"]\",\n \"url\": \"/agent-directory/gaming-tournament-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/gaming-tournament-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Gaming Tournament Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670872598976-2000eca96cd2809f0a7065cd33961752-thumbnail.png\"\n },\n {\n \"id\": \"242671278768976\",\n \"slug\": \"baking-contest-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Baking Contest Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Culinary Experts and Event Organizers with over 5 years of experience in managing baking contests and culinary events.\\\",\\\"expertise\\\":\\\" This AI Agent streamlines the registration process for baking contests, assisting participants in selecting categories, understanding judging criteria, and submitting entries.\\\",\\\"personality\\\":\\\" Warm, encouraging, and creative, this agent inspires bakers to showcase their skills and creativity in a fun, competitive environment.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through registration forms, answers questions about recipe submissions, baking techniques, and contest rules, ensuring a smooth and enjoyable registration experience.\\\"}\",\n \"description\": \"Whip up excitement for your baking contest with this AI Agent designed for seamless participant registration. It guides users through form completion by asking vital questions about recipe submissions and baking details while also addressing any queries they might have. This AI Agent can be trained with specific contest rules and categories, featuring unique personalities, engaging tones, and distinctive appearances to create a delightful registration experience for all bakers!\",\n \"metaDescription\": \"Whip up excitement for your baking contest with this AI Agent designed for seamless participant registration. It guides users through form completion by asking vital questions about recipe submissions and baking details while also addressing any queries they might have. This AI Agent can be trained with specific contest rules and categories, featuring unique personalities, engaging tones, and distinctive appearances to create a delightful registration experience for all bakers!\",\n \"furtherDescription\": \"Whip up excitement for your baking contest with this AI Agent designed for seamless participant registration. It guides users through form completion by asking vital questions about recipe submissions and baking details while also addressing any queries they might have. This AI Agent can be trained with specific contest rules and categories, featuring unique personalities, engaging tones, and distinctive appearances to create a delightful registration experience for all bakers!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30004,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30004\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/baking-contest-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/baking-contest-application-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Baking Contest Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671278768976-f20a762a387d98f122ab728da5785226-thumbnail.png\"\n },\n {\n \"id\": \"240370903649963\",\n \"slug\": \"drawing-contest-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Drawing Contest Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Professional Artists and Art Instructors with over 6 years of experience in facilitating drawing contests and art exhibitions.\\\",\\\"expertise\\\":\\\" This AI Agent simplifies the registration process for drawing contests, helping participants understand submission guidelines and categories.\\\",\\\"personality\\\":\\\" Creative, expressive, and passionate, this agent fosters an inspiring environment for artists to share their talent and creativity.\\\",\\\"special_skills\\\":\\\" The AI Agent assists users in completing registration forms, answers inquiries about contest themes, judging criteria, and prize distributions, ensuring a comprehensive and engaging experience.\\\"}\",\n \"description\": \"Unleash creativity with this AI Agent crafted for drawing contest registration. It not only guides users through filling out forms by asking essential questions about artwork submissions and artist details but also provides answers to participants' queries. This AI Agent can be trained with specific contest criteria and themes, ensuring a personalized experience. With distinct personalities, engaging tones, and unique appearances, it invites artists to showcase their talent!\",\n \"metaDescription\": \"Unleash creativity with this AI Agent crafted for drawing contest registration. It not only guides users through filling out forms by asking essential questions about artwork submissions and artist details but also provides answers to participants' queries. This AI Agent can be trained with specific contest criteria and themes, ensuring a personalized experience. With distinct personalities, engaging tones, and unique appearances, it invites artists to showcase their talent!\",\n \"furtherDescription\": \"Unleash creativity with this AI Agent crafted for drawing contest registration. It not only guides users through filling out forms by asking essential questions about artwork submissions and artist details but also provides answers to participants' queries. This AI Agent can be trained with specific contest criteria and themes, ensuring a personalized experience. With distinct personalities, engaging tones, and unique appearances, it invites artists to showcase their talent!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30004,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30004\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/drawing-contest-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/drawing-entry-form-template\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Drawing Contest Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/240370903649963-2a9c202b4964e7f1f7e81619e0b4db2a-thumbnail.png\"\n },\n {\n \"id\": \"212872449368063\",\n \"slug\": \"halloween-cosplay-contest-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Halloween Cosplay Contest Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Cosplay Experts and Event Coordinators with over 4 years of experience in organizing Halloween events and cosplay contests.\\\",\\\"expertise\\\":\\\" This AI Agent facilitates the registration process for cosplay contests, guiding participants through costume categories, rules, and entry requirements.\\\",\\\"personality\\\":\\\" Fun, energetic, and imaginative, this agent embraces the spirit of Halloween and encourages participants to showcase their creativity.\\\",\\\"special_skills\\\":\\\" The AI Agent helps users fill out registration forms, answers questions about costume guidelines, performance requirements, and event schedules, ensuring a thrilling and engaging experience.\\\"}\",\n \"description\": \"Get ready for a spooktacular Halloween with this AI Agent, designed for effortless cosplay contest registration. It not only assists users in filling out forms by asking key questions about costume details and participation rules but also answers any inquiries participants may have. This AI Agent can be trained with specific contest guidelines and themes, ensuring an engaging experience. With customizable personalities, unique voice tones, and distinct appearances, it invites cosplayers to join the fun!\",\n \"metaDescription\": \"Get ready for a spooktacular Halloween with this AI Agent, designed for effortless cosplay contest registration. It not only assists users in filling out forms by asking key questions about costume details and participation rules but also answers any inquiries participants may have. This AI Agent can be trained with specific contest guidelines and themes, ensuring an engaging experience. With customizable personalities, unique voice tones, and distinct appearances, it invites cosplayers to join the fun!\",\n \"furtherDescription\": \"Get ready for a spooktacular Halloween with this AI Agent, designed for effortless cosplay contest registration. It not only assists users in filling out forms by asking key questions about costume details and participation rules but also answers any inquiries participants may have. This AI Agent can be trained with specific contest guidelines and themes, ensuring an engaging experience. With customizable personalities, unique voice tones, and distinct appearances, it invites cosplayers to join the fun!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30004,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30004\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/halloween-cosplay-contest-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/virtual-halloween-cosplay-contest-entry-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Halloween Cosplay Contest Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/212872449368063-f7f31a1ba68242aea6f6e5f48b609837-thumbnail.png\"\n },\n {\n \"id\": \"242672462985973\",\n \"slug\": \"class-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Class Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Educational Administrators and Program Coordinators with over 8 years of experience in managing class registrations for various educational programs.\\\",\\\"expertise\\\":\\\" This AI Agent simplifies the registration process for classes, helping students understand course offerings, schedules, and prerequisites.\\\",\\\"personality\\\":\\\" Supportive, informative, and professional, this agent makes the registration experience straightforward and reassuring for students.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through registration forms, answers questions about course content, instructor qualifications, and enrollment deadlines, ensuring clarity and ease.\\\"}\",\n \"description\": \"Make class registration a breeze with this AI Agent, designed to engage users in dynamic conversations while assisting with form completion. It answers questions and gathers essential details about course selections, schedules, and prerequisites. This AI Agent can be trained with your specific class offerings, creating a personalized experience. With customizable personalities, distinct voice tones, and unique appearances, this AI Agent encourages learners to enroll and participate actively.\",\n \"metaDescription\": \"Make class registration a breeze with this AI Agent, designed to engage users in dynamic conversations while assisting with form completion. It answers questions and gathers essential details about course selections, schedules, and prerequisites. This AI Agent can be trained with your specific class offerings, creating a personalized experience. With customizable personalities, distinct voice tones, and unique appearances, this AI Agent encourages learners to enroll and participate actively.\",\n \"furtherDescription\": \"Make class registration a breeze with this AI Agent, designed to engage users in dynamic conversations while assisting with form completion. It answers questions and gathers essential details about course selections, schedules, and prerequisites. This AI Agent can be trained with your specific class offerings, creating a personalized experience. With customizable personalities, distinct voice tones, and unique appearances, this AI Agent encourages learners to enroll and participate actively.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30005,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30005\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/class-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/class-registration-3\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Class Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242672462985973-a5db079caad848329b9d80981e8d6ab0-thumbnail.png\"\n },\n {\n \"id\": \"242670787297977\",\n \"slug\": \"computer-training-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Computer Training Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"IT Trainers and Educational Professionals with over 7 years of experience in conducting computer training workshops and classes.\\\",\\\"expertise\\\":\\\" This AI Agent streamlines the registration process for computer training, assisting users in selecting appropriate courses based on their skill levels and goals.\\\",\\\"personality\\\":\\\" Tech-savvy, patient, and encouraging, this agent inspires learners to enhance their computer skills in a supportive environment.\\\",\\\"special_skills\\\":\\\" The AI Agent helps users complete registration forms, answers inquiries about training content, formats, and certification options, ensuring an engaging and informative experience.\\\"}\",\n \"description\": \"Boost your computer training programs with this Computer Training Registration AI Agent, designed to guide users through the registration process. This AI Agent not only helps fill out forms but also answers client questions, ensuring clarity and support. It can be trained with your specific course data and features customizable personalities, tones of voice, and appearances, creating a personalized experience that resonates with every learner.\",\n \"metaDescription\": \"Boost your computer training programs with this Computer Training Registration AI Agent, designed to guide users through the registration process. This AI Agent not only helps fill out forms but also answers client questions, ensuring clarity and support. It can be trained with your specific course data and features customizable personalities, tones of voice, and appearances, creating a personalized experience that resonates with every learner.\",\n \"furtherDescription\": \"Boost your computer training programs with this Computer Training Registration AI Agent, designed to guide users through the registration process. This AI Agent not only helps fill out forms but also answers client questions, ensuring clarity and support. It can be trained with your specific course data and features customizable personalities, tones of voice, and appearances, creating a personalized experience that resonates with every learner.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30005,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30005\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/computer-training-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/computer-training-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Computer Training Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670787297977-c20027aa205d0fd639f1efe739d87d48-thumbnail.png\"\n },\n {\n \"id\": \"242671463116959\",\n \"slug\": \"virtual-course-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Virtual Course Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"E-learning Specialists and Online Educators with over 5 years of experience in facilitating virtual course registrations.\\\",\\\"expertise\\\":\\\" This AI Agent simplifies the registration process for virtual courses, helping participants navigate course selections, schedules, and technical requirements.\\\",\\\"personality\\\":\\\" Accessible, friendly, and knowledgeable, this agent creates a welcoming atmosphere for online learners, ensuring they feel confident in their choices.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through registration forms, answers questions about course content, platform access, and technical support, ensuring a smooth and user-friendly experience.\\\"}\",\n \"description\": \"Engage learners with the Virtual Course Registration AI Agent, designed to create interactive conversations that guide users through the registration process. This AI Agent not only fills out forms but also answers client questions, ensuring a smooth experience. It can be trained with your specific course data and features customizable personalities, tones of voice, and appearances, making it a perfect fit for any educational platform.\",\n \"metaDescription\": \"Engage learners with the Virtual Course Registration AI Agent, designed to create interactive conversations that guide users through the registration process. This AI Agent not only fills out forms but also answers client questions, ensuring a smooth experience. It can be trained with your specific course data and features customizable personalities, tones of voice, and appearances, making it a perfect fit for any educational platform.\",\n \"furtherDescription\": \"Engage learners with the Virtual Course Registration AI Agent, designed to create interactive conversations that guide users through the registration process. This AI Agent not only fills out forms but also answers client questions, ensuring a smooth experience. It can be trained with your specific course data and features customizable personalities, tones of voice, and appearances, making it a perfect fit for any educational platform.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30005,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30005\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/virtual-course-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/virtual-course-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Virtual Course Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671463116959-9ea3b31ab3bf35013e689a7457500444-thumbnail.png\"\n },\n {\n \"id\": \"242670942895974\",\n \"slug\": \"e-learning-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"E-learning Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Educational Technologists and E-learning Developers with over 6 years of experience in managing e-learning programs and registrations.\\\",\\\"expertise\\\":\\\" This AI Agent streamlines the registration process for e-learning courses, assisting users in understanding course requirements and learning objectives.\\\",\\\"personality\\\":\\\" Inquisitive, engaging, and supportive, this agent fosters a positive learning environment that encourages users to explore new knowledge.\\\",\\\"special_skills\\\":\\\" The AI Agent helps users complete registration forms, answers inquiries about course materials, assessment methods, and learning paths, ensuring a comprehensive registration process.\\\"}\",\n \"description\": \"Unlock a seamless learning journey with this E-learning Registration AI Agent. It engages users in dynamic conversations, asking essential questions while providing answers to their queries. Ideal for educational institutions, this AI Agent can be trained with your specific course data and supports customizable personalities, tones of voice, and appearances to match your brand, ensuring a unique and engaging experience for every learner.\",\n \"metaDescription\": \"Unlock a seamless learning journey with this E-learning Registration AI Agent. It engages users in dynamic conversations, asking essential questions while providing answers to their queries. Ideal for educational institutions, this AI Agent can be trained with your specific course data and supports customizable personalities, tones of voice, and appearances to match your brand, ensuring a unique and engaging experience for every learner.\",\n \"furtherDescription\": \"Unlock a seamless learning journey with this E-learning Registration AI Agent. It engages users in dynamic conversations, asking essential questions while providing answers to their queries. Ideal for educational institutions, this AI Agent can be trained with your specific course data and supports customizable personalities, tones of voice, and appearances to match your brand, ensuring a unique and engaging experience for every learner.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30005,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30005\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/e-learning-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/e-learning-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"E-learning Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670942895974-e63132e3bceec429dae86b64c9ac1a88-thumbnail.png\"\n },\n {\n \"id\": \"242671449352965\",\n \"slug\": \"cooking-class-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Cooking Class Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Culinary Instructors and Food Enthusiasts with over 6 years of experience in leading cooking classes and workshops.\\\",\\\"expertise\\\":\\\" This AI Agent facilitates the registration process for cooking classes, helping participants choose courses based on their culinary interests and skill levels.\\\",\\\"personality\\\":\\\" Passionate, warm, and encouraging, this agent inspires participants to explore their culinary creativity in a fun and informative setting.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through registration forms, answers questions about class schedules, ingredient lists, and cooking techniques, creating an engaging and enjoyable experience.\\\"}\",\n \"description\": \"Discover the Cooking Class Registration AI Agent, designed to bring culinary enthusiasts into your cooking classes! This AI Agent engages users in lively conversations, guiding them through the registration process while answering any culinary questions they might have. Trained with your cooking school’s specific details, it offers customizable personalities, tones of voice, and appearances, ensuring a flavorful experience for aspiring chefs eager to join your classes.\",\n \"metaDescription\": \"Discover the Cooking Class Registration AI Agent, designed to bring culinary enthusiasts into your cooking classes! This AI Agent engages users in lively conversations, guiding them through the registration process while answering any culinary questions they might have. Trained with your cooking school’s specific details, it offers customizable personalities, tones of voice, and appearances, ensuring a flavorful experience for aspiring chefs eager to join your classes.\",\n \"furtherDescription\": \"Discover the Cooking Class Registration AI Agent, designed to bring culinary enthusiasts into your cooking classes! This AI Agent engages users in lively conversations, guiding them through the registration process while answering any culinary questions they might have. Trained with your cooking school’s specific details, it offers customizable personalities, tones of voice, and appearances, ensuring a flavorful experience for aspiring chefs eager to join your classes.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30005,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30005\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/cooking-class-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/cooking-class-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Cooking Class Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671449352965-15572f43ac2ed676cc5c30a7380c44c2-thumbnail.png\"\n },\n {\n \"id\": \"201881326089055\",\n \"slug\": \"summer-class-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Summer Class Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Program Coordinators and Educators with over 7 years of experience in managing summer class registrations and programs.\\\",\\\"expertise\\\":\\\" This AI Agent streamlines the registration process for summer classes, helping students and parents navigate options and schedules.\\\",\\\"personality\\\":\\\" Energetic, supportive, and enthusiastic, this agent fosters excitement about summer learning opportunities.\\\",\\\"special_skills\\\":\\\" The AI Agent assists users in completing registration forms, answers questions about class offerings, instructors, and materials, ensuring a smooth and enjoyable registration experience.\\\"}\",\n \"description\": \"Get ready for summer with the Summer Class Registration AI Agent! This AI Agent guides users through the registration process, asking insightful questions while addressing any queries they may have. Trained with your program’s details, it features customizable personalities, tones of voice, and appearances, creating an engaging experience for students eager to make the most of their summer activities.\",\n \"metaDescription\": \"Get ready for summer with the Summer Class Registration AI Agent! This AI Agent guides users through the registration process, asking insightful questions while addressing any queries they may have. Trained with your program’s details, it features customizable personalities, tones of voice, and appearances, creating an engaging experience for students eager to make the most of their summer activities.\",\n \"furtherDescription\": \"Get ready for summer with the Summer Class Registration AI Agent! This AI Agent guides users through the registration process, asking insightful questions while addressing any queries they may have. Trained with your program’s details, it features customizable personalities, tones of voice, and appearances, creating an engaging experience for students eager to make the most of their summer activities.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30005,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30005\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/summer-class-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/summer-class-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Summer Class Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/201881326089055-e0f96d9567e8594648067db2ce6e0dc6-thumbnail.png\"\n },\n {\n \"id\": \"202170776525960\",\n \"slug\": \"extracurricular-class-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Extracurricular Class Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"School Administrators and Activity Coordinators with over 6 years of experience in managing extracurricular program registrations.\\\",\\\"expertise\\\":\\\" This AI Agent simplifies the registration process for extracurricular classes, assisting students in exploring options that align with their interests.\\\",\\\"personality\\\":\\\" Friendly, encouraging, and proactive, this agent creates an engaging environment that promotes student involvement in extracurricular activities.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through registration forms, answers inquiries about activities, schedules, and requirements, ensuring a seamless registration experience.\\\"}\",\n \"description\": \"Make extracurricular class registration engaging with the Extracurricular Class Registration AI Agent. This AI Agent guides users through the registration process by asking relevant questions and answering their queries. Trained with your program's specific details, it boasts customizable personalities, tones of voice, and appearances, ensuring a lively interaction for students eager to explore new activities and interests\",\n \"metaDescription\": \"Make extracurricular class registration engaging with the Extracurricular Class Registration AI Agent. This AI Agent guides users through the registration process by asking relevant questions and answering their queries. Trained with your program's specific details, it boasts customizable personalities, tones of voice, and appearances, ensuring a lively interaction for students eager to explore new activities and interests\",\n \"furtherDescription\": \"Make extracurricular class registration engaging with the Extracurricular Class Registration AI Agent. This AI Agent guides users through the registration process by asking relevant questions and answering their queries. Trained with your program's specific details, it boasts customizable personalities, tones of voice, and appearances, ensuring a lively interaction for students eager to explore new activities and interests\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30005,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30005\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/extracurricular-class-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/extracurricular-class-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Extracurricular Class Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/202170776525960-ae2788210f2a4a0017f1f80af336c3dc-thumbnail.png\"\n },\n {\n \"id\": \"242671262307958\",\n \"slug\": \"phd-admission-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Phd Admission AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Academic Advisors and Graduate Program Coordinators with over 8 years of experience in managing PhD admissions processes.\\\",\\\"expertise\\\":\\\" This AI Agent facilitates the PhD admission process, helping applicants navigate application requirements, deadlines, and procedures.\\\",\\\"personality\\\":\\\" Supportive, knowledgeable, and professional, this agent instills confidence in applicants as they pursue advanced degrees.\\\",\\\"special_skills\\\":\\\" The AI Agent helps users complete application forms, answers questions about admission criteria, funding options, and program structures, ensuring a comprehensive and informative experience.\\\"}\",\n \"description\": \"Navigate the PhD admission process with ease using the PhD Admission AI Agent. This AI Agent assists users in filling out applications by posing essential questions and addressing any concerns they may have. Trained with your institution's specific data, it features customizable personalities, tones of voice, and appearances, ensuring an engaging experience for prospective students eager to pursue their academic goals.\",\n \"metaDescription\": \"Navigate the PhD admission process with ease using the PhD Admission AI Agent. This AI Agent assists users in filling out applications by posing essential questions and addressing any concerns they may have. Trained with your institution's specific data, it features customizable personalities, tones of voice, and appearances, ensuring an engaging experience for prospective students eager to pursue their academic goals.\",\n \"furtherDescription\": \"Navigate the PhD admission process with ease using the PhD Admission AI Agent. This AI Agent assists users in filling out applications by posing essential questions and addressing any concerns they may have. Trained with your institution's specific data, it features customizable personalities, tones of voice, and appearances, ensuring an engaging experience for prospective students eager to pursue their academic goals.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30005,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30005\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/phd-admission-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/phd-admission-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Phd Admission AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671262307958-a47655d0620c5905c46865d028cb3c06-thumbnail.png\"\n },\n {\n \"id\": \"242671656817971\",\n \"slug\": \"club-membership-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Club Membership Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Membership Coordinators and Event Managers with over 5 years of experience in managing club memberships and registrations.\\\",\\\"expertise\\\":\\\" This AI Agent streamlines the membership registration process for clubs, assisting users in understanding benefits and requirements.\\\",\\\"personality\\\":\\\" Welcoming, engaging, and enthusiastic, this agent fosters a sense of community among prospective members.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through registration forms, answers questions about membership benefits, events, and renewal processes, ensuring clarity and ease.\\\"}\",\n \"description\": \"Engage your members with the Club Membership Registration AI Agent, designed to make the registration process interactive and enjoyable. This AI Agent not only helps users fill out forms by asking pertinent questions but also addresses any queries they may have. Trained with your business data, it features customizable personalities, tones of voice, and appearances, ensuring a unique experience for every club member.\",\n \"metaDescription\": \"Engage your members with the Club Membership Registration AI Agent, designed to make the registration process interactive and enjoyable. This AI Agent not only helps users fill out forms by asking pertinent questions but also addresses any queries they may have. Trained with your business data, it features customizable personalities, tones of voice, and appearances, ensuring a unique experience for every club member.\",\n \"furtherDescription\": \"Engage your members with the Club Membership Registration AI Agent, designed to make the registration process interactive and enjoyable. This AI Agent not only helps users fill out forms by asking pertinent questions but also addresses any queries they may have. Trained with your business data, it features customizable personalities, tones of voice, and appearances, ensuring a unique experience for every club member.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30006,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30006\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/club-membership-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/club-membership-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Club Membership Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671656817971-d58fd2ed7b5610770e24f9ba485802df-thumbnail.png\"\n },\n {\n \"id\": \"242671188338969\",\n \"slug\": \"church-membership-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Church Membership Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Church Administrators and Community Leaders with over 6 years of experience in managing church memberships and community programs.\\\",\\\"expertise\\\":\\\" This AI Agent simplifies the registration process for church memberships, helping individuals understand community involvement opportunities.\\\",\\\"personality\\\":\\\" Friendly, compassionate, and supportive, this agent creates a welcoming atmosphere for new members.\\\",\\\"special_skills\\\":\\\" The AI Agent assists users in completing registration forms, answers inquiries about services, events, and community programs, ensuring a smooth and engaging experience.\\\"}\",\n \"description\": \"Welcome newcomers with this Church Membership Registration AI Agent, designed to engage users in meaningful conversations. It guides them through the registration process by asking relevant questions while also addressing any inquiries they may have. This AI Agent can be trained with your church's specific information and offers customizable personalities, voice tones, and appearances to reflect your community's unique spirit.\",\n \"metaDescription\": \"Welcome newcomers with this Church Membership Registration AI Agent, designed to engage users in meaningful conversations. It guides them through the registration process by asking relevant questions while also addressing any inquiries they may have. This AI Agent can be trained with your church's specific information and offers customizable personalities, voice tones, and appearances to reflect your community's unique spirit.\",\n \"furtherDescription\": \"Welcome newcomers with this Church Membership Registration AI Agent, designed to engage users in meaningful conversations. It guides them through the registration process by asking relevant questions while also addressing any inquiries they may have. This AI Agent can be trained with your church's specific information and offers customizable personalities, voice tones, and appearances to reflect your community's unique spirit.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30006,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30006\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/church-membership-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/church-membership-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Church Membership Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671188338969-09266001682d5d32506365722d4a2b99-thumbnail.png\"\n },\n {\n \"id\": \"242671443167963\",\n \"slug\": \"gym-membership-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Gym Membership Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Fitness Instructors and Membership Coordinators with over 7 years of experience in managing gym memberships and fitness programs.\\\",\\\"expertise\\\":\\\" This AI Agent streamlines the registration process for gym memberships, helping users explore membership plans, benefits, and facilities.\\\",\\\"personality\\\":\\\" Motivational, energetic, and friendly, this agent encourages users to pursue their fitness goals and become part of a vibrant community.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through registration forms, answers questions about fitness classes, personal training options, and membership perks, ensuring an engaging registration experience.\\\"}\",\n \"description\": \"Energize your gym’s membership process with this AI Agent, expertly designed to assist users in completing registration forms while addressing their questions. This AI Agent can be trained with your specific gym data, ensuring personalized interactions that align with your services. With customizable personalities, engaging voice tones, and unique appearances, this AI Agent cultivates an inviting atmosphere that motivates potential members to join your fitness community.\",\n \"metaDescription\": \"Energize your gym’s membership process with this AI Agent, expertly designed to assist users in completing registration forms while addressing their questions. This AI Agent can be trained with your specific gym data, ensuring personalized interactions that align with your services. With customizable personalities, engaging voice tones, and unique appearances, this AI Agent cultivates an inviting atmosphere that motivates potential members to join your fitness community.\",\n \"furtherDescription\": \"Energize your gym’s membership process with this AI Agent, expertly designed to assist users in completing registration forms while addressing their questions. This AI Agent can be trained with your specific gym data, ensuring personalized interactions that align with your services. With customizable personalities, engaging voice tones, and unique appearances, this AI Agent cultivates an inviting atmosphere that motivates potential members to join your fitness community.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30006,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30006\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/gym-membership-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/gym-membership\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Gym Membership Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671443167963-7c86ce0d4bb9ba401a6e5fbfb4f26af3-thumbnail.png\"\n },\n {\n \"id\": \"242671355049964\",\n \"slug\": \"car-club-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Car Club Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Automotive Enthusiasts and Club Organizers with over 5 years of experience in managing car club memberships and events.\\\",\\\"expertise\\\":\\\" This AI Agent simplifies the registration process for car clubs, assisting users in understanding membership benefits and club activities.\\\",\\\"personality\\\":\\\" Passionate, knowledgeable, and enthusiastic, this agent fosters a sense of camaraderie among car enthusiasts.\\\",\\\"special_skills\\\":\\\" The AI Agent helps users complete registration forms, answers inquiries about events, club rules, and membership options, ensuring a smooth and engaging experience.\\\"}\",\n \"description\": \"Drive engagement with this AI Agent, designed to guide users through car club registration while addressing their questions on the spot. This AI Agent can be trained with your specific data to ensure relevant and meaningful interactions. With customizable personalities, voice tones, and appearances, you can create an exciting and inviting environment that revs up interest and participation among car enthusiasts.\",\n \"metaDescription\": \"Drive engagement with this AI Agent, designed to guide users through car club registration while addressing their questions on the spot. This AI Agent can be trained with your specific data to ensure relevant and meaningful interactions. With customizable personalities, voice tones, and appearances, you can create an exciting and inviting environment that revs up interest and participation among car enthusiasts.\",\n \"furtherDescription\": \"Drive engagement with this AI Agent, designed to guide users through car club registration while addressing their questions on the spot. This AI Agent can be trained with your specific data to ensure relevant and meaningful interactions. With customizable personalities, voice tones, and appearances, you can create an exciting and inviting environment that revs up interest and participation among car enthusiasts.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30006,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30006\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/car-club-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/car-club-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Car Club Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671355049964-a6b1ff1166edece2025e74a232d6869e-thumbnail.png\"\n },\n {\n \"id\": \"242670723407960\",\n \"slug\": \"youth-group-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Youth Group Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Youth Leaders and Program Coordinators with over 6 years of experience in managing youth group registrations and activities.\\\",\\\"expertise\\\":\\\" This AI Agent facilitates the registration process for youth groups, helping participants explore activities, events, and volunteer opportunities.\\\",\\\"personality\\\":\\\" Energetic, encouraging, and fun, this agent creates an exciting environment for young people to connect and engage.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through registration forms, answers questions about activities, schedules, and participation requirements, ensuring a welcoming experience.\\\"}\",\n \"description\": \"Engage young members with this AI Agent, designed to guide users through the youth group registration process while answering their questions in real time. This AI Agent can be trained with your specific data, ensuring relevant conversations that resonate with your community. With customizable personalities, voice tones, and appearances, you can create an inviting atmosphere that encourages participation and connection among youth.\",\n \"metaDescription\": \"Engage young members with this AI Agent, designed to guide users through the youth group registration process while answering their questions in real time. This AI Agent can be trained with your specific data, ensuring relevant conversations that resonate with your community. With customizable personalities, voice tones, and appearances, you can create an inviting atmosphere that encourages participation and connection among youth.\",\n \"furtherDescription\": \"Engage young members with this AI Agent, designed to guide users through the youth group registration process while answering their questions in real time. This AI Agent can be trained with your specific data, ensuring relevant conversations that resonate with your community. With customizable personalities, voice tones, and appearances, you can create an inviting atmosphere that encourages participation and connection among youth.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30006,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30006\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/youth-group-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/youth-group-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Youth Group Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670723407960-f8e6f2e3495a713305ed68771caa1c97-thumbnail.png\"\n },\n {\n \"id\": \"242670828614966\",\n \"slug\": \"fan-club-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Fan Club Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Event Coordinators and Fan Engagement Specialists with over 5 years of experience in managing fan club registrations and activities.\\\",\\\"expertise\\\":\\\" This AI Agent streamlines the registration process for fan clubs, assisting users in understanding membership benefits and club events.\\\",\\\"personality\\\":\\\" Passionate, enthusiastic, and dedicated, this agent fosters a sense of community among fans, encouraging participation and engagement.\\\",\\\"special_skills\\\":\\\" The AI Agent helps users complete registration forms, answers questions about club events, merchandise, and exclusive content, ensuring an engaging experience.\\\"}\",\n \"description\": \"Energize your fan club registration with this AI Agent that not only guides users through filling out forms but also addresses their inquiries on the spot. This AI Agent can be trained with your club's specific data, ensuring relevant interactions. With customizable personalities, voice tones, and appearances, you can create an engaging experience that resonates with your fans and reflects your club’s unique vibe.\",\n \"metaDescription\": \"Energize your fan club registration with this AI Agent that not only guides users through filling out forms but also addresses their inquiries on the spot. This AI Agent can be trained with your club's specific data, ensuring relevant interactions. With customizable personalities, voice tones, and appearances, you can create an engaging experience that resonates with your fans and reflects your club’s unique vibe.\",\n \"furtherDescription\": \"Energize your fan club registration with this AI Agent that not only guides users through filling out forms but also addresses their inquiries on the spot. This AI Agent can be trained with your club's specific data, ensuring relevant interactions. With customizable personalities, voice tones, and appearances, you can create an engaging experience that resonates with your fans and reflects your club’s unique vibe.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30006,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30006\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/fan-club-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/virtual-fan-club-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Fan Club Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670828614966-4b6f2f0df1e2d57861dcaaa63f151e19-thumbnail.png\"\n },\n {\n \"id\": \"242671641413957\",\n \"slug\": \"cricket-club-member-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Cricket Club Member Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Sports Coaches and Club Organizers with over 6 years of experience in managing cricket club memberships and events.\\\",\\\"expertise\\\":\\\" This AI Agent simplifies the registration process for cricket clubs, helping users understand membership options and club activities.\\\",\\\"personality\\\":\\\" Sporty, energetic, and motivating, this agent inspires members to engage in the sport and become part of the cricket community.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through registration forms, answers inquiries about training sessions, match schedules, and club events, ensuring a smooth and enjoyable registration experience.\\\"}\",\n \"description\": \"Make registering for your cricket club effortless with an AI Agent that not only guides users through forms but also answers their questions in real-time. This AI Agent can be trained using your club’s specific data, ensuring accurate and engaging interactions. Plus, with customizable personalities, voice tones, and appearances, you can create an agent that reflects the spirit of your club.\",\n \"metaDescription\": \"Make registering for your cricket club effortless with an AI Agent that not only guides users through forms but also answers their questions in real-time. This AI Agent can be trained using your club’s specific data, ensuring accurate and engaging interactions. Plus, with customizable personalities, voice tones, and appearances, you can create an agent that reflects the spirit of your club.\",\n \"furtherDescription\": \"Make registering for your cricket club effortless with an AI Agent that not only guides users through forms but also answers their questions in real-time. This AI Agent can be trained using your club’s specific data, ensuring accurate and engaging interactions. Plus, with customizable personalities, voice tones, and appearances, you can create an agent that reflects the spirit of your club.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30006,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30006\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/cricket-club-member-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/cricket-club-member-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Cricket Club Member Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671641413957-85ca85285c4c219a9e6b2fbd42870698-thumbnail.png\"\n },\n {\n \"id\": \"242671576978980\",\n \"slug\": \"forum-membership-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Forum Membership Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Community Managers and Moderators with over 5 years of experience in managing online forums and user registrations.\\\",\\\"expertise\\\":\\\" This AI Agent streamlines the registration process for online forums, assisting users in understanding forum rules and community guidelines.\\\",\\\"personality\\\":\\\" Friendly, welcoming, and knowledgeable, this agent creates an inclusive environment for new members to join and engage.\\\",\\\"special_skills\\\":\\\" The AI Agent helps users complete registration forms, answers questions about forum topics, user privileges, and community interactions, ensuring a smooth onboarding process.\\\"}\",\n \"description\": \"Simplify forum registrations with an AI Agent that not only collects information but also answers user questions along the way. This AI Agent can be trained with your business data to deliver relevant, informed responses. With customizable personalities, voice tones, and appearances, you can align the agent with your brand, creating a welcoming, intuitive experience for every new forum member.\",\n \"metaDescription\": \"Simplify forum registrations with an AI Agent that not only collects information but also answers user questions along the way. This AI Agent can be trained with your business data to deliver relevant, informed responses. With customizable personalities, voice tones, and appearances, you can align the agent with your brand, creating a welcoming, intuitive experience for every new forum member.\",\n \"furtherDescription\": \"Simplify forum registrations with an AI Agent that not only collects information but also answers user questions along the way. This AI Agent can be trained with your business data to deliver relevant, informed responses. With customizable personalities, voice tones, and appearances, you can align the agent with your brand, creating a welcoming, intuitive experience for every new forum member.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30006,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30006\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/forum-membership-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/forum-membership-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Forum Membership Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671576978980-2d44ee0e61d19b2edb9b8830f14a5f48-thumbnail.png\"\n },\n {\n \"id\": \"242670862913966\",\n \"slug\": \"membership-renewal-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Membership Renewal AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Membership Coordinators and Administrators with over 6 years of experience in managing membership renewals for various organizations.\\\",\\\"expertise\\\":\\\" This AI Agent simplifies the membership renewal process, assisting users in understanding renewal terms and options.\\\",\\\"personality\\\":\\\" Supportive, helpful, and proactive, this agent encourages members to continue their journey with the organization.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through renewal forms, answers questions about benefits, payment options, and membership status, ensuring a seamless renewal experience.\\\"}\",\n \"description\": \"Make renewing memberships hassle-free with this AI Agent. It guides users through the renewal process while answering any questions along the way. This AI Agent can be trained with your business data, ensuring a personalized experience. You can also customize its personality, voice tone, and appearance to reflect your brand, providing an engaging, seamless interaction every time.\",\n \"metaDescription\": \"Make renewing memberships hassle-free with this AI Agent. It guides users through the renewal process while answering any questions along the way. This AI Agent can be trained with your business data, ensuring a personalized experience. You can also customize its personality, voice tone, and appearance to reflect your brand, providing an engaging, seamless interaction every time.\",\n \"furtherDescription\": \"Make renewing memberships hassle-free with this AI Agent. It guides users through the renewal process while answering any questions along the way. This AI Agent can be trained with your business data, ensuring a personalized experience. You can also customize its personality, voice tone, and appearance to reflect your brand, providing an engaging, seamless interaction every time.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30006,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30006\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/membership-renewal-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/membership-renewal-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Membership Renewal AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670862913966-16e62d5eca57c5e1bd54dd45cd5f89ad-thumbnail.png\"\n },\n {\n \"id\": \"242670732716963\",\n \"slug\": \"yoga-club-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Yoga Club Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Yoga Instructors and Wellness Coaches with over 5 years of experience in managing yoga class registrations and memberships.\\\",\\\"expertise\\\":\\\" This AI Agent streamlines the registration process for yoga clubs, helping users choose classes and understand membership benefits.\\\",\\\"personality\\\":\\\" Calm, soothing, and encouraging, this agent promotes a positive and serene environment for participants to explore their wellness journey.\\\",\\\"special_skills\\\":\\\" The AI Agent assists users in completing registration forms, answers questions about class schedules, styles, and instructors, ensuring a peaceful registration experience.\\\"}\",\n \"description\": \"This AI Agent brings calm and ease to your yoga club registration process, guiding participants through every step while answering their questions. Trained with your business data, it ensures personalized interactions that align with your club's needs. Its personality, voice tone, and appearance are fully customizable, allowing you to create a peaceful, welcoming experience for all future yogis.\",\n \"metaDescription\": \"This AI Agent brings calm and ease to your yoga club registration process, guiding participants through every step while answering their questions. Trained with your business data, it ensures personalized interactions that align with your club's needs. Its personality, voice tone, and appearance are fully customizable, allowing you to create a peaceful, welcoming experience for all future yogis.\",\n \"furtherDescription\": \"This AI Agent brings calm and ease to your yoga club registration process, guiding participants through every step while answering their questions. Trained with your business data, it ensures personalized interactions that align with your club's needs. Its personality, voice tone, and appearance are fully customizable, allowing you to create a peaceful, welcoming experience for all future yogis.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30006,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30006\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/yoga-club-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/yoga-club-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Yoga Club Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670732716963-bdafd9cdd774abf86c2ef429ccb43493-thumbnail.png\"\n },\n {\n \"id\": \"242670715236961\",\n \"slug\": \"car-race-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Car Race Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Racing Officials and Event Coordinators with over 5 years of experience in managing car race registrations and events.\\\",\\\"expertise\\\":\\\" This AI Agent facilitates the registration process for car races, assisting participants in understanding entry requirements and race details.\\\",\\\"personality\\\":\\\" Dynamic, enthusiastic, and competitive, this agent fosters an adrenaline-fueled atmosphere for racers and enthusiasts.\\\",\\\"special_skills\\\":\\\" The AI Agent helps users fill out registration forms, answers questions about race formats, entry fees, and safety regulations, ensuring an engaging registration experience.\\\"}\",\n \"description\": \"Fuel your car race registration with this dynamic AI Agent, designed to guide participants through the process while answering any race-related questions. This AI Agent can be trained with your business data, ensuring it delivers accurate and relevant responses. With fully customizable personalities, voice tones, and appearances, you can create an engaging and thrilling registration experience for every racer.\",\n \"metaDescription\": \"Fuel your car race registration with this dynamic AI Agent, designed to guide participants through the process while answering any race-related questions. This AI Agent can be trained with your business data, ensuring it delivers accurate and relevant responses. With fully customizable personalities, voice tones, and appearances, you can create an engaging and thrilling registration experience for every racer.\",\n \"furtherDescription\": \"Fuel your car race registration with this dynamic AI Agent, designed to guide participants through the process while answering any race-related questions. This AI Agent can be trained with your business data, ensuring it delivers accurate and relevant responses. With fully customizable personalities, voice tones, and appearances, you can create an engaging and thrilling registration experience for every racer.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30007,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30007\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/car-race-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/car-race-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Car Race Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670715236961-e568ce30c371454125c1d2f18aeb4b07-thumbnail.png\"\n },\n {\n \"id\": \"242671705600956\",\n \"slug\": \"road-race-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Road Race Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Race Organizers and Athletic Coaches with over 6 years of experience in managing road race registrations and events.\\\",\\\"expertise\\\":\\\" This AI Agent simplifies the registration process for road races, helping participants understand categories, distances, and race logistics.\\\",\\\"personality\\\":\\\" Motivating, energetic, and friendly, this agent inspires runners to achieve their personal bests and enjoy the race experience.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through registration forms, answers inquiries about race schedules, training tips, and race day logistics, ensuring a seamless experience.\\\"}\",\n \"description\": \"Get your road race participants ready with this engaging AI Agent that makes form completion feel effortless. It helps users register while answering any questions they may have along the way. This AI Agent can be trained with your business data for precise and personalized interactions. Customize its personality, voice tone, and appearance to create a dynamic, race-ready experience for all runners.\",\n \"metaDescription\": \"Get your road race participants ready with this engaging AI Agent that makes form completion feel effortless. It helps users register while answering any questions they may have along the way. This AI Agent can be trained with your business data for precise and personalized interactions. Customize its personality, voice tone, and appearance to create a dynamic, race-ready experience for all runners.\",\n \"furtherDescription\": \"Get your road race participants ready with this engaging AI Agent that makes form completion feel effortless. It helps users register while answering any questions they may have along the way. This AI Agent can be trained with your business data for precise and personalized interactions. Customize its personality, voice tone, and appearance to create a dynamic, race-ready experience for all runners.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30007,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30007\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/road-race-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/road-race-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Road Race Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671705600956-dc821d491ea14be0f09696beaa636f06-thumbnail.png\"\n },\n {\n \"id\": \"242671669190969\",\n \"slug\": \"5k-run-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"5K Run Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Event Coordinators and Running Coaches with over 5 years of experience in managing 5K run registrations and events.\\\",\\\"expertise\\\":\\\" This AI Agent facilitates the registration process for 5K runs, helping participants choose categories and understand event details.\\\",\\\"personality\\\":\\\" Encouraging, friendly, and dynamic, this agent creates a supportive atmosphere that motivates runners of all levels.\\\",\\\"special_skills\\\":\\\" The AI Agent helps users complete registration forms, answers questions about course details, entry fees, and training resources, ensuring an enjoyable registration experience.\\\"}\",\n \"description\": \"Speed up your 5K run registration process with this AI Agent, designed to guide users through form completion while answering any race-related questions. This AI Agent can be trained with your business data, ensuring tailored responses for a seamless registration experience. With customizable personalities, voice tones, and appearances, you can craft an energetic and engaging atmosphere for all your participants.\",\n \"metaDescription\": \"Speed up your 5K run registration process with this AI Agent, designed to guide users through form completion while answering any race-related questions. This AI Agent can be trained with your business data, ensuring tailored responses for a seamless registration experience. With customizable personalities, voice tones, and appearances, you can craft an energetic and engaging atmosphere for all your participants.\",\n \"furtherDescription\": \"Speed up your 5K run registration process with this AI Agent, designed to guide users through form completion while answering any race-related questions. This AI Agent can be trained with your business data, ensuring tailored responses for a seamless registration experience. With customizable personalities, voice tones, and appearances, you can craft an energetic and engaging atmosphere for all your participants.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30007,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30007\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/5k-run-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/5k-sign-up-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"5K Run Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671669190969-9b3f35dfbf90457174134b06cf66c73a-thumbnail.png\"\n },\n {\n \"id\": \"220821685788064\",\n \"slug\": \"marathon-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Marathon Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Marathon Organizers and Endurance Coaches with over 7 years of experience in managing marathon registrations and events.\\\",\\\"expertise\\\":\\\" This AI Agent streamlines the registration process for marathons, assisting participants in understanding entry requirements and event logistics.\\\",\\\"personality\\\":\\\" Dedicated, supportive, and inspiring, this agent fosters a community of runners who strive for excellence and personal growth.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through registration forms, answers questions about training plans, race day preparation, and post-race recovery, ensuring a comprehensive registration experience.\\\"}\",\n \"description\": \"Make marathon registration a breeze with this AI Agent, turning forms into lively, interactive conversations. It not only helps users register but also answers any questions they may have. This AI Agent can be trained with your business data for tailored, race-specific responses. With fully customizable personalities, voice tones, and appearances, you can create a dynamic and motivating experience for all your marathon participants.\",\n \"metaDescription\": \"Make marathon registration a breeze with this AI Agent, turning forms into lively, interactive conversations. It not only helps users register but also answers any questions they may have. This AI Agent can be trained with your business data for tailored, race-specific responses. With fully customizable personalities, voice tones, and appearances, you can create a dynamic and motivating experience for all your marathon participants.\",\n \"furtherDescription\": \"Make marathon registration a breeze with this AI Agent, turning forms into lively, interactive conversations. It not only helps users register but also answers any questions they may have. This AI Agent can be trained with your business data for tailored, race-specific responses. With fully customizable personalities, voice tones, and appearances, you can create a dynamic and motivating experience for all your marathon participants.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30007,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30007\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/marathon-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/marathon-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Marathon Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/220821685788064-cd49d53b78aacdeb414710d0d6aa141b-thumbnail.png\"\n },\n {\n \"id\": \"242671032051949\",\n \"slug\": \"swimming-race-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Swimming Race Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Swimming Coaches and Event Coordinators with over 6 years of experience in managing swimming race registrations and competitions.\\\",\\\"expertise\\\":\\\" This AI Agent simplifies the registration process for swimming races, helping participants choose events and understand eligibility requirements.\\\",\\\"personality\\\":\\\" Encouraging, enthusiastic, and aquatic-minded, this agent fosters a supportive environment for swimmers to excel in their sport.\\\",\\\"special_skills\\\":\\\" The AI Agent assists users in completing registration forms, answers questions about race formats, qualifying times, and training resources, ensuring a smooth registration experience.\\\"}\",\n \"description\": \"Dive into a smooth registration experience with this AI Agent, designed to make swimming race sign-ups effortless and fun! It not only guides users through form completion but also answers all their questions on the go. This AI Agent can be trained with your business data, providing tailored interactions. Its customizable personalities, voice tones, and appearances allow you to craft a lively and engaging experience for every swimmer.\",\n \"metaDescription\": \"Dive into a smooth registration experience with this AI Agent, designed to make swimming race sign-ups effortless and fun! It not only guides users through form completion but also answers all their questions on the go. This AI Agent can be trained with your business data, providing tailored interactions. Its customizable personalities, voice tones, and appearances allow you to craft a lively and engaging experience for every swimmer.\",\n \"furtherDescription\": \"Dive into a smooth registration experience with this AI Agent, designed to make swimming race sign-ups effortless and fun! It not only guides users through form completion but also answers all their questions on the go. This AI Agent can be trained with your business data, providing tailored interactions. Its customizable personalities, voice tones, and appearances allow you to craft a lively and engaging experience for every swimmer.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30007,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30007\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/swimming-race-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/swimming-race-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Swimming Race Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671032051949-b0aaa507d99de6375de741fef20b0883-thumbnail.png\"\n },\n {\n \"id\": \"242671120433951\",\n \"slug\": \"kart-racing-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Kart Racing Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Kart Racing Professionals and Event Organizers with over 5 years of experience in managing kart racing registrations and competitions.\\\",\\\"expertise\\\":\\\" This AI Agent streamlines the registration process for kart races, assisting participants in understanding race formats and entry requirements.\\\",\\\"personality\\\":\\\" Energetic, passionate, and competitive, this agent fosters excitement and camaraderie among kart racing enthusiasts.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through registration forms, answers questions about race day procedures, safety regulations, and kart specifications, ensuring an engaging registration experience.\\\"}\",\n \"description\": \"Rev up your kart racing registration with this dynamic AI Agent! It transforms standard forms into engaging conversations, helping users complete their registrations while answering any questions they have along the way. This AI Agent can be trained with your specific business data for personalized responses. With customizable personalities, voice tones, and appearances, you can create an exciting and thrilling experience for all racing enthusiasts.\",\n \"metaDescription\": \"Rev up your kart racing registration with this dynamic AI Agent! It transforms standard forms into engaging conversations, helping users complete their registrations while answering any questions they have along the way. This AI Agent can be trained with your specific business data for personalized responses. With customizable personalities, voice tones, and appearances, you can create an exciting and thrilling experience for all racing enthusiasts.\",\n \"furtherDescription\": \"Rev up your kart racing registration with this dynamic AI Agent! It transforms standard forms into engaging conversations, helping users complete their registrations while answering any questions they have along the way. This AI Agent can be trained with your specific business data for personalized responses. With customizable personalities, voice tones, and appearances, you can create an exciting and thrilling experience for all racing enthusiasts.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30007,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30007\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/kart-racing-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/kart-racing-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Kart Racing Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671120433951-20c527a16993049c204982304658063e-thumbnail.png\"\n },\n {\n \"id\": \"242671048473964\",\n \"slug\": \"tax-client-intake-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Tax Client Intake AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"\\\",\\\"expertise\\\":\\\"\\\",\\\"personality\\\":\\\"\\\",\\\"special_skills\\\":\\\"\\\"}\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30008,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30008\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/tax-client-intake-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/tax-preparation-client-intake-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Tax Client Intake AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671048473964-782443871dadf4c0e8bcdde60526ffcd-thumbnail.png\"\n },\n {\n \"id\": \"242670800474960\",\n \"slug\": \"massage-intake-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Massage Intake AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"\\\",\\\"expertise\\\":\\\"\\\",\\\"personality\\\":\\\"\\\",\\\"special_skills\\\":\\\"\\\"}\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30008,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30008\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/massage-intake-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/massage-intake-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Massage Intake AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670800474960-6bf603c5d0fe66cb48c65edb49507c99-thumbnail.png\"\n },\n {\n \"id\": \"242670740925964\",\n \"slug\": \"nail-technician-client-intake-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Nail Technician Client Intake AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"\\\",\\\"expertise\\\":\\\"\\\",\\\"personality\\\":\\\"\\\",\\\"special_skills\\\":\\\"\\\"}\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30008,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30008\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/nail-technician-client-intake-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/nail-technician-client-consultation-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Nail Technician Client Intake AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670740925964-2e2cb4a77de9d5ff4fa35286dbe7c1ce-thumbnail.png\"\n },\n {\n \"id\": \"231171836731959\",\n \"slug\": \"hair-salon-client-intake-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Hair Salon Client Intake AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"\\\",\\\"expertise\\\":\\\"\\\",\\\"personality\\\":\\\"\\\",\\\"special_skills\\\":\\\"\\\"}\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30008,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30008\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/hair-salon-client-intake-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/hair-salon-client-intake-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Hair Salon Client Intake AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/231171836731959-048ede637b5779ec2e281dbffeb507ae-thumbnail.png\"\n },\n {\n \"id\": \"242671437688974\",\n \"slug\": \"veterinary-new-client-intake-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Veterinary New Client Intake AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"\\\",\\\"expertise\\\":\\\"\\\",\\\"personality\\\":\\\"\\\",\\\"special_skills\\\":\\\"\\\"}\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30008,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30008\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/veterinary-new-client-intake-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/veterinary-new-client-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Veterinary New Client Intake AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671437688974-e915031fcb29eb94ceaa2c30d9225ed2-thumbnail.png\"\n },\n {\n \"id\": \"242671220210945\",\n \"slug\": \"real-estate-client-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Real Estate Client Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"\\\",\\\"expertise\\\":\\\"\\\",\\\"personality\\\":\\\"\\\",\\\"special_skills\\\":\\\"\\\"}\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30008,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30008\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/real-estate-client-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/real-estate-client-registration-form-template\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Real Estate Client Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671220210945-1b20d73dcb787cab51ba514d1a2a3cfd-thumbnail.png\"\n },\n {\n \"id\": \"242670739170964\",\n \"slug\": \"social-media-marketing-customer-intake-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Social Media Marketing Customer Intake AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"\\\",\\\"expertise\\\":\\\"\\\",\\\"personality\\\":\\\"\\\",\\\"special_skills\\\":\\\"\\\"}\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30008,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30008\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/social-media-marketing-customer-intake-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/social-media-marketing-customer-intake-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Social Media Marketing Customer Intake AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670739170964-36713c89c168a063041ea9b49cc5cbc2-thumbnail.png\"\n },\n {\n \"id\": \"242670798232968\",\n \"slug\": \"beauty-salon-client-intake-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Beauty Salon Client Intake AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"\\\",\\\"expertise\\\":\\\"\\\",\\\"personality\\\":\\\"\\\",\\\"special_skills\\\":\\\"\\\"}\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30008,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30008\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/beauty-salon-client-intake-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/beauty-salon-client-intake-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Beauty Salon Client Intake AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670798232968-c77c36455d64e2c9769704325ff0cfb7-thumbnail.png\"\n },\n {\n \"id\": \"242671101547956\",\n \"slug\": \"legal-client-intake-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Legal Client Intake AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"\\\",\\\"expertise\\\":\\\"\\\",\\\"personality\\\":\\\"\\\",\\\"special_skills\\\":\\\"\\\"}\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30008,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30008\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/legal-client-intake-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/legal-client-intake-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Legal Client Intake AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671101547956-9380c96bfd10bfa3f14eb4bbcdc3205a-thumbnail.png\"\n },\n {\n \"id\": \"210703201127942\",\n \"slug\": \"permanent-makeup-client-intake-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Permanent Makeup Client Intake AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"\\\",\\\"expertise\\\":\\\"\\\",\\\"personality\\\":\\\"\\\",\\\"special_skills\\\":\\\"\\\"}\",\n \"description\": \"\",\n \"metaDescription\": \"\",\n \"furtherDescription\": \"\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30008,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30008\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"url\": \"/agent-directory/permanent-makeup-client-intake-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/permanent-makeup-client-information-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Permanent Makeup Client Intake AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/210703201127942-1020260ca1bc8b6ffe90e22b03dba7d7-thumbnail.png\"\n },\n {\n \"id\": \"242671429682969\",\n \"slug\": \"cooking-workshop-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Cooking Workshop Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Culinary Instructors and Food Enthusiasts with over 8 years of experience in conducting cooking workshops and culinary events.\\\",\\\"expertise\\\":\\\" This AI Agent facilitates the registration process for cooking workshops, helping participants understand class themes, ingredient lists, and skill levels.\\\",\\\"personality\\\":\\\" Passionate, knowledgeable, and warm, this agent inspires culinary creativity and makes participants feel at home in the kitchen.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through registration forms, answers questions about recipes, cooking techniques, and class schedules, creating an engaging and informative experience.\\\"}\",\n \"description\": \"The Cooking Workshop Registration AI Agent engages users in a conversation to seamlessly gather information for workshop sign-ups. Beyond just form-filling, it answers inquiries about classes, schedules, and ingredients. Customizable with your unique business data, tone, personality, and avatar, this AI Agent creates a personalized experience for every culinary enthusiast.\",\n \"metaDescription\": \"The Cooking Workshop Registration AI Agent engages users in a conversation to seamlessly gather information for workshop sign-ups. Beyond just form-filling, it answers inquiries about classes, schedules, and ingredients. Customizable with your unique business data, tone, personality, and avatar, this AI Agent creates a personalized experience for every culinary enthusiast.\",\n \"furtherDescription\": \"The Cooking Workshop Registration AI Agent engages users in a conversation to seamlessly gather information for workshop sign-ups. Beyond just form-filling, it answers inquiries about classes, schedules, and ingredients. Customizable with your unique business data, tone, personality, and avatar, this AI Agent creates a personalized experience for every culinary enthusiast.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30009,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30009\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What details do I need to provide to register for the cooking workshop?\\\",\\\"What types of cuisines will be covered in the cooking workshop?\\\",\\\"Is there a fee to attend the cooking workshop?\\\",\\\"When is the registration deadline for the cooking workshop?\\\",\\\"How will I receive confirmation of my registration?\\\"]\",\n \"url\": \"/agent-directory/cooking-workshop-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/cooking-workshop-registration-form-paypal-standard\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Cooking Workshop Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671429682969-3ae273cf29be8e671eb4e43847f8bd8f-thumbnail.png\"\n },\n {\n \"id\": \"42081422398454\",\n \"slug\": \"workshop-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Workshop Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Event Planners and Workshop Coordinators with over 6 years of experience in managing diverse workshops and participant registrations.\\\",\\\"expertise\\\":\\\" This AI Agent streamlines the registration process for various workshops, guiding participants through options, schedules, and requirements.\\\",\\\"personality\\\":\\\" Friendly, organized, and engaging, this agent creates an inviting atmosphere, making participants feel excited about learning new skills.\\\",\\\"special_skills\\\":\\\" The AI Agent assists users in completing registration forms, provides answers to inquiries about workshop content, locations, and instructors, ensuring a smooth registration experience.\\\"}\",\n \"description\": \"The Workshop Registration AI Agent creates an interactive experience for participants, guiding them through registration while answering any questions about the event. Designed to be trained with your specific business data, it is customizable with a unique tone, personality, and avatar. This AI Agent not only fills out forms but also provides instant responses to inquiries, ensuring a smooth journey for every attendee.\",\n \"metaDescription\": \"The Workshop Registration AI Agent creates an interactive experience for participants, guiding them through registration while answering any questions about the event. Designed to be trained with your specific business data, it is customizable with a unique tone, personality, and avatar. This AI Agent not only fills out forms but also provides instant responses to inquiries, ensuring a smooth journey for every attendee.\",\n \"furtherDescription\": \"The Workshop Registration AI Agent creates an interactive experience for participants, guiding them through registration while answering any questions about the event. Designed to be trained with your specific business data, it is customizable with a unique tone, personality, and avatar. This AI Agent not only fills out forms but also provides instant responses to inquiries, ensuring a smooth journey for every attendee.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30009,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30009\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to register for a workshop?\\\",\\\"How long is each workshop session?\\\",\\\"Are materials provided during the workshop?\\\",\\\"What is the cancellation policy for the workshop?\\\",\\\"How will I receive my confirmation after registering?\\\"]\",\n \"url\": \"/agent-directory/workshop-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/workshop-registration-form-responsive\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Workshop Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/42081422398454-82cbe30d520e8947cfc00249cd0c8598-thumbnail.png\"\n },\n {\n \"id\": \"242671354266964\",\n \"slug\": \"art-workshop-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Art Workshop Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Professional Artists and Art Educators with over 7 years of experience in leading art workshops and classes.\\\",\\\"expertise\\\":\\\" This AI Agent streamlines the registration process for art workshops, assisting participants in selecting classes based on their interests and skill levels.\\\",\\\"personality\\\":\\\" Creative, expressive, and encouraging, this agent fosters a supportive environment that nurtures artistic exploration.\\\",\\\"special_skills\\\":\\\" The AI Agent helps users complete registration forms, answers inquiries about materials needed, class times, and instructor backgrounds, ensuring a fulfilling registration journey.\\\"}\",\n \"description\": \"The Art Workshop Registration AI Agent invites participants to explore their creativity by guiding them through the registration process. It answers all queries while collecting essential information, ensuring a smooth experience. Fully customizable, this AI Agent can be trained with your specific business data and reflects your brand's unique voice, personality, and avatar, making every interaction personal and inviting for aspiring artists.\",\n \"metaDescription\": \"The Art Workshop Registration AI Agent invites participants to explore their creativity by guiding them through the registration process. It answers all queries while collecting essential information, ensuring a smooth experience. Fully customizable, this AI Agent can be trained with your specific business data and reflects your brand's unique voice, personality, and avatar, making every interaction personal and inviting for aspiring artists.\",\n \"furtherDescription\": \"The Art Workshop Registration AI Agent invites participants to explore their creativity by guiding them through the registration process. It answers all queries while collecting essential information, ensuring a smooth experience. Fully customizable, this AI Agent can be trained with your specific business data and reflects your brand's unique voice, personality, and avatar, making every interaction personal and inviting for aspiring artists.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30009,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30009\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide to register for the art workshop?\\\",\\\"What types of art techniques will be covered in the workshop?\\\",\\\"Is there a fee to attend the art workshop?\\\",\\\"What is the deadline for registering for the art workshop?\\\",\\\"How will I receive confirmation of my registration?\\\"]\",\n \"url\": \"/agent-directory/art-workshop-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/art-workshop-registration-form-worldpay-uk-payment-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Art Workshop Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671354266964-79e2408b715e0f984d1347de2153e04f-thumbnail.png\"\n },\n {\n \"id\": \"242671145614959\",\n \"slug\": \"meditation-workshop-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Meditation Workshop Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Mindfulness Coaches and Wellness Instructors with over 6 years of experience in conducting meditation and mindfulness workshops.\\\",\\\"expertise\\\":\\\" This AI Agent simplifies the registration process for meditation workshops, guiding participants through session themes, schedules, and mindfulness practices.\\\",\\\"personality\\\":\\\" Calm, nurturing, and empathetic, this agent creates a peaceful atmosphere, encouraging participants to focus on their well-being.\\\",\\\"special_skills\\\":\\\" The AI Agent assists users in filling out registration forms, answers questions about meditation techniques, session structures, and instructor backgrounds, fostering a tranquil registration experience.\\\"}\",\n \"description\": \"The Meditation Workshop Registration AI Agent guides users through the registration process, creating a seamless dialogue that answers all their questions about workshops. Designed for easy customization, this agent can be trained with your specific business data and embodies unique personalities, tones, and avatars, ensuring an inviting experience for potential participants. Collect essential information while providing real-time support with every interaction.\",\n \"metaDescription\": \"The Meditation Workshop Registration AI Agent guides users through the registration process, creating a seamless dialogue that answers all their questions about workshops. Designed for easy customization, this agent can be trained with your specific business data and embodies unique personalities, tones, and avatars, ensuring an inviting experience for potential participants. Collect essential information while providing real-time support with every interaction.\",\n \"furtherDescription\": \"The Meditation Workshop Registration AI Agent guides users through the registration process, creating a seamless dialogue that answers all their questions about workshops. Designed for easy customization, this agent can be trained with your specific business data and embodies unique personalities, tones, and avatars, ensuring an inviting experience for potential participants. Collect essential information while providing real-time support with every interaction.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30009,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30009\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What details do I need to provide to register for the meditation workshop?\\\",\\\"What can I expect to learn during the meditation workshop?\\\",\\\"Is there a cost associated with attending the meditation workshop?\\\",\\\"When is the last day to register for the meditation workshop?\\\",\\\"How will I receive confirmation once I register for the workshop?\\\"]\",\n \"url\": \"/agent-directory/meditation-workshop-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/meditation-workshop-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Meditation Workshop Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671145614959-af7222b2a2a678d95c434b7b94630165-thumbnail.png\"\n },\n {\n \"id\": \"242671261894968\",\n \"slug\": \"baking-workshop-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Baking Workshop Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Professional Bakers and Culinary Instructors with over 5 years of experience in teaching baking techniques and conducting workshops.\\\",\\\"expertise\\\":\\\" This AI Agent facilitates the registration process for baking workshops, helping participants understand class offerings, required ingredients, and skill levels.\\\",\\\"personality\\\":\\\" Cheerful, enthusiastic, and supportive, this agent inspires a love for baking and makes participants feel excited about creating delicious treats.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through registration forms, answers inquiries about recipes, class structures, and baking tips, ensuring a delightful and engaging experience.\\\"}\",\n \"description\": \"Bring your pumpkin workshop to life with this AI Agent, expertly designed to guide participants through the registration process. It collects vital information while addressing any questions about the workshop details. Customize the agent’s personality, tone, and appearance to match your brand. With the ability to train the AI Agent using your own data, you’ll create a welcoming experience for all budding pumpkin enthusiasts!\",\n \"metaDescription\": \"Bring your pumpkin workshop to life with this AI Agent, expertly designed to guide participants through the registration process. It collects vital information while addressing any questions about the workshop details. Customize the agent’s personality, tone, and appearance to match your brand. With the ability to train the AI Agent using your own data, you’ll create a welcoming experience for all budding pumpkin enthusiasts!\",\n \"furtherDescription\": \"Bring your pumpkin workshop to life with this AI Agent, expertly designed to guide participants through the registration process. It collects vital information while addressing any questions about the workshop details. Customize the agent’s personality, tone, and appearance to match your brand. With the ability to train the AI Agent using your own data, you’ll create a welcoming experience for all budding pumpkin enthusiasts!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30009,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30009\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information is required to register for the baking workshop?\\\",\\\"What skills will I learn in the baking workshop?\\\",\\\"Is there a fee to participate in the baking workshop?\\\",\\\"When is the deadline for registering for the baking workshop?\\\",\\\"How will I receive confirmation of my registration?\\\"]\",\n \"url\": \"/agent-directory/baking-workshop-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/baking-workshop-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Baking Workshop Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671261894968-bf1cea78cd71877f1ef5cbb207d58ed7-thumbnail.png\"\n },\n {\n \"id\": \"242670867045967\",\n \"slug\": \"pumpkin-workshop-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Pumpkin Workshop Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Seasonal Event Coordinators and Craft Instructors with over 4 years of experience in conducting pumpkin-themed workshops.\\\",\\\"expertise\\\":\\\" This AI Agent streamlines the registration process for pumpkin workshops, helping participants choose activities like carving, decorating, and cooking with pumpkins.\\\",\\\"personality\\\":\\\" Fun, creative, and seasonal, this agent brings a festive spirit, encouraging participants to enjoy the artistry of pumpkin crafts.\\\",\\\"special_skills\\\":\\\" The AI Agent assists users in completing registration forms, answers questions about workshop options, materials, and schedules, ensuring a joyful and informative experience.\\\"}\",\n \"description\": \"Get ready for a season of creativity with this AI Agent, designed to guide participants through the pumpkin workshop registration process. It not only collects essential details but also answers any questions attendees may have about the workshop. Customize the agent to reflect your unique offerings and requirements. This interactive AI Agent ensures a smooth registration experience, helping you cultivate a fun and memorable event for all!\",\n \"metaDescription\": \"Get ready for a season of creativity with this AI Agent, designed to guide participants through the pumpkin workshop registration process. It not only collects essential details but also answers any questions attendees may have about the workshop. Customize the agent to reflect your unique offerings and requirements. This interactive AI Agent ensures a smooth registration experience, helping you cultivate a fun and memorable event for all!\",\n \"furtherDescription\": \"Get ready for a season of creativity with this AI Agent, designed to guide participants through the pumpkin workshop registration process. It not only collects essential details but also answers any questions attendees may have about the workshop. Customize the agent to reflect your unique offerings and requirements. This interactive AI Agent ensures a smooth registration experience, helping you cultivate a fun and memorable event for all!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30009,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30009\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What details do I need to provide to register for the pumpkin workshop?\\\",\\\"What activities will be included in the pumpkin workshop?\\\",\\\"Is there a fee to participate in the pumpkin workshop?\\\",\\\"When is the registration deadline for the pumpkin workshop?\\\",\\\"How will I receive confirmation of my registration?\\\"]\",\n \"url\": \"/agent-directory/pumpkin-workshop-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/pumpkin-workshop-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Pumpkin Workshop Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670867045967-d8c424edd3eec9438fd0582ea9ded53a-thumbnail.png\"\n },\n {\n \"id\": \"242671627091963\",\n \"slug\": \"business-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Business Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Business Consultants and Registration Specialists with over 10 years of experience in helping startups and established companies navigate registration processes.\\\",\\\"expertise\\\":\\\" This AI Agent facilitates the registration process for new businesses, guiding entrepreneurs through necessary forms and compliance requirements.\\\",\\\"personality\\\":\\\" Professional, knowledgeable, and supportive, this agent instills confidence in business owners, making the registration process straightforward.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through registration forms, answers questions about licensing, permits, and regulatory requirements, ensuring a seamless onboarding experience.\\\"}\",\n \"description\": \"Initiate your business journey with this AI Agent, designed to guide users through the registration process. It engages clients in informative conversations, gathering necessary information while answering any questions they might have about starting a business. Customize the agent with your unique requirements to create an impactful experience. This interactive AI Agent ensures that every business registration is smooth and efficient, laying a strong foundation for future success!\",\n \"metaDescription\": \"Initiate your business journey with this AI Agent, designed to guide users through the registration process. It engages clients in informative conversations, gathering necessary information while answering any questions they might have about starting a business. Customize the agent with your unique requirements to create an impactful experience. This interactive AI Agent ensures that every business registration is smooth and efficient, laying a strong foundation for future success!\",\n \"furtherDescription\": \"Initiate your business journey with this AI Agent, designed to guide users through the registration process. It engages clients in informative conversations, gathering necessary information while answering any questions they might have about starting a business. Customize the agent with your unique requirements to create an impactful experience. This interactive AI Agent ensures that every business registration is smooth and efficient, laying a strong foundation for future success!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30010,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30010\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information is required to register my business?\\\",\\\"How long does the business registration process take?\\\",\\\"Are there fees associated with registering my business?\\\",\\\"What happens after I submit my business registration application?\\\",\\\"How will I know when my business registration is approved?\\\"]\",\n \"url\": \"/agent-directory/business-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/business-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Business Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671627091963-a980685f3b7b7179d0136489f7c8790d-thumbnail.png\"\n },\n {\n \"id\": \"231974232661962\",\n \"slug\": \"supplier-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Supplier Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Procurement Managers and Supply Chain Experts with over 8 years of experience in managing supplier registrations and partnerships.\\\",\\\"expertise\\\":\\\" This AI Agent simplifies the supplier registration process, helping businesses understand requirements, documentation, and approval processes.\\\",\\\"personality\\\":\\\" Efficient, detail-oriented, and approachable, this agent creates a streamlined experience for suppliers looking to partner with organizations.\\\",\\\"special_skills\\\":\\\" The AI Agent assists users in completing registration forms, answers inquiries about supplier requirements, contract terms, and onboarding processes, ensuring clarity and ease.\\\"}\",\n \"description\": \"Welcome new suppliers with this AI Agent, designed to make the registration process engaging and efficient. It gathers important details while addressing any questions potential suppliers may have about your requirements. Customize the agent with your specific criteria to provide a personalized experience. This interactive AI Agent ensures that every supplier registration is completed smoothly, helping you build a strong network of partners!\",\n \"metaDescription\": \"Welcome new suppliers with this AI Agent, designed to make the registration process engaging and efficient. It gathers important details while addressing any questions potential suppliers may have about your requirements. Customize the agent with your specific criteria to provide a personalized experience. This interactive AI Agent ensures that every supplier registration is completed smoothly, helping you build a strong network of partners!\",\n \"furtherDescription\": \"Welcome new suppliers with this AI Agent, designed to make the registration process engaging and efficient. It gathers important details while addressing any questions potential suppliers may have about your requirements. Customize the agent with your specific criteria to provide a personalized experience. This interactive AI Agent ensures that every supplier registration is completed smoothly, helping you build a strong network of partners!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30010,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30010\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide for supplier registration?\\\",\\\"How long does the supplier registration process take?\\\",\\\"Are there any fees associated with supplier registration?\\\",\\\"What happens after I submit my supplier registration application?\\\",\\\"How will I know if my supplier registration is approved?\\\"]\",\n \"url\": \"/agent-directory/supplier-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/supplier-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Supplier Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/231974232661962-24f20bb50fc76ba1132f98dbf25d6601-thumbnail.png\"\n },\n {\n \"id\": \"242671253911959\",\n \"slug\": \"trade-mark-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Trade Mark Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Intellectual Property Lawyers and Trademark Specialists with over 7 years of experience in guiding businesses through trademark registration processes.\\\",\\\"expertise\\\":\\\" This AI Agent facilitates the registration of trademarks, helping applicants understand the necessary steps, requirements, and legal considerations.\\\",\\\"personality\\\":\\\" Knowledgeable, professional, and meticulous, this agent ensures that users feel confident and informed throughout the trademark registration journey.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through application forms, answers questions about trademark classifications, filing procedures, and deadlines, ensuring a smooth and comprehensive experience.\\\"}\",\n \"description\": \"Navigate the trademark registration process with ease using this AI Agent, designed for engaging client interactions. It gathers essential information while addressing any questions applicants may have about the process. Customize the agent with your specific requirements to create a unique experience. This efficient and interactive AI Agent ensures that every trademark registration is handled smoothly, helping you protect your intellectual property effectively!\",\n \"metaDescription\": \"Navigate the trademark registration process with ease using this AI Agent, designed for engaging client interactions. It gathers essential information while addressing any questions applicants may have about the process. Customize the agent with your specific requirements to create a unique experience. This efficient and interactive AI Agent ensures that every trademark registration is handled smoothly, helping you protect your intellectual property effectively!\",\n \"furtherDescription\": \"Navigate the trademark registration process with ease using this AI Agent, designed for engaging client interactions. It gathers essential information while addressing any questions applicants may have about the process. Customize the agent with your specific requirements to create a unique experience. This efficient and interactive AI Agent ensures that every trademark registration is handled smoothly, helping you protect your intellectual property effectively!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30010,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30010\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide to register a trademark?\\\",\\\"How long does the trademark registration process take?\\\",\\\"Are there any fees associated with trademark registration?\\\",\\\"What happens after I submit my trademark application?\\\",\\\"How will I know if my trademark is approved?\\\"]\",\n \"url\": \"/agent-directory/trade-mark-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/tm-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Trade Mark Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671253911959-7c4fa54874541c2ef01fcae0ec5398ad-thumbnail.png\"\n },\n {\n \"id\": \"242671118320953\",\n \"slug\": \"partner-application-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Partner Application AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Business Development Managers and Partnership Coordinators with over 6 years of experience in managing partnership applications and evaluations.\\\",\\\"expertise\\\":\\\" This AI Agent streamlines the partner application process, helping businesses navigate forms and understand partnership criteria.\\\",\\\"personality\\\":\\\" Collaborative, friendly, and professional, this agent encourages potential partners to explore opportunities for collaboration and growth.\\\",\\\"special_skills\\\":\\\" The AI Agent assists users in completing application forms, answers inquiries about partnership benefits, criteria, and timelines, ensuring a clear and engaging process.\\\"}\",\n \"description\": \"Boost your partnership application process with this AI Agent, crafted to make partner applications engaging and efficient. It guides applicants through the registration journey, collecting key information while addressing any questions they may have. Customize the agent with your organization’s specific criteria to create a unique experience. This interactive AI Agent ensures that every applicant feels informed and valued, paving the way for fruitful partnerships!\",\n \"metaDescription\": \"Boost your partnership application process with this AI Agent, crafted to make partner applications engaging and efficient. It guides applicants through the registration journey, collecting key information while addressing any questions they may have. Customize the agent with your organization’s specific criteria to create a unique experience. This interactive AI Agent ensures that every applicant feels informed and valued, paving the way for fruitful partnerships!\",\n \"furtherDescription\": \"Boost your partnership application process with this AI Agent, crafted to make partner applications engaging and efficient. It guides applicants through the registration journey, collecting key information while addressing any questions they may have. Customize the agent with your organization’s specific criteria to create a unique experience. This interactive AI Agent ensures that every applicant feels informed and valued, paving the way for fruitful partnerships!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30010,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30010\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide in the partner application form?\\\",\\\"How long does the partner application process take?\\\",\\\"Are there any fees associated with becoming a partner?\\\",\\\"What types of partnerships do you offer?\\\",\\\"How will I be notified about the status of my application?\\\"]\",\n \"url\": \"/agent-directory/partner-application-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/partner-application-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Partner Application AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671118320953-b1f70fb9b24fdcd1fc054696c6fb6df1-thumbnail.png\"\n },\n {\n \"id\": \"242671195358969\",\n \"slug\": \"business-coaching-intake-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Business Coaching Intake AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Business Coaches and Mentors with over 10 years of experience in facilitating coaching programs and client intake processes.\\\",\\\"expertise\\\":\\\" This AI Agent simplifies the intake process for business coaching, guiding clients through necessary information and program options.\\\",\\\"personality\\\":\\\" Supportive, insightful, and motivating, this agent helps clients feel valued and excited about their personal and professional growth.\\\",\\\"special_skills\\\":\\\" The AI Agent helps users fill out intake forms, answers questions about coaching methodologies, session structures, and pricing, ensuring a welcoming and informative experience.:\\\"}\",\n \"description\": \"Enhance your coaching intake process with this AI Agent, expertly designed for seamless client intake. It turns the onboarding process into an engaging dialogue, collecting essential information while answering any questions potential clients may have. Tailor the agent with your coaching specifics for a personalized touch. This efficient and interactive AI Agent ensures that every new client feels welcomed and informed, paving the way for successful coaching journeys!\",\n \"metaDescription\": \"Enhance your coaching intake process with this AI Agent, expertly designed for seamless client intake. It turns the onboarding process into an engaging dialogue, collecting essential information while answering any questions potential clients may have. Tailor the agent with your coaching specifics for a personalized touch. This efficient and interactive AI Agent ensures that every new client feels welcomed and informed, paving the way for successful coaching journeys!\",\n \"furtherDescription\": \"Enhance your coaching intake process with this AI Agent, expertly designed for seamless client intake. It turns the onboarding process into an engaging dialogue, collecting essential information while answering any questions potential clients may have. Tailor the agent with your coaching specifics for a personalized touch. This efficient and interactive AI Agent ensures that every new client feels welcomed and informed, paving the way for successful coaching journeys!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30010,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30010\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide for the coaching intake form?\\\",\\\"How long does the intake process take?\\\",\\\"Are there any fees associated with the coaching program?\\\",\\\"What types of coaching services are offered?\\\",\\\"How will I know if my application has been accepted?\\\"]\",\n \"url\": \"/agent-directory/business-coaching-intake-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/business-coaching-intake-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Business Coaching Intake AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671195358969-6774b7f2424c670b83c23edc4997fcba-thumbnail.png\"\n },\n {\n \"id\": \"242670825449969\",\n \"slug\": \"affiliate-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Affiliate Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Affiliate Marketing Specialists and Business Development Experts with over 5 years of experience in managing affiliate programs and registrations.\\\",\\\"expertise\\\":\\\" This AI Agent facilitates the registration process for affiliates, helping them understand program details, commission structures, and requirements.\\\",\\\"personality\\\":\\\" Engaging, enthusiastic, and resourceful, this agent inspires potential affiliates to join and actively participate in the affiliate program.\\\",\\\"special_skills\\\":\\\" The AI Agent assists users in completing registration forms, answers inquiries about affiliate benefits, marketing strategies, and reporting tools, ensuring a smooth onboarding experience.\\\"}\",\n \"description\": \"Kickstart your affiliate program effortlessly with this AI Agent, designed to simplify the registration process. It transforms the application into an engaging conversation, collecting vital details while answering potential affiliates' questions in real time. Customize the agent with your program's specific requirements for a tailored experience. This efficient and interactive AI Agent ensures that onboarding new affiliates is seamless and enjoyable, helping your network grow with ease!\",\n \"metaDescription\": \"Kickstart your affiliate program effortlessly with this AI Agent, designed to simplify the registration process. It transforms the application into an engaging conversation, collecting vital details while answering potential affiliates' questions in real time. Customize the agent with your program's specific requirements for a tailored experience. This efficient and interactive AI Agent ensures that onboarding new affiliates is seamless and enjoyable, helping your network grow with ease!\",\n \"furtherDescription\": \"Kickstart your affiliate program effortlessly with this AI Agent, designed to simplify the registration process. It transforms the application into an engaging conversation, collecting vital details while answering potential affiliates' questions in real time. Customize the agent with your program's specific requirements for a tailored experience. This efficient and interactive AI Agent ensures that onboarding new affiliates is seamless and enjoyable, helping your network grow with ease!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30010,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30010\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What are the eligibility requirements to become an affiliate?\\\",\\\"Are there any fees to join the affiliate program?\\\",\\\"How long does it take to get approved as an affiliate?\\\",\\\"What tools and resources are available to help me promote products?\\\",\\\"How will I receive my commission payments?\\\"]\",\n \"url\": \"/agent-directory/affiliate-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/affiliate-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Affiliate Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670825449969-228799b824b31f0708917c0d41b87a0a-thumbnail.png\"\n },\n {\n \"id\": \"242671647581969\",\n \"slug\": \"farm-business-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Farm Business Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Agricultural Consultants and Farm Management Experts with over 8 years of experience in helping farmers navigate business registrations.\\\",\\\"expertise\\\":\\\" This AI Agent simplifies the registration process for farm businesses, guiding users through necessary forms, permits, and compliance issues.\\\",\\\"personality\\\":\\\" Knowledgeable, practical, and friendly, this agent fosters a sense of community among farmers looking to establish their businesses.\\\",\\\"special_skills\\\":\\\" The AI Agent helps users complete registration forms, answers questions about agricultural regulations, funding opportunities, and best practices, ensuring clarity and ease.\\\"}\",\n \"description\": \"Cultivate a seamless registration experience with this AI Agent, designed specifically for farm businesses. It transforms the registration process into an interactive conversation, gathering essential information while addressing any questions from aspiring farmers. Tailor the agent with your farm's unique details to ensure a personalized touch. This efficient and engaging AI Agent simplifies the registration journey, helping new farm ventures take root effortlessly!\",\n \"metaDescription\": \"Cultivate a seamless registration experience with this AI Agent, designed specifically for farm businesses. It transforms the registration process into an interactive conversation, gathering essential information while addressing any questions from aspiring farmers. Tailor the agent with your farm's unique details to ensure a personalized touch. This efficient and engaging AI Agent simplifies the registration journey, helping new farm ventures take root effortlessly!\",\n \"furtherDescription\": \"Cultivate a seamless registration experience with this AI Agent, designed specifically for farm businesses. It transforms the registration process into an interactive conversation, gathering essential information while addressing any questions from aspiring farmers. Tailor the agent with your farm's unique details to ensure a personalized touch. This efficient and engaging AI Agent simplifies the registration journey, helping new farm ventures take root effortlessly!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30010,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30010\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information is required to register my farm business?\\\",\\\"Are there any fees associated with registering my farm business?\\\",\\\"How long does the registration process take?\\\",\\\"Do I need any permits or licenses to operate my farm business?\\\",\\\"How will I be notified once my farm business registration is approved?\\\"]\",\n \"url\": \"/agent-directory/farm-business-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/farm-business-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Farm Business Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671647581969-23a3f61f9b9f262c04ae4ec13c8ac5db-thumbnail.png\"\n },\n {\n \"id\": \"242671745902965\",\n \"slug\": \"project-intake-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Project Intake AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Project Managers and Operations Specialists with over 6 years of experience in managing project intake processes and evaluations.\\\",\\\"expertise\\\":\\\" This AI Agent streamlines the project intake process, helping organizations assess project ideas and understand requirements for approval.\\\",\\\"personality\\\":\\\" Analytical, detail-oriented, and approachable, this agent creates a structured yet friendly environment for project proposers.\\\",\\\"special_skills\\\":\\\" The AI Agent assists users in completing intake forms, answers questions about project scopes, evaluation criteria, and timelines, ensuring a comprehensive and engaging experience.\\\"}\",\n \"description\": \"Streamline your project submissions with this AI Agent, designed to transform the intake process into an engaging conversation. It not only collects essential project details but also addresses any questions clients may have, ensuring clarity and understanding. Customize the agent with your specific project criteria for a tailored experience. This efficient and interactive AI Agent makes project intake smoother, allowing your team to focus on what truly matters!\",\n \"metaDescription\": \"Streamline your project submissions with this AI Agent, designed to transform the intake process into an engaging conversation. It not only collects essential project details but also addresses any questions clients may have, ensuring clarity and understanding. Customize the agent with your specific project criteria for a tailored experience. This efficient and interactive AI Agent makes project intake smoother, allowing your team to focus on what truly matters!\",\n \"furtherDescription\": \"Streamline your project submissions with this AI Agent, designed to transform the intake process into an engaging conversation. It not only collects essential project details but also addresses any questions clients may have, ensuring clarity and understanding. Customize the agent with your specific project criteria for a tailored experience. This efficient and interactive AI Agent makes project intake smoother, allowing your team to focus on what truly matters!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30010,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30010\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to submit for a project intake request?\\\",\\\"What is the typical timeline for project approval?\\\",\\\"Are there specific criteria for project acceptance?\\\",\\\"Can I edit my project intake request after submission?\\\",\\\"How will I be notified about the status of my project intake request?\\\"]\",\n \"url\": \"/agent-directory/project-intake-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/project-intake-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Project Intake AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671745902965-ba2709afefe4ce35a7b79ce4e728daa8-thumbnail.png\"\n },\n {\n \"id\": \"242671700166958\",\n \"slug\": \"summer-camp-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Summer Camp Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Camp Directors and Youth Program Coordinators with over 5 years of experience in managing summer camp registrations and activities.\\\",\\\"expertise\\\":\\\" This AI Agent facilitates the registration process for summer camps, helping parents and campers navigate options, schedules, and health requirements.\\\",\\\"personality\\\":\\\" Friendly, enthusiastic, and supportive, this agent fosters excitement about summer adventures and learning experiences.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through registration forms, answers questions about camp activities, safety protocols, and schedules, ensuring a smooth and enjoyable registration process.\\\"}\",\n \"description\": \"Simplify your summer camp registration with this AI Agent! It transforms boring forms into fun conversations, making the process enjoyable for parents and campers alike. Not only does it help users fill out their details, but it also answers any questions they might have. This AI Agent can be trained with your business data and features customizable personalities, voice tones, and appearances, ensuring a cheerful and unique experience for agent users.\",\n \"metaDescription\": \"Simplify your summer camp registration with this AI Agent! It transforms boring forms into fun conversations, making the process enjoyable for parents and campers alike. Not only does it help users fill out their details, but it also answers any questions they might have. This AI Agent can be trained with your business data and features customizable personalities, voice tones, and appearances, ensuring a cheerful and unique experience for agent users.\",\n \"furtherDescription\": \"Simplify your summer camp registration with this AI Agent! It transforms boring forms into fun conversations, making the process enjoyable for parents and campers alike. Not only does it help users fill out their details, but it also answers any questions they might have. This AI Agent can be trained with your business data and features customizable personalities, voice tones, and appearances, ensuring a cheerful and unique experience for agent users.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30011,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30011\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide to register for summer camp?\\\",\\\"What are the camp dates and hours?\\\",\\\"Is there a fee to attend summer camp?\\\",\\\"What activities are included in the summer camp program?\\\",\\\"What should my child bring to summer camp?\\\"]\",\n \"url\": \"/agent-directory/summer-camp-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/summer-camp-detailed-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Summer Camp Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671700166958-05217ccc313616ad6e303e8a41fd85c3-thumbnail.png\"\n },\n {\n \"id\": \"242671555074964\",\n \"slug\": \"cheer-camp-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Cheer Camp Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Cheerleading Coaches and Event Coordinators with over 6 years of experience in managing cheer camps and registration processes.\\\",\\\"expertise\\\":\\\" This AI Agent simplifies the registration process for cheer camps, assisting participants in understanding skill levels, schedules, and cheer routines.\\\",\\\"personality\\\":\\\" Energetic, spirited, and motivational, this agent inspires young cheerleaders to embrace their passion and skills.\\\",\\\"special_skills\\\":\\\" The AI Agent helps users complete registration forms, answers questions about practice schedules, cheer requirements, and camp activities, creating an engaging and supportive experience.\\\"}\",\n \"description\": \"Add some excitement to your cheer camp registration with this AI Agent, designed to engage users in lively conversations. It simplifies the form-filling process while also answering all the questions from enthusiastic participants and their parents. Tailor this AI Agent with your specific business data for a more personalized touch. Plus, you can adjust its personality, voice tone, and appearance to create a fun and welcoming vibe for every cheerleader!\",\n \"metaDescription\": \"Add some excitement to your cheer camp registration with this AI Agent, designed to engage users in lively conversations. It simplifies the form-filling process while also answering all the questions from enthusiastic participants and their parents. Tailor this AI Agent with your specific business data for a more personalized touch. Plus, you can adjust its personality, voice tone, and appearance to create a fun and welcoming vibe for every cheerleader!\",\n \"furtherDescription\": \"Add some excitement to your cheer camp registration with this AI Agent, designed to engage users in lively conversations. It simplifies the form-filling process while also answering all the questions from enthusiastic participants and their parents. Tailor this AI Agent with your specific business data for a more personalized touch. Plus, you can adjust its personality, voice tone, and appearance to create a fun and welcoming vibe for every cheerleader!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30011,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30011\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What are the age requirements to register for cheer camp?\\\",\\\"What skills do I need to participate in cheer camp?\\\",\\\"Is there a cost associated with attending cheer camp?\\\",\\\"What should participants bring to cheer camp?\\\",\\\"Are parents allowed to attend cheer camp sessions?\\\"]\",\n \"url\": \"/agent-directory/cheer-camp-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/cheer-camp-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Cheer Camp Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671555074964-1348e83a7d6cc0a8a5124179b9bf92f9-thumbnail.png\"\n },\n {\n \"id\": \"232840388127964\",\n \"slug\": \"day-camp-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Day Camp Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Camp Directors and Child Development Experts with over 5 years of experience in managing day camp programs and registrations.\\\",\\\"expertise\\\":\\\" This AI Agent is designed to streamline the registration process for day camps, helping parents navigate forms related to schedules, activities, and health requirements.\\\",\\\"personality\\\":\\\" Friendly, energetic, and supportive, this agent creates a welcoming environment that makes parents and campers excited about the upcoming adventure.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through registration forms, answers questions about daily schedules, camp policies, and available activities, while ensuring a seamless and engaging experience from start to finish.\\\"}\",\n \"description\": \"Transform your day camp registration process with this AI Agent, which engages users in dynamic conversations. Not only does it simplify form filling, but it also answers clients' questions in real time. This AI Agent can be trained with your business data, ensuring tailored interactions. With customizable personalities, voice tones, and appearances, you can create a unique experience for your campers and their families.\",\n \"metaDescription\": \"Transform your day camp registration process with this AI Agent, which engages users in dynamic conversations. Not only does it simplify form filling, but it also answers clients' questions in real time. This AI Agent can be trained with your business data, ensuring tailored interactions. With customizable personalities, voice tones, and appearances, you can create a unique experience for your campers and their families.\",\n \"furtherDescription\": \"Transform your day camp registration process with this AI Agent, which engages users in dynamic conversations. Not only does it simplify form filling, but it also answers clients' questions in real time. This AI Agent can be trained with your business data, ensuring tailored interactions. With customizable personalities, voice tones, and appearances, you can create a unique experience for your campers and their families.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30011,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30011\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What age groups are accepted for the day camp?\\\",\\\"What should my child bring to the day camp?\\\",\\\"Are there any discounts for early registration?\\\",\\\"What is the camp\\\\u2019s daily schedule like?\\\",\\\"How do I contact the camp in case of an emergency?\\\"]\",\n \"url\": \"/agent-directory/day-camp-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/day-camp-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Day Camp Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/232840388127964-a923d1239694185d3e2fc74403abe7fa-thumbnail.png\"\n },\n {\n \"id\": \"242670779794980\",\n \"slug\": \"family-camp-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Family Camp Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Family Camp Coordinators and Recreation Specialists with over 6 years of experience in organizing family-oriented camping experiences.\\\",\\\"expertise\\\":\\\" This AI Agent facilitates the registration process for family camps, assisting families in understanding package options, accommodations, and group activities.\\\",\\\"personality\\\":\\\" Welcoming, nurturing, and community-focused, this agent fosters a sense of togetherness, encouraging families to create lasting memories in the great outdoors.\\\",\\\"special_skills\\\":\\\" The AI Agent helps users complete registration forms, provides real-time answers about family schedules, activity details, and pricing options, ensuring a smooth and enjoyable sign-up experience.\\\"}\",\n \"description\": \"Make family camp sign-ups a breeze with this AI Agent, designed to facilitate a fun and interactive registration process. It not only gathers essential details but also answers any questions families may have, ensuring everyone feels informed and excited. Tailor the agent with your camp’s specific information for a personalized touch. This efficient and engaging AI Agent transforms registration into an enjoyable experience for the whole family!\",\n \"metaDescription\": \"Make family camp sign-ups a breeze with this AI Agent, designed to facilitate a fun and interactive registration process. It not only gathers essential details but also answers any questions families may have, ensuring everyone feels informed and excited. Tailor the agent with your camp’s specific information for a personalized touch. This efficient and engaging AI Agent transforms registration into an enjoyable experience for the whole family!\",\n \"furtherDescription\": \"Make family camp sign-ups a breeze with this AI Agent, designed to facilitate a fun and interactive registration process. It not only gathers essential details but also answers any questions families may have, ensuring everyone feels informed and excited. Tailor the agent with your camp’s specific information for a personalized touch. This efficient and engaging AI Agent transforms registration into an enjoyable experience for the whole family!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30011,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30011\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What ages can participate in the family camp?\\\",\\\"Are meals included in the camp registration?\\\",\\\"Is there a limit to how many family members can attend?\\\",\\\"How can I check the camp\\\\u2019s location and directions?\\\",\\\"What is the refund policy if we can\\\\u2019t attend?\\\"]\",\n \"url\": \"/agent-directory/family-camp-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/family-camp-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Family Camp Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670779794980-ff56b8125d1c4d511f2cfc1a6caedbdc-thumbnail.png\"\n },\n {\n \"id\": \"242670977882978\",\n \"slug\": \"swim-camp-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Swim Camp Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Swim Coaches with over 7 years of experience in swim instruction and camp organization.\\\",\\\"expertise\\\":\\\" This AI Agent is tailored to simplify the registration process for swim camps, guiding families through skill level assessments, session schedules, and safety protocols.\\\",\\\"personality\\\":\\\" Inspiring, knowledgeable, and safety-conscious, this agent instills confidence in parents and swimmers alike, emphasizing the importance of skill development and water safety.\\\",\\\"special_skills\\\":\\\" The AI Agent assists users in filling out registration forms, answers questions about swim levels, instructor qualifications, and camp logistics, ensuring a fun and informative registration journey.\\\"}\",\n \"description\": \"Experience a streamlined registration process with this AI Agent, designed specifically for swim camps. It transforms form filling into an interactive conversation, efficiently gathering essential details while answering any questions from parents and swimmer campers. Customize the agent with your camp's specific information for a personalized experience. With this engaging and intuitive AI Agent, securing a spot in swim camp is as refreshing as a dip in the pool!\",\n \"metaDescription\": \"Experience a streamlined registration process with this AI Agent, designed specifically for swim camps. It transforms form filling into an interactive conversation, efficiently gathering essential details while answering any questions from parents and swimmer campers. Customize the agent with your camp's specific information for a personalized experience. With this engaging and intuitive AI Agent, securing a spot in swim camp is as refreshing as a dip in the pool!\",\n \"furtherDescription\": \"Experience a streamlined registration process with this AI Agent, designed specifically for swim camps. It transforms form filling into an interactive conversation, efficiently gathering essential details while answering any questions from parents and swimmer campers. Customize the agent with your camp's specific information for a personalized experience. With this engaging and intuitive AI Agent, securing a spot in swim camp is as refreshing as a dip in the pool!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30011,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30011\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to register for the swim camp?\\\",\\\"Are there different levels for swimmers in the camp?\\\",\\\"Is there a deadline for swim camp registration?\\\",\\\"What should I bring to the swim camp?\\\",\\\"How can I confirm my registration once I\\\\u2019ve submitted the form?\\\"]\",\n \"url\": \"/agent-directory/swim-camp-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/swim-camp-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Swim Camp Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670977882978-3e39e5504f4512178825f5e454cc7854-thumbnail.png\"\n },\n {\n \"id\": \"242670791932968\",\n \"slug\": \"tennis-summer-camp-application-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Tennis Summer Camp Application AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Tennis Coaches and Sports Administrators with over 8 years of experience in youth sports programs and camp registrations.\\\",\\\"expertise\\\":\\\" This AI Agent is designed to simplify the registration process for tennis summer camps, helping families understand skill levels, training schedules, and camp policies.\\\",\\\"personality\\\":\\\" Energetic, motivational, and friendly, this agent embodies the spirit of sportsmanship, inspiring young athletes to join and improve their skills.\\\",\\\"special_skills\\\":\\\" The AI Agent walks users through the application forms, answers inquiries about session times, equipment needs, and coaching staff, and provides real-time registration process.\\\"}\",\n \"description\": \"Serve up a seamless registration experience with this AI Agent, designed specifically for your tennis summer camp. It transforms the application process into an engaging conversation, collecting vital information while addressing questions from parents and campers alike. Customize the agent with your camp's unique details to ensure a tailored experience. Efficient and interactive, this AI Agent makes signing up for summer fun a breeze!\",\n \"metaDescription\": \"Serve up a seamless registration experience with this AI Agent, designed specifically for your tennis summer camp. It transforms the application process into an engaging conversation, collecting vital information while addressing questions from parents and campers alike. Customize the agent with your camp's unique details to ensure a tailored experience. Efficient and interactive, this AI Agent makes signing up for summer fun a breeze!\",\n \"furtherDescription\": \"Serve up a seamless registration experience with this AI Agent, designed specifically for your tennis summer camp. It transforms the application process into an engaging conversation, collecting vital information while addressing questions from parents and campers alike. Customize the agent with your camp's unique details to ensure a tailored experience. Efficient and interactive, this AI Agent makes signing up for summer fun a breeze!\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30011,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30011\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to apply for the Tennis Summer Camp?\\\",\\\"Are there different skill levels at the Tennis Summer Camp?\\\",\\\"Is there a registration fee for the Tennis Summer Camp?\\\",\\\"Do I need to bring my own tennis equipment?\\\",\\\"When is the application deadline for the Tennis Summer Camp?\\\"]\",\n \"url\": \"/agent-directory/tennis-summer-camp-application-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/tennis-summer-camp-application-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Tennis Summer Camp Application AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670791932968-df198dc422071fb6f3c469edd8864cb1-thumbnail.png\"\n },\n {\n \"id\": \"242671354939971\",\n \"slug\": \"summer-art-camp-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Summer Art Camp Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Art Educators and Camp Coordinators with over 7 years of experience in youth art programs and camp logistics.\\\",\\\"expertise\\\":\\\" This AI Agent facilitates the registration process for summer art camps, guiding participants through choices of classes, materials needed, and schedules.\\\",\\\"personality\\\":\\\" Creative, expressive, and inspiring, this agent encourages young artists to explore their talents and participate in enriching art experiences.\\\",\\\"special_skills\\\":\\\" The AI Agent helps users complete registration forms, answers questions about class availability, instructor backgrounds, and project showcases, while providing a fun and engaging atmosphere.\\\"}\",\n \"description\": \"Bring creativity to life with this AI Agent, designed to simplify sign-ups for your art camp. It turns the registration process into a smooth, interactive experience while answering parents' and campers' questions in real time. Customize the agent with your camp’s specific details, creating an engaging, informative journey for each applicant. Efficient, intuitive, and personalized, this AI Agent ensures your camp registration flows as smoothly as the art itself.\",\n \"metaDescription\": \"Bring creativity to life with this AI Agent, designed to simplify sign-ups for your art camp. It turns the registration process into a smooth, interactive experience while answering parents' and campers' questions in real time. Customize the agent with your camp’s specific details, creating an engaging, informative journey for each applicant. Efficient, intuitive, and personalized, this AI Agent ensures your camp registration flows as smoothly as the art itself.\",\n \"furtherDescription\": \"Bring creativity to life with this AI Agent, designed to simplify sign-ups for your art camp. It turns the registration process into a smooth, interactive experience while answering parents' and campers' questions in real time. Customize the agent with your camp’s specific details, creating an engaging, informative journey for each applicant. Efficient, intuitive, and personalized, this AI Agent ensures your camp registration flows as smoothly as the art itself.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30011,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30011\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide to register for the Summer Art Camp?\\\",\\\"Are there different art classes I can choose from at the camp?\\\",\\\"Is there an age limit for attending the Summer Art Camp?\\\",\\\"Do I need to bring my own art supplies?\\\",\\\"When is the registration deadline for the Summer Art Camp?\\\"]\",\n \"url\": \"/agent-directory/summer-art-camp-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/summer-art-camp-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Summer Art Camp Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671354939971-c3a21de36c8634a9c654b2c2d92a6072-thumbnail.png\"\n },\n {\n \"id\": \"242671299477976\",\n \"slug\": \"volunteer-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Volunteer Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Nonprofit Organizers and Volunteer Coordinators with over 10 years of experience in recruiting and managing volunteers across various initiatives.\\\",\\\"expertise\\\":\\\" This AI Agent facilitates the general volunteer registration process, helping organizations fill roles based on skills and interests.\\\",\\\"personality\\\":\\\" Compassionate, dedicated, and empowering, this agent motivates individuals to engage in meaningful volunteer opportunities that benefit the community.\\\",\\\"special_skills\\\":\\\" The AI Agent assists users in completing registration forms, answers inquiries about specific projects, commitments, and training opportunities, while promoting a strong sense of community involvement.\\\"}\",\n \"description\": \"This AI Agent streamlines volunteer sign-ups by transforming forms into interactive conversations. It not only gathers essential details but also answers any questions volunteers may have. Tailored to your organization’s needs, you can train the agent with your own data, ensuring a personalized, efficient, and engaging registration process for every volunteer. Simplify onboarding and make volunteer engagement seamless.\",\n \"metaDescription\": \"This AI Agent streamlines volunteer sign-ups by transforming forms into interactive conversations. It not only gathers essential details but also answers any questions volunteers may have. Tailored to your organization’s needs, you can train the agent with your own data, ensuring a personalized, efficient, and engaging registration process for every volunteer. Simplify onboarding and make volunteer engagement seamless.\",\n \"furtherDescription\": \"This AI Agent streamlines volunteer sign-ups by transforming forms into interactive conversations. It not only gathers essential details but also answers any questions volunteers may have. Tailored to your organization’s needs, you can train the agent with your own data, ensuring a personalized, efficient, and engaging registration process for every volunteer. Simplify onboarding and make volunteer engagement seamless.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30012,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30012\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to register as a volunteer?\\\",\\\"Can I volunteer for multiple activities?\\\",\\\"Is there a minimum number of hours required for volunteering?\\\",\\\"Do I need any prior experience to volunteer?\\\",\\\"What is the registration deadline for volunteers?\\\"]\",\n \"url\": \"/agent-directory/volunteer-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/volunteer-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Volunteer Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671299477976-30c431208ec12dd90a51f0f8d153f132-thumbnail.png\"\n },\n {\n \"id\": \"20864275682562\",\n \"slug\": \"festival-volunteer-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Festival Volunteer Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Event Coordinators and Volunteer Managers with over 6 years of experience in managing large-scale festival operations and volunteer engagement.\\\",\\\"expertise\\\":\\\" This AI Agent streamlines the volunteer registration process for festivals, helping individuals understand roles, schedules, and expectations.\\\",\\\"personality\\\":\\\" Enthusiastic, community-oriented, and friendly, this agent creates a welcoming environment for volunteers eager to contribute to local events.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through registration forms, provides real-time answers about volunteer responsibilities, training sessions, and festival logistics, ensuring a seamless onboarding experience.\\\"}\",\n \"description\": \"Make festival volunteer sign-ups fun and efficient with this AI Agent. It engages volunteers in lively, dynamic conversations, collecting details and answering their questions in real-time. Tailor the agent with your festival’s unique data to ensure a seamless and personalized experience. From onboarding to answering queries, this AI Agent turns registration into an intuitive, engaging process that fits your event's vibe perfectly.\",\n \"metaDescription\": \"Make festival volunteer sign-ups fun and efficient with this AI Agent. It engages volunteers in lively, dynamic conversations, collecting details and answering their questions in real-time. Tailor the agent with your festival’s unique data to ensure a seamless and personalized experience. From onboarding to answering queries, this AI Agent turns registration into an intuitive, engaging process that fits your event's vibe perfectly.\",\n \"furtherDescription\": \"Make festival volunteer sign-ups fun and efficient with this AI Agent. It engages volunteers in lively, dynamic conversations, collecting details and answering their questions in real-time. Tailor the agent with your festival’s unique data to ensure a seamless and personalized experience. From onboarding to answering queries, this AI Agent turns registration into an intuitive, engaging process that fits your event's vibe perfectly.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30012,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30012\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide to register as a festival volunteer?\\\",\\\"Can I choose which shifts to volunteer for during the festival?\\\",\\\"Do I need any prior experience to volunteer at the festival?\\\",\\\"Is there a minimum time commitment for volunteering at the festival?\\\",\\\"When is the registration deadline for festival volunteers?\\\"]\",\n \"url\": \"/agent-directory/festival-volunteer-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/festival-volunteer-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Festival Volunteer Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/20864275682562-05c952213d5396962b51f1350055506b-thumbnail.png\"\n },\n {\n \"id\": \"242670805345962\",\n \"slug\": \"cleanup-volunteer-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Cleanup Volunteer Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Environmental Activists and Community Organizers with over 5 years of experience in coordinating cleanup events and volunteer management.\\\",\\\"expertise\\\":\\\" This AI Agent supports the registration process for community cleanup initiatives, ensuring volunteers understand logistics, safety measures, and equipment needed.\\\",\\\"personality\\\":\\\" Passionate, proactive, and team-oriented, this agent instills a sense of environmental stewardship and community pride among volunteers.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through the registration forms, answers questions about cleanup locations, schedules, and environmental impact, while fostering a collaborative spirit.\\\"}\",\n \"description\": \"Engage volunteers seamlessly with this AI Agent, designed to turn your registration process into an interactive conversation. Not only does it help potential volunteers fill out forms, but it also answers any questions they might have. Easily train it with your own organization’s data to tailor responses and collect information more efficiently, all while boosting volunteer engagement for your river cleanup efforts\",\n \"metaDescription\": \"Engage volunteers seamlessly with this AI Agent, designed to turn your registration process into an interactive conversation. Not only does it help potential volunteers fill out forms, but it also answers any questions they might have. Easily train it with your own organization’s data to tailor responses and collect information more efficiently, all while boosting volunteer engagement for your river cleanup efforts\",\n \"furtherDescription\": \"Engage volunteers seamlessly with this AI Agent, designed to turn your registration process into an interactive conversation. Not only does it help potential volunteers fill out forms, but it also answers any questions they might have. Easily train it with your own organization’s data to tailor responses and collect information more efficiently, all while boosting volunteer engagement for your river cleanup efforts\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30012,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30012\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information is required to sign up for the Cleanup Volunteer event?\\\",\\\"Can I choose which location to volunteer for?\\\",\\\"Is there an age limit for participating in the cleanup event?\\\",\\\"Do I need to bring my own cleaning supplies?\\\",\\\"When is the registration deadline for the Cleanup Volunteer event?\\\"]\",\n \"url\": \"/agent-directory/cleanup-volunteer-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/cleanup-volunteer-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Cleanup Volunteer Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670805345962-60c1e00da334eacfa85bdfbd0cc2c2d4-thumbnail.png\"\n },\n {\n \"id\": \"242671430827962\",\n \"slug\": \"volunteer-work-week-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Volunteer Work Week Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Project Managers with over 8 years of experience in organizing volunteer work weeks and team-building activities.\\\",\\\"expertise\\\":\\\" This AI Agent streamlines the registration process for volunteer work weeks, helping teams understand project details and schedule commitments.\\\",\\\"personality\\\":\\\" Friendly, organized, and motivating, this agent encourages teamwork and collaboration among volunteers, ensuring a productive experience.\\\",\\\"special_skills\\\":\\\" The AI Agent assists users in completing registration forms, answers inquiries about project descriptions, volunteer roles, and logistics.\\\"}\",\n \"description\": \"Streamline your volunteer event sign-ups with our AI-powered agent. It guides participants through the registration process, asks essential questions, and answers any inquiries in real-time. Make volunteer recruitment more engaging, efficient, and hassle-free.\",\n \"metaDescription\": \"Streamline your volunteer event sign-ups with our AI-powered agent. It guides participants through the registration process, asks essential questions, and answers any inquiries in real-time. Make volunteer recruitment more engaging, efficient, and hassle-free.\",\n \"furtherDescription\": \"Streamline your volunteer event sign-ups with our AI-powered agent. It guides participants through the registration process, asks essential questions, and answers any inquiries in real-time. Make volunteer recruitment more engaging, efficient, and hassle-free.\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30012,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30012\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What details do I need to provide to register for Volunteer Work Week?\\\",\\\"Are there specific volunteer activities to choose from during Volunteer Work Week?\\\",\\\"What is the age requirement for participating in Volunteer Work Week?\\\",\\\"Is there a deadline for registration for Volunteer Work Week?\\\",\\\"Will I receive confirmation of my registration and details about my selected activities?\\\"]\",\n \"url\": \"/agent-directory/volunteer-work-week-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/volunteer-work-week-registration-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Volunteer Work Week Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242671430827962-17ed627a73de27d1a85025f9f6cfe540-thumbnail.png\"\n },\n {\n \"id\": \"242670900427959\",\n \"slug\": \"church-reopening-volunteer-registration-ai-agent\",\n \"canonical\": \"\",\n \"title\": \"Church Reopening Volunteer Registration AI Agent\",\n \"avatar\": \"\",\n \"identity\": \"{\\\"trained_by\\\":\\\"Community Organizers with over 6 years of experience in church operations and volunteer coordination.\\\",\\\"expertise\\\":\\\" This AI Agent facilitates the registration process for volunteers supporting church reopening efforts, helping them understand roles, safety protocols, and service schedules.\\\",\\\"personality\\\":\\\" Warm, welcoming, and supportive, this agent embodies the values of community and faith, encouraging volunteers to contribute meaningfully.\\\",\\\"special_skills\\\":\\\" The AI Agent guides users through registration forms, answers questions about service schedules, volunteer responsibilities, and safety measures, fostering a sense of belonging and purpose.\\\"}\",\n \"description\": \"This AI Agent simplifies volunteer registration for churches by guiding applicants through an interactive, conversational process. Not only does it collect information efficiently, but it also answers any questions volunteers may have. Customize and train the agent with your church’s specific reopening protocols, ensuring a seamless experience for everyone involved. Perfect for engaging and organizing your volunteer teams with ease\",\n \"metaDescription\": \"This AI Agent simplifies volunteer registration for churches by guiding applicants through an interactive, conversational process. Not only does it collect information efficiently, but it also answers any questions volunteers may have. Customize and train the agent with your church’s specific reopening protocols, ensuring a seamless experience for everyone involved. Perfect for engaging and organizing your volunteer teams with ease\",\n \"furtherDescription\": \"This AI Agent simplifies volunteer registration for churches by guiding applicants through an interactive, conversational process. Not only does it collect information efficiently, but it also answers any questions volunteers may have. Customize and train the agent with your church’s specific reopening protocols, ensuring a seamless experience for everyone involved. Perfect for engaging and organizing your volunteer teams with ease\",\n \"clonecount\": 0,\n \"language\": \"en\",\n \"domain\": \"jotform.com\",\n \"featured\": \"\",\n \"featuredCategory\": 30012,\n \"keywords\": \"\",\n \"created\": \"2024-09-25 11:25:52\",\n \"updated\": \"2024-09-25 11:25:52\",\n \"categories\": \"30012\",\n \"userip\": \"\",\n \"username\": \"jotform\",\n \"tags\": \"\",\n \"public\": 1,\n \"moderated\": 1,\n \"priority\": \"\",\n \"trend\": \"\",\n \"unlisted\": 0,\n \"schema\": \"\",\n \"original_template\": \"\",\n \"questions\": \"[\\\"What information do I need to provide to register as a volunteer?\\\",\\\"How can I update my availability after I\\\\u2019ve registered?\\\",\\\"Are there any training sessions for new volunteers?\\\",\\\"What is the time commitment for volunteering?\\\",\\\"How will I know if my registration was successful?\\\"]\",\n \"url\": \"/agent-directory/church-reopening-volunteer-registration-ai-agent\",\n \"editorURL\": \"\",\n \"previewURL\": \"\",\n \"formPreviewURL\": \"https://www.jotform.com/form-templates/church-reopening-volunteer-request-form\",\n \"tabs\": \"\",\n \"variable\": \"\",\n \"categoryNames\": \"\",\n \"metaTitle\": \"Church Reopening Volunteer Registration AI Agent\",\n \"screenshot\": \"https://files.jotform.com/jotformapps/242670900427959-17a66d4411a4a582f6594723783136d9-thumbnail.png\"\n }\n];\n","/* eslint-disable max-lines */\n/* eslint-disable max-len */\n/* eslint-disable quotes */\n/* eslint-disable quote-props */\nexport default [\n {\n \"id\": 10001,\n \"name\": \"Education & Administration\",\n \"title\": \"Education & Administration\",\n \"slug\": \"education-administration\",\n \"canonical\": \"\",\n \"order\": 1,\n \"type\": \"type\",\n \"count\": 2,\n \"description\": \"Explore our tailored forms designed specifically for the education and administration sectors. Streamline processes like student registration, feedback collection, event planning, and administrative tasks with our easy-to-use form builder. Empower your institution with efficient and organized data management solutions, ensuring seamless operations and improved communication.\",\n \"pageDescription\": \"Explore our tailored forms designed specifically for the education and administration sectors. Streamline processes like student registration, feedback collection, event planning, and administrative tasks with our easy-to-use form builder. Empower your institution with efficient and organized data management solutions, ensuring seamless operations and improved communication.\",\n \"pageTitle\": \"Education & Administration\",\n \"metaTitle\": \"Education & Administration\",\n \"metaKeywords\": \"Education & Administration\",\n \"disclaimer\": \"\",\n \"featured\": 0,\n \"furtherDescription\": \"\",\n \"relatedCategories\": \"\",\n \"parent\": \"\",\n \"parentCategories\": \"\",\n \"schema\": \"\",\n \"total\": 2,\n \"hasSubCategoryTemplate\": \"\",\n \"url\": \"/agent-directory/category/education-administration\",\n \"color\": \"#FAD5B4\"\n },\n {\n \"id\": 10002,\n \"name\": \"Hospitality & Travel\",\n \"title\": \"Hospitality & Travel\",\n \"slug\": \"hospitality-travel\",\n \"canonical\": \"\",\n \"order\": 2,\n \"type\": \"type\",\n \"count\": 2,\n \"description\": \"Enhance guest experiences and streamline operations with our form solutions designed for the hospitality and travel industry. Our form builder empowers hotels, travel agencies, tour operators, and event planners to create customized forms for reservations, guest feedback, check-ins, room service requests, and much more. Simplify your booking processes, gather valuable customer insights, and ensure smooth communication with your guests.\\n\\nFrom personalized travel itineraries to event registration and feedback collection, our forms are adaptable to your unique needs, helping you deliver exceptional service and boost customer satisfaction. Whether you’re managing a boutique hotel, a large resort, or planning a travel event, our platform provides the tools you need to stay organized, save time, and focus on what matters most—creating memorable experiences for your clients. Discover how our flexible and user-friendly forms can transform your hospitality and travel operations, making every guest interaction more efficient and enjoyable.\",\n \"pageDescription\": \"Enhance guest experiences and streamline operations with our form solutions designed for the hospitality and travel industry. Our form builder empowers hotels, travel agencies, tour operators, and event planners to create customized forms for reservations, guest feedback, check-ins, room service requests, and much more. Simplify your booking processes, gather valuable customer insights, and ensure smooth communication with your guests.\\n\\n From personalized travel itineraries to event registration and feedback collection, our forms are adaptable to your unique needs, helping you deliver exceptional service and boost customer satisfaction. Whether you’re managing a boutique hotel, a large resort, or planning a travel event, our platform provides the tools you need to stay organized, save time, and focus on what matters most—creating memorable experiences for your clients. Discover how our flexible and user-friendly forms can transform your hospitality and travel operations, making every guest interaction more efficient and enjoyable.\",\n \"pageTitle\": \"Hospitality & Travel\",\n \"metaTitle\": \"Hospitality & Travel\",\n \"metaKeywords\": \"Hospitality & Travel\",\n \"disclaimer\": \"\",\n \"featured\": 0,\n \"furtherDescription\": \"\",\n \"relatedCategories\": \"\",\n \"parent\": \"\",\n \"parentCategories\": \"\",\n \"schema\": \"\",\n \"total\": 2,\n \"hasSubCategoryTemplate\": \"\",\n \"url\": \"/agent-directory/category/hospitality-travel\",\n \"color\": \"#BEEEC0\"\n },\n {\n \"id\": 10003,\n \"name\": \"Healthcare & Wellness\",\n \"title\": \"Healthcare & Wellness\",\n \"slug\": \"healthcare-wellness\",\n \"canonical\": \"\",\n \"order\": 3,\n \"type\": \"type\",\n \"count\": 3,\n \"description\": \"Optimize patient care and streamline administrative processes with our form solutions tailored for the healthcare and wellness sectors.\\n\\n Our form builder allows clinics, hospitals, wellness centers, and private practices to easily create and manage forms for patient intake, appointment scheduling, consent forms, feedback collection, and more.\\n\\n Enhance your patient experience by reducing wait times, minimizing paperwork, and ensuring accurate data collection.\\n\\n Our forms are designed to support HIPAA compliance and secure patient data management, providing peace of mind for both you and your patients.\\n\\n From telehealth consent forms to wellness assessments and follow-up surveys, our versatile forms empower your practice to deliver efficient and compassionate care.\",\n \"pageDescription\": \"Optimize patient care and streamline administrative processes with our form solutions tailored for the healthcare and wellness sectors.\\n\\n Our form builder allows clinics, hospitals, wellness centers, and private practices to easily create and manage forms for patient intake, appointment scheduling, consent forms, feedback collection, and more.\\n\\n Enhance your patient experience by reducing wait times, minimizing paperwork, and ensuring accurate data collection.\\n\\n Our forms are designed to support HIPAA compliance and secure patient data management, providing peace of mind for both you and your patients.\\n\\n From telehealth consent forms to wellness assessments and follow-up surveys, our versatile forms empower your practice to deliver efficient and compassionate care.\",\n \"pageTitle\": \"Healthcare & Wellness\",\n \"metaTitle\": \"Healthcare & Wellness\",\n \"metaKeywords\": \"Healthcare & Wellness\",\n \"disclaimer\": \"\",\n \"featured\": 0,\n \"furtherDescription\": \"\",\n \"relatedCategories\": \"\",\n \"parent\": \"\",\n \"parentCategories\": \"\",\n \"schema\": \"\",\n \"total\": 3,\n \"hasSubCategoryTemplate\": \"\",\n \"url\": \"/agent-directory/category/healthcare-wellness\",\n \"color\": \"#FAD5B4\"\n },\n {\n \"id\": 10004,\n \"name\": \"Food & Beverage\",\n \"title\": \"Food & Beverage\",\n \"slug\": \"food-beverage\",\n \"canonical\": \"\",\n \"order\": 4,\n \"type\": \"type\",\n \"count\": 0,\n \"description\": \"Food & Beverage\",\n \"pageDescription\": \"Food & Beverage\",\n \"pageTitle\": \"Food & Beverage\",\n \"metaTitle\": \"Food & Beverage\",\n \"metaKeywords\": \"Food & Beverage\",\n \"disclaimer\": \"\",\n \"featured\": 0,\n \"furtherDescription\": \"\",\n \"relatedCategories\": \"\",\n \"parent\": \"\",\n \"parentCategories\": \"\",\n \"schema\": \"\",\n \"total\": 0,\n \"hasSubCategoryTemplate\": \"\",\n \"url\": \"/agent-directory/category/food-beverage\",\n \"color\": \"#C3F0EB\"\n },\n {\n \"id\": 10005,\n \"name\": \"Retail & Commerce\",\n \"title\": \"Retail & Commerce\",\n \"slug\": \"retail-commerce\",\n \"canonical\": \"\",\n \"order\": 5,\n \"type\": \"type\",\n \"count\": 2,\n \"description\": \"Drive sales and enhance customer engagement with our form solutions tailored for the retail and commerce industry.\\n\\n Our form builder helps businesses create customized order forms, customer feedback surveys, product inquiries, and more, making it easy to gather essential information and streamline transactions.\\n\\n Whether you’re managing an online store, a brick-and-mortar shop, or a multi-channel retail operation, our forms simplify the way you handle orders, returns, and customer communication.\\n\\n With our user-friendly platform, you can effortlessly capture leads, run promotions, and collect valuable insights to optimize your sales strategy.\\n\\n Boost your business efficiency and deliver a seamless shopping experience by leveraging our adaptable and secure forms to meet the dynamic needs of today’s retail and commerce landscape.\",\n \"pageDescription\": \"Drive sales and enhance customer engagement with our form solutions tailored for the retail and commerce industry.\\n\\n Our form builder helps businesses create customized order forms, customer feedback surveys, product inquiries, and more, making it easy to gather essential information and streamline transactions.\\n\\n Whether you’re managing an online store, a brick-and-mortar shop, or a multi-channel retail operation, our forms simplify the way you handle orders, returns, and customer communication.\\n\\n With our user-friendly platform, you can effortlessly capture leads, run promotions, and collect valuable insights to optimize your sales strategy.\\n\\n Boost your business efficiency and deliver a seamless shopping experience by leveraging our adaptable and secure forms to meet the dynamic needs of today’s retail and commerce landscape.\",\n \"pageTitle\": \"Retail & Commerce\",\n \"metaTitle\": \"Retail & Commerce\",\n \"metaKeywords\": \"Retail & Commerce\",\n \"disclaimer\": \"\",\n \"featured\": 0,\n \"furtherDescription\": \"\",\n \"relatedCategories\": \"\",\n \"parent\": \"\",\n \"parentCategories\": \"\",\n \"schema\": \"\",\n \"total\": 2,\n \"hasSubCategoryTemplate\": \"\",\n \"url\": \"/agent-directory/category/retail-commerce\",\n \"color\": \"#BFBCFF\"\n },\n {\n \"id\": 10006,\n \"name\": \"Financial & Legal\",\n \"title\": \"Financial & Legal\",\n \"slug\": \"financial-legal\",\n \"canonical\": \"\",\n \"order\": 6,\n \"type\": \"type\",\n \"count\": 0,\n \"description\": \"Financial & Legal\",\n \"pageDescription\": \"Financial & Legal\",\n \"pageTitle\": \"Financial & Legal\",\n \"metaTitle\": \"Financial & Legal\",\n \"metaKeywords\": \"Financial & Legal\",\n \"disclaimer\": \"\",\n \"featured\": 0,\n \"furtherDescription\": \"\",\n \"relatedCategories\": \"\",\n \"parent\": \"\",\n \"parentCategories\": \"\",\n \"schema\": \"\",\n \"total\": 0,\n \"hasSubCategoryTemplate\": \"\",\n \"url\": \"/agent-directory/category/financial-legal\",\n \"color\": \"#B2E1EF\"\n },\n {\n \"id\": 10007,\n \"name\": \"Real Estate & Property\",\n \"title\": \"Real Estate & Property\",\n \"slug\": \"real-estate-property\",\n \"canonical\": \"\",\n \"order\": 7,\n \"type\": \"type\",\n \"count\": 1,\n \"description\": \"Transform the way you manage properties and connect with clients using our form solutions designed for the real estate and property industry.\\n\\n Our form builder enables real estate agents, property managers, and developers to create customized forms for property listings, rental applications, lead capture, open house registrations, client feedback, and more.\\n\\n Streamline your operations by automating tasks such as collecting client details, scheduling viewings, and processing maintenance requests.\\n\\n Enhance your client experience with easy-to-use forms that provide a professional and efficient way to gather and manage information.\\n\\n Whether you’re handling residential sales, commercial leases, or property management, our versatile forms help you stay organized, save time, and focus on closing deals and building client relationships.\\n\\n Elevate your real estate business with our secure, adaptable forms designed to meet the unique needs of the property industry.\",\n \"pageDescription\": \"Transform the way you manage properties and connect with clients using our form solutions designed for the real estate and property industry.\\n\\n Our form builder enables real estate agents, property managers, and developers to create customized forms for property listings, rental applications, lead capture, open house registrations, client feedback, and more.\\n\\n Streamline your operations by automating tasks such as collecting client details, scheduling viewings, and processing maintenance requests.\\n\\n Enhance your client experience with easy-to-use forms that provide a professional and efficient way to gather and manage information.\\n\\n Whether you’re handling residential sales, commercial leases, or property management, our versatile forms help you stay organized, save time, and focus on closing deals and building client relationships.\\n\\n Elevate your real estate business with our secure, adaptable forms designed to meet the unique needs of the property industry.\",\n \"pageTitle\": \"Real Estate & Property\",\n \"metaTitle\": \"Real Estate & Property\",\n \"metaKeywords\": \"Real Estate & Property\",\n \"disclaimer\": \"\",\n \"featured\": 0,\n \"furtherDescription\": \"\",\n \"relatedCategories\": \"\",\n \"parent\": \"\",\n \"parentCategories\": \"\",\n \"schema\": \"\",\n \"total\": 1,\n \"hasSubCategoryTemplate\": \"\",\n \"url\": \"/agent-directory/category/real-estate-property\",\n \"color\": \"#FFDF8C\"\n },\n {\n \"id\": 10008,\n \"name\": \"Logistics & Transportation\",\n \"title\": \"Logistics & Transportation\",\n \"slug\": \"logistics-transportation\",\n \"canonical\": \"\",\n \"order\": 8,\n \"type\": \"type\",\n \"count\": 0,\n \"description\": \"Logistics & Transportation\",\n \"pageDescription\": \"Logistics & Transportation\",\n \"pageTitle\": \"Logistics & Transportation\",\n \"metaTitle\": \"Logistics & Transportation\",\n \"metaKeywords\": \"Logistics & Transportation\",\n \"disclaimer\": \"\",\n \"featured\": 0,\n \"furtherDescription\": \"\",\n \"relatedCategories\": \"\",\n \"parent\": \"\",\n \"parentCategories\": \"\",\n \"schema\": \"\",\n \"total\": 0,\n \"hasSubCategoryTemplate\": \"\",\n \"url\": \"/agent-directory/category/logistics-transportation\",\n \"color\": \"#FAD5B4\"\n },\n {\n \"id\": 10009,\n \"name\": \"Corporate & Professional Services\",\n \"title\": \"Corporate & Professional Services\",\n \"slug\": \"corporate-professional-services\",\n \"canonical\": \"\",\n \"order\": 9,\n \"type\": \"type\",\n \"count\": 1,\n \"description\": \"Enhance your business operations and client interactions with our form solutions tailored for the corporate and professional services sectors.\\n\\n Our form builder empowers consulting firms, legal practices, financial services, HR departments, and other professional service providers to create customized forms for client intake, service requests, feedback collection, contracts, surveys, and more.\\n\\n Simplify complex workflows, improve data accuracy, and save time by automating tasks such as document submission, appointment scheduling, and client communication.\\n\\n With our secure and compliant forms, you can confidently manage sensitive information, ensuring your business maintains the highest standards of professionalism and data privacy.\\n\\n Whether you're onboarding new clients, collecting project details, or gathering feedback, our adaptable forms help you deliver efficient, organized, and client-focused services.\\n\\n Streamline your processes and elevate your service delivery with our versatile form solutions designed to meet the unique needs of corporate and professional services.\",\n \"pageDescription\": \"Enhance your business operations and client interactions with our form solutions tailored for the corporate and professional services sectors.\\n\\n Our form builder empowers consulting firms, legal practices, financial services, HR departments, and other professional service providers to create customized forms for client intake, service requests, feedback collection, contracts, surveys, and more.\\n\\n Simplify complex workflows, improve data accuracy, and save time by automating tasks such as document submission, appointment scheduling, and client communication.\\n\\n With our secure and compliant forms, you can confidently manage sensitive information, ensuring your business maintains the highest standards of professionalism and data privacy.\\n\\n Whether you're onboarding new clients, collecting project details, or gathering feedback, our adaptable forms help you deliver efficient, organized, and client-focused services.\\n\\n Streamline your processes and elevate your service delivery with our versatile form solutions designed to meet the unique needs of corporate and professional services.\",\n \"pageTitle\": \"Corporate & Professional Services\",\n \"metaTitle\": \"Corporate & Professional Services\",\n \"metaKeywords\": \"Corporate & Professional Services\",\n \"disclaimer\": \"\",\n \"featured\": 0,\n \"furtherDescription\": \"\",\n \"relatedCategories\": \"\",\n \"parent\": \"\",\n \"parentCategories\": \"\",\n \"schema\": \"\",\n \"total\": 1,\n \"hasSubCategoryTemplate\": \"\",\n \"url\": \"/agent-directory/category/corporate-professional-services\",\n \"color\": \"#FAD5B4\"\n },\n {\n \"id\": 10010,\n \"name\": \"Customer Service & Support\",\n \"title\": \"Customer Service & Support\",\n \"slug\": \"customer-service-support\",\n \"canonical\": \"\",\n \"order\": 10,\n \"type\": \"type\",\n \"count\": 1,\n \"description\": \"Improve customer satisfaction and streamline your support operations with our form solutions designed for customer service and support teams.\\n\\n Our form builder allows you to create customized forms for customer inquiries, support tickets, feedback collection, complaint handling, and satisfaction surveys, ensuring that you capture all the necessary details to resolve issues quickly and effectively.\\n\\n Enhance your customer experience by providing easy-to-use, accessible forms that help you stay organized and responsive, reducing response times and improving communication.\\n\\n Automate routine tasks such as routing requests, collecting customer information, and tracking service performance, freeing up your team to focus on delivering exceptional service.\\n\\n Whether you’re managing a call center, a help desk, or an online support team, our secure and adaptable forms support your mission to provide prompt, professional, and personalized assistance to your customers.\\n\\n Empower your customer service and support operations with our flexible form solutions designed to meet the dynamic needs of your business.\",\n \"pageDescription\": \"Improve customer satisfaction and streamline your support operations with our form solutions designed for customer service and support teams.\\n\\n Our form builder allows you to create customized forms for customer inquiries, support tickets, feedback collection, complaint handling, and satisfaction surveys, ensuring that you capture all the necessary details to resolve issues quickly and effectively.\\n\\n Enhance your customer experience by providing easy-to-use, accessible forms that help you stay organized and responsive, reducing response times and improving communication.\\n\\n Automate routine tasks such as routing requests, collecting customer information, and tracking service performance, freeing up your team to focus on delivering exceptional service.\\n\\n Whether you’re managing a call center, a help desk, or an online support team, our secure and adaptable forms support your mission to provide prompt, professional, and personalized assistance to your customers.\\n\\n Empower your customer service and support operations with our flexible form solutions designed to meet the dynamic needs of your business.\",\n \"pageTitle\": \"Customer Service & Support\",\n \"metaTitle\": \"Customer Service & Support\",\n \"metaKeywords\": \"Customer Service & Support\",\n \"disclaimer\": \"\",\n \"featured\": 0,\n \"furtherDescription\": \"\",\n \"relatedCategories\": \"\",\n \"parent\": \"\",\n \"parentCategories\": \"\",\n \"schema\": \"\",\n \"total\": 1,\n \"hasSubCategoryTemplate\": \"\",\n \"url\": \"/agent-directory/category/customer-service-support\",\n \"color\": \"#FFD8CF\"\n },\n {\n \"id\": 10011,\n \"name\": \"Non-profit & Community Services\",\n \"title\": \"Non-profit & Community Services\",\n \"slug\": \"non-profit-community-services\",\n \"canonical\": \"\",\n \"order\": 11,\n \"type\": \"type\",\n \"count\": 0,\n \"description\": \"Empower your mission and streamline your operations with our form solutions tailored for non-profit and community service organizations.\\n\\n Our form builder helps you create customized forms for volunteer registrations, donation collection, event sign-ups, membership applications, surveys, and feedback, allowing you to connect more effectively with your supporters and community members.\\n\\n Simplify your workflows by automating administrative tasks such as managing volunteers, collecting participant information, and tracking donations, freeing up valuable time and resources to focus on your cause.\\n\\n Enhance your outreach efforts with accessible, user-friendly forms that make it easy for people to get involved, contribute, and stay informed about your initiatives.\\n\\n Whether you’re running a charity, organizing community events, or managing a non-profit program, our adaptable and secure forms help you manage data efficiently and maintain the highest standards of transparency and engagement.\\n\\n Support your organization’s goals with our versatile form solutions designed to meet the unique needs of non-profit and community service sectors.\",\n \"pageDescription\": \"Empower your mission and streamline your operations with our form solutions tailored for non-profit and community service organizations.\\n\\n Our form builder helps you create customized forms for volunteer registrations, donation collection, event sign-ups, membership applications, surveys, and feedback, allowing you to connect more effectively with your supporters and community members.\\n\\n Simplify your workflows by automating administrative tasks such as managing volunteers, collecting participant information, and tracking donations, freeing up valuable time and resources to focus on your cause.\\n\\n Enhance your outreach efforts with accessible, user-friendly forms that make it easy for people to get involved, contribute, and stay informed about your initiatives.\\n\\n Whether you’re running a charity, organizing community events, or managing a non-profit program, our adaptable and secure forms help you manage data efficiently and maintain the highest standards of transparency and engagement.\\n\\n Support your organization’s goals with our versatile form solutions designed to meet the unique needs of non-profit and community service sectors.\",\n \"pageTitle\": \"Non-profit & Community Services\",\n \"metaTitle\": \"Non-profit & Community Services\",\n \"metaKeywords\": \"Non-profit & Community Services\",\n \"disclaimer\": \"\",\n \"featured\": 0,\n \"furtherDescription\": \"\",\n \"relatedCategories\": \"\",\n \"parent\": \"\",\n \"parentCategories\": \"\",\n \"schema\": \"\",\n \"total\": 0,\n \"hasSubCategoryTemplate\": \"\",\n \"url\": \"/agent-directory/category/non-profit-community-services\",\n \"color\": \"#C3F0EB\"\n },\n {\n \"id\": 10012,\n \"name\": \"Creative & Media\",\n \"title\": \"Creative & Media\",\n \"slug\": \"creative-media\",\n \"canonical\": \"\",\n \"order\": 12,\n \"type\": \"type\",\n \"count\": 0,\n \"description\": \"Unleash your creativity and streamline your projects with our form solutions designed for the creative and media industries.\\n\\n Our form builder empowers artists, designers, photographers, content creators, marketing agencies, and media professionals to create customized forms for project briefs, client feedback, collaboration requests, talent applications, and more.\\n\\n Simplify your workflow by automating tasks such as collecting creative briefs, managing client approvals, tracking project progress, and gathering feedback, allowing you to focus on what you do best—creating compelling content.\\n\\n Enhance your client and team interactions with professional, easy-to-use forms that help you stay organized, communicate effectively, and deliver projects on time.\\n\\n Whether you’re producing a video, designing a campaign, or managing a creative project, our adaptable forms provide the flexibility and functionality you need to keep your creative processes running smoothly.\\n\\n Elevate your creative and media projects with our secure, versatile form solutions designed to meet the unique needs of your industry.\",\n \"pageDescription\": \"Unleash your creativity and streamline your projects with our form solutions designed for the creative and media industries.\\n\\n Our form builder empowers artists, designers, photographers, content creators, marketing agencies, and media professionals to create customized forms for project briefs, client feedback, collaboration requests, talent applications, and more.\\n\\n Simplify your workflow by automating tasks such as collecting creative briefs, managing client approvals, tracking project progress, and gathering feedback, allowing you to focus on what you do best—creating compelling content.\\n\\n Enhance your client and team interactions with professional, easy-to-use forms that help you stay organized, communicate effectively, and deliver projects on time.\\n\\n Whether you’re producing a video, designing a campaign, or managing a creative project, our adaptable forms provide the flexibility and functionality you need to keep your creative processes running smoothly.\\n\\n Elevate your creative and media projects with our secure, versatile form solutions designed to meet the unique needs of your industry.\",\n \"pageTitle\": \"Creative & Media\",\n \"metaTitle\": \"Creative & Media\",\n \"metaKeywords\": \"Creative & Media\",\n \"disclaimer\": \"\",\n \"featured\": 0,\n \"furtherDescription\": \"\",\n \"relatedCategories\": \"\",\n \"parent\": \"\",\n \"parentCategories\": \"\",\n \"schema\": \"\",\n \"total\": 0,\n \"hasSubCategoryTemplate\": \"\",\n \"url\": \"/agent-directory/category/creative-media\",\n \"color\": \"#FAD5B4\"\n },\n {\n \"id\": 10013,\n \"name\": \"Information Technology\",\n \"title\": \"Information Technology\",\n \"slug\": \"information-technology\",\n \"canonical\": \"\",\n \"order\": 13,\n \"type\": \"type\",\n \"count\": 0,\n \"description\": \"Information Technology\",\n \"pageDescription\": \"Information Technology\",\n \"pageTitle\": \"Information Technology\",\n \"metaTitle\": \"Information Technology\",\n \"metaKeywords\": \"Information Technology\",\n \"disclaimer\": \"\",\n \"featured\": 0,\n \"furtherDescription\": \"\",\n \"relatedCategories\": \"\",\n \"parent\": \"\",\n \"parentCategories\": \"\",\n \"schema\": \"\",\n \"total\": 0,\n \"hasSubCategoryTemplate\": \"\",\n \"url\": \"/agent-directory/category/information-technology\",\n \"color\": \"#FAD5B4\"\n }\n];\n","/* eslint-disable max-statements */\n/* eslint-disable object-property-newline */\nimport React, {\n Fragment, useRef, useState, useEffect,\n useMemo\n} from 'react';\nimport {\n string, func, bool, object, shape, arrayOf\n} from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { IconAngleDown, IconCopyLine, IconArrowUpToLine } from '@jotforminc/svg-icons';\nimport { classNameGenerator } from '@jotforminc/utils';\nimport { ABTestManager } from '@jotforminc/abtest-manager';\n\nimport Loader from '../Loader';\nimport { fetchCategories, fetchStarterPackTemplates, fetchTemplates } from './apiTemplates';\nimport {\n getInitialLanguage, prettyTemplatePageType, getNoResultContent,\n handleSetupActionLogger, scrollToTop, getUrlSearchParamByKey,\n addOrRemoveMultipleEventListeners, getSubCategoryViewData, getTemplateId,\n categoryHeaderRenderer, allCategoriesRenderer, getJfWizardWrapper, getPreviewID, formatBigNumber\n} from './utils';\nimport { getDeviceType } from './getDeviceType';\n\nimport Search from './components/Search';\nimport Sidebar from './components/Sidebar';\nimport NewSidebar from './components/Sidebar/';\nimport TemplateItemContainer from './components/TemplateItem/TemplateItemContainer';\nimport RelatedCategories from './components/RelatedCategories';\nimport SubCategoryGalleryItem from './components/SubCategoryGalleryItem';\n\nimport { ScTemplates } from './components/ScTemplates';\nimport { ScStandaloneContainer } from './components/ScMainWrapper';\nimport './styles/style.scss';\nimport { templateConstants } from './templateConstants';\nimport { stateClass } from '../../core/utils';\nimport agents from './agents';\nimport agentCategories from './agentCategories';\n\n// eslint-disable-next-line complexity\nconst StandaloneTemplates = ({\n user,\n source,\n isInline,\n liteMode,\n username,\n frameSrc,\n categories,\n modalVisible,\n setCategories,\n searchKeyword,\n setSearchKeyword,\n hideyMyformsModal,\n callbackCategories,\n handleTemplateClone,\n displayMyformsModal,\n selectedCategory,\n setSelectedCategory,\n setStandaloneTemplates,\n customTrackingProjectName,\n defaultSelectedCategorySlug,\n liteModeActionButtonHandlers\n}) => {\n const {\n handleClickSeeMoreTemplates = f => f,\n handleClickStartFromScratchBtn = f => f\n } = liteModeActionButtonHandlers;\n\n const { PLATFORM_ENV = '' } = window;\n const predefinedCategoryObj = PLATFORM_ENV === 'salesforce' ? 'Salesforce Forms' : defaultSelectedCategorySlug || getUrlSearchParamByKey({ key: 'templateCategory' });\n\n const containerRef = useRef();\n const [offset, setOffset] = useState(0);\n const templateType = frameSrc.split('/')[1];\n\n const [asideShow, setAsideShow] = useState(false);\n const [templates, setTemplates] = useState([]);\n const [readyPage, setReadyPage] = useState(false);\n const [touchingEvent, setTouchingEvent] = useState(false);\n const [suggestedCategories, setSuggestedCategories] = useState(undefined);\n\n const [searchResult, setSearchResult] = useState({\n searchedKeyword: searchKeyword,\n searchView: searchKeyword !== null && searchKeyword !== ''\n });\n const [totalTemplates, setTotalTemplates] = useState();\n const [backToTopVisible, setBackToTopVisible] = useState(false);\n const [isMyTemplates, setIsMyTemplates] = useState(false);\n const [activeParentCategory, setActiveParentCategory] = useState();\n const [selectedTemplate, setSelectedTemplate] = useState();\n const [hasMoreTemplate, setHasMoreTemplate] = useState(true);\n const [loadingTemplates, setLoadingTemplates] = useState(true);\n const [predefinedCategory, setPredefinedCategory] = useState();\n\n const { newSidebar = false } = templateConstants[templateType];\n const isFormTemplates = templateType === 'form-templates';\n\n const deviceType = getDeviceType();\n const isDesktop = deviceType === 'desktop';\n\n const isInlineWrapped = isInline && isFormTemplates;\n\n const [language, setLanguage] = useState([getInitialLanguage(isFormTemplates)]);\n const [isMobile, setIsMobile] = useState(window.innerWidth <= 780);\n const [isSticky, setIsSticky] = useState(false);\n const [isAllCategoriesSelected, setIsAllCategoriesSelected] = useState(false);\n const [subCategoryViewData, setSubCategoryViewData] = useState({ subCategories: [], loading: false });\n const [filters, setFilters] = useState({\n sorting: 'popular',\n theme: getUrlSearchParamByKey({\n key: 'formLayout',\n defaultValue: 'classic',\n options: ['classic', 'card']\n }) || 'classic'\n });\n const [showSearchTestIsStarterPack, setShowSearchTestIsStarterPack] = useState(false);\n const templatePaginationOffset = 24;\n const currentPaginationOffset = (liteMode && !readyPage) ? templatePaginationOffset - 1 : templatePaginationOffset;\n const templatePageTypePrettyPlural = prettyTemplatePageType(templateType);\n const templatePageTypePretty = prettyTemplatePageType(templateType, false);\n const { theme } = filters;\n const isAgentTemplates = templateType === 'agent-templates';\n\n // A/B Test: templateSuggestionModalOnMyAppsIII\n const registerABTestActionRef = useRef(f => f);\n const abTestManager = useMemo(() => {\n return new ABTestManager({\n user,\n isTestEnabled: false,\n testName: 'templateSuggestionModalOnMyAppsIII',\n controlVariantCode: '26222',\n testVariantCode: '26232',\n urlParam: 'tsmomaiii',\n customUserChecks: {\n isLightMode: liteMode,\n isApp: templateType === 'app-templates',\n source: 'template-suggestion-modal'\n }\n // debugMode: {\n // forceUserEligible: true,\n // logTestState: true\n // // forceTestVariant: true\n // }\n });\n }, [user]);\n\n const handleLiteMode = async () => {\n if (!liteMode) {\n stateClass('remove', 'templateSuggestionModal--isVisible');\n }\n };\n\n useEffect(() => {\n handleLiteMode();\n }, [liteMode]);\n\n const backToTopIsVisible = () => {\n let scrollPos = 0;\n if (isMobile || !isDesktop) return containerRef?.current?.scrollTop > 300;\n if (isInlineWrapped) {\n const jfWizard = getJfWizardWrapper();\n if (jfWizard === null) return false;\n scrollPos = jfWizard.scrollTop;\n } else {\n scrollPos = window.scrollY;\n }\n return scrollPos > 300;\n };\n\n const getTemplates = async (payload = {}) => {\n const {\n category: categoryPayload = null,\n offsetParameter = 0,\n clickedLoadMore = false,\n searchKeywordParameter = ''\n } = payload;\n\n setLoadingTemplates(clickedLoadMore ? 'loading-more' : true);\n const isStarterPack = liteMode && (!searchKeywordParameter && !categoryPayload);\n let isTestVaiant = false;\n\n // A/B Test: templateSuggestionModalOnMyAppsIII\n try {\n isTestVaiant = await abTestManager.isTestVariant();\n registerABTestActionRef.current = abTestManager.registerABTestAction;\n } catch (e) {\n isTestVaiant = false;\n }\n\n // eslint-disable-next-line no-nested-ternary\n const fetcher = isStarterPack ? fetchStarterPackTemplates : false ? () => agents.filter(agent => agent?.id) : fetchTemplates;\n setShowSearchTestIsStarterPack(isStarterPack);\n fetcher({\n ...payload,\n filters,\n language,\n templateType,\n username,\n source,\n rpp: currentPaginationOffset,\n featuredTemplates: isTestVaiant\n }).then(async res => {\n const { data: { content } } = res;\n\n const { templates: contentTemplates, requestParams = {} } = content?.templates\n ? content\n : {\n templates: content.map(template => ({\n ...template,\n previewURL: {\n card: `/preview/${(template.id || template._id)}/card&nofs`,\n classic: `/preview/${(template.id || template._id)}/classic&nofs`\n }\n }))\n };\n const cumulativeTemplates = offsetParameter === 0 ? [] : [...templates];\n const abTestAppliedTemplates = contentTemplates;\n const newTemplates = [...cumulativeTemplates, ...abTestAppliedTemplates];\n\n const { categories: suggestedCategoriesData } = requestParams;\n\n setSuggestedCategories(suggestedCategoriesData ? suggestedCategoriesData.map((category, index) => ({ ...category, hidden: index > 2 })) : suggestedCategoriesData);\n setTemplates(newTemplates);\n setStandaloneTemplates(newTemplates);\n const hasMore = newTemplates.length >= parseInt(content.total, 10);\n setHasMoreTemplate(!hasMore);\n setTotalTemplates(content.total);\n setOffset(offsetParameter + currentPaginationOffset);\n if (!readyPage) setReadyPage(true);\n setLoadingTemplates(false);\n }).catch(() => {\n console.log('Error');\n if (isAgentTemplates) {\n const agentTemplates = agents.filter(agent => agent?.id).slice(0, 9).map(agent => ({\n ...agent,\n screenshot: `/landings/assets/img/agent-directory/thumbnails/${agent.id}.png`,\n previewURL: `https://www.jotform.com/agent/${agent.id}?newUI=true`\n }));\n console.log('agentTemplates', agentTemplates);\n // setSuggestedCategories(suggestedCategoriesData ? suggestedCategoriesData.map((category, index) => ({ ...category, hidden: index > 2 })) : suggestedCategoriesData);\n setTemplates(agentTemplates);\n setStandaloneTemplates(agentTemplates);\n setHasMoreTemplate(false);\n setTotalTemplates(agentTemplates.length);\n setOffset(offsetParameter + currentPaginationOffset);\n if (!readyPage) setReadyPage(true);\n setLoadingTemplates(false);\n }\n });\n };\n\n const handleResize = () => {\n setIsMobile(window.innerWidth <= 780);\n setIsSticky(false);\n };\n\n const handleSubCategoryViewData = (payload = {}) => {\n const { categoriesParameter = categories, category = selectedCategory } = payload;\n try {\n getSubCategoryViewData(\n category, categoriesParameter, setSubCategoryViewData, filters, language, templateType, source\n ).then(res => {\n const { data: { content: { subCategories, total } } } = res;\n setSubCategoryViewData({\n total,\n loading: false,\n subCategories: subCategories.filter(subCat => subCat.templates.length >= 1)\n });\n });\n } catch (e) {\n setSubCategoryViewData({ subCategories: [], loading: false });\n }\n };\n\n const handleGetCategories = refreshSubCategories => {\n fetchCategories(templateType, language, source)\n .then(res => {\n const { data: { content } } = res;\n const { sortCategoriesByFeatured = false } = templateConstants[templateType];\n let allCategories = content.filter(category => (category?.total && parseInt(category?.total, 10) > 0));\n if (sortCategoriesByFeatured) {\n const featuedCategories = allCategories.filter(category => {\n if (templateType === 'form-templates' && category?.slug === 'salesforce-forms') return true;\n return category?.featured === '1';\n });\n const unFeaturedCategories = allCategories.filter(category => {\n if (templateType === 'form-templates' && category?.slug === 'salesforce-forms') return false;\n return category?.featured === '0';\n });\n allCategories = [...featuedCategories, ...unFeaturedCategories];\n }\n setCategories(allCategories);\n callbackCategories(allCategories);\n if (refreshSubCategories) handleSubCategoryViewData(content);\n })\n .catch(() => {\n setCategories(isAgentTemplates ? agentCategories.filter(category => category.count > 0) : []);\n callbackCategories([]);\n });\n };\n\n const handleDesktopScroll = () => {\n setBackToTopVisible(backToTopIsVisible());\n };\n\n const loadPage = (payload = {}) => {\n if (!readyPage) return;\n const { languageChanged = false, category = selectedCategory, clickedMyTemplates = isMyTemplates } = payload;\n if (languageChanged) {\n handleGetCategories(true);\n if (languageChanged) setSelectedCategory();\n } else {\n handleSubCategoryViewData();\n }\n getTemplates({\n clickedLoadMore: false,\n getOnlyMyTemplates: clickedMyTemplates,\n searchKeywordParameter: category ? '' : searchKeyword,\n category: languageChanged ? undefined : selectedCategory\n });\n scrollToTop(isMobile, containerRef, isInlineWrapped);\n if (asideShow) setAsideShow(false);\n };\n\n const handleMount = async () => {\n if (liteMode) stateClass('add', 'templateSuggestionModal--isVisible');\n\n if (window.location.href.includes('integration')) {\n document.querySelector('body').classList.add('standaloneTemplates');\n }\n const jfWizard = getJfWizardWrapper();\n handleSetupActionLogger(customTrackingProjectName || 'newWizard');\n handleGetCategories();\n\n getTemplates({\n searchKeywordParameter: searchKeyword\n });\n addOrRemoveMultipleEventListeners(['resize', 'orientationchange'], handleResize, 'add', window);\n addOrRemoveMultipleEventListeners(['scroll'], handleDesktopScroll, 'add', (isInlineWrapped && !isMobile) ? jfWizard : window);\n return () => {\n if (liteMode) stateClass('remove', 'templateSuggestionModal--isVisible');\n addOrRemoveMultipleEventListeners(['resize', 'orientationchange'], handleResize, 'remove', window);\n addOrRemoveMultipleEventListeners(['scroll'], handleDesktopScroll, 'add', (isInlineWrapped && !isMobile) ? jfWizard : window);\n if (window.location.href.includes('integration')) {\n document.querySelector('body').classList.remove('standaloneTemplates');\n }\n };\n };\n\n useEffect(() => {\n handleMount();\n }, []);\n\n useEffect(() => {\n loadPage();\n }, [filters]);\n\n useEffect(() => {\n if (!predefinedCategory) return;\n const selectedCategoryID = selectedCategory?.id || selectedCategory?._id;\n const predefinedCategoryID = predefinedCategory?.id || predefinedCategory?._id;\n if (predefinedCategoryID && predefinedCategoryID !== selectedCategoryID) {\n setPredefinedCategory();\n }\n }, [selectedCategory]);\n\n useEffect(() => {\n loadPage({ languageChanged: true });\n }, [language]);\n\n const handleSelectCategory = (payload = {}) => {\n const { category, clickedAllCategories = false, clickedMyTemplates = false } = payload;\n setSearchKeyword('');\n setSelectedCategory(category);\n setIsMyTemplates(clickedMyTemplates);\n setIsAllCategoriesSelected(clickedAllCategories);\n setSearchResult({ searchView: false, searchedKeyword: '' });\n if (!clickedAllCategories) {\n getTemplates({\n category,\n clickedLoadMore: false,\n getOnlyMyTemplates: clickedMyTemplates,\n searchKeywordParameter: (category || clickedMyTemplates) ? '' : searchKeyword\n });\n }\n if (category) handleSubCategoryViewData({ category });\n if (!clickedMyTemplates) {\n window.standaloneTemplatesLogger({\n actor: username,\n action: `${deviceType}:category-click`,\n target: clickedAllCategories\n ? 'allCategories'\n : `/${templateType}/standalone/category/${category ? (category.slug || category.name).toLowerCase() : 'homepage'}`\n });\n }\n scrollToTop(isMobile, containerRef, isInlineWrapped);\n if (asideShow) setAsideShow(false);\n };\n\n useEffect(() => {\n if (categories && categories?.length > 0 && predefinedCategoryObj) {\n const alreadySelectedCategory = categories?.find(val => {\n return [\n val?.slug, val?._slug, val?.name, val?._name\n ].includes(predefinedCategoryObj.replaceAll('+', ' '));\n }) || null;\n if (alreadySelectedCategory) {\n handleSelectCategory({ category: alreadySelectedCategory });\n setPredefinedCategory(alreadySelectedCategory);\n }\n }\n }, [categories]);\n\n useEffect(() => {\n global.setSelectedTemplate = setSelectedTemplate;\n return () => {\n delete global.setSelectedTemplate;\n };\n }, []);\n\n const handleStickySearchWrapper = () => {\n setBackToTopVisible(backToTopIsVisible());\n if (!isMobile) return;\n if (touchingEvent === true) return;\n\n const TRESHOLD = 100;\n const OFFSET = 5;\n const scrollPosition = containerRef?.current?.scrollTop;\n const nextSticky = scrollPosition > TRESHOLD;\n\n // why need it? it prevents infinite sticky mode state changings between 95px - 105px;\n const loopingScrollInterval = (scrollPosition < TRESHOLD + OFFSET) && (scrollPosition > TRESHOLD - OFFSET);\n if (loopingScrollInterval) return;\n\n setIsSticky(nextSticky);\n const jfWizard = getJfWizardWrapper();\n if (jfWizard === null) return;\n if (nextSticky) {\n jfWizard.classList.add('sticky-wizard');\n } else {\n jfWizard.classList.remove('sticky-wizard');\n }\n };\n\n useEffect(() => {\n if (touchingEvent === false) {\n handleStickySearchWrapper();\n }\n }, [touchingEvent]);\n\n useEffect(() => {\n if (!isMobile) setAsideShow(false);\n handleStickySearchWrapper();\n }, [isMobile]);\n\n useEffect(() => { if (!modalVisible) setSelectedTemplate(); }, [modalVisible]);\n\n useEffect(() => {\n const jfWizard = getJfWizardWrapper();\n if (jfWizard === null) return;\n if (asideShow) {\n jfWizard.classList.add('aside-active');\n } else {\n jfWizard.classList.remove('aside-active');\n }\n }, [asideShow]);\n\n useEffect(() => {\n if (selectedTemplate) {\n const { previewURL } = selectedTemplate;\n const templateTitle = selectedTemplate._title || selectedTemplate.title;\n const previewURLTheme = previewURL ? previewURL[theme] : '';\n displayMyformsModal({\n theme: theme,\n filters: filters,\n language: language,\n title: templateTitle,\n template: selectedTemplate,\n id: getPreviewID(selectedTemplate),\n previewURL: isAgentTemplates ? previewURL : `/${templateType}/standalone/${previewURLTheme}`\n });\n } else {\n hideyMyformsModal();\n }\n }, [selectedTemplate]);\n\n const handleClearResult = () => {\n setSearchResult({ searchView: false, searchedKeyword: '' });\n setSearchKeyword('');\n getTemplates({ searchKeywordParameter: '' });\n };\n\n const isLoadingMore = loadingTemplates === 'loading-more';\n const templatesRenderer = () => {\n if (loadingTemplates && !isLoadingMore && !searchResult.searchView) {\n return (Array(9).fill().map((el, index) => {\n const uniqueKey = index;\n return (\n \n \n \n );\n }));\n }\n\n if (templates.length === 0 && (isMyTemplates || (!loadingTemplates && searchResult.searchView))) {\n return getNoResultContent(isMyTemplates, handleClearResult, searchResult, templatePageTypePrettyPlural);\n }\n\n return (templates.map((template, index) => (\n <>\n {\n (liteMode && index === 0) && (\n \n {\n handleClickStartFromScratchBtn(event);\n // A/B Test: templateSuggestionModalOnMyAppsIII\n if (liteMode) {\n registerABTestActionRef.current?.({ action: 'click', target: 'startFromScratchButton' });\n }\n }}\n >\n
    \n \n \n \n {t('Start From Scratch')}\n
    \n \n
    \n )\n }\n \n \n \n \n )));\n };\n\n const { loading, subCategories } = subCategoryViewData;\n const isSubCategoryModeDisabled = () => {\n const { subGalleryViewActive = false } = templateConstants[templateType];\n if (!subGalleryViewActive) return true;\n return (!loading && subCategories.length === 0) || !selectedCategory;\n };\n const subCategoryModeDisabled = isSubCategoryModeDisabled();\n\n const seeMoreButtonRenderer = () => {\n const handleClickSeeMore = () => {\n window.standaloneTemplatesLogger({\n actor: username,\n action: `${window.innerWidth <= 780 ? 'mobile' : 'desktop'}:load-more`\n });\n getTemplates({\n clickedLoadMore: true,\n offsetParameter: offset,\n category: selectedCategory,\n searchKeywordParameter: searchKeyword\n });\n };\n return (\n (hasMoreTemplate && !isAllCategoriesSelected && (loadingTemplates === false || isLoadingMore)) && (\n
    \n {\n // A/B Test: templateSuggestionModalOnMyAppsIII\n registerABTestActionRef.current?.({ action: 'click', target: 'seeMoreTemplatesButton' });\n handleClickSeeMoreTemplates(event);\n } : handleClickSeeMore}\n >\n {t(isLoadingMore ? 'Please wait...' : 'See More Templates')}\n \n
    \n )\n );\n };\n\n const subCategoryGalleryRenderer = () => {\n if (subCategoryModeDisabled) return null;\n const subCategorySkeletons = categories.filter(category => getTemplateId(category?.parent) === getTemplateId(selectedCategory));\n const subCategoryIterators = loading ? subCategorySkeletons : subCategories;\n return (\n subCategoryIterators.map(subCategory => (\n \n ))\n );\n };\n\n const itemsRenderer = itemType => {\n switch (itemType) {\n case 'templates':\n return (\n <>\n {templatesRenderer()}\n {seeMoreButtonRenderer()}\n {subCategoryGalleryRenderer()}\n \n );\n case 'all-categories':\n return allCategoriesRenderer(categories, handleSelectCategory, setActiveParentCategory);\n default:\n break;\n }\n };\n\n if (!readyPage || (searchResult.searchView && loadingTemplates)) {\n return ;\n }\n\n const commonProps = {\n handleSelectCategory, selectedCategory, isAllCategoriesSelected, username\n };\n\n const searchComponentProps = {\n ...commonProps, getTemplates, searchKeyword, setSearchResult, isMyTemplates, searchResult, isAllCategoriesSelected, source,\n setSearchKeyword, stickySearchWrapper: isSticky, setTemplates, setStandaloneTemplates, setIsMyTemplates, setSelectedCategory, setIsAllCategoriesSelected, templateType\n };\n\n const sidebarProps = {\n ...commonProps, categories, searchResult, setAsideShow, asideShow, language, isMobile, source, predefinedCategory,\n searchComponentProps, templateType, filters, setFilters, isMyTemplates, setLanguage, setActiveParentCategory\n };\n\n const categoryHeaderRendererProps = {\n ...commonProps, templatePageTypePrettyPlural, setActiveParentCategory,\n templatePageTypePretty, subCategoryViewData, activeParentCategory\n };\n\n return (\n setTouchingEvent(true)}\n onTouchEnd={() => setTouchingEvent(false)}\n >\n {!liteMode && (newSidebar ? : )}\n \n \n {isMyTemplates && (\n
    \n
    {t(`${templatePageTypePrettyPlural} by ${username}`)}
    \n
    \n )}\n {categoryHeaderRenderer(categoryHeaderRendererProps)}\n {(searchResult.searchView && templates.length > 0) && (\n <>\n
    \n
    {t(`Listing ${formatBigNumber(totalTemplates)} Search Results for \"${searchResult.searchedKeyword}\"`)}
    \n \n
    \n {\n (suggestedCategories && Array.isArray(suggestedCategories) && suggestedCategories.length > 0) && (\n
    \n
    \n {\n suggestedCategories.map(category => {\n const {\n hidden = false, name, color, total\n } = category;\n if (hidden) return null;\n return (\n handleSelectCategory({ category })}\n onKeyDown={() => handleSelectCategory({ category })}\n >\n

    {name}

    \n

    \n \n \n {total}\n {' '}\n Templates\n \n

    \n
    \n );\n })\n }\n
    \n {\n suggestedCategories.find(({ hidden }) => hidden) && (\n
    \n setSuggestedCategories(suggestedCategories.map(category => ({ ...category, hidden: false })))}\n >\n \n { t('All Category Results') }\n \n
    \n )\n }\n \n )\n }\n \n )}\n
    \n {itemsRenderer(isAllCategoriesSelected ? 'all-categories' : 'templates')}\n
    \n \n scrollToTop(isMobile, containerRef, isInlineWrapped)}\n className={classNameGenerator({\n backtoTop: true,\n show: backToTopVisible\n })}\n >\n \n \n
    \n \n );\n};\n\nStandaloneTemplates.defaultProps = {\n user: {},\n source: '',\n isInline: true,\n username: '',\n liteMode: false,\n liteModeActionButtonHandlers: {},\n categories: [],\n modalVisible: false,\n setCategories: f => f,\n searchKeyword: '',\n setSearchKeyword: f => f,\n hideyMyformsModal: f => f,\n callbackCategories: f => f,\n handleTemplateClone: f => f,\n displayMyformsModal: f => f,\n selectedCategory: undefined,\n setSelectedCategory: f => f,\n setStandaloneTemplates: f => f,\n frameSrc: '/form-templates/standalone',\n defaultSelectedCategorySlug: null,\n customTrackingProjectName: undefined\n};\n\nStandaloneTemplates.propTypes = {\n user: shape({}),\n liteModeActionButtonHandlers: object,\n isInline: bool,\n liteMode: bool,\n source: string,\n frameSrc: string,\n modalVisible: bool,\n username: string,\n setCategories: func,\n searchKeyword: string,\n setSearchKeyword: func,\n hideyMyformsModal: func,\n selectedCategory: object,\n callbackCategories: func,\n setSelectedCategory: func,\n handleTemplateClone: func,\n displayMyformsModal: func,\n categories: arrayOf(object),\n setStandaloneTemplates: func,\n customTrackingProjectName: string,\n defaultSelectedCategorySlug: string\n};\n\nexport default StandaloneTemplates;\n","import { useState, useEffect } from 'react';\n\nconst useIsMobile = () => {\n const [isMobile, setIsMobile] = useState(false);\n useEffect(() => {\n const handleResize = () => {\n setIsMobile(window.innerWidth < 780);\n };\n window.addEventListener('resize', handleResize);\n handleResize();\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n return isMobile;\n};\n\nexport default useIsMobile;\n","import {\n useEffect,\n useState,\n useRef\n} from 'react';\nimport { ABTestManager } from '@jotforminc/abtest-manager';\n\nexport const useABTestManager = options => {\n const [isLoading, setIsLoading] = useState(true);\n const [isTestVariant, setIsTestVariant] = useState(false);\n const abTestActionRef = useRef(f => f);\n\n useEffect(() => {\n const abTestManager = new ABTestManager(options);\n abTestManager.isTestVariant().then(setIsTestVariant).finally(() => setIsLoading(false));\n abTestActionRef.current = abTestManager.registerABTestAction;\n }, []);\n\n return [isLoading, isTestVariant, abTestActionRef.current];\n};\n\nexport const useOutsideClick = (callback, exceptionalSelectorList = []) => {\n const ref = useRef(null);\n\n useEffect(() => {\n const handleClickOutside = event => {\n let clickedExceptionalElement = false;\n for (let index = 0; index < exceptionalSelectorList.length; index++) {\n const selector = exceptionalSelectorList[index];\n const exceptionalEl = document.querySelector(selector);\n if (exceptionalEl && exceptionalEl.contains(event.target)) {\n clickedExceptionalElement = true;\n break;\n }\n }\n if (clickedExceptionalElement) return;\n\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","/* eslint-disable max-len */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable eqeqeq */\n/* eslint-disable jsx-a11y/anchor-is-valid */\n/* eslint-disable complexity */\n/* eslint-disable @jotforminc/no-native-button */\nimport React, { useRef, useState, useEffect } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { t } from '@jotforminc/translation';\nimport { classNames, capitalizeFirstLetter } from '@jotforminc/utils';\n\nimport { Button, InputText } from '@jotforminc/magnet';\nimport {\n IconCopy, IconArrowDown, IconXmark, IconChevronLeft, IconChevronRight, IconMagnifyingGlass, IconUserFilled, IconBullseyeArrow,\n IconEyeFilled\n} from '@jotforminc/svg-icons';\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\nimport texts from '../../core/texts';\nimport ModalControls from '../StandaloneTemplates/components/PreviewModalContents/ModalControls';\nimport SimilarTemplatesItem from '../StandaloneTemplates/components/PreviewModalContents/SimilarTemplatesItem';\nimport useIsMobile from '../../hooks/useIsMobile';\nimport { useOutsideClick } from '../StandaloneTemplates/hooks';\nimport { formatBigNumber, getPreviewID } from '../StandaloneTemplates/utils';\nimport Loader from '../Loader';\nimport agents from '../StandaloneTemplates/agents';\n\nconst NewWizardTemplateModal = ({\n similarTemplates, handleClose, previewURL, modalProps, modalDetailsData,\n template, title, frameSrc, categoryData, setModalContentLoading, theme, displayMyformsModal,\n isCloningTemplate = false, useTemplate, categories, setSelectedCategory, legacyStandaloneFrameRef,\n templateTabs = [], searchKeyword, setSearchKeyword, standaloneTemplates, newStandaloneActive\n}) => {\n const [activeTab, setActiveTab] = useState(0);\n const [modelContentLoading, setModelContentLoading] = useState(true);\n const wizardModalBodyRef = useOutsideClick(\n () => handleClose,\n ['.jfWizard-modal', '#CookieBanner', '.templateSuggestionModal-neverShowGroup']\n );\n const frameRef = useRef();\n const closeBtnRef = useRef();\n const similarTemplatefRef = useRef();\n\n const leftArrowRef = useRef();\n const rightArrowRef = useRef();\n\n const templateType = frameSrc.split('/')[1];\n const isAgentTemplates = templateType === 'agent-templates';\n const isTableTemplates = templateType === 'table-templates';\n\n const isMobile = useIsMobile();\n const modalVisibleClassName = 'jfWizard--isModalVisible';\n\n useEffect(() => {\n if (closeBtnRef.current) {\n closeBtnRef.current.scrollIntoView({ behavior: 'smooth' });\n }\n }, [template]);\n\n const processedTemplate = (isAgentTemplates || isTableTemplates) ? {\n ...template,\n ...agents.find(agent => agent.id == (template._id || template.id))\n } : template;\n\n const {\n _id, id,\n _username, username,\n _clonecount, clonecount,\n _description, description,\n _metaDescription, metaDescription, _imageUrl,\n _categories, categories: templateCategories,\n identity, questions\n } = { ...processedTemplate, ...(processedTemplate.template || {}) };\n\n useEffect(() => {\n setModelContentLoading(true);\n }, [previewURL, _imageUrl]);\n\n const handleArrowClick = ({ key }) => {\n if (!['ArrowLeft', 'ArrowRight'].includes(key)) return;\n const isArrowLeft = key === 'ArrowLeft';\n const actionTarget = isArrowLeft ? leftArrowRef.current : rightArrowRef.current;\n\n if (actionTarget) actionTarget.classList.add('load-active');\n\n if (isAgentTemplates) {\n const currentAgentIndex = agents.findIndex(agent => agent.id == (_id || id));\n let navigatedAgentIndex = isArrowLeft ? currentAgentIndex - 1 : currentAgentIndex + 1;\n if (navigatedAgentIndex === -1 || agents.length === navigatedAgentIndex) {\n navigatedAgentIndex = isArrowLeft ? agents.length - 1 : 0;\n }\n const navigatedTemplateData = {\n ...agents[navigatedAgentIndex],\n previewURL: `https://www.jotform.com/agent-directory/preview/agent/${agents[navigatedAgentIndex].id}?isTemplatePreview=1`\n };\n displayMyformsModal({ template: navigatedTemplateData, ...navigatedTemplateData });\n return;\n }\n let currentTemplateOrder = standaloneTemplates.findIndex(templateIterator => (_id || id) === getPreviewID(templateIterator));\n\n if ((currentTemplateOrder === 0 && isArrowLeft) || (currentTemplateOrder === standaloneTemplates.length - 1 && !isArrowLeft)) {\n currentTemplateOrder = isArrowLeft ? standaloneTemplates.length : -1;\n }\n\n const navigatedTemplate = standaloneTemplates[isArrowLeft ? currentTemplateOrder - 1 : currentTemplateOrder + 1];\n if (navigatedTemplate) {\n global.setSelectedTemplate(navigatedTemplate);\n }\n };\n\n useEffect(() => {\n document.body.classList.add(modalVisibleClassName);\n return () => {\n document.body.classList.remove(modalVisibleClassName);\n };\n }, []);\n\n useEffect(() => {\n window.addEventListener('keydown', handleArrowClick);\n return () => {\n window.removeEventListener('keydown', handleArrowClick);\n };\n }, [standaloneTemplates, processedTemplate]);\n\n const formatedTabs = [\n { id: 'overview', name: 'Overview', data: '' }, ...templateTabs\n ];\n const splitedTemplateCategories = (_categories || templateCategories || '').trim().split(',').filter(category => category);\n const templateCategoriesData = categories.filter(({ id: categoryID, _id: _categoryID }) => splitedTemplateCategories.find(cat => cat == (_categoryID || categoryID)));\n const isEnterpriseEnv = isEnterprise();\n\n const agentIdentityRenderer = () => {\n try {\n return (\n
    \n {\n Object.entries(JSON.parse(identity)).map(([identityName, identityContent]) => {\n const identityData = {\n personality: {\n icon: IconUserFilled, iconClass: 'color-orange-500', prettyIdentity: 'Personality', color: 'bg-orange-100'\n },\n special_skills: {\n icon: IconBullseyeArrow, iconClass: 'color-yellow-500', prettyIdentity: 'Special Skills', color: 'bg-yellow-100'\n }\n };\n const {\n icon: IdentityIcon, iconClass, prettyIdentity, color\n } = identityData[identityName] || {};\n if (!prettyIdentity) return null;\n return (\n
    \n

    \n \n \n \n \n {prettyIdentity}\n \n

    \n

    \n {identityContent}\n

    \n
    \n );\n })\n }\n
    \n );\n } catch {\n return null;\n }\n };\n\n const handleAskMeAction = question => {\n const frameContent = frameRef.current;\n const objWindow = frameContent.contentWindow;\n const objDoc = frameContent.contentDocument || frameContent.contentWindow.document;\n const agentYesNoBtn = objDoc.querySelector('.yes-no-button');\n let clickedYesNo = false;\n if (agentYesNoBtn) {\n agentYesNoBtn.click();\n clickedYesNo = true;\n }\n\n setTimeout(() => {\n objWindow.postMessage({\n question,\n source: 'agent-directory'\n }, window.location.origin);\n setTimeout(() => {\n const agentSendBtn = objDoc.querySelector('.sendButton');\n if (agentSendBtn) {\n agentSendBtn.click();\n }\n }, 500);\n }, clickedYesNo ? 500 : 0);\n };\n\n const askMeSectionRenderer = () => {\n try {\n const parsedQuestions = JSON.parse(questions);\n return (\n
    \n Ask me things like...\n
      \n {\n parsedQuestions.map(question => (\n handleAskMeAction(question)}\n >\n {question}\n \n ))\n }\n
    \n
    \n );\n } catch {\n return null;\n }\n };\n\n const tabsRenderer = () => {\n if (activeTab === 0) {\n return (\n
    \n {\n (!isEnterpriseEnv && !isAgentTemplates) && (\n
    \n {t('About this template')}\n
    \n
    \n )\n }\n {\n !isAgentTemplates && (\n
    \n
    \n Categories\n
      \n {templateCategoriesData.map(category => (\n
    • \n \n {category.title}\n \n
    • \n ))}\n
    \n
    \n
    \n Details\n
    \n
    \n \n
    \n {formatBigNumber(_clonecount || clonecount)}\n \n {' '}\n {t('Clone')}\n \n
    \n
    \n
    \n
    \n {\n !isEnterpriseEnv && (\n
    \n Created by\n
    \n
    \n \n \n \n \n \n \n
    \n \n {_username || username}\n \n
    \n
    \n )\n }\n
    \n )\n }\n {\n isAgentTemplates && agentIdentityRenderer()\n }\n
    \n );\n }\n const { data: activeTabContent } = formatedTabs[activeTab];\n return (\n
    \n
    \n
    \n );\n };\n\n const formatLegacyStandaloneCategoryData = () => {\n if (!categoryData) return [];\n const result = [];\n const { parent } = categoryData;\n if (parent) result.push({ ...parent, title: parent.name });\n result.push({ ...categoryData, title: categoryData.name });\n return result;\n };\n\n const templateTypePretty = capitalizeFirstLetter(templateType.split('-')[0]);\n return ReactDOM.createPortal(\n
    \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n {title}\n

    \n
    \n
    \n \n
    \n {isTableTemplates ? (\n
    \n
    \n
    \n
    \n { modelContentLoading && }\n \n {\n setModelContentLoading(false);\n rightArrowRef.current.classList.remove('load-active');\n leftArrowRef.current.classList.remove('load-active');\n }}\n className=\"pointer-events-none absolute left-0 bottom-0 z-0 block w-auto radius-lg transform translate-x-10 translate-y-8 image lazyloaded\"\n src={_imageUrl}\n alt={title}\n />\n \n
    \n
    \n \n
    \n
    \n
    \n
    \n ) : (\n
    \n { modelContentLoading && }\n {\n setModelContentLoading(false);\n rightArrowRef.current.classList.remove('load-active');\n leftArrowRef.current.classList.remove('load-active');\n }}\n className={isAgentTemplates ? 'w-full h-full relative z-0' : 'w-full h-full lg:min-h-md lg:radius-md lg:absolute'}\n />\n
    \n )}\n \n f}\n // eslint-disable-next-line max-len\n className=\"modal-arrow bg-transparent border-0 outline-0 left relative w-12 h-12 color-navy-500 inline-flex items-center justify-center radius hover:bg-navy-25 duration-200 transform rtl:rotate-180\"\n aria-label={t('Previous Template')}\n onClick={() => handleArrowClick({ key: 'ArrowLeft' })}\n >\n \n \n\n useTemplate(processedTemplate, target)}\n size=\"large\"\n >\n {isCloningTemplate ? t(texts.PLEASE_WAIT) : t(isAgentTemplates ? 'Use Agent' : texts.USE_TEMPLATE)}\n \n f}\n className=\"modal-arrow right relative w-12 h-12 color-navy-500 inline-flex items-center justify-center radius hover:bg-navy-25 duration-200 transform rtl:rotate-180\"\n aria-label={t('Next Template')}\n onClick={() => handleArrowClick({ key: 'ArrowRight' })}\n >\n \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n {\n !isEnterpriseEnv && (\n
    \n {\n formatedTabs.map((tab, index) => (\n setActiveTab(index)}\n data-tab={tab.id}\n >\n {tab.name}\n \n ))\n }\n
    \n )\n }\n {\n similarTemplatefRef.current.scrollIntoView({ behavior: 'smooth' });\n }}\n className=\"showMoreTemplatesBtn flex items-center color-navy-500 outline-0 border-0 radius-full hover:bg-navy-25 pr-3 rtl:pl-3 rtl:pr-0\"\n >\n \n \n \n {`Show more ${isAgentTemplates ? 'agents' : 'templates'}`}\n \n
    \n { tabsRenderer() }\n
    \n {\n similarTemplates && (\n
    \n useTemplate(templateParam, target)}\n categoryData={categoryData}\n isAgentTemplates={isAgentTemplates}\n displayMyformsModal={displayMyformsModal}\n // eslint-disable-next-line no-nested-ternary\n similarTemplates={modelContentLoading\n ? []\n : (isAgentTemplates\n ? agents.slice(0, 10).filter(agent => agent.id !== (id || _id))\n : similarTemplates)}\n setModalContentLoading={stillLoading => setModalContentLoading(stillLoading)}\n />\n
    \n )\n }\n
    \n
    \n {\n !isMobile && (\n f}\n rightRef={!isMobile ? rightArrowRef : f => f}\n />\n )\n }\n
    \n
    \n
    \n
    ,\n global.document.body\n );\n};\n\nexport default NewWizardTemplateModal;\n","import React, { useState } from 'react';\nimport { string, object, func } from 'prop-types';\nimport Loader from '../Loader';\n\nconst LegacyTemplatesRenderer = ({ frameSrc, frameRef, handleTemplateLoad }) => {\n const [frameActive, setFrameActive] = useState(false);\n return (\n <>\n \n {\n setFrameActive(true);\n handleTemplateLoad();\n }}\n className=\"jfWizard-templates-frame\"\n />\n \n );\n};\n\nexport default LegacyTemplatesRenderer;\n\nLegacyTemplatesRenderer.propTypes = {\n frameSrc: string,\n frameRef: object,\n handleTemplateLoad: func\n};\n\nLegacyTemplatesRenderer.defaultProps = {\n frameSrc: '',\n frameRef: null,\n handleTemplateLoad: f => f\n};\n","/* eslint-disable no-param-reassign */\n/* eslint-disable react/prop-types */\nimport React, { createRef } from 'react';\nimport { func, string, bool } from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { serialize, classNames, handleCustomNavigation } from '@jotforminc/utils';\nimport { openFormLimitDialog } from '@jotforminc/limit-dialog';\n\nimport { isEnterprise } from '@jotforminc/enterprise-utils';\nimport Header from '../Header';\nimport WizardBody from '../Wizard/WizardBody';\nimport WizardItem from '../Wizard/WizardItem';\nimport TemplateModal from '../Wizard/WizardTemplateModal';\n\nimport texts from '../../core/texts';\nimport { templateConstants, isNewStandaloneActive } from '../StandaloneTemplates/templateConstants';\nimport { fetch } from '../../core/utils';\nimport StandaloneTemplates from '../StandaloneTemplates';\nimport { getCategory, getEnterpriseTemplate, getTemplate } from '../StandaloneTemplates/apiTemplates';\nimport { getUrlSearchParamByKey, getUsername } from '../StandaloneTemplates/utils';\nimport NewWizardTemplateModal from '../Wizard/NewWizardTemplateModal';\nimport LegacyTemplatesRenderer from './LegacyTemplatesRenderer';\n\nexport default class UseTemplate extends React.Component {\n constructor(props) {\n super(props);\n\n const searchPrefillData = getUrlSearchParamByKey({ key: 'search' });\n this.state = {\n modalProps: {},\n modalVisible: false,\n modalDetailsData: {},\n standaloneTemplates: [],\n modalContentLoading: true,\n categories: [],\n selectedCategory: undefined,\n searchKeyword: searchPrefillData || ''\n };\n\n this.useTemplateFrame = createRef();\n\n this.hideyMyformsModal = this.hideyMyformsModal.bind(this);\n this.handleTemplateLoad = this.handleTemplateLoad.bind(this);\n this.displayMyformsModal = this.displayMyformsModal.bind(this);\n this.getClonePayloadData = this.getClonePayloadData.bind(this);\n this.handleTemplateClone = this.handleTemplateClone.bind(this);\n this.frameAutoResizeHandler = this.frameAutoResizeHandler.bind(this);\n this.getTemplateType = this.getTemplateType.bind(this);\n this.useTemplateFrameLoader = this.useTemplateFrameLoader.bind(this);\n this.handleCloneGTMAction = this.handleCloneGTMAction.bind(this);\n }\n\n componentDidMount() {\n global.useTemplateAutoResizeHandler = this.frameAutoResizeHandler;\n global.displayMyformsModal = this.displayMyformsModal;\n global.useTemplateFrameLoader = this.useTemplateFrameLoader;\n const { creationLogger } = this.props;\n global.creationLogger = creationLogger;\n }\n\n componentWillUnmount() {\n delete global.useTemplateAutoResizeHandler;\n delete global.displayMyformsModal;\n delete global.creationLogger;\n }\n\n handleTemplateLoad() {\n if (this.useTemplateFrame.current) {\n const iframeContentWindow = this.useTemplateFrame.current.contentWindow;\n if (iframeContentWindow.FormTemplate) {\n iframeContentWindow.FormTemplate.cloneTemplate = this.handleTemplateClone;\n }\n }\n }\n\n handleCloneGTMAction(templateData, cloneActionKey = '') {\n if (!templateData || Object.keys(templateData).length === 0) return;\n if (!cloneActionKey || cloneActionKey === '') return;\n const { id, slug } = templateData;\n const slugOrIDActionKey = slug ? 'slug' : 'id';\n\n const payload = {\n event: cloneActionKey,\n [slugOrIDActionKey]: slug || id\n };\n const { dataLayer = [] } = window;\n dataLayer.push(payload);\n }\n\n async handleTemplateClone(templateData, element) {\n let previousElementContent;\n if (element) {\n previousElementContent = element.innerHTML;\n (element.querySelector('span') || element).innerHTML = 'Please wait...'.locale();\n }\n\n const {\n source, onFormCreate, actionLogger, teamID, user, portalRoot, folderID, viewProps = {}, creationLogger, isSignTemplates, username, handleBeforeCreatingAsset\n } = this.props;\n\n if (handleBeforeCreatingAsset) {\n await handleBeforeCreatingAsset();\n }\n\n const { onFormCreate: onFormCreateFromViewProps = false } = viewProps;\n const { templateType } = this.getTemplateType();\n const {\n successAction, failMessage, failAction, payload\n } = this.getClonePayloadData(templateType, templateData);\n\n const usernameData = getUsername(username, user);\n const { aliasType, gtmCloneActionKey } = templateConstants[templateType];\n const { slug, categories = '', ...rest } = payload;\n const salesforceTemplateCategoryID = '3254377341';\n const isSalesforceTemplate = categories.includes(salesforceTemplateCategoryID);\n if (creationLogger) {\n creationLogger(isSignTemplates ? 'useSignTemplate' : 'useTemplate');\n }\n\n const isAgentDirectory = templateType === 'agent-templates';\n const getCloneEndpointURL = () => {\n switch (true) {\n case isAgentDirectory:\n return 'agent-directory';\n case templateType === 'approval-templates':\n const isWorkflowReleased = window.location.href.includes('myworkflows');\n return isWorkflowReleased ? 'workflow-templates' : templateType;\n default:\n return aliasType || templateType;\n }\n };\n\n return fetch(`/${getCloneEndpointURL()}/api`, {\n method: 'POST',\n body: serialize({\n ...rest, source, teamID, folderID\n }),\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n ...teamID ? { 'jf-team-id': teamID } : {}\n }\n }).then(r => r.json()).then(response => {\n const onFormCreateHandler = onFormCreateFromViewProps || onFormCreate;\n const {\n cloneRedirectionFunc = id => onFormCreateHandler(id, isSalesforceTemplate),\n extractIdFromResponse = res => {\n const { data: { id: newClonedResourceID } } = res;\n return newClonedResourceID;\n }\n } = templateConstants[templateType];\n\n const clonedTemplateID = extractIdFromResponse(response);\n if (clonedTemplateID) {\n if (actionLogger) {\n actionLogger({\n action: successAction,\n target: clonedTemplateID\n });\n if (templateType === 'app-templates') {\n // Also track for portal-app\n // Pls don't change the action obj.\n const portalAppsAction = { action: 'appCreated', target: JSON.stringify({ portalID: clonedTemplateID }) };\n actionLogger(portalAppsAction, 'portal-app');\n }\n }\n if (templateType === 'app-templates') {\n window.sessionStorage.setItem('app-creation-source', 'app-templates-wizard');\n }\n this.handleCloneGTMAction(payload, gtmCloneActionKey);\n cloneRedirectionFunc(clonedTemplateID, usernameData);\n } else {\n console.warn(failMessage); // eslint-disable-line\n console.error(response); // eslint-disable-line\n\n if (actionLogger) {\n actionLogger({\n action: failAction,\n target: '.jfWizard-button.forUseTemplate'\n });\n }\n if (response?.data['form-limit-exceed']) {\n const portalElement = portalRoot ? portalRoot : document.querySelector('#listing-portal-root');\n const limitedUser = user ? user : global?.user;\n if (portalElement !== null && limitedUser) {\n // eslint-disable-next-line no-unused-vars\n openFormLimitDialog({ user: limitedUser, portalRoot: portalElement }).catch(err => {\n // modal closed\n });\n }\n }\n element.innerHTML = previousElementContent;\n }\n }).catch(() => {\n if (element) {\n element.innerHTML = previousElementContent;\n }\n });\n }\n\n getClonePayloadData(templateType, template) {\n const { modalProps = {} } = this.state;\n const { source = '' } = this.props;\n\n const { getCloneTemplatePayload = () => {} } = templateConstants[templateType];\n return getCloneTemplatePayload(modalProps, template, source);\n }\n\n getTemplateType() {\n const {\n langPath, templatePath, categories, teamID, folderID\n } = this.props;\n const params = { categories, teamID, folderID };\n const queryParams = Object.keys(params).reduce((prev, currKey) => ({ ...prev, ...params[currKey] ? { [currKey]: params[currKey] } : {} }), {});\n const frameSrc = [\n langPath,\n templatePath,\n (categories || teamID || folderID) ? `?${new URLSearchParams(queryParams)}` : ''\n ].filter(Boolean).join('');\n\n const templateType = frameSrc.split('/')[1];\n return { templateType, frameSrc };\n }\n\n frameAutoResizeHandler(frameHeight) {\n if (this.useTemplateFrame && typeof frameHeight === 'number') {\n this.useTemplateFrame.current.style.height = `${frameHeight}px`;\n }\n }\n\n useTemplateFrameLoader() {\n this.setState({\n modalContentLoading: false\n });\n }\n\n displayMyformsModal({ ...modalProps }) {\n const { templateType } = this.getTemplateType();\n const { source } = this.props;\n\n this.setState({ modalProps, modalVisible: true });\n const { hasDetailedPreviewModal = false } = templateConstants[templateType];\n if (hasDetailedPreviewModal) {\n const {\n template, language, filters = {}, theme\n } = modalProps;\n const emptyCategoryData = { name: 'empty', id: '0' };\n const templateID = template.id || template._id || modalProps.id || modalProps._id;\n const useStandaloneApi = templateType === 'form-templates' && isEnterprise();\n if (useStandaloneApi) {\n getEnterpriseTemplate(templateID, theme).then(res => {\n const {\n data: {\n formTemplate: {\n _featuredCategory, similarTemplates = [], tabs = [], _clonecount, clonecount\n }\n }\n } = res?.data?.data || {};\n this.setState({\n modalDetailsData: {\n categoryData: _featuredCategory || emptyCategoryData,\n similarTemplates: similarTemplates,\n templateTabs: tabs,\n clonecount: _clonecount || clonecount\n }\n });\n }).catch(() => {\n this.setState({\n modalDetailsData: {\n DOM: '',\n similarTemplates: [],\n templateTabs: [],\n categoryData: emptyCategoryData\n }\n });\n });\n } else {\n getTemplate(templateType, templateID, source, theme, isEnterprise()).then(response => {\n const {\n data: {\n content: {\n DOM, featuredCategory, _featuredCategory, similarTemplates = [], tabs = [], _clonecount, clonecount\n }\n }\n } = response;\n getCategory(filters, { _id: (featuredCategory || _featuredCategory || '').trim() }, language, templateType, source).then(res => {\n this.setState({\n modalDetailsData: {\n DOM,\n categoryData: res?.data?.content || emptyCategoryData,\n similarTemplates: similarTemplates,\n templateTabs: tabs,\n clonecount: _clonecount || clonecount\n }\n });\n });\n }).catch(() => {\n this.setState({\n modalDetailsData: {\n DOM: '',\n similarTemplates: [],\n templateTabs: [],\n categoryData: emptyCategoryData\n }\n });\n });\n }\n }\n }\n\n hideyMyformsModal() {\n this.setState({ modalVisible: false, searchKeyword: '' });\n this.setState({\n modalDetailsData: {\n DOM: '',\n similarTemplates: [],\n templateTabs: [],\n categoryData: {}\n }\n });\n }\n\n render() {\n const {\n setView, actionLogger, backButtonVisible, canClose, source, isMobileApp, customHandleClone = null, user = {}, liteMode = false,\n onBack, onFormCreate, templateHeaderText, templateHeaderSubText, closable, hiddenHeader, viewProps = {}, username = '', liteModeActionButtonHandlers,\n customTrackingProjectName, teamID, useMagnetPortal\n } = this.props;\n\n const { defaultSelectedCategorySlug = null, onBack: onBackFromViewProps } = viewProps;\n const usernameData = getUsername(username, user);\n\n const {\n modalProps, modalVisible, modalContentLoading, modalDetailsData, standaloneTemplates, categories, selectedCategory, searchKeyword\n } = this.state;\n\n const { frameSrc, templateType } = this.getTemplateType();\n const newStandaloneActive = isNewStandaloneActive(frameSrc, isMobileApp, source);\n const {\n count = '',\n countKey = '',\n getCustomHeaderSubText = f => f,\n newPreviewModalActive = false\n } = templateConstants[templateType];\n\n const {\n extraSubTitleClasses = [],\n subTitle = t(templateHeaderSubText).replaceAll(countKey, count)\n } = !liteMode ? getCustomHeaderSubText({\n templateHeaderSubText, setView, countKey, count, teamID, username: usernameData\n }) : f => f;\n\n const headerProps = { extraSubTitleClasses };\n const newTemplateModal = newPreviewModalActive;\n\n return (\n \n {!hiddenHeader && (\n \n )}\n \n {\n newStandaloneActive\n ? (\n this.setState({ selectedCategory: category })}\n setCategories={categoriesData => this.setState({ categories: categoriesData })}\n setSearchKeyword={searchPayload => this.setState({ searchKeyword: searchPayload })}\n setStandaloneTemplates={templates => this.setState({ standaloneTemplates: templates })}\n handleTemplateClone={customHandleClone !== null ? customHandleClone : this.handleTemplateClone}\n />\n )\n : (\n \n )\n }\n {\n (modalVisible && newTemplateModal) && (\n this.setState({ selectedCategory: category })}\n setSearchKeyword={searchPayload => this.setState({ searchKeyword: searchPayload })}\n setModalContentLoading={loading => this.setState({ modalContentLoading: loading })}\n />\n )\n }\n {\n !newTemplateModal && (\n \n )\n }\n \n \n );\n }\n}\n\nUseTemplate.propTypes = {\n setView: func,\n onBack: func,\n username: string,\n actionLogger: func,\n onFormCreate: func,\n langPath: string,\n templatePath: string,\n categories: string,\n source: string,\n backButtonVisible: bool,\n templateHeaderText: string,\n templateHeaderSubText: string,\n teamID: string,\n hiddenHeader: bool,\n useMagnetPortal: bool,\n handleBeforeCreatingAsset: func\n};\n\nUseTemplate.defaultProps = {\n onBack: undefined,\n setView: f => f,\n onFormCreate: (id, isSalesforceTemplate = false) => handleCustomNavigation(`/build/${id}?s=templates${isSalesforceTemplate ? '&salesforceTemplate=1' : ''}`, '_self'),\n actionLogger: null,\n langPath: null,\n username: '',\n hiddenHeader: false,\n templatePath: '/form-templates/standalone',\n categories: null,\n source: 'MYFORMS',\n backButtonVisible: true,\n templateHeaderText: texts.CHOOSE_FROM_TEMPLATES,\n templateHeaderSubText: texts.CHOOSE_FROM_TEMPLATES_SUBTITLE,\n teamID: null,\n useMagnetPortal: false,\n handleBeforeCreatingAsset: null\n};\n","export const stateClass = (action, className) => {\n return global.document.body.classList[action](className);\n};\n\nexport const truncate = (text, length) => { return text.length > length ? `${text.substr(0, length - 3).trim()}...` : text; };\n\n// Minimal fetch\n// https://github.com/developit/unfetch\nexport const fetch = (url, options) => {\n /* eslint-disable */\n options = options || {};\n return new Promise( (resolve, reject) => {\n const request = new XMLHttpRequest();\n const keys = [];\n const all = [];\n const headers = {};\n\n const response = () => ({\n ok: (request.status/100|0) == 2, // 200-299\n statusText: request.statusText,\n status: request.status,\n url: request.responseURL,\n text: () => Promise.resolve(request.responseText),\n json: () => Promise.resolve(JSON.parse(request.responseText)),\n blob: () => Promise.resolve(new Blob([request.response])),\n clone: response,\n headers: {\n keys: () => keys,\n entries: () => all,\n get: n => headers[n.toLowerCase()],\n has: n => n.toLowerCase() in headers\n }\n });\n\n request.open(options.method || 'get', url, true);\n\n request.onload = () => {\n request.getAllResponseHeaders().replace(/^(.*?):[^\\S\\n]*([\\s\\S]*?)$/gm, (m, key, value) => {\n keys.push(key = key.toLowerCase());\n all.push([key, value]);\n headers[key] = headers[key] ? `${headers[key]},${value}` : value;\n });\n resolve(response());\n };\n\n request.onerror = reject;\n\n request.withCredentials = options.credentials == 'include';\n\n for (const i in options.headers) {\n request.setRequestHeader(i, options.headers[i]);\n }\n\n request.send(options.body || null);\n });\n /* eslint-enable */\n};\n\nexport const eventPath = evt => {\n const path = (evt.composedPath && evt.composedPath()) || evt.path;\n const { target } = evt;\n\n if (path != null) {\n // Safari doesn't include Window, but it should.\n return (!path.includes(window)) ? path.concat(window) : path;\n }\n\n if (target === window) {\n return [window];\n }\n\n function getParents(node, memo = []) {\n const { parentNode } = node;\n\n if (!parentNode) {\n return memo;\n }\n\n return getParents(parentNode, memo.concat(parentNode));\n }\n\n return [target].concat(getParents(target), window);\n};\n\nexport const getFileExtension = url => url.split(/[#?]/)[0].split('.').pop().trim();\n","import React from 'react';\nimport {\n oneOfType, arrayOf, node, string\n} from 'prop-types';\nimport { classNames } from '@jotforminc/utils';\n\nexport default class WizardList extends React.Component {\n render() {\n const { className, children, ...props } = this.props;\n\n return (\n
      \n {children}\n
    \n );\n }\n}\n\nWizardList.propTypes = {\n children: oneOfType([\n arrayOf(node),\n node\n ]),\n className: string\n};\n\nWizardList.defaultProps = {\n children: null,\n className: ''\n};\n","import React from 'react';\nimport {\n oneOfType, arrayOf, node, string, bool\n} from 'prop-types';\nimport { classNames } from '@jotforminc/utils';\n\nimport texts from '../../core/texts';\nimport Loader from '../Loader';\n\nexport default class WizardListItem extends React.Component {\n render() {\n const {\n icon,\n text,\n subText,\n isBeta,\n isNew,\n isLoading,\n className,\n ...props\n } = this.props;\n\n return (\n \n \n {icon && (\n
    \n
    \n {icon}\n
    \n {isLoading && (\n
    \n \n
    \n )}\n {isNew && (\n
    {texts.NEW}
    \n )}\n
    \n )}\n
    \n {text &&
    {text}
    }\n {subText &&
    {subText}
    }\n {isBeta && (\n
    {texts.BETA}
    \n )}\n
    \n \n \n );\n }\n}\n\nWizardListItem.propTypes = {\n icon: oneOfType([\n arrayOf(node),\n node\n ]),\n text: string,\n subText: string,\n className: string,\n isBeta: bool,\n isNew: bool,\n isLoading: bool\n};\n\nWizardListItem.defaultProps = {\n icon: null,\n text: null,\n subText: null,\n className: '',\n isBeta: false,\n isNew: false,\n isLoading: false\n};\n","import { autoTranslate } from '@jotforminc/utils';\n\nexport default autoTranslate({\n CREATE_A_FORM: 'Create a Form',\n CREATE_FORM: 'Create Form',\n CREATE_A_FORM_SUBTITLE: 'Create or import a form to start gathering data',\n START_FROM_SCRATCH: 'Start From Scratch',\n START_FROM_SCRATCH_SUBTEXT: 'A blank slate is all you need',\n USE_TEMPLATE: 'Use Template',\n USE_TEMPLATE_SUBTEXT: 'Choose from 10,000+ premade forms',\n IMPORT_FORM: 'Import Form',\n IMPORT_FORM_SUBTEXT: 'Convert an existing form in seconds',\n IMPORT_FORM_SUBTITLE: 'Import existing forms into your Jotform account in seconds',\n SELECT_LAYOUT: 'Select form layout',\n SELECT_LAYOUT_SUBTITLE: 'Choose a layout according to your needs',\n CLASSIC_FORM: 'Classic Form',\n CLASSIC_FORM_SUBTITLE: 'Show all questions on one page',\n CARD_FORM: 'Card Form',\n CARD_FORM_SUBTITLE: 'Show single question per page',\n DESCRIBE_IN_SECONDS: 'Describe a form and get it in seconds',\n DESCRIBE_IN_WORDS: 'Describe in words what kind of information you want to collect.',\n PDF_FORM: 'PDF Form',\n PDF_FORM_SUBTITLE: 'PDF forms can be filled out on digital devices',\n GENERATING_FORM: 'Generating form',\n ENTER_URL: 'Enter URL',\n SELECT_FROM_YOUR_FORMS: 'Select from your forms',\n IMPORT_FAILED_PLEASE_TRY_AGAIN: 'Import failed, please try again later.',\n FROM_A_WEBPAGE: 'From a web page',\n FROM_A_WEBPAGE_SUBTITLE: 'Import a form from any page',\n CLONE_AN_EXISTING: 'Clone your existing form',\n CLONE_AN_EXISTING_SUBTITLE: 'Create a copy of one of your existing forms',\n IMPORT_PDF_FORM: 'Import PDF form',\n IMPORT_PDF_FORM_SUBTITLE: 'Convert your PDF form to an online form',\n SELECT_A_FORM: 'Select a Form',\n SELECT_FORM: 'Select Form',\n PREVIEW_FORM: 'Preview Form',\n PLEASE_WAIT: 'Please wait...',\n BETA: 'Beta',\n CREATE_SALESFORCE_FORM: 'Create Salesforce Form',\n CREATE_SALESFORCE_FORM_SUBTEXT: 'Create an integrated form with Salesforce objects',\n SALESFORCE_SELECT_OBJECT: 'Enter or select object',\n SALESFORCE_OBJECTS: 'Salesforce Objects',\n SALESFORCE_FIELD_SELECTED: '1 field selected',\n SALESFORCE_FIELDS_SELECTED: '{selectedFieldsCount} fields selected',\n MAIN_STEP_START_FROM_SCRATCH: 'Start from scratch',\n MAIN_STEP_USE_TEMPLATE: 'Use template',\n MAIN_STEP_IMPORT_FORM: 'Import form',\n MAIN_STEP_SMART_PDF_FORM: 'Smart PDF forms',\n MAIN_STEP_SMART_PDF_FORM_SUBTEXT: 'Turn your PDFs into online forms',\n MAIN_STEP_AI_SUBTEXT: 'Describe a form and get it in no time'\n});\n","import React from 'react';\nimport { func, string } from 'prop-types';\nimport { classNames } from '@jotforminc/utils';\nimport {\n WizardBody,\n WizardList,\n WizardItem,\n WizardListItem,\n WizardHeader as Header\n} from '@jotforminc/wizard-shared';\n\nimport texts from '../../core/texts';\nimport IconClassicForm from '../../assets/svg/iconClassicForm.svg';\nimport IconCardForm from '../../assets/svg/iconCardForm.svg';\n\nexport default class FormTypeSelect extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n isLoading: null\n };\n }\n\n onCreateForm(formType) {\n const { onClickItem } = this.props;\n this.setState({ isLoading: formType });\n onClickItem(formType);\n }\n\n render() {\n const {\n setView, className, onBackButtonClick, actionLogger\n } = this.props;\n\n const {\n isLoading\n } = this.state;\n\n return (\n \n \n
    \n \n \n {\n this.onCreateForm('ClassicForm');\n window.sendMessageToJFMobile?.({ type: 'trackData', value: ['formLayout', 'classic'] });\n }}\n icon={}\n text={texts.CLASSIC_FORM}\n subText={texts.CLASSIC_FORM_SUBTITLE}\n isLoading={isLoading === 'ClassicForm'}\n />\n {\n this.onCreateForm('CardForm');\n window.sendMessageToJFMobile?.({ type: 'trackData', value: ['formLayout', 'card'] });\n }}\n icon={}\n text={texts.CARD_FORM}\n subText={texts.CARD_FORM_SUBTITLE}\n isLoading={isLoading === 'CardForm'}\n />\n \n \n
    \n
    \n );\n }\n}\n\nFormTypeSelect.propTypes = {\n onClickItem: func,\n setView: func,\n actionLogger: func,\n onBackButtonClick: func,\n className: string\n};\n\nFormTypeSelect.defaultProps = {\n actionLogger: f => f,\n onClickItem: f => f,\n setView: f => f,\n onBackButtonClick: null,\n className: null\n};\n","import React from 'react';\nimport { func, shape, string } from 'prop-types';\nimport { serialize, handleCustomNavigation, pushDataLayer } from '@jotforminc/utils';\n\nimport { fetch } from '../../core/utils';\nimport FormTypeSelect from './FormTypeSelect';\n\nexport default class StartFromScratch extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n isCreatingForm: false\n };\n\n this.disableCreateFormButtons = this.disableCreateFormButtons.bind(this);\n this.createForm = this.createForm.bind(this);\n this.reloadPageOnCache = event => {\n if (event.persisted) {\n window.location.reload();\n }\n };\n }\n\n componentWillUnmount() {\n window.removeEventListener('pageshow', this.reloadPageOnCache);\n }\n\n createForm(createFormType) {\n const { isCreatingForm } = this.state;\n const {\n currentFolder, actionLogger, onFormCreate, teamID, folderID, creationLogger\n } = this.props;\n const fetchURL = '/API/form/new';\n if (isCreatingForm) { return; }\n\n this.disableCreateFormButtons();\n if (creationLogger) {\n creationLogger(`startFromScratch-${createFormType}`);\n }\n\n switch (createFormType) {\n case 'ClassicForm':\n fetch(`${fetchURL}?${serialize({\n folder: currentFolder || folderID\n })}`, { headers: teamID ? { 'jf-team-id': teamID } : {} }).then(r => r.json()).then(data => {\n const { content: { id } } = data;\n\n if (actionLogger) {\n actionLogger({\n action: 'formCreationCompleted',\n target: id\n });\n }\n pushDataLayer({ method: 'Classic Form', event: 'create_form_from_scratch' });\n onFormCreate(id);\n });\n break;\n case 'CardForm':\n fetch(`${fetchURL}?${serialize({\n formType: 'cardForm',\n themeId: '59647bf8cf3bfe639c0b7cb1',\n folder: currentFolder\n })}`, { headers: teamID ? { 'jf-team-id': teamID } : {} }).then(r => r.json()).then(data => {\n const { content: { id } } = data;\n\n if (actionLogger) {\n actionLogger({\n action: 'formCreationCompleted',\n target: id\n });\n }\n pushDataLayer({ method: 'Card Form', event: 'create_form_from_scratch' });\n onFormCreate(id);\n });\n break;\n default:\n break;\n }\n }\n\n disableCreateFormButtons() {\n window.addEventListener('pageshow', this.reloadPageOnCache);\n this.setState({\n isCreatingForm: true\n });\n }\n\n render() {\n const {\n setView, actionLogger, onBackButtonClick, viewProps\n } = this.props;\n const { onBackButtonClick: onBackButtonClickFromViewProps } = viewProps;\n\n return (\n \n );\n }\n}\n\nStartFromScratch.propTypes = {\n setView: func,\n currentFolder: string,\n folderID: string,\n actionLogger: func,\n onFormCreate: func,\n onBackButtonClick: func,\n teamID: string,\n viewProps: shape({\n onBackButtonClick: func\n }),\n creationLogger: func\n};\n\nStartFromScratch.defaultProps = {\n setView: f => f,\n currentFolder: null,\n folderID: null,\n actionLogger: null,\n onBackButtonClick: null,\n onFormCreate: id => { handleCustomNavigation(`/build/${id}`, '_self'); },\n teamID: null,\n viewProps: {\n onBackButtonClick: null\n },\n creationLogger: f => f\n};\n","import React from 'react';\nimport { func, shape, string } from 'prop-types';\nimport { Wizard, NavigationWizardTemplate as UseTemplate } from '@jotforminc/wizard-shared';\nimport { StartFromScratch } from '@jotforminc/create-new-wizards';\nimport { t } from '@jotforminc/translation';\nimport { ScFormTemplates } from '../styles/scSelect';\n\nconst SelectTemplate = ({\n handleClone, handleFormCreate, handlePickerClose, user, templateType, source\n}) => {\n const templateHeaderTextKeys = { form: 'form', sign: 'sign document' };\n const templateHeaderTextKey = templateHeaderTextKeys[templateType];\n const templateHeaderSubText = `You don't have any ${templateHeaderTextKey}. You can select a ${templateHeaderTextKey} from templates to use in your app`;\n\n const templatePath = `/${templateType}-templates/standalone`;\n return (\n \n \n \n );\n};\n\nSelectTemplate.propTypes = {\n user: shape({}),\n handleClone: func,\n handleFormCreate: func,\n templateType: string,\n handlePickerClose: func,\n source: string\n};\n\nSelectTemplate.defaultProps = {\n user: {},\n source: '',\n handleClone: f => f,\n handleFormCreate: f => f,\n templateType: undefined,\n handlePickerClose: f => f\n};\n\nexport default SelectTemplate;\n","import Styled from 'styled-components';\nimport { mainFont } from '../../../../../styles/global';\n\nexport const ScResourcePicker = Styled.div`\n .header-content {\n margin: 20px 0;\n font-family: ${mainFont};\n display: block;\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 margin: 0 auto;\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: ${mainFont};\n }\n\n .taste.isGray {\n padding: 8px 32px;\n }\n\n .taste.isLightGreen {\n background-color: #78BB07;\n opacity: 1;\n\n &:hover {\n opacity: 1;\n background-color: #4EB100;\n }\n &[disabled] {\n opacity: 0.5;\n background-color: #78BB07;\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 ${({ isFullScreen }) => (isFullScreen && `\n div[data-uikit-modal-container] {\n max-width: unset;\n min-height: unset;\n }\n\n @media screen and (min-width: 480px) {\n [data-sc=\"picker-body\"] {\n max-height: unset;\n }\n }\n\n .header-content {\n .pm-t {\n font-size: 30px;\n font-weight: 500;\n color: #141E46;\n text-align: center;\n }\n\n .pm-d {\n font-size: 18px;\n color: #6F76A7;\n text-align: center;\n }\n }\n `)}\n\n .picker-loading {\n min-height: 60vh;\n }\n\n @media screen and (max-width: 600px) {\n [data-sc=\"picker-body\"] {\n max-height: calc(100vh - 180px);\n }\n\n [data-sc=\"footer\"] {\n position: fixed; \n bottom: 0;\n width: 100%;\n background-color: #efeff6;\n }\n }\n`;\n","import Styled from 'styled-components';\n\nconst ScResourcePickerControlBar = Styled.div`\n display: flex;\n align-items: center;\n margin: 33px 0 10px;\n border: 1px solid #939BC4;\n border-radius: 4px;\n\n div[data-sc=smartList-controlBar] {\n flex-grow: 1;\n margin: 0;\n\n .cb-searchCont .cb-search.isNewBranding {\n background-color: transparent;\n }\n }\n`;\n\nexport default ScResourcePickerControlBar;\n","import React from 'react';\nimport { bool, shape } from 'prop-types';\nimport Styled from 'styled-components';\n\nconst ScOptionRenderer = Styled.div`\n display: flex;\n align-items: center;\n justify-content: start;\n`;\nconst OptionRenderer = ({ option: { text, value, Icon }, isSelected }) => {\n return (\n \n \n \n {text}\n \n \n );\n};\n\nOptionRenderer.propTypes = {\n option: shape({}).isRequired,\n isSelected: bool.isRequired\n};\n\nexport default OptionRenderer;\n","import React, { forwardRef } from 'react';\nimport { bool, oneOfType, shape } from 'prop-types';\n\nconst ButtonRenderer = forwardRef(({\n option: { text, value, Icon } = {},\n isOptionsVisible, ...props\n}, ref) => {\n return (\n \n {Icon && }\n \n {text}\n \n \n );\n});\n\nButtonRenderer.propTypes = {\n option: oneOfType([shape({}), bool]),\n isOptionsVisible: bool\n};\n\nButtonRenderer.defaultProps = {\n option: {},\n isOptionsVisible: false\n};\n\nexport default ButtonRenderer;\n","import React from 'react';\nimport { SVGIcon, EmojiRenderer } from '@jotforminc/icon-selector';\nimport { number, string } from 'prop-types';\n\nconst TeamImage = ({\n url, icon, emojiId, emojiSize, iconColor, iconSvgRef\n}) => {\n if (url) return (\"Team);\n\n if (emojiId) return ();\n\n const isIconSpriteLoaded = !!document.getElementById('app-icons');\n\n return isIconSpriteLoaded && iconSvgRef ? (\n
    \n \n \n \n
    \n ) : (\n \n );\n};\n\nTeamImage.propTypes = {\n url: string,\n icon: string,\n emojiId: string,\n emojiSize: number,\n iconColor: string,\n iconSvgRef: string\n};\n\nTeamImage.defaultProps = {\n url: '',\n icon: '',\n emojiId: '',\n emojiSize: 24,\n iconColor: '',\n iconSvgRef: ''\n};\n\nexport default TeamImage;\n","import React from 'react';\nimport cn from 'classnames';\nimport { string } from 'prop-types';\nimport Styled from 'styled-components';\nimport Image from './Image';\n\nconst ScTeamAvatar = Styled.div`\n min-width: 17px;\n height: 17px;\n border-radius: 50%;\n overflow: hidden;\n margin: 0;\n padding: 0;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n\n & > img {\n width: 17px;\n height: 17px;\n object-fit: cover;\n }\n\n .jfIconSVG-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n width: 17px;\n height: 17px;\n\n > div {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n }\n\n .emoji-mart-emoji span {\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n`;\n\nconst TeamAvatar = props => {\n const { iconBgColor, url, icon } = props;\n\n return (\n \n \n \n );\n};\n\nTeamAvatar.propTypes = {\n iconBgColor: string,\n url: string,\n icon: string\n};\n\nTeamAvatar.defaultProps = {\n iconBgColor: '',\n url: '',\n icon: ''\n};\n\nexport default TeamAvatar;\n","/* eslint-disable max-len */\nimport Styled from 'styled-components';\nimport { ScDropdown } from '../Dropdown/scDropdown';\n\nexport const ScControlBarDropdown = Styled(ScDropdown)`\n border-left: 1px solid #939BC4;\n width: 194px;\n\n .dropdown-button {\n display: flex;\n align-items: center;\n border: none;\n padding-right: 32px;\n\n &:after {\n width: 36px;\n border-left: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' fill='none'%3E%3Cpath stroke='%2309F' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m1 1 4 4 4-4'/%3E%3C/svg%3E\");\n }\n\n svg {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 17px;\n height: 17px;\n }\n\n span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: #0099FF;\n }\n }\n\n .dropdown-container {\n border: 1px solid #939BC4;\n border-radius: 0 0 4px 4px;\n }\n\n .dropdown-option {\n &-container {\n &:last-child {\n border-radius: 0 0 4px 4px;\n }\n\n &:after {\n background: transparent;\n }\n\n &:hover {\n background-color: #F3F3FE;\n }\n\n &[aria-selected=\"true\"] {\n background-color: #E5E5FA;\n\n &:after {\n background-color: #E5E5FA;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 14 14'%3E%3Cpath fill='%236F76A7' fill-rule='evenodd' d='M7 14c3.866 0 7-3.134 7-7 0-3.86599-3.134-7-7-7-3.86599 0-7 3.13401-7 7 0 3.866 3.13401 7 7 7Zm4.0058-8.72223c.2539-.24168.2596-.63909.0127-.88764-.2469-.24856-.6528-.25414-.9067-.01246l-4.26504 4.0596-1.9241-2.14102c-.23392-.26029-.63909-.28566-.90497-.05667-.26589.22899-.29181.62562-.05789.88591l2.3693 2.63642c.11599.12906.28098.20592.45645.21261.17548.0067.34608-.05735.47198-.17719l4.74827-4.51956Z' clip-rule='evenodd'/%3E%3C/svg%3E\");\n }\n }\n }\n }\n`;\n","import React from 'react';\nimport { ControlBar } from '@jotforminc/smart-list';\nimport { bool, func, string } from 'prop-types';\nimport { t } from '@jotforminc/translation';\nimport { useSelector } from 'react-redux';\nimport { IconFormFilled, IconProductReportBuilderFilled, IconProductTablesFilled } from '@jotforminc/svg-icons';\nimport ScResourcePickerControlBar from './ScResourcePickerControlBar';\nimport Dropdown from '../Dropdown';\nimport OptionRenderer from './OptionRenderer';\nimport ButtonRenderer from './ButtonRenderer';\nimport SELECTORS from '../../store/selectors';\nimport TeamAvatar from '../TeamAvatar';\nimport { ScControlBarDropdown } from './ScControlBarDropdown';\nimport * as API from '../../modules/api';\nimport { getTeamID } from '../../utils';\n\nexport const RESOURCES_WITH_CONTROL_BAR = {\n sheet: {\n resourceFetcher: API.fetchTables,\n optionValue: 'mytables',\n optionText: 'My Tables',\n Icon: IconProductTablesFilled\n },\n report: {\n resourceFetcher: API.fetchReports,\n optionValue: 'myreports',\n optionText: 'My Reports',\n Icon: IconProductReportBuilderFilled\n },\n form: {\n resourceFetcher: API.fetchForms,\n optionValue: 'myforms',\n optionText: 'My Forms',\n Icon: IconFormFilled\n }\n};\n\nconst ResourcePickerControlBar = ({\n type, selectedOptionValue, onChangeOption, allowOnlyOwnTeam, ...rest\n}) => {\n const userTeams = useSelector(SELECTORS.getUserTeams);\n\n const { [type]: { optionValue, optionText, Icon } } = RESOURCES_WITH_CONTROL_BAR;\n\n const options = [\n { text: t(optionText), value: optionValue, Icon: () => },\n ...userTeams.filter(team => team.id === getTeamID() || !allowOnlyOwnTeam).map(({\n name, id, teamAvatarURL, teamAvatarIcon, teamAvatarEmojiId, teamAvatarIconColor, teamAvatarIconSvgRef, teamAvatarIconBgColor\n }) => ({\n text: name,\n value: id,\n Icon: () => (\n \n )\n }))\n ];\n\n return (\n \n \n \n \n );\n};\n\nResourcePickerControlBar.propTypes = {\n type: string.isRequired,\n selectedOptionValue: string,\n onChangeOption: func,\n allowOnlyOwnTeam: bool\n};\n\nResourcePickerControlBar.defaultProps = {\n selectedOptionValue: null,\n onChangeOption: f => f,\n allowOnlyOwnTeam: false\n};\n\nexport default ResourcePickerControlBar;\n","import React from 'react';\nimport { EmptyList } from '@jotforminc/empty-list';\nimport { bool } from 'prop-types';\n\nconst EmptyListPlaceholder = ({ isTeamSelected }) => {\n return (\n \n );\n};\n\nEmptyListPlaceholder.propTypes = {\n isTeamSelected: bool.isRequired\n};\n\nexport default EmptyListPlaceholder;\n","import React, {\n useCallback, useEffect, useImperativeHandle, useState\n} from 'react';\nimport { ResourcePicker, RESOURCE_TYPES } from '@jotforminc/resource-picker';\nimport { t } from '@jotforminc/translation';\nimport {\n arrayOf, bool, func, object, string\n} from 'prop-types';\nimport ResourcePickerControlBar, { RESOURCES_WITH_CONTROL_BAR } from '../ResourcePickerControlBar';\nimport { getTeamIDOfAsset, getTeamResources } from '../../modules/api';\nimport { isTeamResourcePicker } from '../../utils';\nimport { Loading } from '../Loading';\nimport EmptyListPlaceholder from './EmptyListPlaceholder';\nimport { TEAM_ID } from '../../constants/team';\n\nconst ResourcePickerWithControlBar = React.forwardRef(({\n resourceType, usedResourceIDs, onSelectionChange, allowOnlyOwnTeam, isChangeFormAction, initialSelectedForm, fetcherConfig, ...rest\n}, ref) => {\n const { params: fetcherParams = {}, filters: fetcherFilters = {} } = fetcherConfig;\n const [resources, setResources] = useState([]);\n const [loading, setLoading] = useState(true);\n const [selectedItems, setSelectedItems] = useState({});\n\n const { [resourceType]: { resourceFetcher, optionValue } } = RESOURCES_WITH_CONTROL_BAR;\n\n const [selectedOption, setSelectedOption] = useState(isTeamResourcePicker() ? TEAM_ID : optionValue);\n\n const isTeamSelected = selectedOption !== optionValue;\n\n const getFormFetcher = useCallback(searchTerm => {\n if (isTeamSelected) {\n return getTeamResources({\n teamID: selectedOption, resourceType, filters: { fullText: searchTerm, ...fetcherFilters }, params: { ...fetcherParams }\n });\n }\n return resourceFetcher({ fullText: searchTerm, ...fetcherFilters }, { ...fetcherParams });\n }, [selectedOption]);\n\n const onSearch = useCallback(async (searchTerm = '') => {\n return getFormFetcher(searchTerm).then(result => result.filter(resource => !usedResourceIDs.includes(resource.id)));\n }, [getFormFetcher]);\n\n const DataProvider = useCallback(() => ({ onSearch }), [onSearch]);\n\n useEffect(() => {\n onSearch().then(setResources).finally(() => setLoading(false));\n }, [onSearch]);\n\n useEffect(() => {\n if (isChangeFormAction && isTeamResourcePicker()) {\n getTeamIDOfAsset({ resourceID: initialSelectedForm, resourceType: resourceType.toUpperCase() }).then(teamID => {\n setSelectedOption(teamID ?? TEAM_ID);\n });\n }\n }, []);\n\n const handleSelectionChange = selections => {\n if (resourceType === 'form') {\n onSelectionChange(selections);\n return;\n }\n const selectedOptionItems = resources.filter(({ id }) => selections.includes(id)).map(s => ({ ...s, isTeamAsset: isTeamSelected }));\n const _selectedItems = { ...selectedItems, [selectedOption]: selectedOptionItems };\n setSelectedItems(_selectedItems); // keep resources belongs to different list\n onSelectionChange([...Object.values(_selectedItems)].reduce((prev, items) => [...prev, ...items], []));\n };\n\n useImperativeHandle(ref, () => ({\n getResources: () => resources\n }));\n\n const ControlBarRenderer = useCallback(props => (\n \n ), [selectedOption, resourceType]);\n\n return loading ? : (\n }\n showNotFoundListPlaceholder={resources.length === 0 ? false : true}\n {...rest}\n resources={resources}\n />\n );\n});\n\nResourcePickerWithControlBar.propTypes = {\n appOwner: string,\n resourceType: string,\n usedResourceIDs: arrayOf(string),\n onSelectionChange: func,\n allowOnlyOwnTeam: bool,\n isChangeFormAction: bool,\n initialSelectedForm: string,\n fetcherConfig: object\n};\n\nResourcePickerWithControlBar.defaultProps = {\n appOwner: '',\n resourceType: RESOURCE_TYPES.FORM,\n usedResourceIDs: [],\n onSelectionChange: f => f,\n allowOnlyOwnTeam: false,\n isChangeFormAction: false,\n initialSelectedForm: '',\n fetcherConfig: {}\n};\n\nexport default ResourcePickerWithControlBar;\n","import React from 'react';\nimport { t } from '@jotforminc/translation';\nimport PropTypes from 'prop-types';\nimport { IconInfoCircleFilled } from '@jotforminc/svg-icons';\nimport { Button } from '@jotforminc/magnet';\nimport Styled from 'styled-components';\nimport { isTeamResourcePicker } from '../../../../../utils';\n\nconst ScModalFooterWarning = Styled.div`\n display: flex;\n align-items: center;\n color: #141E46;\n font-size: 16px;\n text-align: left;\n \n svg {\n width: 16px;\n color: #0099FF;\n margin-right: 10px;\n }\n`;\n\nconst Footer = ({\n type, confirmText, selectedItemCount, onAddButtonClick, hasItems, onCancel, hasSentbox\n}) => (\n
    \n {onCancel ? (\n \n ) : (\n
    \n {hasSentbox ? (\n \n \n {t('Related Sentbox element(s) will be updated.')}\n \n ) : (\n <>\n {(selectedItemCount > 0 && isTeamResourcePicker()) && t(`{itemCount} ${type}s selected.`).replace('{itemCount}', selectedItemCount)}\n \n )}\n
    \n )}\n {hasItems && (\n \n )}\n
    \n);\n\nFooter.propTypes = {\n type: PropTypes.string.isRequired,\n selectedItemCount: PropTypes.number.isRequired,\n onAddButtonClick: PropTypes.func.isRequired,\n hasItems: PropTypes.bool.isRequired,\n confirmText: PropTypes.string,\n onCancel: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n hasSentbox: PropTypes.bool\n};\n\nFooter.defaultProps = {\n confirmText: 'Add',\n onCancel: false,\n hasSentbox: false\n};\n\nexport default Footer;\n","import React from 'react';\nimport { t } from '@jotforminc/translation';\nimport { DATA_SOURCE_ITEMS } from '../../../../../constants/itemTypes';\nimport Footer from '../FormPickerModal/Footer';\n\nexport const COMPONENT_KEYS = {\n FOOTER: 'Footer',\n HEADER: 'Header'\n};\n\nconst getDefaultElement = (key, props) => {\n switch (key) {\n case COMPONENT_KEYS.FOOTER: {\n return