{"version":3,"file":"js/participant_opt_in-0bb7c428542cf759735f.js","mappings":"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","sources":["webpack://user-interviews/./app/javascript/hooks/use_zod_schema.ts","webpack://user-interviews/./app/javascript/researcher/participant_search/filtered_view/utils.js","webpack://user-interviews/./app/javascript/hooks/use_media_query.js","webpack://user-interviews/./app/javascript/participant/project_application/components/header/recruit_header.module.scss?8597","webpack://user-interviews/./app/javascript/components/survey_builder/constants.js","webpack://user-interviews/./app/javascript/components/question_skip_logic_summary/prop_types.js","webpack://user-interviews/./app/javascript/hooks/use_env_vars.ts","webpack://user-interviews/./app/javascript/participant/project_application/components/project_application_loading_skeleton.module.scss?3daf","webpack://user-interviews/./app/javascript/participant/project_application/components/project_application_loading_skeleton.tsx","webpack://user-interviews/./app/javascript/components/page/page.module.scss?774e","webpack://user-interviews/./app/javascript/components/page/page.tsx","webpack://user-interviews/./app/javascript/hooks/use_sidebar_mobile_breakpoint.ts","webpack://user-interviews/./app/javascript/researcher/participant_search/segment_builder/lib/filter_list.js","webpack://user-interviews/./app/javascript/api/opt_in_forms/endpoints.js","webpack://user-interviews/./app/javascript/components/survey_builder/confirmation_modal.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/context.js","webpack://user-interviews/./app/javascript/components/survey_builder/skip_logic_modal/skip_logic/condition_row/condition_select.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/skip_logic_modal/skip_logic/condition_row/actions.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/skip_logic_modal/skip_logic/condition_row/controls/answer_select.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/skip_logic_modal/skip_logic/condition_row/controls/operator_select.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/skip_logic_modal/skip_logic/condition_row/controls/controls.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/skip_logic_modal/skip_logic/condition_row/condition_row.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/skip_logic_modal/skip_logic/errors.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/skip_logic_modal/skip_logic/skip_logic.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/skip_logic_modal/section_skip_logic.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/skip_logic_modal/skip_logic_modal.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/survey_upgrade_modal.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/actions.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/answer/qualify_logic_select.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/answer/editing.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/answer/pick.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/answer/pick_none.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/answer/other_answer.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/answer/answer.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/answers.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/grid/accept.module.scss?3b22","webpack://user-interviews/./app/javascript/components/survey_builder/question/grid/accept.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/grid/remove_button.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/grid/useAutosizeTextArea.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/grid/useAutosizeGridTextArea.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/grid/grid.module.scss?ca23","webpack://user-interviews/./app/javascript/components/survey_builder/question/grid/grid_answer.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/grid/grid_question.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/grid/grid.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/hint.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/survey_form_question_icon_label.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/survey_new_attribute_modal.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/map_attribute.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/question_controls/key_question.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/question_controls/other_option_checkbox.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/question_controls/required.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/question_controls/question_controls.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/question_controls/question_controls.module.scss?fa9e","webpack://user-interviews/./app/javascript/components/survey_builder/question/text.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/type.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/question.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/sections/section/add_new_page_button.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/sections/section/add_new_page_button.module.scss?c980","webpack://user-interviews/./app/javascript/components/survey_builder/sections/section/section_controls.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/sections/section/section_controls.module.scss?d686","webpack://user-interviews/./app/javascript/components/survey_builder/sections/section/section_dropdown.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/sections/section/section.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/sections/section/section.module.scss?e3c2","webpack://user-interviews/./app/javascript/components/survey_builder/sections/sections.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/survey_builder.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/index.js","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/preview_banner.module.scss?72b6","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/preview_banner.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/hub_survey_preview_header.module.scss?331e","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/hub_survey_preview_header.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/recruit_survey_preview_header.module.scss?36df","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/recruit_survey_preview_header.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/survey_preview_form_header.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/survey_preview_end.module.scss?4973","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/survey_preview_end.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/survey_preview_form.module.scss?4951","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/survey_preview_form.jsx","webpack://user-interviews/./app/javascript/hooks/use_http.js","webpack://user-interviews/./app/javascript/researcher/surveys/components/survey_section_form_card.module.css?269e","webpack://user-interviews/./app/javascript/hooks/use_client_has_rendered.ts","webpack://user-interviews/./app/javascript/participant/opt_in/components/opt_in.module.css?8ce4","webpack://user-interviews/./app/javascript/components/page/components/sidebar/hooks/use_sidebar_context.ts","webpack://user-interviews/./app/javascript/api/population_labels/endpoints.ts","webpack://user-interviews/./app/javascript/api/projects/endpoints.ts","webpack://user-interviews/./app/javascript/researcher/project_workspace/constants.ts","webpack://user-interviews/./app/javascript/hooks/use_authorization.js","webpack://user-interviews/./app/javascript/researcher/surveys/components/empty_survey_notice.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/boolean_answer_input.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/answer_input.module.scss?0915","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/boolean_answer_input_group.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/date_answer_input.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/float_answer_input.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/text_answer_input.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/pick_none_input.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/pick_one_answer_input.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/pick_one_answer_input_group.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/pick_many_answer_input.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/pick_many_answer_input_group.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/survey_answer_input.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/survey_question_form_group.module.scss?afa8","webpack://user-interviews/./app/javascript/researcher/surveys/components/survey_question_form_group.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/grid_question_components/grid_question.module.scss?4378","webpack://user-interviews/./app/javascript/researcher/surveys/components/grid_question_components/row_title_cell.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/grid_question_components/column_title_cell.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/grid_question_components/answer_title_row.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/grid_question_components/pick_one_input_row.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/grid_question_components/pick_many_input_row.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/grid_question_components/question_input_row.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/grid_question_components/grid_question_form_group.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/survey_section_form_card.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/survey_section_form.module.scss?edd6","webpack://user-interviews/./app/javascript/researcher/surveys/components/survey_section_form.jsx","webpack://user-interviews/./app/javascript/researcher/project_workspace/hooks/use_project_workspace_context.tsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/survey_section_loading_skeleton.module.scss?d73d","webpack://user-interviews/./app/javascript/researcher/surveys/components/survey_section_loading_skeleton.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/prop_types.js","webpack://user-interviews/./app/javascript/store/slices/column_configuration_slice.js","webpack://user-interviews/./app/javascript/api/utils.ts","webpack://user-interviews/./app/javascript/components/owner_boundary/context.tsx","webpack://user-interviews/./app/javascript/researcher/participant_search/invite_rules_drawer/constants.js","webpack://user-interviews/./app/javascript/api/segments/endpoints.js","webpack://user-interviews/./app/javascript/api/participant_population_opt_in_forms/endpoints.js","webpack://user-interviews/./app/javascript/hooks/use_rails_context.tsx","webpack://user-interviews/./app/javascript/hoc/with_tracked_click.jsx","webpack://user-interviews/./app/javascript/researcher/project_workspace/slice.js","webpack://user-interviews/./app/javascript/researcher/project_workspace/store/utils.js","webpack://user-interviews/./app/javascript/hooks/use_page_title/use_page_title.ts","webpack://user-interviews/./app/javascript/components/survey_builder/prop_types.js","webpack://user-interviews/./app/javascript/components/connect_calendar/prop_types.js","webpack://user-interviews/./app/javascript/store/slices/segments_slice.js","webpack://user-interviews/./app/javascript/participant/opt_in/components/header.module.css?ea37","webpack://user-interviews/./app/javascript/participant/opt_in/components/header.tsx","webpack://user-interviews/./app/javascript/api/feature_flag/endpoints.js","webpack://user-interviews/./app/javascript/hooks/use_feature_flag.js","webpack://user-interviews/./app/javascript/researcher/participant_search/segment_builder/lib/filter_utils.js","webpack://user-interviews/./app/javascript/components/dope_browser_router.tsx","webpack://user-interviews/./app/javascript/components/cloudflare_turnstile/cloudflare_turnstile.tsx","webpack://user-interviews/./app/javascript/components/phone_number/phone_number.jsx","webpack://user-interviews/./app/javascript/api/tag_types.js","webpack://user-interviews/./app/javascript/hoc/with_page_providers.tsx","webpack://user-interviews/./app/javascript/api/team_projects/endpoints.js","webpack://user-interviews/./app/javascript/researcher/project_workspace/hooks/use_get_project_state.ts","webpack://user-interviews/./app/javascript/api/response_sets/endpoints.js","webpack://user-interviews/./app/javascript/hoc/utils.ts","webpack://user-interviews/./app/javascript/hooks/use_auth_user_context.ts","webpack://user-interviews/./app/javascript/components/page/components/footer/footer.module.scss?ffdc","webpack://user-interviews/./app/javascript/components/page/components/footer/footer.tsx","webpack://user-interviews/./app/javascript/api/account_hub_configurations/endpoints.ts","webpack://user-interviews/./app/javascript/api/participants/endpoints.js","webpack://user-interviews/./app/javascript/participant/participant_profile/constants.js","webpack://user-interviews/./app/javascript/hoc/with_auth_user_context.jsx","webpack://user-interviews/./app/javascript/api/survey_sections/endpoints.js","webpack://user-interviews/./app/javascript/researcher/surveys/utils/utils.ts","webpack://user-interviews/./app/javascript/store/slices/project_details_slice.js","webpack://user-interviews/./app/javascript/store/root_reducer.js","webpack://user-interviews/./app/javascript/store/store.js","webpack://user-interviews/./app/javascript/components/page/components/sidebar/hooks/use_is_sidebar_open.ts","webpack://user-interviews/./app/javascript/components/page/components/sidebar_context_provider/sidebar_context_provider.tsx","webpack://user-interviews/./app/javascript/components/owner_boundary/owner_boundary.tsx","webpack://user-interviews/./app/javascript/hooks/use_appsignal.ts","webpack://user-interviews/./app/javascript/components/question_skip_logic_summary/question_skip_logic_summary_condition.jsx","webpack://user-interviews/./app/javascript/components/question_skip_logic_summary/question_skip_logic_summary.module.css?16ac","webpack://user-interviews/./app/javascript/components/question_skip_logic_summary/question_skip_logic_summary_conditions.jsx","webpack://user-interviews/./app/javascript/components/question_skip_logic_summary/question_skip_logic_summary.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/hooks/use_get_survey_preview_section.js","webpack://user-interviews/./app/javascript/researcher/surveys/hooks/use_get_first_survey_section.js","webpack://user-interviews/./app/javascript/researcher/surveys/hooks/use_get_next_survey_section.js","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/survey_preview/survey_preview.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/survey_preview/survey_preview_page.jsx","webpack://user-interviews/./app/javascript/participant/apply/study_details_accordion.jsx","webpack://user-interviews/./app/javascript/components/page/components/navigation_item/navigation_item.module.scss?4926","webpack://user-interviews/./app/javascript/components/page/components/navigation_item/navigation_item.tsx","webpack://user-interviews/./app/javascript/components/page/components/navigation_item/hooks/use_is_active.ts","webpack://user-interviews/./app/javascript/api/base_slice.js","webpack://user-interviews/./app/javascript/api/population_attributes/endpoints.ts","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/hooks/use_requested_preview_section_params.js","webpack://user-interviews/./app/javascript/store/slices/participant_profile_slice.js","webpack://user-interviews/./app/javascript/hooks/use_error_logger.tsx","webpack://user-interviews/./app/javascript/api/participant_population_opt_in_form_participants/endpoints.ts","webpack://user-interviews/./app/javascript/participant/opt_in/hooks/use_get_opt_in_form.ts","webpack://user-interviews/./app/javascript/participant/opt_in/components/opt_in_success.tsx","webpack://user-interviews/./app/javascript/participant/opt_in/components/survey.tsx","webpack://user-interviews/./app/javascript/participant/opt_in/hooks/use_survey_response_set.ts","webpack://user-interviews/./app/javascript/participant/opt_in/utils.ts","webpack://user-interviews/./app/javascript/participant/opt_in/hooks/use_get_first_survey_section.ts","webpack://user-interviews/./app/javascript/participant/opt_in/components/opt_in.tsx","webpack://user-interviews/./app/javascript/participant/opt_in/hooks/use_opt_in_form_key_from_url.ts","webpack://user-interviews/./app/javascript/participant/opt_in/opt_in_page.tsx","webpack://user-interviews/./app/javascript/participant/opt_in/opt_in_preview_page.tsx","webpack://user-interviews/./app/javascript/participant/opt_in/index.ts","webpack://user-interviews/./app/javascript/components/page/components/sidebar/components/account_navigation_item/components/account_menu_popover/account_menu_popover.module.scss?a55e","webpack://user-interviews/./app/javascript/components/page/components/sidebar/components/account_navigation_item/components/account_menu_popover/account_menu_popover.tsx","webpack://user-interviews/./app/javascript/components/page/components/sidebar/components/account_navigation_item/account_navigation_item.module.scss?7b53","webpack://user-interviews/./app/javascript/components/page/components/sidebar/components/account_navigation_item/account_navigation_item.tsx","webpack://user-interviews/./app/javascript/components/page/components/sidebar/sidebar.module.scss?3dae","webpack://user-interviews/./app/javascript/components/page/components/sidebar/sidebar.tsx","webpack://user-interviews/./app/javascript/participant/opt_in/components/default_questions_form.tsx","webpack://user-interviews/./app/javascript/researcher/surveys/hooks/use_alert_focus.js","webpack://user-interviews/./app/javascript/hooks/use_tracking_with_default_dispatch.ts","webpack://user-interviews/./app/javascript/participant/project_application/components/survey/constants.ts","webpack://user-interviews/./app/javascript/researcher/surveys/constants.js","webpack://user-interviews/./app/javascript/api/population_invite_filters/endpoints.js"],"sourcesContent":["import { useMemo } from 'react';\nimport { type ZodSchema } from 'zod';\nimport { useErrorLogger } from './use_error_logger';\n\n// The goal of this hook is to provide a sane boundary between Typescript\n// and Javascript code. Using this hook with props and a corresponding\n// schema will attempt to parse the unknown into the schema.  In development,\n// this will throw an error on failure. In production, this will swallow the\n// error, while ensuring it is logged to Appsignal.\nexport function useZodSchema<T>(unknownProps: unknown, schema: ZodSchema<T>) {\n  const logError = useErrorLogger();\n\n  return useMemo(() => {\n    if (['development', 'test'].includes(process.env.NODE_ENV ?? '')) {\n      return schema.parse(unknownProps);\n    }\n\n    try {\n      return schema.parse(unknownProps);\n    } catch (error) {\n      logError(error as Error);\n\n      return unknownProps as T;\n    }\n  }, [logError, schema, unknownProps]);\n}\n","export const firstNameAccessor = 'firstName';\nexport const lastNameAccessor = 'lastName';\nexport const phoneNumberAccessor = 'phoneNumber';\nexport const timezoneAccessor = 'timezone';\nexport const sourceTypeAccessor = 'sourceType';\nexport const participantLabelsAccessor = 'participantLabels';\nexport const createdAtAccessor = 'activityStats.createdAt';\nexport const daysSinceInvitedAccessor = 'activityStats.daysSinceInvited';\nexport const lastBulkEmailAccessor = 'lastBulkEmailSentAt';\nexport const daysSinceAppliedAccessor = 'activityStats.daysSinceApplied';\nexport const daysSinceParticipatedAccessor =\n  'activityStats.daysSinceParticipated';\nexport const totalIncentivesEarnedAccessor = 'totalIncentivesEarned';\nexport const unsubscribedAccessor = 'unsubscribed';\n\nexport const populationAttributeAccessorPrefix = `participantAttribute`;\n\nexport const buildColumns = ({\n  canViewPii,\n  columnOrder,\n  hiddenColumns,\n  maxIncentiveYear,\n  minIncentiveYear,\n  populationAttributes,\n}) => {\n  const hiddenColumnsLookUp = buildHiddenColumnsLookUp(hiddenColumns);\n\n  const populationAttributesLookUp = buildPopulationAttributeColumnsLookUp({\n    hiddenColumnsLookUp,\n    populationAttributes,\n  });\n\n  const baseColumnLookUp = buildHubDefaultColumnsLookUp({\n    canViewPii,\n    hiddenColumnsLookUp,\n    maxIncentiveYear,\n    minIncentiveYear,\n  });\n\n  const columnMap = new Map([\n    ...baseColumnLookUp,\n    ...populationAttributesLookUp,\n  ]);\n\n  const order = columnOrder?.length\n    ? completeColumnOrder({\n        columnOrder,\n        populationAttributes,\n      })\n    : buildHubDefaultColumnOrder({\n        maxIncentiveYear,\n        minIncentiveYear,\n        populationAttributes,\n      });\n\n  const columns = [];\n\n  order.forEach((columnAccessor) => {\n    const column = columnMap.get(columnAccessor);\n\n    if (column) columns.push(column);\n  });\n\n  return columns;\n};\n\nconst buildHubDefaultColumnOrder = ({\n  maxIncentiveYear,\n  minIncentiveYear,\n  populationAttributes,\n}) => [\n  firstNameAccessor,\n  lastNameAccessor,\n  phoneNumberAccessor,\n  timezoneAccessor,\n  createdAtAccessor,\n  sourceTypeAccessor,\n  participantLabelsAccessor,\n  daysSinceInvitedAccessor,\n  lastBulkEmailAccessor,\n  daysSinceAppliedAccessor,\n  daysSinceParticipatedAccessor,\n  totalIncentivesEarnedAccessor,\n  ...yearlyIncentiveAccessors(maxIncentiveYear, minIncentiveYear),\n  'unsubscribed',\n  ...populationAttributeAccessors(populationAttributes),\n];\n\nexport const buildHiddenColumnsLookUp = (hiddenColumns) => {\n  const lookup = new Map();\n\n  if (hiddenColumns?.length) {\n    hiddenColumns.forEach((hiddenColumn) => {\n      lookup.set(hiddenColumn, true);\n    });\n  }\n\n  return lookup;\n};\n\nexport const buildHubDefaultColumnsLookUp = ({\n  canViewPii,\n  hiddenColumnsLookUp,\n  maxIncentiveYear,\n  minIncentiveYear,\n}) => {\n  const hiddenColumns = hiddenColumnsLookUp || new Map();\n\n  return new Map([\n    [\n      firstNameAccessor,\n      {\n        accessor: firstNameAccessor,\n        Header: 'First name',\n        hidden: !!hiddenColumns.get(firstNameAccessor),\n        id: firstNameAccessor,\n        meta: nonEditableMetaData,\n      },\n    ],\n    [\n      lastNameAccessor,\n      {\n        accessor: lastNameAccessor,\n        Header: canViewPii ? 'Last name' : 'Last Initial',\n        hidden: !!hiddenColumns.get(lastNameAccessor),\n        id: lastNameAccessor,\n        meta: nonEditableMetaData,\n      },\n    ],\n    [\n      phoneNumberAccessor,\n      {\n        accessor: phoneNumberAccessor,\n        Header: 'Phone number',\n        hidden: !!hiddenColumns.get(phoneNumberAccessor),\n        id: phoneNumberAccessor,\n        meta: nonEditableMetaData,\n      },\n    ],\n    [\n      timezoneAccessor,\n      {\n        accessor: timezoneAccessor,\n        Header: 'Timezone',\n        hidden: !!hiddenColumns.get(timezoneAccessor),\n        id: timezoneAccessor,\n        meta: nonEditableMetaData,\n      },\n    ],\n    [\n      sourceTypeAccessor,\n      {\n        accessor: sourceTypeAccessor,\n        Header: 'Source',\n        hidden: !!hiddenColumns.get(sourceTypeAccessor),\n        id: sourceTypeAccessor,\n        meta: nonEditableMetaData,\n      },\n    ],\n    [\n      participantLabelsAccessor,\n      {\n        accessor: participantLabelsAccessor,\n        Header: 'Labels',\n        hidden: !!hiddenColumns.get(participantLabelsAccessor),\n        id: participantLabelsAccessor,\n        meta: nonEditableMetaData,\n      },\n    ],\n    [\n      createdAtAccessor,\n      {\n        accessor: createdAtAccessor,\n        Header: 'Date added',\n        hidden: !!hiddenColumns.get(createdAtAccessor),\n        id: createdAtAccessor,\n        meta: nonEditableMetaData,\n      },\n    ],\n    [\n      daysSinceInvitedAccessor,\n      {\n        accessor: daysSinceInvitedAccessor,\n        Header: 'Last invited',\n        hidden: !!hiddenColumns.get(daysSinceInvitedAccessor),\n        id: daysSinceInvitedAccessor,\n        meta: nonEditableMetaData,\n      },\n    ],\n    [\n      lastBulkEmailAccessor,\n      {\n        accessor: lastBulkEmailAccessor,\n        Header: 'Last bulk email',\n        hidden: !!hiddenColumns.get(lastBulkEmailAccessor),\n        id: lastBulkEmailAccessor,\n        meta: nonEditableMetaData,\n      },\n    ],\n    [\n      daysSinceAppliedAccessor,\n      {\n        accessor: daysSinceAppliedAccessor,\n        Header: 'Last applied',\n        hidden: !!hiddenColumns.get(daysSinceAppliedAccessor),\n        id: daysSinceAppliedAccessor,\n        meta: nonEditableMetaData,\n      },\n    ],\n    [\n      daysSinceParticipatedAccessor,\n      {\n        accessor: daysSinceParticipatedAccessor,\n        Header: 'Last participated',\n        hidden: !!hiddenColumns.get(daysSinceParticipatedAccessor),\n        id: daysSinceParticipatedAccessor,\n        meta: nonEditableMetaData,\n      },\n    ],\n    [\n      totalIncentivesEarnedAccessor,\n      {\n        accessor: totalIncentivesEarnedAccessor,\n        Header: 'Total incentives earned',\n        hidden: !!hiddenColumns.get(totalIncentivesEarnedAccessor),\n        id: totalIncentivesEarnedAccessor,\n        meta: nonEditableMetaData,\n      },\n    ],\n    [\n      unsubscribedAccessor,\n      {\n        accessor: unsubscribedAccessor,\n        Header: 'Unsubscribed',\n        hidden: !!hiddenColumns.get(unsubscribedAccessor),\n        id: unsubscribedAccessor,\n        meta: nonEditableMetaData,\n      },\n    ],\n    ...buildYearlyIncentiveColumnsLookUp({\n      hiddenColumnsLookUp,\n      maxIncentiveYear,\n      minIncentiveYear,\n    }),\n  ]);\n};\n\nexport const buildPopulationAttributeColumnsLookUp = ({\n  hiddenColumnsLookUp,\n  populationAttributes,\n}) => {\n  if (!populationAttributes) return [];\n\n  const hiddenColumns = hiddenColumnsLookUp || new Map();\n\n  const lookUp = new Map();\n\n  populationAttributes.forEach((populationAttribute) => {\n    const accessor = `${populationAttributeAccessorPrefix}${populationAttribute.id}`;\n\n    lookUp.set(accessor, {\n      accessor,\n      editable: true,\n      id: populationAttribute.id,\n      Header: populationAttribute.name,\n      hidden: !!hiddenColumns.get(accessor),\n      meta: populationAttribute.meta,\n    });\n  });\n\n  return lookUp;\n};\n\nexport const buildYearlyIncentiveColumnsLookUp = ({\n  hiddenColumnsLookUp,\n  maxIncentiveYear,\n  minIncentiveYear,\n}) => {\n  const hiddenColumns = hiddenColumnsLookUp || new Map();\n\n  const lookUp = new Map();\n\n  yearlyIncentiveYears(maxIncentiveYear, minIncentiveYear).forEach((year) => {\n    const accessor = `totalIncentives${year}`;\n\n    lookUp.set(accessor, {\n      accessor,\n      Header: `Total incentives (${year})`,\n      hidden: !!hiddenColumns.get(accessor),\n      id: accessor,\n      meta: nonEditableMetaData,\n    });\n  });\n\n  return lookUp;\n};\n\nconst completeColumnOrder = ({ columnOrder, populationAttributes }) => {\n  if (!populationAttributes?.length || !columnOrder?.length) return columnOrder;\n\n  const missingPopulationAttributes = [];\n\n  populationAttributes.forEach((populationAttribute) => {\n    const accessor = `${populationAttributeAccessorPrefix}${populationAttribute.id}`;\n\n    if (!columnOrder.includes(accessor))\n      missingPopulationAttributes.push(accessor);\n  });\n\n  return [...columnOrder, ...missingPopulationAttributes];\n};\n\nexport const nonEditableMetaData = {\n  canDelete: false,\n  canUpdate: false,\n};\n\nexport const populationAttributeAccessors = (populationAttributes) => {\n  if (!populationAttributes) {\n    return [];\n  }\n\n  return populationAttributes.map(\n    (populationAttribute) =>\n      `${populationAttributeAccessorPrefix}${populationAttribute.id}`,\n  );\n};\n\nexport const rearrangeColumnOrder = ({\n  activeAccessor,\n  columnOrder,\n  overAccessor,\n}) => {\n  const reorderColumns = [...columnOrder];\n\n  const activeColumnIndex = reorderColumns.indexOf(activeAccessor);\n\n  const activeColumn = reorderColumns.splice(activeColumnIndex, 1);\n  if (activeColumn) {\n    const spliceIndex = reorderColumns.indexOf(overAccessor);\n    reorderColumns.splice(spliceIndex, 0, activeColumn[0]);\n  }\n\n  return reorderColumns;\n};\n\nexport const updateHiddenColumns = (accessor, hiddenColumns) => {\n  if (!hiddenColumns) return [accessor];\n\n  const index = hiddenColumns.indexOf(accessor);\n\n  if (index === -1) {\n    hiddenColumns.push(accessor);\n  } else {\n    hiddenColumns.splice(index, 1);\n  }\n\n  return hiddenColumns;\n};\n\nexport const yearlyIncentiveAccessors = (maxIncentiveYear, minIncentiveYear) =>\n  yearlyIncentiveYears(maxIncentiveYear, minIncentiveYear).map(\n    (year) => `totalIncentives${year}`,\n  );\n\nexport const yearlyIncentiveYears = (maxIncentiveYear, minIncentiveYear) => {\n  const years = [];\n\n  let currentYear = maxIncentiveYear;\n\n  if (currentYear === 0 || minIncentiveYear === 0) {\n    return years;\n  }\n\n  while (currentYear >= minIncentiveYear) {\n    years.push(currentYear);\n\n    currentYear -= 1;\n  }\n\n  return years;\n};\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { isServer } from 'lib/ssr_utils';\n\nexport const MEDIA_BREAKPOINT_LG = '(min-width: 992px)';\nexport const MEDIA_BREAKPOINT_MD = '(min-width: 768px)';\nexport const MEDIA_BREAKPOINT_SM = '(min-width: 576px)';\nexport const MEDIA_BREAKPOINT_XS = '(max-width: 575px)';\n\nexport default (mediaQuery) => {\n  const mediaQueryList = useMemo(\n    () => (isServer ? null : window.matchMedia(mediaQuery)),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [],\n  );\n\n  const [mediaQueryMatches, setMediaQueryMatches] = useState(\n    mediaQueryList?.matches,\n  );\n\n  const handleMediaQueryChange = useCallback(\n    ({ matches }) => setMediaQueryMatches(matches),\n    [],\n  );\n\n  useEffect(() => {\n    function addEventListener() {\n      if (!mediaQueryList) return;\n\n      if (typeof mediaQueryList.addEventListener === 'function') {\n        mediaQueryList.addEventListener('change', handleMediaQueryChange);\n      } else {\n        // This is deprecated, though Safari 13 still has this so keep it here until that's old\n        mediaQueryList.addListener(handleMediaQueryChange);\n      }\n    }\n\n    function removeEventListener() {\n      if (!mediaQueryList) return;\n\n      if (typeof mediaQueryList.removeEventListener === 'function') {\n        mediaQueryList.removeEventListener('change', handleMediaQueryChange);\n      } else {\n        // This is deprecated, though Safari 13 still has this so keep it here until that's old\n        mediaQueryList.removeListener(handleMediaQueryChange);\n      }\n    }\n\n    addEventListener();\n\n    return removeEventListener;\n  }, [handleMediaQueryChange, mediaQueryList]);\n\n  return mediaQueryMatches;\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"e2MycXpgF7K4L01YLe59\";\nvar _2 = \"kopZYYDvKhkRN5UcXvQh\";\nvar _3 = \"dWZLwNEhi4MlJBmEwqs0\";\nvar _4 = \"eUbKHo_U8uR6ocmK5fHS\";\nvar _5 = \"vYPuztWmYkx4GD_oWTKb\";\nvar _6 = \"FcJk_1mW6UsMmsAFgKb9\";\nvar _7 = \"P4GNMlKHiwAMcV7xN8Rj\";\nvar _8 = \"VjssZedoEy9lQKjZb6vQ\";\nvar _9 = \"A9By_evqvH1mwj8ZdWth\";\nvar _a = \"hEShea8Tr_uaodJFcFvX\";\nvar _b = \"QcHctPtFpjcMeXtmGpVK\";\nvar _c = \"pgYk_uCCMwnXweAcqMYP\";\nvar _d = \"luJzSlKj6XLaQR9Ru2Ig\";\nvar _e = \"YNDZS9Gr8lWpBXx4Lbvw\";\nvar _f = \"COg5r8mnrhCTXvTJH8Bt\";\nvar _10 = \"RPW1I31LWIo7PLvLWoX2\";\nvar _11 = \"DXNZf0uV_p6GFQSg9_Be\";\nvar _12 = \"jUytm4WdrpbqQ9jfPzkd\";\nvar _13 = \"mXREzF4oOZrUHoWzVbIq\";\nexport { _1 as \"ApplySuccessCard__detail__date\", _2 as \"BillingInfoCard__column\", _3 as \"CopyToClipboard\", _4 as \"DataConsentNotice__content__preview__body\", _5 as \"MessageList__message__timestamp\", _6 as \"ParticipantProfile__participant-details__attribute-value\", _7 as \"ProjectCustomEmailSets\", _8 as \"ProjectListItem__status-date\", _9 as \"ProjectListing__detail\", _a as \"ProjectListing__details\", _b as \"TeamMemberInviterForm__section__invite-via-link\", _c as \"UnmoderatedTask__deadline\", _d as \"btn-link--neutral\", _e as \"btn-outline-secondary\", _f as \"divider\", _10 as \"header\", _11 as \"heading\", _12 as \"participant-dashboard__project__info__status__string\", _13 as \"schedule-project-participant-page__time-slots\" }\n","export const CONDITION_OPERATOR_EQL = '==';\nexport const CONDITION_OPERATOR_NOT_EQL = '!=';\n\nexport const JOIN_METHOD_OR = 'or';\nexport const JOIN_METHOD_AND = 'and';\n\nexport const OPT_IN_FORM_TYPE = 'opt-in';\nexport const SCREENER_FORM_TYPE = 'screener';\n\nexport * from 'lib/generated_constants/surveys';\n","import * as propTypes from 'lib/prop_types';\n\nexport const questionPropType = propTypes.shape({\n  text: propTypes.string.isRequired,\n  uuid: propTypes.string.isRequired,\n});\n\nexport const answerPropType = propTypes.shape({\n  text: propTypes.string,\n  uuid: propTypes.string.isRequired,\n});\n\nexport const skipLogicConditionPropType = propTypes.shape({\n  answerId: propTypes.string,\n  operator: propTypes.string,\n  questionId: propTypes.string,\n  uuid: propTypes.string,\n});\n\nexport const skipLogicPropType = propTypes.shape({\n  joinMethod: propTypes.string,\n  skipLogicConditions: propTypes.arrayOf(skipLogicConditionPropType),\n  targetSectionId: propTypes.string,\n  uuid: propTypes.string,\n});\n\nexport const surveySectionPropType = propTypes.shape({\n  title: propTypes.string,\n  uuid: propTypes.string,\n});\n","import { ENV } from 'lib/react_on_rails/env';\nimport { useClientHasRendered } from './use_client_has_rendered';\n\nexport const useEnvVars = () => {\n  const clientHasRendered = useClientHasRendered();\n\n  if (!clientHasRendered || !ENV) return {};\n\n  return {\n    billingPagePaidSubContactUrl: ENV.BILLING_PAGE_PAID_SUB_CONTACT_URL,\n    billingPageFreeTrialContactUrl: ENV.BILLING_PAGE_FREE_TRIAL_CONTACT_URL,\n    chiliPiperRouterKey: ENV.CHILIPIPER_TEAMS_PLANS_INBOUND_ROUTER_KEY,\n    isWorkspaceEmailStatsEnabled: ENV.WORKSPACE_EMAIL_STATS_ENABLED,\n    isSubscriptionSelfServeEnabled: ENV.SUBSCRIPTION_SELF_SERVE_ENABLED,\n    isPageThemesEnabled: ENV.PAGE_THEMES_ENABLED,\n    cloudflareTurnstileCaptchaSiteKey:\n      ENV.CLOUDFLARE_TURNSTILE_CAPTCHA_SITE_KEY,\n    cloudflareTurnstileCaptchaEnabled: ENV.CLOUDFLARE_TURNSTILE_CAPTCHA_ENABLED,\n    participantQnrSignupBuffer: ENV.PARTICIPANT_QNR_SIGNUP_BUFFER,\n    siteBaseUrl: ENV.SITE_BASE_URL,\n    paragonConfig: ENV.PARAGON_CONFIG,\n  };\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"C4PUgxMKGH_VH0fmvXvN\";\nvar _2 = \"CubaHdUiLPgIt0OKp1Eq\";\nvar _3 = \"tIHm0cGa96ebjN4c08M_\";\nvar _4 = \"ORIAMgDY2YiYHLAid_h0\";\nvar _5 = \"EP0kpEqECqjign_ng8B8\";\nvar _6 = \"uUV1kigUj3PHAbhgmAgY\";\nvar _7 = \"n3QoitDnApNAAfTzsJOY\";\nvar _8 = \"PKWMQUAVukisw6AyBMGl\";\nvar _9 = \"nVyhGlIjQseQEVLMBwM5\";\nvar _a = \"RygaqaGUjVpDqNIz7NU5\";\nvar _b = \"CbiOf5OBCwbRZ3d58diO\";\nvar _c = \"pCPE6WBHhJKa9KMdJ4do\";\nvar _d = \"T7brubd3TPP95n6Huu82\";\nvar _e = \"b8_KZXNtUrIIZV07dQnY\";\nvar _f = \"VulEwh_Hxb1zDY_9Knxs\";\nvar _10 = \"WFXYBTCzvf7O36urTXqF\";\nvar _11 = \"DYBdjn_oJxCuY3r4byu6\";\nvar _12 = \"Sf3G6pErHe6R_ILB_4Pv\";\nvar _13 = \"egJnd7_TocVWZsqLdJ86\";\nexport { _1 as \"ApplySuccessCard__detail__date\", _2 as \"BillingInfoCard__column\", _3 as \"CopyToClipboard\", _4 as \"DataConsentNotice__content__preview__body\", _5 as \"MessageList__message__timestamp\", _6 as \"ParticipantProfile__participant-details__attribute-value\", _7 as \"ProjectCustomEmailSets\", _8 as \"ProjectListItem__status-date\", _9 as \"ProjectListing__detail\", _a as \"ProjectListing__details\", _b as \"TeamMemberInviterForm__section__invite-via-link\", _c as \"UnmoderatedTask__deadline\", _d as \"btn-link--neutral\", _e as \"btn-outline-secondary\", _f as \"header\", _10 as \"headingText\", _11 as \"participant-dashboard__project__info__status__string\", _12 as \"schedule-project-participant-page__time-slots\", _13 as \"text\" }\n","import React from 'react';\n\nimport {\n  Card,\n  CardStack,\n  Flex,\n  LoadingSkeleton,\n} from '@user-interviews/ui-design-system';\n\nimport { SurveySectionLoadingSkeleton } from 'researcher/surveys/components/survey_section_loading_skeleton';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './project_application_loading_skeleton.module.scss';\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as headerStyles from './header/recruit_header.module.scss';\n\nexport const TEST_ID = 'ProjectApplicationLoadingSkeleton';\n\nconst TITLE_HEIGHT = 24;\nconst GREETING_HEIGHT = 18;\nconst SUB_GREETING_HEIGHT = 14;\n\nconst TITLE_WIDTH = 300;\nconst GREETING_WIDTH = 200;\nconst SUB_GREETING_WIDTH = 220;\n\ntype ProjectApplicationLoadingSkeletonProps = {\n  hideHeader?: boolean;\n};\n\nexport function ProjectApplicationLoadingSkeleton({\n  hideHeader,\n}: ProjectApplicationLoadingSkeletonProps) {\n  return (\n    <Flex\n      alignItems=\"center\"\n      container\n      data-testid={TEST_ID}\n      flexDirection=\"column\"\n    >\n      {!hideHeader && (\n        <Flex\n          alignItems=\"center\"\n          className={styles.header}\n          container\n          flexDirection=\"column\"\n        >\n          <div className={headerStyles.heading}>\n            <LoadingSkeleton\n              className={styles.headingText}\n              height={TITLE_HEIGHT}\n              width={TITLE_WIDTH}\n            />\n          </div>\n          <div className={headerStyles.divider} />\n          <LoadingSkeleton\n            className={styles.text}\n            height={GREETING_HEIGHT}\n            width={GREETING_WIDTH}\n          />\n          <LoadingSkeleton\n            className={styles.text}\n            height={SUB_GREETING_HEIGHT}\n            width={SUB_GREETING_WIDTH}\n          />\n        </Flex>\n      )}\n\n      <CardStack size=\"sm\">\n        <Card size=\"sm\">\n          <SurveySectionLoadingSkeleton />\n        </Card>\n      </CardStack>\n    </Flex>\n  );\n}\n","// extracted by mini-css-extract-plugin\nvar _1 = \"G8EQhUU36YRLoxZPRZKK\";\nvar _2 = \"aBxHLy4Wrj0FInbNnj07\";\nvar _3 = \"A4o84Yzrngi3f_Z5h2rU\";\nvar _4 = \"RqDO8bIHuP5O5udOQdo9\";\nvar _5 = \"nNxWUZ_8R7g4tbD6GGFQ\";\nvar _6 = \"d8iBh7ulOhKtHFnQOD0E\";\nvar _7 = \"vsnU2jmmhcGeEqgtcMC0\";\nvar _8 = \"LnhOwoznRWzZNEdjgzXU\";\nvar _9 = \"Y155sPDA8xz_XSdsNv6P\";\nvar _a = \"CUa0x_I1IGtlp_FiX6Z9\";\nvar _b = \"HiLJeqxp2vIFImSaGUWq\";\nvar _c = \"HFDGwN5IFPeVLPvH2_0I\";\nvar _d = \"LotZBQASCaS_JzO9NKXX\";\nvar _e = \"QhbNlx6wJQu5OBTLJjPB\";\nvar _f = \"jShz01whv_Rbg6kjOt8t\";\nvar _10 = \"lbiIyziMGztSAF5UudRm\";\nvar _11 = \"UyNT6yt0HrSg1_4YDeTF\";\nvar _12 = \"bWzbX_Kqv0qWE1a8ER9q\";\nvar _13 = \"dG6r7IZPur2GO8ntJiMX\";\nvar _14 = \"fSpUmB53jwwOE5CflCp6\";\nexport { _1 as \"ApplySuccessCard__detail__date\", _2 as \"BillingInfoCard__column\", _3 as \"CopyToClipboard\", _4 as \"DataConsentNotice__content__preview__body\", _5 as \"MessageList__message__timestamp\", _6 as \"ParticipantProfile__participant-details__attribute-value\", _7 as \"ProjectCustomEmailSets\", _8 as \"ProjectListItem__status-date\", _9 as \"ProjectListing__detail\", _a as \"ProjectListing__details\", _b as \"TeamMemberInviterForm__section__invite-via-link\", _c as \"UnmoderatedTask__deadline\", _d as \"btn-link--neutral\", _e as \"btn-outline-secondary\", _f as \"centered\", _10 as \"fullHeight\", _11 as \"padded\", _12 as \"page\", _13 as \"participant-dashboard__project__info__status__string\", _14 as \"schedule-project-participant-page__time-slots\" }\n","import React, { useRef, useState, type ReactNode } from 'react';\n\nimport { LoadingOverlay, Main } from '@user-interviews/ui-design-system';\nimport classNames from 'classnames';\nimport { Footer } from './components/footer';\nimport { Sidebar } from './components/sidebar';\nimport { SidebarContextProvider } from './components/sidebar_context_provider';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './page.module.scss';\n\ntype PageProps = {\n  children: ReactNode;\n  isCentered?: boolean;\n  isFullHeight?: boolean;\n  isPadded?: boolean;\n};\n\nexport function Page({\n  children,\n  isCentered,\n  isFullHeight,\n  isPadded,\n}: PageProps) {\n  const sidebarRef = useRef<HTMLDivElement>(null);\n  const [\n    isNavigationItemTriggeringPageLoad,\n    setIsNavigationItemTriggeringPageLoad,\n  ] = useState(false);\n\n  const handlePageLoading = () => setIsNavigationItemTriggeringPageLoad(true);\n\n  return (\n    <div\n      className={classNames(styles.page, {\n        [styles.centered]: isCentered,\n        [styles.fullHeight]: isFullHeight,\n        [styles.padded]: isPadded,\n      })}\n    >\n      <LoadingOverlay visible={isNavigationItemTriggeringPageLoad} />\n\n      <SidebarContextProvider sidebarRef={sidebarRef}>\n        <Sidebar ref={sidebarRef} onHandlePageLoading={handlePageLoading} />\n      </SidebarContextProvider>\n\n      <Main>{children}</Main>\n\n      <Footer />\n    </div>\n  );\n}\n","import useMediaQuery, { MEDIA_BREAKPOINT_MD } from 'hooks/use_media_query';\n\nexport function useSidebarMobileBreakpoint() {\n  const isMobile = !useMediaQuery(MEDIA_BREAKPOINT_MD);\n\n  return isMobile;\n}\n","import {\n  FIELD_FILTER_OPERANDS,\n  ACTIVITY_STAT_FILTER_OPERANDS,\n  ATTRIBUTE_FILTER_OPERANDS,\n  INCENTIVE_OPERANDS,\n  PARTICIPANT_LABEL_OPERANDS,\n  POPULATION_ATTRIBUTE_IS_NOT_SET_OPERANDS,\n  POPULATION_ATTRIBUTE_IS_SET_OPERANDS,\n  PROJECT_OPERANDS,\n  OPT_IN_FORM_OPERANDS,\n} from 'lib/generated_constants/filters_constants';\n\nimport generateUUID from 'lib/generate_uuid';\n\nexport const FILTER_KEYS = {\n  email: 'email',\n  created_at: 'created_at',\n  first_name: 'first_name',\n  labels: 'labels',\n  last_applied_at: 'last_applied_at',\n  last_invited_at: 'last_invited_at',\n  last_participated_at: 'last_participated_at',\n  last_name: 'last_name',\n  opt_in_form: 'opt_in_form',\n  phone_number: 'phone_number',\n  project_participation: 'project_participation',\n  source: 'source',\n  yearly_payment: 'yearly_payment',\n  unsubscribed: 'unsubscribed',\n};\n\nexport const getParamKey = () => `filter-param-key-${generateUUID()}`;\n\nexport const getDefaultParams = (isNotSetOperand) => {\n  if (isNotSetOperand) {\n    return {\n      key: getParamKey(),\n      orIsNotSet: false,\n    };\n  }\n\n  return {\n    key: getParamKey(),\n  };\n};\n\nconst defaultFilterRuleOperand = (operands, type) => {\n  // Note: Some operands are limited by type, if not all operands are available\n  // to each filter type.  If type is passed, only return operands relevant to that type.\n  const availableOperands = type ? operands[type] : operands;\n\n  return availableOperands[0] || {};\n};\n\nconst createPopulationAttributeFilter = (attribute) => {\n  const { id, name, type } = attribute;\n\n  const defaultAttributeFilterRuleOperand = defaultFilterRuleOperand(\n    ATTRIBUTE_FILTER_OPERANDS,\n    type,\n  );\n\n  const availableOperands = type\n    ? ATTRIBUTE_FILTER_OPERANDS[type]\n    : ATTRIBUTE_FILTER_OPERANDS;\n\n  return {\n    availableOperands,\n    defaultFilterRuleShape: {\n      activityStat: null,\n      field: null,\n      operand: defaultAttributeFilterRuleOperand.key,\n      params: [\n        getDefaultParams(POPULATION_ATTRIBUTE_IS_NOT_SET_OPERANDS[type]),\n      ],\n      participantPopulationAttributeId: id,\n      type,\n    },\n    attribute,\n    id,\n    name,\n    isSetOperand: POPULATION_ATTRIBUTE_IS_SET_OPERANDS[type],\n    isNotSetOperand: POPULATION_ATTRIBUTE_IS_NOT_SET_OPERANDS[type],\n  };\n};\n\nexport const defaultLabelOperand = defaultFilterRuleOperand(\n  PARTICIPANT_LABEL_OPERANDS,\n);\n\nconst defaultBooleanOperand = defaultFilterRuleOperand(\n  FIELD_FILTER_OPERANDS,\n  'boolean',\n);\n\nconst defaultActivityStatDateOperand = defaultFilterRuleOperand(\n  ACTIVITY_STAT_FILTER_OPERANDS,\n  'date',\n);\n\nconst defaultDecimalOperand = defaultFilterRuleOperand(\n  INCENTIVE_OPERANDS,\n  'decimal',\n);\n\nconst defaultIntegerOperand = defaultFilterRuleOperand(\n  FIELD_FILTER_OPERANDS,\n  'integer',\n);\n\nconst defaultStringOperand = defaultFilterRuleOperand(\n  FIELD_FILTER_OPERANDS,\n  'string',\n);\n\nexport const standardFilters = {\n  [FILTER_KEYS.labels]: {\n    availableOperands: PARTICIPANT_LABEL_OPERANDS,\n    defaultFilterRuleShape: {\n      activityStat: null,\n      field: null,\n      operand: defaultLabelOperand.key,\n      params: [getDefaultParams()],\n      participantPopulationAttributeId: null,\n    },\n    name: 'Labels',\n    id: FILTER_KEYS.labels,\n  },\n  [FILTER_KEYS.project_participation]: {\n    availableOperands: PROJECT_OPERANDS,\n    defaultFilterRuleShape: {\n      activityStat: null,\n      field: null,\n      operand: defaultFilterRuleOperand(PROJECT_OPERANDS).key,\n      params: [getDefaultParams()],\n      participantPopulationAttributeId: null,\n    },\n    addRowLabel: 'Add another project',\n    name: 'Project history',\n    id: FILTER_KEYS.project_participation,\n  },\n  [FILTER_KEYS.opt_in_form]: {\n    availableOperands: OPT_IN_FORM_OPERANDS,\n    defaultFilterRuleShape: {\n      activityStat: null,\n      field: null,\n      operand: defaultFilterRuleOperand(OPT_IN_FORM_OPERANDS).key,\n      params: [getDefaultParams()],\n      participantPopulationAttributeId: null,\n    },\n    addRowLabel: 'Add another opt-in form',\n    id: FILTER_KEYS.opt_in_form,\n    name: 'Opt-in form history',\n  },\n  [FILTER_KEYS.email]: {\n    availableOperands: FIELD_FILTER_OPERANDS.string,\n    defaultFilterRuleShape: {\n      activityStat: null,\n      field: FILTER_KEYS.email,\n      operand: defaultStringOperand.key,\n      params: [getDefaultParams()],\n      participantPopulationAttributeId: null,\n      type: 'string',\n    },\n    id: FILTER_KEYS.email,\n    name: 'Email',\n  },\n  [FILTER_KEYS.first_name]: {\n    availableOperands: FIELD_FILTER_OPERANDS.string,\n    defaultFilterRuleShape: {\n      activityStat: null,\n      field: FILTER_KEYS.first_name,\n      operand: defaultStringOperand.key,\n      params: [getDefaultParams()],\n      participantPopulationAttributeId: null,\n      type: 'string',\n    },\n    id: FILTER_KEYS.first_name,\n    name: 'First name',\n  },\n  [FILTER_KEYS.last_name]: {\n    availableOperands: FIELD_FILTER_OPERANDS.string,\n    defaultFilterRuleShape: {\n      activityStat: null,\n      field: FILTER_KEYS.last_name,\n      operand: defaultStringOperand.key,\n      participantPopulationAttributeId: null,\n      params: [getDefaultParams()],\n      type: 'string',\n    },\n    id: FILTER_KEYS.last_name,\n    name: 'Last name',\n  },\n  [FILTER_KEYS.phone_number]: {\n    availableOperands: FIELD_FILTER_OPERANDS.string,\n    defaultFilterRuleShape: {\n      activityStat: null,\n      field: FILTER_KEYS.phone_number,\n      operand: defaultStringOperand.key,\n      params: [getDefaultParams()],\n      participantPopulationAttributeId: null,\n      type: 'string',\n    },\n    id: FILTER_KEYS.phone_number,\n    name: 'Phone number',\n  },\n  [FILTER_KEYS.source]: {\n    availableOperands: FIELD_FILTER_OPERANDS.integer,\n    defaultFilterRuleShape: {\n      activityStat: null,\n      field: FILTER_KEYS.source,\n      operand: defaultIntegerOperand.key,\n      params: [getDefaultParams()],\n      participantPopulationAttributeId: null,\n      type: 'integer',\n    },\n    id: FILTER_KEYS.source,\n    name: 'First source',\n  },\n  [FILTER_KEYS.unsubscribed]: {\n    availableOperands: FIELD_FILTER_OPERANDS.boolean,\n    defaultFilterRuleShape: {\n      activityStat: null,\n      field: FILTER_KEYS.unsubscribed,\n      operand: defaultBooleanOperand.key,\n      params: [getDefaultParams()],\n      participantPopulationAttributeId: null,\n      type: 'boolean',\n    },\n    id: FILTER_KEYS.unsubscribed,\n    name: 'Unsubscribed',\n  },\n  [FILTER_KEYS.last_applied_at]: {\n    availableOperands: ACTIVITY_STAT_FILTER_OPERANDS.date,\n    defaultFilterRuleShape: {\n      activityStat: FILTER_KEYS.last_applied_at,\n      field: null,\n      operand: defaultActivityStatDateOperand.key,\n      params: [getDefaultParams(true)],\n      participantPopulationAttributeId: null,\n      type: 'date',\n    },\n    id: FILTER_KEYS.last_applied_at,\n    name: 'Last applied date',\n    isSetOperand: 'activity_stat_date_is_set',\n    isNotSetOperand: 'activity_stat_date_is_not_set',\n  },\n  [FILTER_KEYS.last_invited_at]: {\n    availableOperands: ACTIVITY_STAT_FILTER_OPERANDS.date,\n    defaultFilterRuleShape: {\n      activityStat: FILTER_KEYS.last_invited_at,\n      field: null,\n      operand: defaultActivityStatDateOperand.key,\n      params: [getDefaultParams(true)],\n      participantPopulationAttributeId: null,\n      type: 'date',\n    },\n    id: FILTER_KEYS.last_invited_at,\n    name: 'Last invited date',\n    isSetOperand: 'activity_stat_date_is_set',\n    isNotSetOperand: 'activity_stat_date_is_not_set',\n  },\n  [FILTER_KEYS.last_participated_at]: {\n    availableOperands: ACTIVITY_STAT_FILTER_OPERANDS.date,\n    defaultFilterRuleShape: {\n      activityStat: FILTER_KEYS.last_participated_at,\n      field: null,\n      operand: defaultActivityStatDateOperand.key,\n      params: [getDefaultParams(true)],\n      participantPopulationAttributeId: null,\n      type: 'date',\n    },\n    id: FILTER_KEYS.last_participated_at,\n    name: 'Last participated date',\n    isSetOperand: 'activity_stat_date_is_set',\n    isNotSetOperand: 'activity_stat_date_is_not_set',\n  },\n  [FILTER_KEYS.yearly_payment]: {\n    availableOperands: INCENTIVE_OPERANDS.decimal,\n    defaultFilterRuleShape: {\n      activityStat: null,\n      field: null,\n      operand: defaultDecimalOperand.key,\n      params: [getDefaultParams()],\n      participantPopulationAttributeId: null,\n      type: 'decimal',\n    },\n    id: FILTER_KEYS.yearly_payment,\n    name: 'Incentives earned',\n  },\n  [FILTER_KEYS.created_at]: {\n    availableOperands: FIELD_FILTER_OPERANDS.date,\n    defaultFilterRuleShape: {\n      activityStat: null,\n      field: FILTER_KEYS.created_at,\n      operand: 'field_date_before',\n      params: [getDefaultParams()],\n      participantPopulationAttributeId: null,\n      type: 'date',\n    },\n    id: FILTER_KEYS.created_at,\n    name: 'Date added',\n  },\n};\n\nexport const buildFilterList = ({ populationAttributes }) => {\n  if (!populationAttributes?.length > 0) return standardFilters;\n\n  const attributes = {};\n\n  populationAttributes.forEach((attribute) => {\n    attributes[attribute.id] = createPopulationAttributeFilter(attribute);\n  });\n\n  return { ...attributes, ...standardFilters };\n};\n","import * as routes from 'lib/routes';\n\nimport { apiSlice } from 'api/base_slice';\nimport { OPT_IN_FORMS_TAG } from 'api/tag_types';\nimport { deserializeJSONApiResponse, headersAndCredentials } from 'api/utils';\n\nexport const optInFormsApi = apiSlice.injectEndpoints({\n  endpoints: (builder) => ({\n    getOptInForm: builder.query({\n      query: ({ optInFormId, include }) =>\n        routes.api_opt_in_form_path(optInFormId, { include }),\n      transformResponse: deserializeJSONApiResponse,\n      providesTags: (_result, _error, { id }) => [\n        { type: OPT_IN_FORMS_TAG, id },\n      ],\n    }),\n    updateOptInForm: builder.mutation({\n      query: ({ optInFormId, attributes }) => ({\n        url: routes.api_opt_in_form_path(optInFormId),\n        method: 'PATCH',\n        body: {\n          data: {\n            attributes,\n          },\n        },\n        ...headersAndCredentials(),\n      }),\n      transformResponse: deserializeJSONApiResponse,\n      invalidatesTags: [OPT_IN_FORMS_TAG],\n    }),\n  }),\n  overrideExisting: 'throw',\n});\n\nexport const { useGetOptInFormQuery, useUpdateOptInFormMutation } =\n  optInFormsApi;\n","import React from 'react';\nimport * as propTypes from 'lib/prop_types';\nimport {\n  Button,\n  ModalBody,\n  ModalHeader,\n  ModalFooter,\n} from '@user-interviews/ui-design-system';\n\nimport { TrackedButton } from 'common/analytics';\nimport { TrackedModal } from 'common/modals';\n\n// Disabled when adding max-props rule.\n// Future work should stay under 6 props\n// eslint-disable-next-line local-rules/max-props\nexport function ConfirmationModal({\n  buttonText,\n  confirmEvent,\n  message,\n  openEvent,\n  title,\n  onConfirm,\n  onRequestClose,\n}) {\n  const isOpen = message && title && onConfirm;\n\n  return (\n    <TrackedModal\n      event={openEvent}\n      isOpen={!!isOpen}\n      onRequestClose={onRequestClose}\n    >\n      <ModalHeader\n        title={title}\n        titleId=\"SurveyBuilder-confirm-delete-modal\"\n        onRequestClose={onRequestClose}\n      />\n      <ModalBody>{message || ''}</ModalBody>\n      <ModalFooter>\n        <Button variant=\"transparent\" onClick={onRequestClose}>\n          Cancel\n        </Button>\n        <TrackedButton\n          event={confirmEvent}\n          type=\"button\"\n          variant=\"primary\"\n          onClick={onConfirm}\n        >\n          {buttonText}\n        </TrackedButton>\n      </ModalFooter>\n    </TrackedModal>\n  );\n}\n\nConfirmationModal.propTypes = {\n  buttonText: propTypes.string,\n  confirmEvent: propTypes.string,\n  message: propTypes.node,\n  openEvent: propTypes.string,\n  title: propTypes.string,\n  onConfirm: propTypes.func,\n  onRequestClose: propTypes.func,\n};\n\nConfirmationModal.defaultProps = {\n  buttonText: 'Confirm',\n  confirmEvent: 'Survey -- Action Confirmed',\n  openEvent: 'Survey -- Modal Opened',\n};\n","import React from 'react';\n\nexport default React.createContext(null);\n","import React, { useCallback } from 'react';\nimport propTypes from 'prop-types';\n\nimport * as Constants from '../../../constants';\n\nexport function ConditionSelect({\n  isReadonly,\n  joinMethod,\n  position,\n  onUpdate,\n}) {\n  const handleChange = useCallback(\n    (event) => onUpdate({ joinMethod: event.target.value }),\n    [onUpdate],\n  );\n\n  if (position === 0) {\n    return <b className=\"SkipLogicModal__skip-logic__row__prefix\">If</b>;\n  }\n\n  return (\n    <select\n      className=\"form-select SkipLogicModal__skip-logic__row__prefix\"\n      disabled={isReadonly}\n      value={joinMethod}\n      onChange={handleChange}\n    >\n      <option value={Constants.JOIN_METHOD_OR}>OR</option>\n      <option value={Constants.JOIN_METHOD_AND}>AND</option>\n    </select>\n  );\n}\n\nConditionSelect.propTypes = {\n  isReadonly: propTypes.bool.isRequired,\n  joinMethod: propTypes.string,\n  position: propTypes.number.isRequired,\n  onUpdate: propTypes.func.isRequired,\n};\n\nConditionSelect.defaultProps = {\n  joinMethod: '',\n};\n","/* eslint-disable react-hooks/rules-of-hooks */\nimport React, { useContext } from 'react';\nimport propTypes from 'prop-types';\nimport { Button } from '@user-interviews/ui-design-system';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faPlus, faMinus } from 'lib/font_awesome/regular';\n\nimport SurveyContext from '../../../context';\n\nexport function Actions({ isReadonly, skipLogicCondition, skipLogicId }) {\n  if (isReadonly) return null;\n\n  const { skipLogicFunctions } = useContext(SurveyContext);\n  const handleAdd = () =>\n    skipLogicFunctions.addCondition(skipLogicId, skipLogicCondition.uuid);\n  const handleRemove = () =>\n    skipLogicFunctions.removeCondition(skipLogicId, skipLogicCondition.uuid);\n\n  return (\n    <>\n      <Button\n        className=\"btn btn-remove\"\n        key=\"remove\"\n        variant=\"default\"\n        onClick={handleRemove}\n      >\n        <FontAwesomeIcon icon={faMinus} />\n      </Button>\n      <Button\n        className=\"btn btn-add\"\n        key=\"add\"\n        variant=\"default\"\n        onClick={handleAdd}\n      >\n        <FontAwesomeIcon icon={faPlus} />\n      </Button>\n    </>\n  );\n}\n\nActions.propTypes = {\n  isReadonly: propTypes.bool.isRequired,\n  skipLogicCondition: propTypes.object.isRequired,\n  skipLogicId: propTypes.string.isRequired,\n};\n","import React, { useContext, useMemo, useCallback } from 'react';\nimport propTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport SurveyContext from '../../../../context';\n\nexport function AnswerSelect({\n  answerIds,\n  isReadonly,\n  skipLogicCondition,\n  onUpdate,\n}) {\n  const { survey } = useContext(SurveyContext);\n\n  const answers = useMemo(() => {\n    if (!answerIds) return null;\n\n    return answerIds.map((answerId) => {\n      const answer = survey.answers[answerId];\n\n      // TODO: Fix holistically\n      if (!answer) return null;\n\n      return (\n        <option key={answer.uuid} value={answer.uuid}>\n          {answer.text}\n        </option>\n      );\n    });\n  }, [survey.answers, answerIds]);\n\n  const handleChange = useCallback(\n    (event) => onUpdate({ answerId: event.target.value }),\n    [onUpdate],\n  );\n\n  return (\n    <select\n      className={classNames('form-select', {\n        'is-invalid': skipLogicCondition.errors.answer,\n      })}\n      disabled={isReadonly}\n      value={skipLogicCondition.answerId || ''}\n      onChange={handleChange}\n    >\n      <option value=\"\" />\n\n      {answers}\n    </select>\n  );\n}\n\nAnswerSelect.propTypes = {\n  answerIds: propTypes.array.isRequired,\n  isReadonly: propTypes.bool.isRequired,\n  skipLogicCondition: propTypes.object.isRequired,\n  onUpdate: propTypes.func.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport * as Constants from '../../../../constants';\n\nexport function OperatorSelect({\n  isReadonly,\n  questionType,\n  skipLogicCondition,\n  onUpdate,\n}) {\n  const handleChange = (event) => onUpdate({ operator: event.target.value });\n\n  return (\n    <select\n      className={classNames('form-select', {\n        'is-invalid': skipLogicCondition.errors.operator,\n      })}\n      disabled={isReadonly}\n      value={skipLogicCondition.operator || ''}\n      onChange={handleChange}\n    >\n      <option value={Constants.CONDITION_OPERATOR_EQL}>\n        {questionType === Constants.QUESTION_PICK_ANY ? 'is chosen' : 'is'}\n      </option>\n      <option value={Constants.CONDITION_OPERATOR_NOT_EQL}>\n        {questionType === Constants.QUESTION_PICK_ANY\n          ? 'is not chosen'\n          : 'is not'}\n      </option>\n    </select>\n  );\n}\n\nOperatorSelect.propTypes = {\n  isReadonly: propTypes.bool.isRequired,\n  questionType: propTypes.string.isRequired,\n  skipLogicCondition: propTypes.object.isRequired,\n  onUpdate: propTypes.func.isRequired,\n};\n","import React, { useMemo, useCallback } from 'react';\nimport propTypes from 'prop-types';\nimport { SingleSelect } from '@user-interviews/ui-design-system';\nimport classNames from 'classnames';\n\nimport * as Constants from '../../../../constants';\n\nimport { AnswerSelect } from './answer_select';\nimport { OperatorSelect } from './operator_select';\n\nexport function Controls({\n  isReadonly,\n  skipLogicCondition,\n  skipLogicOptions,\n  survey,\n  onUpdate,\n}) {\n  const handleQuestionChanged = useCallback(\n    (event) =>\n      onUpdate({\n        answerId: '',\n        questionId: event.value,\n      }),\n    [onUpdate],\n  );\n\n  const conditionQuestion = survey.questions[skipLogicCondition.questionId];\n\n  const controls = useMemo(() => {\n    if (!conditionQuestion) {\n      return (\n        <>\n          <select className=\"form-select\" disabled />\n          <select className=\"form-select\" disabled />\n        </>\n      );\n    }\n\n    if (conditionQuestion.pick === Constants.QUESTION_PICK_ANY) {\n      return (\n        <>\n          <AnswerSelect\n            answerIds={conditionQuestion.answerIds}\n            isReadonly={isReadonly}\n            skipLogicCondition={skipLogicCondition}\n            onUpdate={onUpdate}\n          />\n          <OperatorSelect\n            isReadonly={isReadonly}\n            questionType={conditionQuestion.pick}\n            skipLogicCondition={skipLogicCondition}\n            onUpdate={onUpdate}\n          />\n        </>\n      );\n    }\n\n    return (\n      <>\n        <OperatorSelect\n          isReadonly={isReadonly}\n          questionType={conditionQuestion.pick}\n          skipLogicCondition={skipLogicCondition}\n          onUpdate={onUpdate}\n        />\n        <AnswerSelect\n          answerIds={conditionQuestion.answerIds}\n          isReadonly={isReadonly}\n          skipLogicCondition={skipLogicCondition}\n          onUpdate={onUpdate}\n        />\n      </>\n    );\n  }, [conditionQuestion, isReadonly, onUpdate, skipLogicCondition]);\n\n  return (\n    <div className=\"SkipLogicModal__skip-logic__row__controls\">\n      <SingleSelect\n        aria-label=\"Select question\"\n        className={classNames('single-select', {\n          'is-invalid': skipLogicCondition.errors.question,\n        })}\n        disabled={isReadonly}\n        inputId=\"question-select\"\n        modal\n        options={skipLogicOptions}\n        value={{\n          label: conditionQuestion?.text,\n          value: skipLogicCondition.questionId,\n        }}\n        onChange={handleQuestionChanged}\n      />\n      {controls}\n    </div>\n  );\n}\n\nControls.propTypes = {\n  isReadonly: propTypes.bool.isRequired,\n  skipLogicCondition: propTypes.object.isRequired,\n  skipLogicOptions: propTypes.array.isRequired,\n  survey: propTypes.object.isRequired,\n  onUpdate: propTypes.func.isRequired,\n};\n","import React, { useCallback, useContext } from 'react';\nimport propTypes from 'prop-types';\n\nimport SurveyContext from '../../../context';\nimport { surveyPropType } from '../../../prop_types';\n\nimport { ConditionSelect } from './condition_select';\nimport { Actions } from './actions';\nimport { Controls } from './controls';\n\nexport function ConditionRow({\n  isReadonly,\n  position,\n  skipLogic,\n  skipLogicCondition,\n  skipLogicOptions,\n  survey,\n}) {\n  const {\n    skipLogicFunctions: {\n      update: updateSkipLogic,\n      updateCondition: updateSkipLogicCondition,\n    },\n  } = useContext(SurveyContext);\n\n  const skipLogicId = skipLogic.uuid;\n\n  const handleSkipLogicUpdate = useCallback(\n    (changes) => updateSkipLogic(skipLogicId, changes),\n    [skipLogicId, updateSkipLogic],\n  );\n\n  const handleConditionUpdate = useCallback(\n    (changes) => updateSkipLogicCondition(skipLogicCondition.uuid, changes),\n    [skipLogicCondition.uuid, updateSkipLogicCondition],\n  );\n\n  return (\n    <div className=\"SkipLogicModal__skip-logic__row\">\n      <ConditionSelect\n        isReadonly={isReadonly}\n        joinMethod={skipLogic.joinMethod}\n        position={position}\n        onUpdate={handleSkipLogicUpdate}\n      />\n\n      <Controls\n        isReadonly={isReadonly}\n        skipLogicCondition={skipLogicCondition}\n        skipLogicOptions={skipLogicOptions}\n        survey={survey}\n        onUpdate={handleConditionUpdate}\n      />\n\n      <Actions\n        isReadonly={isReadonly}\n        skipLogicCondition={skipLogicCondition}\n        skipLogicId={skipLogic.uuid}\n      />\n    </div>\n  );\n}\n\nConditionRow.propTypes = {\n  isReadonly: propTypes.bool.isRequired,\n  position: propTypes.number.isRequired,\n  skipLogic: propTypes.shape({\n    joinMethod: propTypes.string.isRequired,\n    uuid: propTypes.string.isRequired,\n  }).isRequired,\n  skipLogicCondition: propTypes.object.isRequired,\n  skipLogicOptions: propTypes.array.isRequired,\n  survey: surveyPropType.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport { surveyPropType } from '../../prop_types';\n\nexport function Errors({ skipLogic, survey }) {\n  const hasConditionErrors = skipLogic.conditionIds.find(\n    (id) => !!Object.keys(survey.skipLogicConditions[id].errors).length,\n  );\n\n  const hasErrors = !!Object.keys(skipLogic.errors).length;\n\n  if (!hasErrors && !hasConditionErrors) return null;\n\n  return (\n    <div className=\"SkipLogicModal__skip-logic__row\">\n      <div className=\"SkipLogicModal__skip-logic__row__prefix\" />\n      <div\n        className={classNames(\n          'SkipLogicModal__skip-logic__row__control',\n          'invalid-feedback',\n          'force-display',\n        )}\n      >\n        {hasConditionErrors && <p>Conditions are invalid</p>}\n        {hasErrors &&\n          Object.keys(skipLogic.errors).map((key) => (\n            <p key={key}>{skipLogic.errors[key]}</p>\n          ))}\n      </div>\n    </div>\n  );\n}\n\nErrors.propTypes = {\n  skipLogic: propTypes.shape({\n    conditionIds: propTypes.array.isRequired,\n    errors: propTypes.shape({\n      text: propTypes.string,\n    }).isRequired,\n  }).isRequired,\n  survey: surveyPropType.isRequired,\n};\n","import React, { useMemo, useCallback } from 'react';\nimport propTypes from 'prop-types';\nimport { Button } from '@user-interviews/ui-design-system';\n\nimport { SurveyBuilderConstants as Constants } from 'components/survey_builder';\n\nimport { surveyPropType } from '../../prop_types';\n\nimport { ConditionRow } from './condition_row';\nimport { Errors } from './errors';\n\nconst getSkipLogicOptions = (sectionId, survey) => {\n  const section = survey.sections[sectionId];\n\n  const groupedOptions = [];\n\n  const questions = section.questionIds.reduce((acc, questionId) => {\n    const question = survey.questions[questionId];\n\n    if (\n      question.pick !== Constants.QUESTION_PICK_NONE &&\n      question.pick !== Constants.QUESTION_BOOLEAN\n    )\n      acc.push(question);\n\n    return acc;\n  }, []);\n\n  questions.forEach((question) => {\n    if (question.questionIds) {\n      const questionGroupQuestions = question.questionIds.map(\n        (questionGroupQuestionId) => {\n          const questionGroupQuestion =\n            survey.questions[questionGroupQuestionId];\n          return {\n            label: questionGroupQuestion.text,\n            value: questionGroupQuestion.uuid,\n          };\n        },\n      );\n      groupedOptions.push({\n        label: question.text,\n        options: questionGroupQuestions,\n      });\n    } else {\n      groupedOptions.push({\n        label: question.text || 'Untitled',\n        value: question.uuid,\n      });\n    }\n  });\n\n  return groupedOptions;\n};\n\nexport function SkipLogic({\n  isReadonly,\n  sectionId,\n  skipLogic,\n  survey,\n  onRemove,\n  onUpdate,\n}) {\n  const skipLogicId = skipLogic.uuid;\n\n  const handleUpdate = useCallback(\n    (event) => onUpdate(skipLogicId, { targetSectionId: event.target.value }),\n    [onUpdate, skipLogicId],\n  );\n\n  const handleRemove = useCallback(\n    () => onRemove(sectionId, skipLogicId),\n    [onRemove, sectionId, skipLogicId],\n  );\n\n  const targetableSections = useMemo(() => {\n    const sectionIds = survey.sectionIds.slice(\n      survey.sectionIds.indexOf(sectionId) + 1,\n    );\n\n    return sectionIds.map((id) => {\n      const section = survey.sections[id];\n\n      return (\n        <option key={section.uuid} value={section.uuid}>\n          {section.title}\n        </option>\n      );\n    });\n  }, [survey.sectionIds, survey.sections, sectionId]);\n\n  const skipLogicConditions = useMemo(\n    () =>\n      skipLogic.conditionIds.map((conditionId, index) => {\n        const skipLogicCondition = survey.skipLogicConditions[conditionId];\n        const skipLogicOptions = getSkipLogicOptions(sectionId, survey);\n\n        return (\n          <ConditionRow\n            isReadonly={isReadonly}\n            key={skipLogicCondition.uuid}\n            position={index}\n            skipLogic={skipLogic}\n            skipLogicCondition={skipLogicCondition}\n            skipLogicOptions={skipLogicOptions}\n            survey={survey}\n          />\n        );\n      }),\n    [skipLogic, sectionId, survey, isReadonly],\n  );\n\n  return (\n    <div className=\"form-group SkipLogicModal__skip-logic\">\n      {skipLogicConditions}\n\n      <div className=\"SkipLogicModal__skip-logic__row\">\n        <b className=\"SkipLogicModal__skip-logic__row__prefix\">Skip to</b>\n        <select\n          className=\"form-select SkipLogicModal__skip-logic__row__control\"\n          disabled={isReadonly}\n          value={skipLogic.targetSectionId || ''}\n          onChange={handleUpdate}\n        >\n          <option value=\"\">Finish</option>\n          {targetableSections}\n        </select>\n\n        {isReadonly || (\n          <Button variant=\"outline-danger\" onClick={handleRemove}>\n            Remove\n          </Button>\n        )}\n      </div>\n\n      <Errors skipLogic={skipLogic} survey={survey} />\n    </div>\n  );\n}\n\nSkipLogic.propTypes = {\n  isReadonly: propTypes.bool.isRequired,\n  sectionId: propTypes.string.isRequired,\n  skipLogic: propTypes.object.isRequired,\n  survey: surveyPropType.isRequired,\n  onRemove: propTypes.func.isRequired,\n  onUpdate: propTypes.func.isRequired,\n};\n","import React, { useContext, useCallback } from 'react';\nimport propTypes from 'prop-types';\nimport { Button } from '@user-interviews/ui-design-system';\nimport { faPlusCircle } from 'lib/font_awesome/solid';\n\nimport SurveyContext from '../context';\nimport { surveyPropType } from '../prop_types';\n\nimport { SkipLogic } from './skip_logic';\n\nexport function SectionSkipLogic({ isReadonly, section, survey }) {\n  const { skipLogicFunctions } = useContext(SurveyContext);\n\n  const {\n    add: addSkipLogic,\n    remove: removeSkipLogic,\n    update: updateSkipLogic,\n  } = skipLogicFunctions;\n\n  const handleAdd = useCallback(\n    () => addSkipLogic(section.uuid),\n    [addSkipLogic, section.uuid],\n  );\n\n  if (!section.skipLogicIds?.length) {\n    return (\n      <p className=\"SkipLogicModal__empty-text\">\n        There is no skip logic for this section.\n      </p>\n    );\n  }\n\n  return (\n    <>\n      {section.skipLogicIds.map((skipLogicId) => {\n        const skipLogic = survey.skipLogics[skipLogicId];\n\n        return (\n          <SkipLogic\n            isReadonly={isReadonly}\n            key={skipLogic.uuid}\n            sectionId={section.uuid}\n            skipLogic={skipLogic}\n            survey={survey}\n            onRemove={removeSkipLogic}\n            onUpdate={updateSkipLogic}\n          />\n        );\n      })}\n\n      {!isReadonly && (\n        <Button\n          className=\"btn-link--no-padding\"\n          leadingIcon={faPlusCircle}\n          variant=\"link\"\n          onClick={handleAdd}\n        >\n          Add new logic statement\n        </Button>\n      )}\n    </>\n  );\n}\n\nSectionSkipLogic.propTypes = {\n  isReadonly: propTypes.bool.isRequired,\n  section: propTypes.object.isRequired,\n  survey: surveyPropType.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\nimport {\n  Button,\n  Modal,\n  ModalHeader,\n  ModalFooter,\n  ModalBody,\n  MODAL_SIZES,\n} from '@user-interviews/ui-design-system';\n\nimport { surveyPropType } from '../prop_types';\n\nimport { SectionSkipLogic } from './section_skip_logic';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './skip_logic_modal.scss';\n\nexport function SkipLogicModal({\n  isReadonly,\n  sectionId,\n  survey,\n  onRequestCancel,\n  onRequestClose,\n}) {\n  const section = sectionId ? survey.sections[sectionId] : {};\n\n  const { skipLogicIds } = section;\n  const skipLogicsIncomplete =\n    skipLogicIds !== undefined &&\n    !skipLogicIds.every((skipLogicId) => {\n      const skipLogic = survey.skipLogics[skipLogicId];\n      const conditionsCompleted = skipLogic.conditionIds.every(\n        (conditionId) => {\n          const condition = survey.skipLogicConditions[conditionId];\n          const conditionCompleted = condition.questionId && condition.answerId;\n          return conditionCompleted;\n        },\n      );\n      return conditionsCompleted;\n    });\n\n  return (\n    <Modal\n      className=\"SkipLogicModal\"\n      isOpen={!!sectionId}\n      size={MODAL_SIZES.LARGE}\n    >\n      <ModalHeader\n        title={`${isReadonly ? 'Skip' : 'Edit skip'} logic for ${section.title}`}\n        titleId=\"skip-logic-modal-title\"\n      />\n      <ModalBody>\n        <p className=\"SkipLogicModal__clarifier\">\n          Skip logic can only be applied to single or multi-choice questions.\n        </p>\n        <SectionSkipLogic\n          isReadonly={isReadonly}\n          section={section}\n          survey={survey}\n        />\n      </ModalBody>\n      <ModalFooter>\n        <Button variant=\"transparent\" onClick={onRequestCancel}>\n          Cancel\n        </Button>\n        <Button\n          disabled={skipLogicsIncomplete}\n          variant=\"primary\"\n          onClick={onRequestClose}\n        >\n          Done\n        </Button>\n      </ModalFooter>\n    </Modal>\n  );\n}\n\nSkipLogicModal.propTypes = {\n  isReadonly: propTypes.bool.isRequired,\n  sectionId: propTypes.string,\n  survey: surveyPropType.isRequired,\n  onRequestCancel: propTypes.func.isRequired,\n  onRequestClose: propTypes.func.isRequired,\n};\n","import React from 'react';\nimport * as propTypes from 'lib/prop_types';\nimport {\n  Button,\n  ModalBody,\n  ModalHeader,\n  ModalFooter,\n} from '@user-interviews/ui-design-system';\n\nimport { TrackedButton } from 'common/analytics';\nimport { TrackedModal } from 'common/modals';\n\nimport { trackingEvents } from 'lib/analytics';\nimport { PREMIUM_SURVEY_FEE } from 'lib/generated_constants/billing';\nimport {\n  LegacyBundleMonthlyDisplayPrices,\n  SubscriptionNames,\n} from 'lib/generated_constants/subscriptions';\n\nfunction SurveyUpgradeModal({\n  isOpen = false,\n  onRequestClose,\n  onUpgradeClick,\n}) {\n  return (\n    <TrackedModal\n      className=\"SurveyUpgradeModal\"\n      event={trackingEvents.SURVEY_UPGRADE_MODAL_SHOWN}\n      isOpen={isOpen}\n      onRequestClose={onRequestClose}\n    >\n      <ModalHeader\n        title=\"Upgrade project?\"\n        titleId=\"survey-upgrade-modal\"\n        onRequestClose={onRequestClose}\n      />\n      <ModalBody>\n        <p>\n          {/* UI-311 Another $ sign to change for other currencies */}\n          Surveys with multiple pages add an extra ${PREMIUM_SURVEY_FEE} per\n          completed participant session or are included in our subscription\n          plans, starting at{' '}\n          {LegacyBundleMonthlyDisplayPrices[SubscriptionNames.CONSUMER]} /\n          month.\n        </p>\n        <p>\n          Would you like to upgrade? You can choose pay as you go or\n          subscription pricing in the final review step.\n        </p>\n      </ModalBody>\n      <ModalFooter>\n        <Button variant=\"link\" onClick={onRequestClose}>\n          Cancel\n        </Button>\n        <TrackedButton\n          event={trackingEvents.SURVEY_UPGRADE_ACCEPTED}\n          variant=\"primary\"\n          onClick={onUpgradeClick}\n        >\n          Upgrade project\n        </TrackedButton>\n      </ModalFooter>\n    </TrackedModal>\n  );\n}\n\nSurveyUpgradeModal.propTypes = {\n  isOpen: propTypes.bool,\n  onRequestClose: propTypes.func.isRequired,\n  onUpgradeClick: propTypes.func.isRequired,\n};\n\nexport default SurveyUpgradeModal;\n","import React, { useContext } from 'react';\nimport propTypes from 'prop-types';\n\nimport { TrackedIconButton } from 'common/analytics';\nimport { AuthUserContext } from 'common/authorization';\n\nimport { trackingEvents } from 'lib/analytics';\n\nexport function Actions({\n  isRemovableQuestion,\n  isVisible,\n  questionUUID,\n  sectionUUID,\n  onDuplicate,\n  onRemove,\n}) {\n  const { account } = useContext(AuthUserContext);\n\n  if (!isVisible) return null;\n  const handleDuplicate = (event) => {\n    event.stopPropagation();\n\n    onDuplicate(sectionUUID, questionUUID);\n  };\n  const handleRemove = (event) => {\n    event.stopPropagation();\n\n    onRemove(sectionUUID, questionUUID);\n  };\n\n  return (\n    <>\n      <TrackedIconButton\n        action=\"COPY\"\n        ariaLabel=\"Duplicate Screener Question\"\n        event={trackingEvents.BUILD_PROJECT_SCREENER_QUESTION_DUPLICATED}\n        onClick={handleDuplicate}\n      />\n      <TrackedIconButton\n        action=\"DELETE\"\n        ariaLabel=\"Remove Screener Question\"\n        disabled={!isRemovableQuestion}\n        event={trackingEvents.SURVEY_REMOVE_QUESTION}\n        eventData={{\n          account_id: account?.id,\n        }}\n        onClick={handleRemove}\n      />\n    </>\n  );\n}\n\nActions.propTypes = {\n  isRemovableQuestion: propTypes.bool.isRequired,\n  isVisible: propTypes.bool.isRequired,\n  questionUUID: propTypes.string.isRequired,\n  sectionUUID: propTypes.string.isRequired,\n  onDuplicate: propTypes.func.isRequired,\n  onRemove: propTypes.func.isRequired,\n};\n","import React, { useCallback } from 'react';\nimport propTypes from 'prop-types';\n\nimport { SingleSelect } from '@user-interviews/ui-design-system';\n\nimport { useFeatureFlag } from 'hooks/use_feature_flag';\nimport { Features } from 'lib/generated_constants/features';\n\nimport * as Constants from '../../constants';\n\nexport function QualifyLogicSelect({\n  className,\n  isPickOne,\n  value,\n  onAnswerChange,\n}) {\n  const handleClick = (event) => event.stopPropagation();\n\n  const handleQualifyLogicChange = useCallback(\n    (selected) => onAnswerChange({ qualifyLogic: selected.value }),\n    [onAnswerChange],\n  );\n  const { isEnabled: recruitApiEnabled } = useFeatureFlag({\n    featureName: Features.RECRUIT_API,\n  });\n\n  let options;\n  if (isPickOne) {\n    options = Constants.PICK_ONE_QUALIFY_LOGIC_OPTIONS;\n  } else if (recruitApiEnabled) {\n    options = Constants.RECRUIT_API_LOGIC_OPTIONS;\n  } else {\n    options = Constants.QUALIFY_LOGIC_OPTIONS;\n  }\n\n  const { label } = options.find((option) => option.value === value) || {};\n\n  return (\n    // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions\n    <div className={className} onClick={handleClick}>\n      <SingleSelect\n        aria-label=\"qualify logic select\"\n        inputKey=\"answer-select\"\n        options={options}\n        value={{ label, value }}\n        onChange={handleQualifyLogicChange}\n      />\n    </div>\n  );\n}\n\nQualifyLogicSelect.propTypes = {\n  className: propTypes.string,\n  isPickOne: propTypes.bool.isRequired,\n  value: propTypes.string.isRequired,\n  onAnswerChange: propTypes.func.isRequired,\n};\n\nQualifyLogicSelect.defaultProps = {\n  className: '',\n};\n","import React, { useCallback, useContext } from 'react';\nimport propTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport { IconButton } from '@user-interviews/ui-design-system';\nimport { useController, useFormContext } from 'react-hook-form';\n\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\n\nimport { faGripVertical } from 'lib/font_awesome/solid';\n\nimport { NEW_LINE_REGEX } from 'lib/surveys/builder/utilities';\n\nimport { SCREENER_FORM_TYPE } from 'components/survey_builder/constants';\nimport { SurveyBuilderContext } from 'components/survey_builder';\nimport { QualifyLogicSelect } from './qualify_logic_select';\n\nimport * as Constants from '../../constants';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './editing.scss';\n\n// Disabled when adding max-props rule.\n// Future work should stay under 6 props\n// eslint-disable-next-line local-rules/max-props\nexport function Editing({\n  answer,\n  index,\n  isEditing,\n  isRemovableAnswer,\n  questionId,\n  questionType,\n  onAdd,\n  onRemove,\n  onChange,\n}) {\n  const isPickOne = questionType === Constants.QUESTION_PICK_ONE;\n  const isBoolean = questionType === Constants.QUESTION_BOOLEAN;\n\n  const {\n    formState: { errors },\n  } = useFormContext();\n  const { formType } = useContext(SurveyBuilderContext);\n  const isScreenerForm = formType === SCREENER_FORM_TYPE;\n  const answerName = `answer.${answer.uuid}`;\n  const { field: answerInput } = useController({\n    defaultValue: answer.text,\n    name: answerName,\n    rules: { required: true },\n  });\n\n  const { attributes, listeners, setNodeRef, transform, transition } =\n    useSortable({\n      id: answer.uuid,\n    });\n\n  const style = {\n    transform: CSS.Translate.toString(transform),\n    transition,\n  };\n\n  const handleClick = (event) => event.stopPropagation();\n\n  const handleAdd = useCallback(\n    (event) => {\n      event.stopPropagation();\n\n      onAdd(questionId, answer.uuid);\n    },\n    [onAdd, questionId, answer.uuid],\n  );\n\n  const handleRemove = useCallback(\n    (event) => {\n      event.stopPropagation();\n\n      onRemove(questionId, answer.uuid);\n    },\n    [onRemove, questionId, answer.uuid],\n  );\n\n  const handleTextChange = useCallback(\n    (event) => {\n      const eventValue = event.target.value;\n\n      const answers = eventValue.split(NEW_LINE_REGEX);\n\n      if (answers.length > 1) {\n        answerInput.onChange(answers[0]);\n      } else {\n        answerInput.onChange(eventValue);\n      }\n\n      onChange({ text: eventValue });\n    },\n    [onChange, answerInput],\n  );\n\n  const hasErrors =\n    errors?.answer?.[answer.uuid] || Object.keys(answer.errors).length;\n\n  const optionNumber = (index || 0) + 1;\n\n  return (\n    <div\n      className=\"SurveyBuilderRow editing\"\n      id={answer.uuid}\n      ref={setNodeRef}\n      style={isEditing ? style : { display: 'none' }}\n    >\n      <div className=\"SurveyBuilderRow__text\">\n        <div className=\"SurveyBuilderRow__text__answer\">\n          <div\n            className=\"drag-handle-wrapper\"\n            id={`reorder-${answer.uuid}`}\n            {...attributes}\n            {...listeners}\n          >\n            <FontAwesomeIcon icon={faGripVertical} size=\"sm\" />\n          </div>\n          <div className=\"checkbox-wrapper\">\n            <input\n              aria-label=\"answer selected preview\"\n              disabled\n              type={isPickOne || isBoolean ? 'radio' : 'checkbox'}\n            />\n          </div>\n          <div className=\"answer-wrapper\">\n            <textarea\n              /* We are saving data in both react-hook-form and survey builder context so we can\n              validate the inputs for front end errors (RHF) and server errors (builder context) */\n              {...answerInput}\n              aria-invalid={!!hasErrors}\n              aria-label={`option ${optionNumber}`}\n              className={classNames('form-control', {\n                'is-invalid': hasErrors,\n              })}\n              disabled={isBoolean}\n              name={answerName}\n              style={isEditing ? null : { display: 'none' }}\n              onChange={handleTextChange}\n              onClick={handleClick}\n            />\n            <div className=\"invalid-feedback\">\n              {hasErrors && \"Answer can't be blank\"}\n            </div>\n          </div>\n        </div>\n      </div>\n      {isScreenerForm && (\n        <div className=\"SurveyBuilderRow__controls\">\n          <QualifyLogicSelect\n            className=\"SurveyBuilderQuestion__type answer\"\n            isPickOne={isPickOne}\n            value={answer.qualifyLogic}\n            onAnswerChange={onChange}\n          />\n        </div>\n      )}\n\n      {!isBoolean && (\n        <div className=\"SurveyBuilderRow__actions\">\n          <IconButton\n            action=\"ADD\"\n            ariaLabel={`add an option after option ${optionNumber}`}\n            onClick={handleAdd}\n          />\n          <IconButton\n            action=\"DELETE\"\n            ariaLabel={`remove option ${optionNumber}`}\n            disabled={!isRemovableAnswer}\n            onClick={handleRemove}\n          />\n        </div>\n      )}\n    </div>\n  );\n}\n\nEditing.propTypes = {\n  answer: propTypes.shape({\n    errors: propTypes.shape({\n      text: propTypes.string,\n    }).isRequired,\n    qualifyLogic: propTypes.string.isRequired,\n    text: propTypes.string,\n    uuid: propTypes.string.isRequired,\n  }).isRequired,\n  index: propTypes.number.isRequired,\n  isEditing: propTypes.bool.isRequired,\n  isRemovableAnswer: propTypes.bool.isRequired,\n  questionId: propTypes.string.isRequired,\n  questionType: propTypes.string.isRequired,\n  onAdd: propTypes.func.isRequired,\n  onChange: propTypes.func.isRequired,\n  onRemove: propTypes.func.isRequired,\n};\n","import React, { useContext, useMemo } from 'react';\nimport propTypes from 'prop-types';\n\nimport { SurveyBuilderContext } from 'components/survey_builder';\n\nimport * as Constants from '../../constants';\n\nexport function Pick({ answer, isEditing, questionType }) {\n  const { formType } = useContext(SurveyBuilderContext);\n\n  const isPickOne = questionType === Constants.QUESTION_PICK_ONE;\n  const isBoolean = questionType === Constants.QUESTION_BOOLEAN;\n\n  const qualifier = useMemo(() => {\n    if (!answer.text) return null;\n    if (formType === Constants.OPT_IN_FORM_TYPE) return null;\n\n    if (answer.qualifyLogic === Constants.QUALIFY_LOGIC_REJECT)\n      return <i> - Reject</i>;\n\n    if (answer.qualifyLogic === Constants.QUALIFY_LOGIC_MUST) {\n      return <i> - Must Select</i>;\n    }\n\n    if (isPickOne) return <i> - Accept</i>;\n\n    return <i> - May Select</i>;\n  }, [answer.text, answer.qualifyLogic, isPickOne, formType]);\n\n  return (\n    <div\n      className=\"SurveyBuilderAnswer\"\n      style={isEditing ? { display: 'none' } : null}\n    >\n      <input\n        aria-label=\"answer selected preview\"\n        disabled\n        key=\"input\"\n        type={isPickOne || isBoolean ? 'radio' : 'checkbox'}\n      />\n      <span key=\"text\">\n        {answer.text}\n        {qualifier}\n      </span>\n    </div>\n  );\n}\n\nPick.propTypes = {\n  answer: propTypes.shape({\n    qualifyLogic: propTypes.string.isRequired,\n    text: propTypes.string,\n  }).isRequired,\n  isEditing: propTypes.bool.isRequired,\n  questionType: propTypes.string.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport * as Constants from '../../constants';\n\nexport function PickNone({ answer }) {\n  if (answer.responseClass === Constants.RESPONSE_CLASS_STRING) {\n    return (\n      <input\n        aria-label=\"short answer\"\n        className=\"form-control\"\n        disabled\n        type=\"text\"\n      />\n    );\n  }\n\n  if (answer.responseClass === Constants.RESPONSE_CLASS_TEXT) {\n    return (\n      <textarea\n        aria-label=\"long answer\"\n        className=\"form-control\"\n        disabled\n        style={{ resize: 'none' }}\n      />\n    );\n  }\n\n  if (answer.responseClass === Constants.RESPONSE_CLASS_DATE) {\n    return (\n      <input aria-label=\"date\" className=\"form-control\" disabled type=\"date\" />\n    );\n  }\n\n  if (answer.responseClass === Constants.RESPONSE_CLASS_FLOAT) {\n    return (\n      <input\n        aria-label=\"number\"\n        className=\"form-control\"\n        disabled\n        type=\"number\"\n      />\n    );\n  }\n\n  return null;\n}\n\nPickNone.propTypes = {\n  answer: propTypes.shape({\n    responseClass: propTypes.oneOf([\n      Constants.RESPONSE_CLASS_STRING,\n      Constants.RESPONSE_CLASS_TEXT,\n      Constants.RESPONSE_CLASS_DATE,\n      Constants.RESPONSE_CLASS_FLOAT,\n    ]).isRequired,\n  }).isRequired,\n};\n","import React, { useContext } from 'react';\nimport propTypes from 'prop-types';\n\nimport { SurveyBuilderContext } from 'components/survey_builder';\n\nimport { Text } from '@user-interviews/ui-design-system';\n\nimport * as Constants from '../../constants';\n\nimport { Pick } from './pick';\nimport { QualifyLogicSelect } from './qualify_logic_select';\n\nexport function OtherAnswer({ answer, isEditing, questionType, onChange }) {\n  const { formType } = useContext(SurveyBuilderContext);\n\n  const isPickOne = questionType === Constants.QUESTION_PICK_ONE;\n\n  if (!isEditing) {\n    return (\n      <Pick answer={answer} isEditing={isEditing} questionType={questionType} />\n    );\n  }\n\n  return (\n    <>\n      <div\n        className=\"SurveyBuilderRow editing other\"\n        style={isEditing ? {} : { display: 'none' }}\n      >\n        <div className=\"SurveyBuilderRow__text\">\n          <div className=\"SurveyBuilderRow__text__answer\">\n            <div className=\"drag-handle-wrapper\" />\n            <div className=\"checkbox-wrapper\">\n              <input\n                aria-label=\"other answer selected preview\"\n                disabled\n                type={isPickOne ? 'radio' : 'checkbox'}\n              />\n            </div>\n            <div className=\"answer-wrapper\">\n              <Text>Other</Text>\n            </div>\n          </div>\n        </div>\n        <div className=\"SurveyBuilderRow__controls\" />\n        <div className=\"SurveyBuilderRow__actions\" />\n      </div>\n      <div\n        className=\"SurveyBuilderRow editing other second-line\"\n        style={isEditing ? {} : { display: 'none' }}\n      >\n        <div className=\"SurveyBuilderRow__text\">\n          <div className=\"SurveyBuilderRow__text__answer\">\n            <div className=\"drag-handle-wrapper\" />\n            <div className=\"checkbox-wrapper\" />\n            <div className=\"answer-wrapper\">\n              <textarea\n                aria-label=\"option for other input\"\n                className=\"form-control\"\n                disabled\n              />\n            </div>\n          </div>\n        </div>\n        {formType === Constants.SCREENER_FORM_TYPE && (\n          <div className=\"SurveyBuilderRow__controls\">\n            <QualifyLogicSelect\n              className=\"SurveyBuilderQuestion__type answer\"\n              isPickOne={isPickOne}\n              value={answer.qualifyLogic}\n              onAnswerChange={onChange}\n            />\n          </div>\n        )}\n        <div className=\"SurveyBuilderRow__actions\" />\n      </div>\n    </>\n  );\n}\n\nOtherAnswer.propTypes = {\n  answer: propTypes.shape({\n    errors: propTypes.object.isRequired,\n    qualifyLogic: propTypes.string.isRequired,\n    responseClass: propTypes.string,\n    text: propTypes.string,\n    uuid: propTypes.string.isRequired,\n  }).isRequired,\n  isEditing: propTypes.bool.isRequired,\n  questionType: propTypes.string.isRequired,\n  onChange: propTypes.func.isRequired,\n};\n","import React, { useContext, useCallback } from 'react';\nimport propTypes from 'prop-types';\n\nimport { NEW_LINE_REGEX } from 'lib/surveys/builder/utilities';\n\nimport * as Constants from '../../constants';\nimport SurveyContext from '../../context';\n\nimport { Editing } from './editing';\nimport { Pick } from './pick';\nimport { PickNone } from './pick_none';\nimport { OtherAnswer } from './other_answer';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './answer.scss';\n\nexport function Answer({\n  answer,\n  index,\n  isEditing,\n  isRemovableAnswer,\n  questionId,\n  type,\n}) {\n  const {\n    answerFunctions: {\n      add: addAnswer,\n      addBatch: addAnswers,\n      remove: removeAnswer,\n      update: updateAnswer,\n    },\n  } = useContext(SurveyContext);\n\n  const handleChange = useCallback(\n    (changes) => {\n      const answers = changes.text\n        ?.split(NEW_LINE_REGEX)\n        .filter((text) => !!text);\n\n      if (changes.text && answers.length > 1) {\n        addAnswers(questionId, answer.uuid, answers);\n      } else {\n        updateAnswer(answer.uuid, changes);\n      }\n    },\n    [answer.uuid, addAnswers, questionId, updateAnswer],\n  );\n\n  if (answer.responseClass === Constants.RESPONSE_CLASS_OTHER_AND_STRING) {\n    return (\n      <OtherAnswer\n        answer={answer}\n        index={index}\n        isEditing={isEditing}\n        questionType={type}\n        onChange={handleChange}\n      />\n    );\n  }\n\n  if (type === Constants.QUESTION_PICK_NONE) {\n    return <PickNone answer={answer} />;\n  }\n\n  return (\n    <>\n      <Editing\n        answer={answer}\n        index={index}\n        isEditing={isEditing}\n        isRemovableAnswer={isRemovableAnswer}\n        questionId={questionId}\n        questionType={type}\n        onAdd={addAnswer}\n        onAddBatch={addAnswers}\n        onChange={handleChange}\n        onRemove={removeAnswer}\n      />\n      <Pick answer={answer} isEditing={isEditing} questionType={type} />\n    </>\n  );\n}\n\nAnswer.propTypes = {\n  answer: propTypes.shape({\n    errors: propTypes.object.isRequired,\n    responseClass: propTypes.string,\n    text: propTypes.string,\n    uuid: propTypes.string.isRequired,\n  }).isRequired,\n  index: propTypes.number.isRequired,\n  isEditing: propTypes.bool.isRequired,\n  isRemovableAnswer: propTypes.bool.isRequired,\n  questionId: propTypes.string.isRequired,\n  type: propTypes.string.isRequired,\n};\n","import React, { useCallback, useContext, useMemo } from 'react';\nimport propTypes from 'prop-types';\n\nimport {\n  DndContext,\n  closestCenter,\n  KeyboardSensor,\n  MouseSensor,\n  TouchSensor,\n  useDroppable,\n  useSensor,\n  useSensors,\n} from '@dnd-kit/core';\n\nimport {\n  SortableContext,\n  verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\n\nimport { restrictToVerticalAxis } from '@dnd-kit/modifiers';\n\nimport { isOtherAnswer } from 'researcher/surveys/utils';\n\nimport SurveyContext from '../context';\n\nimport { Answer } from './answer';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './question.scss';\n\nexport function Answers({ isEditing, question }) {\n  const {\n    answerFunctions: { move: moveAnswer },\n    survey,\n  } = useContext(SurveyContext);\n\n  const sensors = useSensors(\n    useSensor(MouseSensor, {}),\n    useSensor(TouchSensor, {}),\n    useSensor(KeyboardSensor, {}),\n  );\n\n  const { setNodeRef } = useDroppable({ id: 'answerList' });\n\n  const questionUUID = question.uuid;\n\n  const handleDragEnd = useCallback(\n    (event) => {\n      const activeAccessor = event?.active?.id;\n      const overAccessor = event?.over?.id;\n\n      if (overAccessor && activeAccessor !== overAccessor) {\n        moveAnswer(questionUUID, activeAccessor, overAccessor);\n      }\n    },\n    [moveAnswer, questionUUID],\n  );\n\n  const surveyAnswers = survey.answers;\n\n  const answers = useMemo(\n    () =>\n      question.answerIds\n        ?.filter((id) => !!surveyAnswers[id])\n        .map((answerId) => surveyAnswers[answerId]),\n    [question, surveyAnswers],\n  );\n\n  const isRemovableAnswer = useMemo(\n    () => answers.filter((answer) => !isOtherAnswer(answer)).length > 1,\n    [answers],\n  );\n\n  const answerUUIDs = answers.map((answer) => answer.uuid);\n\n  return (\n    <DndContext\n      collisionDetection={closestCenter}\n      modifiers={[restrictToVerticalAxis]}\n      sensors={sensors}\n      onDragEnd={handleDragEnd}\n    >\n      <SortableContext\n        items={answerUUIDs}\n        strategy={verticalListSortingStrategy}\n      >\n        <div id=\"answerList\" ref={setNodeRef}>\n          {answers.map((answer, index) => (\n            <Answer\n              answer={answer}\n              index={index}\n              isEditing={isEditing}\n              isRemovableAnswer={isRemovableAnswer}\n              key={answer.uuid}\n              questionId={question.uuid}\n              type={question.pick}\n            />\n          ))}\n        </div>\n      </SortableContext>\n    </DndContext>\n  );\n}\n\nAnswers.propTypes = {\n  isEditing: propTypes.bool.isRequired,\n  question: propTypes.shape({\n    answerIds: propTypes.array.isRequired,\n    errors: propTypes.shape({\n      text: propTypes.string,\n    }).isRequired,\n    isEditing: propTypes.bool,\n    isKey: propTypes.bool.isRequired,\n    isMandatory: propTypes.bool.isRequired,\n    isNew: propTypes.bool,\n    pick: propTypes.string.isRequired,\n    text: propTypes.string.isRequired,\n    uuid: propTypes.string.isRequired,\n  }).isRequired,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"w03erOGO9n2eg0y8kB2Y\";\nvar _2 = \"w9TcaODeaLKZRWslCraM\";\nvar _3 = \"MlbCL9jacjnu9j_fBNgA\";\nvar _4 = \"G5mfXG4eKuw44U72MrG0\";\nvar _5 = \"kLMgl91SvDfLSY8OzwE1\";\nvar _6 = \"qogfRG1iwHnL11Dn746I\";\nvar _7 = \"SnrLcwH2NPSuFttyRBds\";\nvar _8 = \"rZU0mWPZYawGJ2zjWyqw\";\nvar _9 = \"gztWwB81O_30gYKgk3uQ\";\nvar _a = \"WQTC24W5PeVKh6D2F7FE\";\nvar _b = \"sMmsJtbhSaBN7Ng9L9CP\";\nvar _c = \"tIMVlUo73jUSSTMfrc9n\";\nvar _d = \"a2QyzIlYk0s4hLdOrLNS\";\nvar _e = \"qzetCF4XTyH6b5dTPqQK\";\nvar _f = \"DtV12FrW2BRRWLmCOXzw\";\nvar _10 = \"Mh9hgsVRTBy35nJGwHEO\";\nvar _11 = \"iaSRBrJVXXmfr65avmcQ\";\nvar _12 = \"Q8fZRK5KFlp367AOSUEF\";\nvar _13 = \"_N6m4UnSMA_yQ9dMSYOc\";\nvar _14 = \"UdotQrgYIlJs8l6wCdcY\";\nvar _15 = \"YbUl0MTyP1I8oYpO7Hww\";\nvar _16 = \"Qn5WSltt9ZNbu3ZhbI6d\";\nvar _17 = \"zYZzS6V2ExdnCYlYjMXv\";\nexport { _1 as \"Accept\", _2 as \"ApplySuccessCard__detail__date\", _3 as \"BillingInfoCard__column\", _4 as \"CopyToClipboard\", _5 as \"DataConsentNotice__content__preview__body\", _6 as \"Input\", _7 as \"MessageList__message__timestamp\", _8 as \"ParticipantProfile__participant-details__attribute-value\", _9 as \"ProjectCustomEmailSets\", _a as \"ProjectListItem__status-date\", _b as \"ProjectListing__detail\", _c as \"ProjectListing__details\", _d as \"TeamMemberInviterForm__section__invite-via-link\", _e as \"Toggle\", _f as \"UnmoderatedTask__deadline\", _10 as \"accept\", _11 as \"btn-link--neutral\", _12 as \"btn-outline-secondary\", _13 as \"may\", _14 as \"mayForPickOne\", _15 as \"participant-dashboard__project__info__status__string\", _16 as \"reject\", _17 as \"schedule-project-participant-page__time-slots\" }\n","import React, { useMemo } from 'react';\nimport propTypes from 'prop-types';\n\nimport { Flex } from '@user-interviews/ui-design-system';\nimport classNames from 'classnames';\n\nimport * as Constants from '../../constants';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './accept.module.scss';\n\nexport function Accept({ answer, isEditing, questionGroupPick, onChange }) {\n  const { qualifyLogic } = answer;\n  const isPickOne = questionGroupPick === Constants.QUESTION_PICK_ONE;\n\n  const handleClick = (value) => {\n    onChange(answer.uuid, { qualifyLogic: value });\n  };\n\n  const QualifyLogicOptionsLookup = useMemo(() => {\n    const options = isPickOne\n      ? Constants.PICK_ONE_QUALIFY_LOGIC_OPTIONS\n      : Constants.QUALIFY_LOGIC_OPTIONS;\n\n    return options.reduce((acc, option) => {\n      acc[option.key] = option;\n\n      return acc;\n    }, {});\n  }, [isPickOne]);\n\n  const currentOption = QualifyLogicOptionsLookup[qualifyLogic];\n\n  function handleQualifyLogicChange(event) {\n    event.stopPropagation();\n\n    handleClick(currentOption.nextKey);\n  }\n\n  if (!isEditing) {\n    return (\n      <Flex className={styles.Input} container justifyContent=\"center\">\n        <input\n          aria-label=\"Answer selected preview\"\n          disabled\n          key=\"input\"\n          type={isPickOne ? 'radio' : 'checkbox'}\n        />\n      </Flex>\n    );\n  }\n\n  return (\n    <div className={styles.Toggle}>\n      <button\n        className={classNames(styles.Accept, {\n          [styles.accept]: qualifyLogic === Constants.QUALIFY_LOGIC_MUST,\n          [styles.may]:\n            qualifyLogic === Constants.QUALIFY_LOGIC_MAY && !isPickOne,\n          [styles.mayForPickOne]:\n            qualifyLogic === Constants.QUALIFY_LOGIC_MAY && isPickOne,\n          [styles.reject]: qualifyLogic === Constants.QUALIFY_LOGIC_REJECT,\n        })}\n        disabled={!isEditing}\n        type=\"button\"\n        onClick={handleQualifyLogicChange}\n      >\n        {currentOption.label}\n      </button>\n    </div>\n  );\n}\n\nAccept.propTypes = {\n  answer: propTypes.object.isRequired,\n  isEditing: propTypes.bool.isRequired,\n  questionGroupPick: propTypes.string.isRequired,\n  onChange: propTypes.func.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\nimport { useTracking } from 'react-tracking';\n\nimport { IconButton } from '@user-interviews/ui-design-system';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './remove_button.module.scss';\n\nexport function RemoveButton({\n  ariaLabel,\n  className,\n  trackingEvent,\n  onRemove,\n}) {\n  const { trackEvent } = useTracking();\n\n  const handleClick = (event) => {\n    event.stopPropagation();\n\n    trackEvent({ event: trackingEvent });\n\n    onRemove();\n  };\n\n  return (\n    <IconButton\n      action=\"DELETE\"\n      ariaLabel={ariaLabel}\n      className={`${styles.RemoveButton} ${className}`}\n      size=\"sm\"\n      onClick={handleClick}\n    />\n  );\n}\n\nRemoveButton.propTypes = {\n  ariaLabel: propTypes.string.isRequired,\n  className: propTypes.string,\n  trackingEvent: propTypes.string.isRequired,\n  onRemove: propTypes.func.isRequired,\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useCallback, useEffect } from 'react';\n\nimport Resize from 'lib/events/resize';\n\nexport const useAutosizeTextArea = ({ textAreaRef, value, dependencies }) => {\n  const resizeTextArea = useCallback(() => {\n    if (textAreaRef) {\n      const ref = textAreaRef;\n\n      ref.style.height = '0px';\n\n      const { scrollHeight } = ref;\n\n      ref.style.height = `${scrollHeight}px`;\n    }\n  }, [textAreaRef]);\n\n  useEffect(() => {\n    const resizeListener = Resize.listen(resizeTextArea);\n    return () => Resize.cleanup(resizeListener);\n  }, [textAreaRef]);\n\n  useEffect(resizeTextArea, [textAreaRef, value, ...dependencies]);\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useContext } from 'react';\n\nimport SurveyContext from '../../context';\nimport { useAutosizeTextArea } from './useAutosizeTextArea';\n\nexport const useAutosizeGridTextArea = (\n  textAreaRef,\n  value,\n  questionGroupId,\n) => {\n  const { survey } = useContext(SurveyContext);\n\n  const questionGroup = survey.questions[questionGroupId];\n  const firstQuestion = survey.questions[questionGroup.questionIds[0]];\n\n  const totalAnswersInQuestionGroup = firstQuestion.answerIds.length;\n\n  useAutosizeTextArea({\n    textAreaRef,\n    value,\n    dependencies: [totalAnswersInQuestionGroup],\n  });\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"FDVJxRQAK69gX1PI48_j\";\nvar _2 = \"gJ5CjR9xdjK0kna5d5sE\";\nvar _3 = \"yMX13nD1crXev840OimU\";\nvar _4 = \"IIapYZ0WlJD7AeiRMcQD\";\nvar _5 = \"uOGapTNNx7hYQI5_QvxG\";\nvar _6 = \"_6lycy4B5wlrrWscg6KEL\";\nvar _7 = \"K6_7UY4ag_dFkhbJoEOd\";\nvar _8 = \"gTkryA0CJ1FbhvmRroMO\";\nvar _9 = \"oTiv4LeELtpqfNHFP5VI\";\nvar _a = \"pkH3ij7gHT7PWLROHKow\";\nvar _b = \"f99InMUEtJ182CtouaBG\";\nvar _c = \"JedOAX1MW9H2j4S_JNLy\";\nvar _d = \"kjg1MpKhe4QeNKowtzOF\";\nvar _e = \"dtHkK7zZRwxxY5KIwVPO\";\nvar _f = \"tu6NIW8SsRABowod9IAo\";\nvar _10 = \"W2PcorlUZmTjxadHqcBk\";\nvar _11 = \"VAtHGkYOhM04Zd59CVyD\";\nvar _12 = \"AeO5QlFKEnq61dnDXbk_\";\nvar _13 = \"EXIW_WebhGomzujH_Bie\";\nvar _14 = \"EiEDicAvP98BcFS1OsnA\";\nvar _15 = \"O93faRgrFDEXrqCrmRVa\";\nvar _16 = \"aeUM7bcNG1icuYboeNLU\";\nvar _17 = \"UNzRrEIl_PQD24z77Vas\";\nvar _18 = \"lasQFFEmX6S4ah3Vcm6n\";\nvar _19 = \"VLJbEtQQtx9qmX6iLI5j\";\nvar _1a = \"OdYnAO68xgKEVu6mzmaB\";\nvar _1b = \"WMwTESA3tYNrSWlBm7d_\";\nvar _1c = \"WWAHTKSsZFTqO7lzbi1p\";\nvar _1d = \"FIQlGV07xvneayvRaHu2\";\nvar _1e = \"_EkW6Y0y7TRS1IkoUOYA\";\nvar _1f = \"s4GFbBghy2j2YkD0hw3r\";\nvar _20 = \"VvbTSRILnWXs9AQ1lRRy\";\nvar _21 = \"xdqMD2aH7D8yXUpVGLOF\";\nvar _22 = \"LavoK_1rODdqMR68bs2r\";\nexport { _1 as \"ApplySuccessCard__detail__date\", _2 as \"BillingInfoCard__column\", _3 as \"CopyToClipboard\", _4 as \"DataConsentNotice__content__preview__body\", _5 as \"MessageList__message__timestamp\", _6 as \"ParticipantProfile__participant-details__attribute-value\", _7 as \"ProjectCustomEmailSets\", _8 as \"ProjectListItem__status-date\", _9 as \"ProjectListing__detail\", _a as \"ProjectListing__details\", _b as \"TeamMemberInviterForm__section__invite-via-link\", _c as \"UnmoderatedTask__deadline\", _d as \"addButton\", _e as \"addButtons\", _f as \"answerRow\", _10 as \"box2\", _11 as \"box3\", _12 as \"box4\", _13 as \"box5\", _14 as \"box6\", _15 as \"box7\", _16 as \"box8\", _17 as \"boxRow\", _18 as \"btn-link--neutral\", _19 as \"btn-outline-secondary\", _1a as \"gridAnswer\", _1b as \"gridInput\", _1c as \"gridInputTextArea\", _1d as \"gridRow\", _1e as \"gridTitleNonEdit\", _1f as \"participant-dashboard__project__info__status__string\", _20 as \"qualificationInstructions\", _21 as \"removeButton\", _22 as \"schedule-project-participant-page__time-slots\" }\n","import React, { useCallback, useState } from 'react';\nimport { Text } from '@user-interviews/ui-design-system';\nimport propTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport { useController, useFormContext } from 'react-hook-form';\n\nimport { trackingEvents } from 'lib/analytics';\n\nimport { RemoveButton } from './remove_button';\nimport { useAutosizeGridTextArea } from './useAutosizeGridTextArea';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as styles from './grid.module.scss';\n\n// Disabled when adding max-props rule.\n// Future work should stay under 6 props\n// eslint-disable-next-line local-rules/max-props\nexport function GridAnswer({\n  answer,\n  index,\n  isEditing,\n  isRemovable,\n  questionGroupId,\n  onRemove,\n  onUpdateColumn,\n}) {\n  const [textAreaRef, setTextAreaRef] = useState(null);\n\n  const {\n    formState: { errors },\n  } = useFormContext();\n\n  const answerName = `answer.${answer.uuid}`;\n  const answerText = answer.text || 'column';\n\n  const { field: answerInput } = useController({\n    defaultValue: answer.text,\n    name: answerName,\n    rules: { required: true },\n  });\n\n  useAutosizeGridTextArea(textAreaRef, answerInput.value, questionGroupId);\n\n  const hasErrors = !!errors.answer?.[answer.uuid];\n\n  // Prevent a click from triggering parent event\n  const handleClick = (event) => event.stopPropagation();\n\n  const handleChange = useCallback(\n    ({ target: { value } }) => {\n      answerInput.onChange(value);\n      onUpdateColumn(index, { text: value });\n    },\n    [answerInput, index, onUpdateColumn],\n  );\n\n  const handleRemove = useCallback(() => {\n    onRemove(index);\n  }, [index, onRemove]);\n\n  if (!isEditing) {\n    return (\n      <Text className={styles.gridTitleNonEdit} textAlign=\"center\">\n        {answerText}\n      </Text>\n    );\n  }\n\n  return (\n    <div className={styles.gridAnswer}>\n      <div className={styles.gridInput}>\n        <textarea\n          aria-invalid={!!errors}\n          aria-label=\"Answer text\"\n          className={classNames(\n            styles.gridInputTextArea,\n            'form-control question',\n            { 'is-invalid': hasErrors },\n          )}\n          name={answerInput.name}\n          placeholder=\"Column value\"\n          ref={setTextAreaRef}\n          rows={1}\n          value={answerInput.value}\n          onChange={handleChange}\n          onClick={handleClick}\n        />\n\n        {isRemovable && (\n          <RemoveButton\n            ariaLabel={`Remove ${answerText}`}\n            className={styles.removeButton}\n            trackingEvent={trackingEvents.SURVEY_REMOVE_GRID_COLUMN}\n            onRemove={handleRemove}\n          />\n        )}\n      </div>\n    </div>\n  );\n}\n\nGridAnswer.propTypes = {\n  answer: propTypes.object.isRequired,\n  index: propTypes.number.isRequired,\n  isEditing: propTypes.bool.isRequired,\n  isRemovable: propTypes.bool.isRequired,\n  questionGroupId: propTypes.string.isRequired,\n  onRemove: propTypes.func.isRequired,\n  onUpdateColumn: propTypes.func.isRequired,\n};\n","import React, { useCallback, useState } from 'react';\nimport { Text } from '@user-interviews/ui-design-system';\nimport propTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport { useController, useFormContext } from 'react-hook-form';\n\nimport { trackingEvents } from 'lib/analytics';\n\nimport { RemoveButton } from './remove_button';\nimport { useAutosizeGridTextArea } from './useAutosizeGridTextArea';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as styles from './grid.module.scss';\n\nexport function GridQuestion({\n  isEditing,\n  isRemovable,\n  question,\n  questionGroupId,\n  onChange,\n  onRemove,\n}) {\n  const [textAreaRef, setTextAreaRef] = useState(null);\n\n  const {\n    formState: { errors },\n  } = useFormContext();\n\n  const questionName = `question.${question.uuid}`;\n  const questionText = question.text || 'row';\n\n  const { field: questionInput } = useController({\n    defaultValue: question.text,\n    name: questionName,\n    rules: { required: true },\n  });\n\n  useAutosizeGridTextArea(textAreaRef, questionInput.value, questionGroupId);\n\n  const hasErrors = !!errors.question?.[question.uuid];\n\n  // Prevent a click from triggering parent event\n  const handleClick = (event) => event.stopPropagation();\n\n  const handleChange = useCallback(\n    ({ target: { value } }) => {\n      questionInput.onChange(value);\n      onChange(question.uuid, { text: value });\n    },\n    [onChange, question.uuid, questionInput],\n  );\n\n  const handleRemove = useCallback(() => {\n    onRemove(question.uuid);\n  }, [onRemove, question.uuid]);\n\n  if (!isEditing) {\n    return (\n      <Text className={styles.gridTitleNonEdit} textAlign=\"left\">\n        {questionText}\n      </Text>\n    );\n  }\n\n  return (\n    <div className={styles.gridInput}>\n      <textarea\n        aria-invalid={!!errors}\n        aria-label=\"Question text\"\n        className={classNames(\n          styles.gridInputTextArea,\n          'form-control question',\n          { 'is-invalid': hasErrors },\n        )}\n        name={questionInput.name}\n        placeholder=\"Row value\"\n        ref={setTextAreaRef}\n        rows={1}\n        value={questionInput.value}\n        onChange={handleChange}\n        onClick={handleClick}\n      />\n\n      {isRemovable && (\n        <RemoveButton\n          ariaLabel={`Remove ${questionText}`}\n          className={styles.removeButton}\n          trackingEvent={trackingEvents.SURVEY_REMOVE_GRID_ROW}\n          onRemove={handleRemove}\n        />\n      )}\n    </div>\n  );\n}\n\nGridQuestion.propTypes = {\n  isEditing: propTypes.bool.isRequired,\n  isRemovable: propTypes.bool.isRequired,\n  question: propTypes.object.isRequired,\n  questionGroupId: propTypes.string.isRequired,\n  onChange: propTypes.func.isRequired,\n  onRemove: propTypes.func.isRequired,\n};\n","import React, { useCallback, useContext } from 'react';\nimport propTypes from 'prop-types';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Alert, Flex, MessageTypes } from '@user-interviews/ui-design-system';\n\nimport { TrackedButton } from 'common/analytics';\nimport { useSidebarMobileBreakpoint } from 'hooks/use_sidebar_mobile_breakpoint';\n\nimport { trackingEvents } from 'lib/analytics';\nimport { faBullseyePointer, faPlus } from 'lib/font_awesome/regular';\n\nimport {\n  MAX_COLUMN_COUNT,\n  MAX_ROW_COUNT,\n  MIN_COLUMN_COUNT,\n  MIN_ROW_COUNT,\n} from 'lib/surveys/builder/question_group_utilities';\n\nimport SurveyContext from '../../context';\n\nimport { Accept } from './accept';\nimport { GridAnswer } from './grid_answer';\nimport { GridQuestion } from './grid_question';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './grid.module.scss';\n\nexport const QUAL_LOGIC_INSTRUCTIONS =\n  'Edit qualification logic by clicking on the cells within the grid';\nexport function Grid({ isEditing, questionGroupId }) {\n  const isMobile = useSidebarMobileBreakpoint();\n\n  const {\n    answerFunctions: { update: updateAnswer },\n    questionFunctions: { update: updateQuestion },\n    questionGroupFunctions: {\n      addColumn,\n      addRow,\n      removeColumn,\n      removeRow,\n      updateColumn,\n    },\n    survey,\n  } = useContext(SurveyContext);\n\n  const questionGroup = survey.questions[questionGroupId];\n  const { questionIds } = questionGroup;\n\n  const firstQuestion = survey.questions[questionIds[0]];\n  const firstAnswers = firstQuestion.answerIds;\n\n  const answerCount = firstQuestion.answerIds.length;\n  const questionCount = questionGroup.questionIds.length;\n\n  const handleAnswerChange = useCallback(\n    (answerUUID, changes) => {\n      updateAnswer(answerUUID, changes);\n    },\n    [updateAnswer],\n  );\n\n  const handleQuestionChange = useCallback(\n    (questionUUID, changes) => {\n      updateQuestion(questionUUID, changes);\n    },\n    [updateQuestion],\n  );\n\n  const handleAddColumn = useCallback(\n    (event) => {\n      event.stopPropagation();\n\n      addColumn(questionGroup.uuid);\n    },\n    [addColumn, questionGroup.uuid],\n  );\n\n  const handleAddRow = useCallback(\n    (event) => {\n      event.stopPropagation();\n\n      addRow(questionGroup.uuid, answerCount);\n    },\n    [addRow, answerCount, questionGroup.uuid],\n  );\n\n  const handleRemoveColumn = useCallback(\n    (answerIndex) => {\n      removeColumn(questionGroup.uuid, answerIndex);\n    },\n    [questionGroup.uuid, removeColumn],\n  );\n\n  const handleRemoveRow = useCallback(\n    (questionUUID) => {\n      removeRow(questionGroup.uuid, questionUUID);\n    },\n    [questionGroup.uuid, removeRow],\n  );\n\n  const handleUpdateColumn = useCallback(\n    (answerIndex, changes) => {\n      updateColumn(questionGroup.uuid, answerIndex, changes);\n    },\n    [questionGroup.uuid, updateColumn],\n  );\n\n  if (!questionGroup) return null;\n\n  if (isMobile) {\n    return (\n      <Alert\n        id={`question-type-unavailable-${questionGroup.uuid}`}\n        message=\"Please switch to desktop view to build this question type\"\n        removeBorderLeft\n        title=\"Question type not available\"\n        type={MessageTypes.INFO}\n      />\n    );\n  }\n\n  const boxStyle = styles[`box${answerCount + 1}`];\n\n  return (\n    <>\n      <div className={styles.gridRow}>\n        <div className={styles.answerRow}>\n          <div className={boxStyle} />\n          {firstAnswers &&\n            firstAnswers.map((answerUUID, index) => (\n              <div className={boxStyle} key={answerUUID}>\n                <GridAnswer\n                  answer={survey.answers[answerUUID]}\n                  index={index}\n                  isEditing={isEditing}\n                  isRemovable={firstAnswers.length > MIN_COLUMN_COUNT}\n                  questionGroupId={questionGroup.uuid}\n                  onChange={handleAnswerChange}\n                  onRemove={handleRemoveColumn}\n                  onUpdateColumn={handleUpdateColumn}\n                />\n              </div>\n            ))}\n        </div>\n      </div>\n\n      {questionGroup.questionIds.map((questionUUID) => (\n        <div className={styles.gridRow} key={questionUUID}>\n          <div className={styles.boxRow}>\n            <div className={boxStyle}>\n              <GridQuestion\n                isEditing={isEditing}\n                isRemovable={questionGroup.questionIds.length > MIN_ROW_COUNT}\n                question={survey.questions[questionUUID]}\n                questionGroupId={questionGroup.uuid}\n                onChange={handleQuestionChange}\n                onRemove={handleRemoveRow}\n              />\n            </div>\n            {survey.questions[questionUUID].answerIds\n              .filter((answerUUID) => !!survey.answers[answerUUID])\n              .map((answerUUID) => (\n                <div className={boxStyle} key={`accept-${answerUUID}`}>\n                  <Accept\n                    answer={survey.answers[answerUUID]}\n                    isEditing={isEditing}\n                    questionGroupPick={questionGroup.pick}\n                    onChange={handleAnswerChange}\n                  />\n                </div>\n              ))}\n          </div>\n        </div>\n      ))}\n\n      {isEditing && (\n        <>\n          <Flex className={styles.addButtons}>\n            <TrackedButton\n              className={styles.addButton}\n              disabled={questionCount >= MAX_ROW_COUNT}\n              event={trackingEvents.SURVEY_ADD_GRID_ROW}\n              leadingIcon={faPlus}\n              type=\"button\"\n              variant=\"outline-transparent\"\n              onClick={handleAddRow}\n            >\n              Add row\n            </TrackedButton>\n\n            <TrackedButton\n              className={styles.addButton}\n              disabled={answerCount >= MAX_COLUMN_COUNT}\n              event={trackingEvents.SURVEY_ADD_GRID_COLUMN}\n              leadingIcon={faPlus}\n              type=\"button\"\n              variant=\"outline-transparent\"\n              onClick={handleAddColumn}\n            >\n              Add column\n            </TrackedButton>\n          </Flex>\n          <Flex className={styles.qualificationInstructions}>\n            <FontAwesomeIcon\n              className=\"icon-left\"\n              fixedWidth\n              icon={faBullseyePointer}\n            />\n            {QUAL_LOGIC_INSTRUCTIONS}\n          </Flex>\n        </>\n      )}\n    </>\n  );\n}\n\nGrid.propTypes = {\n  isEditing: propTypes.bool.isRequired,\n  questionGroupId: propTypes.string.isRequired,\n};\n","import React, { useContext } from 'react';\nimport propTypes from 'prop-types';\nimport { FormGroup, Input } from '@user-interviews/ui-design-system';\nimport SurveyContext from '../context';\n\nexport function Hint({ question }) {\n  const {\n    questionFunctions: { update: updateQuestion },\n  } = useContext(SurveyContext);\n\n  const handleHintChange = ({ target: { value } }) => {\n    updateQuestion(question.uuid, { helpText: value });\n  };\n\n  return (\n    <FormGroup\n      inputKey={`question-${question.uuid}-hint`}\n      label=\"Hint text\"\n      labelHelperText=\"Optional\"\n      labelHtmlFor={`hint-text-${question.uuid}`}\n    >\n      <Input\n        id={`hint-text-${question.uuid}`}\n        name={`hint-text-${question.uuid}`}\n        placeholder=\"Give context on this question to participants\"\n        value={question.helpText || ''}\n        onChange={handleHintChange}\n      />\n    </FormGroup>\n  );\n}\n\nHint.propTypes = {\n  question: propTypes.shape({\n    helpText: propTypes.string,\n    uuid: propTypes.string.isRequired,\n  }).isRequired,\n};\n","import React from 'react';\nimport * as propTypes from 'lib/prop_types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n  faCalendarAlt,\n  faDotCircle,\n  faFont,\n  faHashtag,\n} from 'lib/font_awesome/solid';\n\nconst iconMap = {\n  string: faFont,\n  pick_one: faFont,\n  pick_any: faFont,\n  boolean: faDotCircle,\n  date: faCalendarAlt,\n  decimal: faHashtag,\n};\n\nexport function SurveyFormQuestionIconLabel({ attribute }) {\n  return (\n    <span className=\"FormQuestionIconLabel\">\n      <FontAwesomeIcon\n        aria-label={attribute.type}\n        className=\"icon-left\"\n        icon={iconMap[attribute.type]}\n      />\n      {attribute.name}\n    </span>\n  );\n}\n\nSurveyFormQuestionIconLabel.propTypes = {\n  attribute: propTypes.shape({\n    name: propTypes.string,\n    type: propTypes.string,\n  }).isRequired,\n};\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n  FormGroup,\n  Modal,\n  ModalBody,\n  ModalFooter,\n  ModalHeader,\n  MODAL_SIZES,\n  SingleSelect,\n} from '@user-interviews/ui-design-system';\n\nimport {\n  QUESTION_TYPE_BOOLEAN,\n  QUESTION_TYPE_FLOAT,\n  QUESTION_TYPE_DATE,\n} from '../constants';\n\nimport { SurveyFormQuestionIconLabel } from '../survey_form_question_icon_label';\n\nimport './survey_new_attribute_modal.module.css';\n\nexport function SurveyNewAttributeModal({\n  attribute,\n  questionType,\n  visible,\n  onChange,\n  onClose,\n  onSave,\n}) {\n  const attributeTypes = {\n    Text: 'string',\n    [QUESTION_TYPE_BOOLEAN]: 'boolean',\n    [QUESTION_TYPE_DATE]: 'date',\n    [QUESTION_TYPE_FLOAT]: 'decimal',\n  };\n\n  const defaultAttributeType = attributeTypes[questionType] || 'string';\n\n  const dataTypeOptions = Object.entries(attributeTypes).map(\n    ([key, value]) => ({\n      label: (\n        <SurveyFormQuestionIconLabel attribute={{ name: key, type: value }} />\n      ),\n      value,\n    }),\n  );\n\n  const handleInputChange = ({ target: { name, value } }) => {\n    const updatedAttribute = { ...attribute, [name]: value };\n    onChange(updatedAttribute);\n  };\n\n  useEffect(() => {\n    if (!attribute.type) {\n      const updatedAttribute = { ...attribute, type: defaultAttributeType };\n      onChange(updatedAttribute);\n    }\n  }, [attribute, defaultAttributeType, onChange]);\n\n  return (\n    <Modal\n      className=\"NewAttributeModal\"\n      isOpen={visible}\n      shouldCloseOnOverlayClick={false}\n      size={MODAL_SIZES.MEDIUM}\n      onRequestClose={onClose}\n    >\n      <ModalHeader\n        title=\"Create a new attribute\"\n        titleId=\"NewAttributeModal\"\n        onRequestClose={onClose}\n      />\n\n      <ModalBody>\n        <div className=\"ModalBody__description\">\n          {`Creating a new attribute allows you to collect additional data for\\\n your Hub population. You'll be able to save a question to this attribute for use\\\n in your opt-in form, as well as map data to it from future CSV uploads.`}\n        </div>\n\n        <FormGroup label=\"Attribute name\" labelHtmlFor=\"new-attribute-name\">\n          <input\n            className=\"form-control\"\n            id=\"new-attribute-name\"\n            name=\"name\"\n            type=\"text\"\n            value={attribute.name}\n            onChange={handleInputChange}\n          />\n        </FormGroup>\n\n        <FormGroup\n          label=\"Attribute type\"\n          labelHtmlFor=\"new-attribute-type-select\"\n        >\n          <SingleSelect\n            defaultValue={dataTypeOptions.find(\n              (option) => option.value === defaultAttributeType,\n            )}\n            disabled\n            id=\"new-attribute-type\"\n            inputId=\"new-attribute-type-select\"\n            name=\"type\"\n          />\n          <div className=\"form-group__instructional-text\">\n            Attribute type is determined by the question type that you have\n            selected.\n          </div>\n        </FormGroup>\n      </ModalBody>\n\n      <ModalFooter onRequestClose={onClose}>\n        <button className=\"btn btn-primary\" type=\"button\" onClick={onSave}>\n          Save attribute\n        </button>\n      </ModalFooter>\n    </Modal>\n  );\n}\n\nSurveyNewAttributeModal.propTypes = {\n  attribute: PropTypes.object.isRequired,\n  questionType: PropTypes.string.isRequired,\n  visible: PropTypes.bool.isRequired,\n  onChange: PropTypes.func.isRequired,\n  onClose: PropTypes.func.isRequired,\n  onSave: PropTypes.func.isRequired,\n};\n","import React, { useContext, useMemo, useState } from 'react';\nimport { useTracking } from 'react-tracking';\nimport { useParams } from 'react-router';\n\nimport {\n  CreatableSelect,\n  FormGroup,\n  MessageTypes,\n} from '@user-interviews/ui-design-system';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faPlusCircle } from 'lib/font_awesome/solid';\nimport * as propTypes from 'lib/prop_types';\nimport { trackingEvents } from 'lib/analytics';\n\nimport { useCreatePopulationAttributeMutation } from 'api/population_attributes';\nimport { useFormContext } from 'react-hook-form';\nimport { ErrorRenderer } from 'lib/errors';\nimport SurveyContext from '../context.js';\n\nimport { SurveyFormQuestionIconLabel } from '../survey_form_question_icon_label';\nimport { SurveyNewAttributeModal } from './survey_new_attribute_modal';\n\nexport function MapAttribute({ attributes, question, questionType }) {\n  const {\n    survey,\n    questionFunctions: { update: updateQuestion },\n    setToastMessage,\n  } = useContext(SurveyContext);\n  const [newAttributeModalVisible, setNewAttributeModalVisible] =\n    useState(false);\n  const [newAttribute, setNewAttribute] = useState({});\n  const {\n    formState: { errors },\n  } = useFormContext();\n\n  const { trackEvent } = useTracking();\n\n  const { participantPopulationId } = useParams();\n\n  const [createParticipantPopulationAttribute] =\n    useCreatePopulationAttributeMutation();\n  const formatCreateLabel = (inputValue) => (\n    <div>\n      <FontAwesomeIcon className=\"icon-left\" icon={faPlusCircle} />\n      Create {inputValue || 'new'} attribute\n    </div>\n  );\n  const isValidNewOption = () => true;\n\n  const handleCreateAttribute = async () => {\n    const { data: createdAttribute, error } =\n      await createParticipantPopulationAttribute({\n        participantPopulationId,\n        name: newAttribute.name,\n        type: newAttribute.type,\n      });\n\n    if (error) {\n      setToastMessage({\n        type: MessageTypes.ERROR,\n        message: ErrorRenderer.compileRtkQueryErrorMessage(error),\n      });\n    } else {\n      trackEvent({\n        event: trackingEvents.SURVEY_PARTICIPANT_POPULATION_ATTRIBUTE_CREATED,\n        participant_population_attribute_id: createdAttribute.data.id,\n      });\n\n      updateQuestion(question.uuid, {\n        participantPopulationAttributeId: createdAttribute.data.id,\n      });\n\n      setNewAttributeModalVisible(false);\n    }\n  };\n\n  const handleAttributeModalClose = () => {\n    setNewAttributeModalVisible(false);\n  };\n\n  const handleNewAttributeChange = (newAttr) => {\n    setNewAttribute(newAttr);\n  };\n\n  const handleNewAttributeModalOpen = (inputValue) => {\n    setNewAttributeModalVisible(true);\n    setNewAttribute({ name: inputValue });\n  };\n\n  const handleAttributeChange = (selectedOption) => {\n    updateQuestion(question.uuid, {\n      participantPopulationAttributeId: selectedOption.value,\n    });\n\n    trackEvent({\n      event: trackingEvents.SURVEY_PARTICIPANT_POPULATION_ATTRIBUTE_SELECTED,\n      participant_population_attribute_id: selectedOption.value,\n    });\n  };\n\n  const mappedAttributeIds = useMemo(\n    () =>\n      Object.values(survey.questions).reduce(\n        (acc, current) =>\n          current &&\n          current.uuid !== question.uuid &&\n          current.participantPopulationAttributeId\n            ? acc.concat(current.participantPopulationAttributeId.toString())\n            : acc,\n        [],\n      ),\n    [survey.questions, question.uuid],\n  );\n\n  const attributeOptions = useMemo(\n    () =>\n      Object.values(attributes).map((attribute) => ({\n        label: attribute.name,\n        value: attribute.id,\n        isDisabled: mappedAttributeIds.includes(attribute.id),\n        attribute,\n      })),\n    [mappedAttributeIds, attributes],\n  );\n\n  const selectedAttribute = useMemo(\n    () =>\n      question.participantPopulationAttributeId\n        ? attributeOptions.find(\n            (attributeOption) =>\n              attributeOption.value ===\n              question.participantPopulationAttributeId.toString(),\n          )\n        : null, // Fun fact -- this has to be null, not undefined, otherwise ReactSelect won't pick up the change\n    [attributeOptions, question.participantPopulationAttributeId],\n  );\n\n  return (\n    <>\n      <SurveyNewAttributeModal\n        attribute={newAttribute}\n        questionType={questionType}\n        visible={newAttributeModalVisible}\n        onChange={handleNewAttributeChange}\n        onClose={handleAttributeModalClose}\n        onSave={handleCreateAttribute}\n      />\n      <FormGroup\n        errors={errors}\n        inputKey={`question-${question.uuid}-attribute`}\n        label=\"Map to attribute\"\n        labelHtmlFor=\"new-question-attribute\"\n        labelTooltip=\"Map your custom questions to Hub attributes to collect data you can filter on later.\"\n        required\n      >\n        <CreatableSelect\n          allowCreateWhileLoading\n          aria-label=\"Select or create a new attribute\"\n          className=\"Select\"\n          createOptionPosition=\"first\"\n          formatOptionLabel={({ value, attribute }) =>\n            attribute ? (\n              <SurveyFormQuestionIconLabel attribute={attribute} />\n            ) : (\n              formatCreateLabel(value)\n            )\n          }\n          inputId=\"new-question-attribute\"\n          isSearchable\n          isValidNewOption={isValidNewOption}\n          name=\"attribute\"\n          options={attributeOptions}\n          placeholder=\"Select or create a new attribute\"\n          styles={{\n            indicatorSeparator: (provided) => ({\n              ...provided,\n              width: 0,\n            }),\n          }}\n          value={selectedAttribute}\n          onChange={handleAttributeChange}\n          onCreateOption={handleNewAttributeModalOpen}\n        />\n      </FormGroup>\n    </>\n  );\n}\n\nMapAttribute.propTypes = {\n  attributes: propTypes.arrayOf(\n    propTypes.shape({\n      id: propTypes.string,\n    }),\n  ).isRequired,\n  question: propTypes.shape({\n    participantPopulationAttributeId: propTypes.oneOfType([\n      propTypes.number,\n      propTypes.string,\n    ]),\n    uuid: propTypes.string.isRequired,\n  }).isRequired,\n  questionType: propTypes.string.isRequired,\n};\n","/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n\nimport React, { useContext } from 'react';\nimport propTypes from 'prop-types';\n\nimport { Flex, Tooltip, ToggleInput } from '@user-interviews/ui-design-system';\nimport { useTracking } from 'react-tracking';\n\nimport { AuthUserContext } from 'common/authorization';\n\nimport { trackingEvents } from 'lib/analytics';\n\nexport function KeyQuestion({ isKey, pageTitle, position, onChange }) {\n  const { account } = useContext(AuthUserContext);\n  const { trackEvent } = useTracking();\n\n  // Prevent a click from triggering parent event\n  const handleClick = (event) => event.stopPropagation();\n  const handleChange = ({ currentTarget: { checked } }) => {\n    onChange({ isKey: checked });\n\n    trackEvent({\n      event: trackingEvents.SURVEY_KEY_QUESTION_SLIDER_CLICKED,\n      is_enabled: checked,\n      account_id: account?.id,\n    });\n  };\n\n  const keyQuestionToggleInputId = `key-screener-question-toggle-${pageTitle}-${position}`;\n\n  const tooltipText = (\n    <div>\n      Key screener questions will be highlighted in the applicants table and\n      participant profiles.\n    </div>\n  );\n\n  return (\n    /* eslint-disable-next-line jsx-a11y/no-static-element-interactions */\n    <Flex\n      alignItems=\"center\"\n      container\n      flexDirection=\"row\"\n      onClick={handleClick}\n    >\n      <ToggleInput\n        id={keyQuestionToggleInputId}\n        isChecked={isKey}\n        labelLeft={false}\n        labelText=\"Key screener question\"\n        onToggle={handleChange}\n      />\n      <Tooltip text={tooltipText} />\n    </Flex>\n  );\n}\n\nKeyQuestion.propTypes = {\n  isKey: propTypes.bool.isRequired,\n  pageTitle: propTypes.string.isRequired,\n  position: propTypes.number.isRequired,\n  onChange: propTypes.func.isRequired,\n};\n","import React, { useContext } from 'react';\nimport propTypes from 'prop-types';\n\nimport { useTracking } from 'react-tracking';\n\nimport { AuthUserContext } from 'common/authorization';\n\nimport { trackingEvents } from 'lib/analytics';\n\nimport SurveyContext from '../../context';\n\nexport function OtherOptionCheckbox({\n  checked,\n  otherAnswerUuid,\n  questionUuid,\n}) {\n  const { account } = useContext(AuthUserContext);\n  const {\n    answerFunctions: { addOther, remove },\n  } = useContext(SurveyContext);\n  const { trackEvent } = useTracking();\n\n  const handleClick = (event) => event.stopPropagation();\n\n  const handleChange = ({ currentTarget }) => {\n    if (currentTarget.checked) {\n      addOther(questionUuid);\n    } else {\n      remove(questionUuid, otherAnswerUuid);\n    }\n\n    trackEvent({\n      event: trackingEvents.SURVEY_OTHER_OPTION_CHECKBOX_CLICKED,\n      is_enabled: currentTarget.checked,\n      account_id: account?.id,\n    });\n  };\n\n  return (\n    <label onClick={handleClick}>\n      <input checked={checked} type=\"checkbox\" onChange={handleChange} />\n      Add \"Other\" option\n    </label>\n  );\n}\n\nOtherOptionCheckbox.propTypes = {\n  checked: propTypes.bool.isRequired,\n  otherAnswerUuid: propTypes.string,\n  questionUuid: propTypes.string.isRequired,\n};\n","/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n\nimport React, { useContext } from 'react';\nimport propTypes from 'prop-types';\n\nimport { useTracking } from 'react-tracking';\n\nimport { AuthUserContext } from 'common/authorization';\n\nimport { trackingEvents } from 'lib/analytics';\n\nexport function Required({ isMandatory, onChange }) {\n  const { account } = useContext(AuthUserContext);\n  const { trackEvent } = useTracking();\n\n  // Prevent a click from triggering parent event\n  const handleClick = (event) => event.stopPropagation();\n  const handleChange = ({ currentTarget: { checked } }) => {\n    onChange({ isMandatory: checked });\n\n    trackEvent({\n      event: trackingEvents.SURVEY_REQUIRED_CHECKBOX_CLICKED,\n      is_enabled: checked,\n      account_id: account?.id,\n    });\n  };\n\n  return (\n    <label onClick={handleClick}>\n      <input checked={isMandatory} type=\"checkbox\" onChange={handleChange} />\n      Required\n    </label>\n  );\n}\n\nRequired.propTypes = {\n  isMandatory: propTypes.bool.isRequired,\n  onChange: propTypes.func.isRequired,\n};\n\n/* eslint-enable */\n","import React, { useContext } from 'react';\nimport propTypes from 'prop-types';\n\nimport { Flex } from '@user-interviews/ui-design-system';\n\nimport { isQuestionGroup, isPickOneOrAny } from 'lib/surveys/builder/utilities';\n\nimport { KeyQuestion } from './key_question';\nimport { OtherOptionCheckbox } from './other_option_checkbox';\nimport { Required } from './required';\nimport * as Constants from '../../constants';\n\nimport SurveyContext from '../../context';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './question_controls.module.scss';\n\nexport function QuestionControls({\n  otherAnswer,\n  question,\n  pageTitle,\n  position,\n  onChange,\n}) {\n  const { formType } = useContext(SurveyContext);\n  const isScreenerForm = formType === Constants.SCREENER_FORM_TYPE;\n\n  return (\n    <Flex\n      alignItems=\"center\"\n      className={styles.QuestionControls}\n      container\n      flexDirection=\"row\"\n    >\n      <Required isMandatory={question.isMandatory} onChange={onChange} />\n      {isPickOneOrAny(question) && !isQuestionGroup(question) && (\n        <OtherOptionCheckbox\n          checked={!!otherAnswer}\n          otherAnswerUuid={otherAnswer?.uuid}\n          questionUuid={question.uuid}\n        />\n      )}\n      {isScreenerForm && (\n        <KeyQuestion\n          isKey={question.isKey}\n          pageTitle={pageTitle}\n          position={position}\n          onChange={onChange}\n        />\n      )}\n    </Flex>\n  );\n}\n\nQuestionControls.propTypes = {\n  otherAnswer: propTypes.shape({\n    errors: propTypes.object.isRequired,\n    responseClass: propTypes.string,\n    text: propTypes.string,\n    uuid: propTypes.string.isRequired,\n  }),\n  pageTitle: propTypes.string.isRequired,\n  position: propTypes.number.isRequired,\n  question: propTypes.shape({\n    answerIds: propTypes.array,\n    errors: propTypes.shape({\n      text: propTypes.string,\n    }).isRequired,\n    isEditing: propTypes.bool,\n    isKey: propTypes.bool.isRequired,\n    isMandatory: propTypes.bool.isRequired,\n    isNew: propTypes.bool,\n    pick: propTypes.string.isRequired,\n    text: propTypes.string.isRequired,\n    uuid: propTypes.string.isRequired,\n  }).isRequired,\n  onChange: propTypes.func.isRequired,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"ECzAW_fZZHhC64af5GW0\";\nexport { _1 as \"QuestionControls\" }\n","import React, { useCallback } from 'react';\nimport propTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { useController, useFormContext } from 'react-hook-form';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './text.scss';\n\nexport function Text({\n  isEditing,\n  isMandatory,\n  serverErrors,\n  text,\n  onChange,\n  uuid,\n}) {\n  const {\n    formState: { errors },\n  } = useFormContext();\n  const questionName = `question.${uuid}`;\n  const { field: questionInput } = useController({\n    defaultValue: text,\n    name: questionName,\n    rules: { required: true },\n  });\n\n  const hasErrors = !!errors.question?.[uuid] || serverErrors;\n  const error = errors.question?.[uuid];\n  const errorMessage =\n    error?.type === 'required' ? \"Question can't be blank\" : error?.message;\n  // Prevent a click from triggering parent event\n  const handleClick = (event) => event.stopPropagation();\n\n  const handleChange = useCallback(\n    ({ target: { value } }) => {\n      questionInput.onChange(value);\n      onChange({ text: value });\n    },\n    [onChange, questionInput],\n  );\n\n  return (\n    <div className=\"SurveyBuilderRow__text__form\">\n      <textarea\n        {...questionInput}\n        aria-invalid={!!errors}\n        aria-label=\"question text\"\n        className={classNames('form-control question', {\n          'is-invalid': hasErrors,\n        })}\n        name={`question.${uuid}`}\n        style={isEditing ? null : { display: 'none' }}\n        onChange={handleChange}\n        onClick={handleClick}\n      />\n      <div\n        className=\"invalid-feedback\"\n        style={isEditing ? null : { display: 'none' }}\n      >\n        {serverErrors || errorMessage}\n      </div>\n      <span\n        className={classNames({ 'required-field': isMandatory })}\n        style={!isEditing ? { whiteSpace: 'pre-wrap' } : { display: 'none' }}\n      >\n        {text}\n      </span>\n    </div>\n  );\n}\n\nText.propTypes = {\n  isEditing: propTypes.bool.isRequired,\n  isMandatory: propTypes.bool.isRequired,\n  serverErrors: propTypes.string,\n  text: propTypes.string,\n  uuid: propTypes.string.isRequired,\n  onChange: propTypes.func.isRequired,\n};\n\nText.defaultProps = {\n  text: '',\n};\n","import React, { useCallback, useContext, useMemo } from 'react';\nimport propTypes from 'prop-types';\nimport { SingleSelect } from '@user-interviews/ui-design-system';\n\nimport { SurveyBuilderContext } from 'components/survey_builder';\nimport * as Constants from '../constants';\n\nconst questionTypes = Constants.QUESTION_TYPES.map((questionType) => ({\n  label: questionType,\n  value: questionType,\n}));\n\nexport function Type({ isVisible, type, onChange }) {\n  const { formType } = useContext(SurveyBuilderContext);\n\n  const filteredQuestionTypes = useMemo(() => {\n    if (formType === Constants.SCREENER_FORM_TYPE) {\n      return questionTypes.filter(\n        (questionType) =>\n          questionType.label !== Constants.QUESTION_TYPE_BOOLEAN &&\n          questionType.label !== Constants.QUESTION_TYPE_DATE &&\n          questionType.label !== Constants.QUESTION_TYPE_FLOAT,\n      );\n    }\n    if (formType === Constants.OPT_IN_FORM_TYPE) {\n      return questionTypes.filter(\n        (questionType) =>\n          questionType.label !== Constants.QUESTION_TYPE_PICK_ANY_GRID &&\n          questionType.label !== Constants.QUESTION_TYPE_PICK_ONE_GRID,\n      );\n    }\n    return questionTypes;\n  }, [formType]);\n\n  // Prevent a click from triggering parent event\n  const handleClick = (event) => event.stopPropagation();\n\n  const handleChange = useCallback(\n    (selected) => {\n      onChange({ questionType: selected.value });\n    },\n    [onChange],\n  );\n\n  if (!isVisible) return null;\n\n  return (\n    /* eslint-disable jsx-a11y/no-static-element-interactions */\n    /* eslint-disable jsx-a11y/click-events-have-key-events */\n    <div className=\"SurveyBuilderQuestion__type\" onClick={handleClick}>\n      <SingleSelect\n        aria-label=\"question type select\"\n        inputId=\"question-type-select\"\n        options={filteredQuestionTypes}\n        value={{ label: type, value: type }}\n        onChange={handleChange}\n      />\n    </div>\n    /* eslint-enable */\n  );\n}\n\nType.propTypes = {\n  isVisible: propTypes.bool.isRequired,\n  type: propTypes.string.isRequired,\n  onChange: propTypes.func.isRequired,\n};\n","import React, {\n  useCallback,\n  useContext,\n  useEffect,\n  useMemo,\n  useState,\n} from 'react';\nimport { useParams } from 'react-router';\nimport propTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Draggable } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { LoadingSkeleton } from '@user-interviews/ui-design-system';\n\nimport * as Keycodes from 'lib/keycodes';\nimport { useFormContext } from 'react-hook-form';\n\nimport { QuestionSkipLogicSummary } from 'components/question_skip_logic_summary';\nimport {\n  answerPropType,\n  questionPropType,\n  skipLogicPropType,\n  surveySectionPropType,\n} from 'components/question_skip_logic_summary/prop_types';\n\nimport { faGripVertical } from 'lib/font_awesome/solid';\nimport { isQuestionGroup } from 'lib/surveys/builder/utilities';\nimport { useGetPopulationAttributesQuery } from 'api/population_attributes';\nimport * as Constants from '../constants';\n\nimport SurveyContext from '../context';\n\nimport { Actions } from './actions';\nimport { Answers } from './answers';\nimport { Grid } from './grid';\nimport { Hint } from './hint';\nimport { MapAttribute } from './map_attribute';\nimport { QuestionControls } from './question_controls/question_controls';\nimport { Text } from './text';\nimport { Type } from './type';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './question.scss';\n\n// Disabled when adding max-props rule.\n// Future work should stay under 6 props\n// eslint-disable-next-line local-rules/max-props\nexport function Question({\n  isRemovableQuestion,\n  pageTitle,\n  position,\n  question,\n  questionSkipLogics,\n  screenerSections,\n  sectionAnswers,\n  sectionUUID,\n  sectionQuestions,\n}) {\n  const {\n    formState: { errors },\n    getValues,\n  } = useFormContext();\n\n  const {\n    isReadonly,\n    formType,\n    questionFunctions: {\n      add: addQuestion,\n      determineType: determineQuestionType,\n      duplicate: duplicateQuestion,\n      remove: removeQuestion,\n      update: updateQuestion,\n      updateType: updateQuestionType,\n    },\n    survey,\n  } = useContext(SurveyContext);\n\n  const isOptInForm = formType === Constants.OPT_IN_FORM_TYPE;\n\n  const { participantPopulationId } = useParams();\n\n  const { data: participantPopulationAttributes, isLoading } =\n    useGetPopulationAttributesQuery(participantPopulationId, {\n      skip: !isOptInForm,\n    });\n\n  const [isEditing, setEditing] = useState(!!question.isEditing);\n\n  const hasFrontendErrors =\n    errors?.question?.[question.uuid] ||\n    Object.keys(errors?.answer || {}).some((key) =>\n      question.answerIds?.includes(key),\n    );\n\n  const isIncompletePage =\n    getValues()?.formData?.pageStatuses['screener-survey'] === 'incomplete';\n\n  const answers = useMemo(\n    () =>\n      question.answerIds\n        ?.filter((id) => !!survey.answers[id])\n        ?.map((answerId) => survey.answers[answerId]),\n    [question, survey.answers],\n  );\n\n  const hasErrors = useMemo(() => {\n    if (Object.keys(question.errors).length || hasFrontendErrors) return true;\n\n    return !!answers?.find((answer) => !!Object.keys(answer.errors).length);\n  }, [answers, hasFrontendErrors, question.errors]);\n\n  const controlsVisible = !isReadonly && isEditing;\n\n  const questionType = determineQuestionType(question);\n\n  const filterAttributesByQuestionType = (attributes, type) => {\n    if (!attributes) return [];\n\n    if (type === Constants.QUESTION_TYPE_DATE) {\n      return attributes.filter((attribute) => attribute.type === 'date');\n    }\n\n    if (type === Constants.QUESTION_TYPE_FLOAT) {\n      return attributes.filter((attribute) => attribute.type === 'decimal');\n    }\n\n    if (type === Constants.QUESTION_TYPE_BOOLEAN) {\n      return attributes.filter((attribute) => attribute.type === 'boolean');\n    }\n    return attributes.filter((attribute) => attribute.type === 'string');\n  };\n\n  const filteredAttributes = filterAttributesByQuestionType(\n    participantPopulationAttributes,\n    questionType,\n  );\n\n  const otherAnswer = useMemo(\n    () =>\n      answers?.find(\n        (answer) =>\n          answer.responseClass === Constants.RESPONSE_CLASS_OTHER_AND_STRING,\n      ),\n    [answers],\n  );\n\n  const handleQuestionSelected = useCallback(() => {\n    if (isReadonly) return;\n    setEditing(!isEditing);\n  }, [isReadonly, isEditing]);\n\n  const handleChange = useCallback(\n    (changes) => {\n      updateQuestion(question.uuid, changes);\n    },\n    [question.uuid, updateQuestion],\n  );\n\n  const handleChangeType = useCallback(\n    (changes) => {\n      updateQuestionType(question.uuid, changes.questionType);\n    },\n    [question.uuid, updateQuestionType],\n  );\n\n  const handleEnterPress = useCallback(\n    (event) => {\n      if (event.keyCode !== Keycodes.ENTER) return;\n\n      handleQuestionSelected();\n    },\n    [handleQuestionSelected],\n  );\n\n  useEffect(() => {\n    const questionLength = Object.keys(survey.questions).length;\n    if (questionLength === 1 || isIncompletePage) {\n      setEditing(true);\n    }\n  }, [isIncompletePage, survey.questions]);\n\n  const hasSkipLogic = questionSkipLogics.length > 0;\n\n  const questionNumber = position ? position + 1 : 1;\n\n  if (isLoading) return <LoadingSkeleton count={3} />;\n\n  return (\n    <Draggable\n      draggableId={question.uuid}\n      index={position}\n      isDragDisabled={isReadonly}\n      key={question.uuid}\n    >\n      {(provided, snapshot) => (\n        <div\n          className={classNames('SurveyBuilderQuestion', {\n            editing: isEditing,\n            'has-errors': hasErrors,\n            dragging: snapshot.isDragging,\n          })}\n          ref={provided.innerRef}\n          // eslint-disable-next-line react/jsx-props-no-spreading\n          {...provided.draggableProps}\n          id={`question-${question.uuid}`}\n        >\n          <div\n            className=\"SurveyBuilderQuestion__Content\"\n            role=\"button\"\n            tabIndex=\"0\"\n            onClick={handleQuestionSelected}\n            onKeyDown={handleEnterPress}\n          >\n            {isReadonly || (\n              <span\n                // eslint-disable-next-line react/jsx-props-no-spreading\n                {...provided.dragHandleProps}\n              >\n                <FontAwesomeIcon\n                  aria-label={`Drag question ${questionNumber}`}\n                  className=\"SurveyBuilderQuestion__drag-handle\"\n                  icon={faGripVertical}\n                  size=\"sm\"\n                />\n              </span>\n            )}\n\n            <div className=\"SurveyBuilderRow\">\n              <div className=\"SurveyBuilderRow__text\" id=\"screener_question\">\n                <Text\n                  isEditing={controlsVisible}\n                  isMandatory={question.isMandatory}\n                  serverErrors={question.errors.text}\n                  text={question.text}\n                  uuid={question.uuid}\n                  onChange={handleChange}\n                />\n              </div>\n\n              <div className=\"SurveyBuilderRow__controls\">\n                <Type\n                  isVisible={controlsVisible}\n                  type={questionType}\n                  onChange={handleChangeType}\n                />\n              </div>\n\n              <div className=\"SurveyBuilderRow__actions\">\n                <Actions\n                  isRemovableQuestion={isRemovableQuestion}\n                  isVisible={!isReadonly}\n                  questionUUID={question.uuid}\n                  sectionUUID={sectionUUID}\n                  onAdd={addQuestion}\n                  onDuplicate={duplicateQuestion}\n                  onRemove={removeQuestion}\n                />\n              </div>\n            </div>\n\n            <div className=\"SurveyBuilderQuestion__answers\">\n              {isQuestionGroup(question) ? (\n                <Grid isEditing={isEditing} questionGroupId={question.uuid} />\n              ) : (\n                <Answers isEditing={isEditing} question={question} />\n              )}\n            </div>\n\n            {isOptInForm && (\n              // this div prevents the question from collapsing when you click on the map attribute component\n              // role and keydown are needed to satisfy accessibility linter\n              <div\n                role=\"button\"\n                tabIndex={0}\n                onClick={(e) => e.stopPropagation()}\n                onKeyDown={(e) => {\n                  if (e.key === 'Enter') {\n                    e.stopPropagation();\n                  }\n                }}\n              >\n                <MapAttribute\n                  attributes={filteredAttributes}\n                  question={question}\n                  questionType={questionType}\n                />\n                <Hint question={question} />\n              </div>\n            )}\n\n            {controlsVisible && (\n              <div className=\"row\">\n                <QuestionControls\n                  otherAnswer={otherAnswer}\n                  pageTitle={pageTitle}\n                  position={position}\n                  question={question}\n                  onChange={handleChange}\n                />\n              </div>\n            )}\n\n            {hasSkipLogic && (\n              <div\n                className={classNames('skip-logic-summary-container', {\n                  'skip-logic-summary-container--editing': isEditing,\n                })}\n              >\n                <QuestionSkipLogicSummary\n                  questionId={question.uuid}\n                  screenerSections={screenerSections}\n                  sectionAnswers={sectionAnswers}\n                  sectionQuestions={sectionQuestions}\n                  skipLogics={questionSkipLogics}\n                  survey={survey}\n                />\n              </div>\n            )}\n          </div>\n        </div>\n      )}\n    </Draggable>\n  );\n}\n\nQuestion.propTypes = {\n  isRemovableQuestion: propTypes.bool.isRequired,\n  pageTitle: propTypes.string.isRequired,\n  position: propTypes.number.isRequired,\n  question: propTypes.shape({\n    answerIds: propTypes.array,\n    errors: propTypes.shape({\n      text: propTypes.string,\n    }).isRequired,\n    isEditing: propTypes.bool,\n    isKey: propTypes.bool.isRequired,\n    isMandatory: propTypes.bool.isRequired,\n    isNew: propTypes.bool,\n    pick: propTypes.string.isRequired,\n    text: propTypes.string.isRequired,\n    uuid: propTypes.string.isRequired,\n  }).isRequired,\n  questionSkipLogics: propTypes.arrayOf(skipLogicPropType).isRequired,\n  screenerSections: propTypes.arrayOf(surveySectionPropType).isRequired,\n  sectionAnswers: propTypes.arrayOf(answerPropType).isRequired,\n  sectionQuestions: propTypes.arrayOf(questionPropType).isRequired,\n  sectionUUID: propTypes.string.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\nimport { Button } from '@user-interviews/ui-design-system';\nimport { faPlusCircle } from 'lib/font_awesome/regular';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './add_new_page_button.module.scss';\n\nexport function AddNewPageButton({ onAddSection }) {\n  return (\n    <div className={styles.AddNewPageButton}>\n      <Button leadingIcon={faPlusCircle} variant=\"link\" onClick={onAddSection}>\n        Add new page\n      </Button>\n    </div>\n  );\n}\n\nAddNewPageButton.propTypes = {\n  onAddSection: propTypes.func.isRequired,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"x_S4yMt6Mt6bQSEEm5GF\";\nexport { _1 as \"AddNewPageButton\" }\n","import React, { useContext, useCallback } from 'react';\nimport propTypes from 'prop-types';\n\nimport { faCodeBranch } from 'lib/font_awesome/solid';\n\nimport { TrackedButton } from 'common/analytics';\nimport { AuthUserContext } from 'common/authorization';\n\nimport { trackingEvents } from 'lib/analytics';\n\nimport SurveyContext from '../../context';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './section_controls.module.scss';\n\nexport function SectionControls({ section, hasSkipLogic }) {\n  const { account } = useContext(AuthUserContext);\n\n  const {\n    setSurveyDuplicateBeforeEdit,\n    questionFunctions,\n    skipLogicFunctions,\n    isReadonly,\n  } = useContext(SurveyContext);\n  const handleAddQuestion = useCallback(\n    () => questionFunctions.add(section.uuid),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [questionFunctions.add, section.uuid],\n  );\n  const handleEditSkipLogic = useCallback(\n    () => {\n      setSurveyDuplicateBeforeEdit();\n\n      if (!hasSkipLogic) {\n        skipLogicFunctions.add(section.uuid);\n      }\n      skipLogicFunctions.edit(section.uuid);\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n      hasSkipLogic,\n      skipLogicFunctions.edit,\n      skipLogicFunctions.add,\n      section.uuid,\n      setSurveyDuplicateBeforeEdit,\n    ],\n  );\n\n  const skipLogicCTA = `${hasSkipLogic ? 'Edit' : 'Add'} skip logic`;\n\n  return (\n    <div className={styles.SectionControls}>\n      {!isReadonly && (\n        <TrackedButton\n          event={trackingEvents.SURVEY_ADD_NEW_QUESTION}\n          eventData={{\n            account_id: account?.id,\n          }}\n          variant=\"primary\"\n          onClick={handleAddQuestion}\n        >\n          Add new question\n        </TrackedButton>\n      )}\n\n      {(!isReadonly || hasSkipLogic) && (\n        <TrackedButton\n          event={\n            hasSkipLogic\n              ? trackingEvents.SURVEY_EDIT_SKIP_LOGIC\n              : trackingEvents.SURVEY_ADD_SKIP_LOGIC\n          }\n          eventData={{\n            account_id: account?.id,\n          }}\n          leadingIcon={faCodeBranch}\n          variant=\"link\"\n          onClick={handleEditSkipLogic}\n        >\n          {isReadonly ? 'View skip logic' : skipLogicCTA}\n        </TrackedButton>\n      )}\n    </div>\n  );\n}\n\nSectionControls.propTypes = {\n  hasSkipLogic: propTypes.bool.isRequired,\n  section: propTypes.shape({\n    skipLogicIds: propTypes.array.isRequired,\n    uuid: propTypes.string.isRequired,\n  }).isRequired,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"vB1fk9ezeeybEevrJl96\";\nvar _2 = \"xMSedlun_B_nMNkMEQQK\";\nvar _3 = \"DFQtNyQkF_Zg9Q6ew2Aj\";\nvar _4 = \"D4IYvtSHnpVCNrXkqh5p\";\nvar _5 = \"wBwKZMMvL3n1hcdMvkkI\";\nvar _6 = \"I_QWSl9Ay2jsLXqXqpVj\";\nvar _7 = \"Dvs1BmUQxVwdPHf5ugDT\";\nvar _8 = \"HNde0M1RtBEOvTibtNug\";\nvar _9 = \"edcC_o4TE0oY5bxGOaGU\";\nvar _a = \"x9AfS3tomV3l_YDLGaIK\";\nvar _b = \"IQfhLRNTBCZPXKUvdbnH\";\nvar _c = \"lN8tgmuhyhO1SUTKbEqC\";\nvar _d = \"MyzR2BPjdrTOVyy081hD\";\nvar _e = \"XCQqrzxE2B8Se6nCXscw\";\nvar _f = \"_Ea7_DC_ia3CTUND_gFH\";\nvar _10 = \"uvQrT9rAgf9yxV2DUhQ4\";\nvar _11 = \"SIIlboOCALpMvFxokJ3o\";\nexport { _1 as \"ApplySuccessCard__detail__date\", _2 as \"BillingInfoCard__column\", _3 as \"CopyToClipboard\", _4 as \"DataConsentNotice__content__preview__body\", _5 as \"MessageList__message__timestamp\", _6 as \"ParticipantProfile__participant-details__attribute-value\", _7 as \"ProjectCustomEmailSets\", _8 as \"ProjectListItem__status-date\", _9 as \"ProjectListing__detail\", _a as \"ProjectListing__details\", _b as \"SectionControls\", _c as \"TeamMemberInviterForm__section__invite-via-link\", _d as \"UnmoderatedTask__deadline\", _e as \"btn-link--neutral\", _f as \"btn-outline-secondary\", _10 as \"participant-dashboard__project__info__status__string\", _11 as \"schedule-project-participant-page__time-slots\" }\n","import React from 'react';\nimport propTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport {\n  Dropdown,\n  DropdownItem,\n  DropdownMenu,\n  DropdownToggle,\n} from '@user-interviews/ui-design-system';\n\nimport { TrackedDropdownItem } from 'common/analytics';\n\nimport { trackingEvents } from 'lib/analytics';\nimport { faEllipsisV } from 'lib/font_awesome/regular';\n\nexport function SectionDropdown({\n  className,\n  removeable,\n  onDuplicate,\n  onRemove,\n}) {\n  return (\n    <Dropdown className={className}>\n      <DropdownToggle\n        aria-label=\"dropdown toggle screener page options\"\n        removeCaret\n        variant=\"transparent\"\n      >\n        <FontAwesomeIcon icon={faEllipsisV} size=\"lg\" />\n      </DropdownToggle>\n      <DropdownMenu>\n        <TrackedDropdownItem\n          aria-label=\"Duplicate screener page\"\n          event={trackingEvents.SURVEY_DUPLICATE_PAGE_CLICKED}\n          onClick={onDuplicate}\n        >\n          Duplicate\n        </TrackedDropdownItem>\n\n        {removeable && (\n          <DropdownItem aria-label=\"Remove Screener Page\" onClick={onRemove}>\n            Delete\n          </DropdownItem>\n        )}\n      </DropdownMenu>\n    </Dropdown>\n  );\n}\n\nSectionDropdown.propTypes = {\n  className: propTypes.string,\n  removeable: propTypes.bool.isRequired,\n  onDuplicate: propTypes.func.isRequired,\n  onRemove: propTypes.func.isRequired,\n};\n","import React, { useCallback, useContext, useMemo } from 'react';\nimport propTypes from 'prop-types';\nimport { Droppable } from 'react-beautiful-dnd';\n\nimport {\n  Accordion,\n  AccordionItem,\n  AccordionCollapse,\n  AccordionToggle,\n  Card,\n  CardSizes,\n} from '@user-interviews/ui-design-system';\n\nimport { trackingEvents } from 'lib/analytics';\nimport { isQuestionGroup } from 'lib/surveys/builder/utilities';\n\nimport SurveyContext from '../../context';\nimport { Question } from '../../question';\n\nimport { AddNewPageButton } from './add_new_page_button';\nimport { SectionControls } from './section_controls';\nimport { SectionDropdown } from './section_dropdown';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './section.module.scss';\n\nexport function Section({ section }) {\n  const { allowEmpty, isReadonly, survey, sectionFunctions, setModalProps } =\n    useContext(SurveyContext);\n\n  const sectionQuestions = useMemo(\n    () => section.questionIds.map((id) => survey.questions[id]),\n    [section, survey.questions],\n  );\n\n  const sectionAnswers = useMemo(\n    () =>\n      sectionQuestions\n        .reduce((answerIds, sectionQuestion) => {\n          if (sectionQuestion.answerIds) {\n            return [...answerIds, ...sectionQuestion.answerIds];\n          }\n\n          return answerIds;\n        }, [])\n        .map((answerId) => survey.answers[answerId]),\n    [sectionQuestions, survey.answers],\n  );\n\n  const isRemovableQuestion = section.questionIds.length > 1;\n\n  const removeable =\n    !isReadonly && (allowEmpty || survey.sectionIds.length > 1);\n\n  const hasSkipLogicErrors = !!section.skipLogicIds.find((id) => {\n    const skipLogic = survey.skipLogics[id];\n    if (!skipLogic) return false;\n\n    if (Object.keys(skipLogic.errors).length) return true;\n\n    return skipLogic.conditionIds.find((conditionId) => {\n      const condition = survey.skipLogicConditions[conditionId];\n      if (!condition) return false;\n\n      return Object.keys(condition.errors).length;\n    });\n  });\n\n  const hasSkipLogic = section.skipLogicIds.length > 0;\n\n  const removeMessage = () => {\n    if (!hasSkipLogic)\n      return 'Deleting the page will also delete all questions inside the page.';\n\n    return (\n      <div>\n        You may need to adjust your skip logic. Any skip logic that pointed to\n        this page will now point to the end of the screener.\n        <br />\n        <br />\n        Deleting the page will also delete all questions inside the page.\n      </div>\n    );\n  };\n\n  const handleRemove = useCallback(() => {\n    setModalProps({\n      buttonText: 'Confirm delete',\n      title: 'Are you sure you want to delete this page?',\n      message: removeMessage(),\n      openEvent: trackingEvents.SURVEY_DELETE_PAGE_MODAL_SHOWN,\n      confirmEvent: trackingEvents.SURVEY_DELETE_PAGE_CONFIRM_CLICKED,\n      onConfirm: () => sectionFunctions.remove(section.uuid),\n    });\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [setModalProps, sectionFunctions, section.uuid]);\n\n  const handleAddSection = useCallback(\n    () => sectionFunctions.add(section.uuid),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [sectionFunctions.add, section.uuid],\n  );\n\n  const handleDuplicateSection = useCallback(\n    () => sectionFunctions.duplicate(section.uuid),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [sectionFunctions.duplicate, section.uuid],\n  );\n\n  const sectionQuestionCount = section.questionIds?.length;\n  const questionText = sectionQuestionCount === 1 ? 'Question' : 'Questions';\n  const helperText = `| ${sectionQuestionCount} ${questionText}`;\n\n  return (\n    <>\n      <Droppable droppableId={section.uuid}>\n        {(provided) => (\n          <Card\n            className={styles.SurveyBuilderSection}\n            noPadding\n            size={CardSizes.LARGE}\n          >\n            {!isReadonly && (\n              <SectionDropdown\n                className={styles.SectionDropdown}\n                removeable={removeable}\n                onDuplicate={handleDuplicateSection}\n                onRemove={handleRemove}\n              />\n            )}\n            <Accordion defaultActiveKey={section.uuid} flush>\n              <AccordionItem borderless>\n                <AccordionToggle\n                  chevronLateral\n                  chevronLeft\n                  collapsedText={helperText}\n                  eventKey={section.uuid}\n                  title={section.title}\n                />\n                <AccordionCollapse eventKey={section.uuid}>\n                  <div className=\"form-section\" ref={provided.innerRef}>\n                    {hasSkipLogicErrors && (\n                      <div className={styles.errors}>\n                        There were errors with the skip logic for this section\n                      </div>\n                    )}\n\n                    {section.questionIds.map((questionId, index) => {\n                      // eslint-disable-next-line no-use-before-define\n                      const questionSkipLogics = getSkipLogicsInvolvingQuestion(\n                        questionId,\n                        section.uuid,\n                        survey,\n                      );\n\n                      return (\n                        <Question\n                          isRemovableQuestion={isRemovableQuestion}\n                          key={questionId}\n                          pageTitle={section.title}\n                          position={index}\n                          question={survey.questions[questionId]}\n                          questionSkipLogics={questionSkipLogics}\n                          screenerSections={Object.values(survey.sections)}\n                          sectionAnswers={sectionAnswers}\n                          sectionQuestions={sectionQuestions}\n                          sectionUUID={section.uuid}\n                        />\n                      );\n                    })}\n                    {provided.placeholder}\n\n                    <SectionControls\n                      hasSkipLogic={hasSkipLogic}\n                      section={section}\n                    />\n                  </div>\n                </AccordionCollapse>\n              </AccordionItem>\n            </Accordion>\n          </Card>\n        )}\n      </Droppable>\n\n      {!isReadonly && <AddNewPageButton onAddSection={handleAddSection} />}\n    </>\n  );\n}\n\nSection.propTypes = {\n  section: propTypes.object.isRequired,\n};\n\nconst getSkipLogicsInvolvingQuestion = (questionId, sectionId, survey) => {\n  const section = survey.sections[sectionId];\n  const question = survey.questions[questionId];\n\n  const questionIds = isQuestionGroup(question)\n    ? question.questionIds\n    : [questionId];\n\n  const skipLogicsInvolvingThisQuestion = [];\n\n  section.skipLogicIds.forEach((skipLogicId) => {\n    let skipLogic = survey.skipLogics[skipLogicId];\n    let hasConditionsInvolvingThisQuestion = false;\n\n    const conditions = skipLogic.conditionIds\n      .filter(\n        (conditionId) => survey.skipLogicConditions[conditionId] !== undefined,\n      )\n      .map((conditionId) => {\n        const condition = survey.skipLogicConditions[conditionId];\n\n        if (\n          !hasConditionsInvolvingThisQuestion &&\n          questionIds.includes(condition.questionId)\n        ) {\n          hasConditionsInvolvingThisQuestion = true;\n        }\n        return condition;\n      });\n\n    if (hasConditionsInvolvingThisQuestion) {\n      skipLogic = {\n        ...skipLogic,\n        skipLogicConditions: conditions,\n      };\n      skipLogicsInvolvingThisQuestion.push(skipLogic);\n    }\n  });\n\n  return skipLogicsInvolvingThisQuestion;\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"Zf91ABAL770cdfn7mrdQ\";\nvar _2 = \"t8_taZPwoBpGhzEfuY2Q\";\nvar _3 = \"FXhZEPY0My2JgSAjXRXO\";\nexport { _1 as \"SectionDropdown\", _2 as \"SurveyBuilderSection\", _3 as \"errors\" }\n","import React, { useContext, useCallback } from 'react';\nimport { DragDropContext } from 'react-beautiful-dnd';\n\nimport SurveyContext from '../context';\nimport { surveyPropType } from '../prop_types';\n\nimport { Section } from './section';\nimport { AddNewPageButton } from './section/add_new_page_button';\n\nfunction Sections({ survey }) {\n  const { sectionFunctions, questionFunctions, isReadonly } =\n    useContext(SurveyContext);\n  const hasSections = survey.sectionIds.length;\n\n  const handleMove = useCallback(\n    (result) => {\n      if (!result) return;\n      questionFunctions.move(result);\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [questionFunctions.move],\n  );\n\n  const handleAddSection = useCallback(\n    () => sectionFunctions.add(null),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [sectionFunctions.add],\n  );\n\n  return (\n    <DragDropContext onDragEnd={handleMove}>\n      {survey.sectionIds.map((sectionId) => (\n        <Section key={sectionId} section={survey.sections[sectionId]} />\n      ))}\n\n      {!isReadonly && !hasSections && (\n        <AddNewPageButton onAddSection={handleAddSection} />\n      )}\n    </DragDropContext>\n  );\n}\n\nSections.propTypes = {\n  survey: surveyPropType.isRequired,\n};\n\nexport default Sections;\n","/* eslint-disable react/destructuring-assignment */\nimport React, { Component } from 'react';\nimport propTypes from 'prop-types';\nimport memoizeOne from 'memoize-one';\n\nimport { track, trackingEvents, trackingPropsShape } from 'lib/analytics';\n\nimport {\n  buildSkipLogic,\n  buildSkipLogicCondition,\n  insertIntoArray,\n} from 'lib/surveys/builder/utilities';\n\nimport { AnswerUtilities } from 'lib/surveys/builder/answer_utilities';\nimport { QuestionUtilities } from 'lib/surveys/builder/question_utilities';\nimport { QuestionGroupUtilities } from 'lib/surveys/builder/question_group_utilities';\nimport { SectionUtilities } from 'lib/surveys/builder/section_utilities';\nimport { SkipLogicConditionUtilities } from 'lib/surveys/builder/skip_logic_condition_utilities';\nimport { SkipLogicUtilities } from 'lib/surveys/builder/skip_logic_utilities';\n\nimport {\n  OPT_IN_FORM_TYPE,\n  SCREENER_FORM_TYPE,\n} from 'components/survey_builder/constants';\nimport { ConfirmationModal } from './confirmation_modal';\nimport { surveyPropType } from './prop_types';\nimport { SkipLogicModal } from './skip_logic_modal';\nimport SurveyUpgradeModal from './survey_upgrade_modal';\nimport Sections from './sections';\n\nimport SurveyContext from './context';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './survey_builder.scss';\n\nclass SurveyBuilder extends Component {\n  state = {\n    checkPremium: this.props.checkPremium,\n    upgradeModalIsOpen: false,\n    modalProps: {\n      buttonText: undefined,\n      confirmEvent: undefined,\n      message: undefined,\n      openEvent: undefined,\n      title: undefined,\n      onConfirm: undefined,\n    },\n    surveyDuplicateBeforeEdit: undefined,\n  };\n\n  getMemoizedSurveyContextValue = memoizeOne((contextProps, formType) => ({\n    ...contextProps,\n    formType,\n  }));\n\n  handleAddAnswers = (questionUUID, answerUUID, answers) => {\n    this.props.tracking.trackEvent({\n      event: trackingEvents.SURVEY_ANSWER_BATCH_ADDED,\n    });\n\n    const updates = AnswerUtilities.addBatch(\n      questionUUID,\n      answerUUID,\n      answers,\n      this.survey,\n    );\n\n    this.updateSurvey(updates);\n  };\n\n  handleAddAnswer = (questionUUID, prevAnswerUUID) => {\n    const updates = AnswerUtilities.add(\n      questionUUID,\n      prevAnswerUUID,\n      this.survey,\n    );\n\n    this.updateSurvey(updates);\n  };\n\n  handleAddOtherAnswer = (questionUUID) => {\n    const updates = AnswerUtilities.addOther(questionUUID, this.survey);\n\n    this.updateSurvey(updates);\n  };\n\n  handleMoveAnswer = (questionId, activeAnswerId, overAnswerId) => {\n    this.props.tracking.trackEvent({\n      event: trackingEvents.SURVEY_ANSWER_MOVED,\n    });\n\n    const updates = AnswerUtilities.move(\n      questionId,\n      activeAnswerId,\n      overAnswerId,\n      this.survey,\n    );\n\n    this.updateSurvey(updates);\n  };\n\n  handleAddQuestion = (sectionUUID, prevQuestionUUID) => {\n    const update = QuestionUtilities.add(\n      sectionUUID,\n      prevQuestionUUID,\n      this.survey,\n    );\n\n    this.updateSurvey(update);\n  };\n\n  handleAddSection = (prevSectionUUID) => {\n    const updates = this.updatedSections(SectionUtilities.add, prevSectionUUID);\n\n    this.updateSurvey(updates);\n  };\n\n  handleDuplicateSection = (sectionUUID) => {\n    const updates = this.updatedSections(\n      SectionUtilities.duplicate,\n      sectionUUID,\n    );\n\n    this.updateSurvey(updates);\n  };\n\n  handleRemoveSection = (sectionUUID) => {\n    const changes = this.updatedSections(SectionUtilities.remove, sectionUUID);\n    this.handleUnsetModalProps();\n\n    this.updateSurvey(changes);\n  };\n\n  updatedSections = (updateFn, sectionIdentifier) =>\n    updateFn(sectionIdentifier, this.survey, this.props.formType);\n\n  handleAddSectionClicked = (prevSectionUUID) => {\n    if (this.survey.sectionIds.length === 0) {\n      this.handleAddSection();\n    } else {\n      this.requestPremiumAction(this.handleAddSection, [prevSectionUUID]);\n    }\n  };\n\n  handleDuplicateSectionClicked = (sectionUUID) => {\n    this.requestPremiumAction(this.handleDuplicateSection, [sectionUUID]);\n  };\n\n  handleAddSkipLogic = (sectionUUID) => {\n    const section = { ...this.survey.sections[sectionUUID] };\n    const newSkipLogic = buildSkipLogic();\n    section.skipLogicIds = insertIntoArray(\n      section.skipLogicIds,\n      newSkipLogic.uuid,\n    );\n\n    const newSkipLogicCondition = buildSkipLogicCondition();\n    newSkipLogic.conditionIds.push(newSkipLogicCondition.uuid);\n\n    this.updateSurvey({\n      sections: { ...this.survey.sections, [section.uuid]: section },\n      skipLogicConditions: {\n        ...this.survey.skipLogicConditions,\n        [newSkipLogicCondition.uuid]: newSkipLogicCondition,\n      },\n      skipLogics: {\n        ...this.survey.skipLogics,\n        [newSkipLogic.uuid]: newSkipLogic,\n      },\n    });\n  };\n\n  handleAddSkipLogicCondition = (skipLogicUUID, prevConditionUUID) => {\n    const skipLogic = { ...this.survey.skipLogics[skipLogicUUID] };\n    const newSkipLogicCondition = buildSkipLogicCondition();\n\n    skipLogic.conditionIds = insertIntoArray(\n      skipLogic.conditionIds,\n      newSkipLogicCondition.uuid,\n      prevConditionUUID,\n    );\n\n    this.updateSurvey({\n      skipLogicConditions: {\n        ...this.survey.skipLogicConditions,\n        [newSkipLogicCondition.uuid]: newSkipLogicCondition,\n      },\n      skipLogics: { ...this.survey.skipLogics, [skipLogic.uuid]: skipLogic },\n    });\n  };\n\n  setSurveyDuplicateBeforeEdit = () => {\n    this.setState({\n      surveyDuplicateBeforeEdit: this.survey,\n    });\n  };\n\n  handleCloseSkipLogic = () => {\n    this.setState({\n      skipLogicSectionId: undefined,\n      surveyDuplicateBeforeEdit: undefined,\n    });\n  };\n\n  handleDuplicateQuestion = (sectionUUID, questionUUID) => {\n    const updates = QuestionUtilities.duplicate(\n      sectionUUID,\n      questionUUID,\n      this.survey,\n    );\n\n    this.updateSurvey(updates);\n  };\n\n  handleMoveQuestion = ({ destination, source, draggableId }) => {\n    if (!destination) return false;\n\n    if (destination.droppableId === source.droppableId) {\n      const updates = QuestionUtilities.moveWithinSection(\n        destination,\n        draggableId,\n        this.survey,\n      );\n\n      return this.updateSurvey(updates);\n    }\n\n    const skipLogicConditions = Object.values(\n      this.survey.skipLogicConditions,\n    ).filter((condition) => condition && condition.questionId === draggableId);\n\n    if (skipLogicConditions.length > 0) {\n      const numSkipConditions = skipLogicConditions.length;\n\n      return this.handleSetModalProps({\n        buttonText: 'Confirm move',\n        title: 'Are you sure you want to move this question?',\n        message: (\n          <div>\n            Moving this question across a page means that\n            <strong>\n              &nbsp;{numSkipConditions} skip logic\n              {numSkipConditions > 1 ? ' conditions' : ' condition'} will be\n              removed.\n            </strong>\n            &nbsp;Skip logic statements that do not reference this question will\n            be unaffected.\n          </div>\n        ),\n        confirmEvent: trackingEvents.SURVEY_MOVE_QUESTION_CONFIRM_CLICKED,\n        openEvent: trackingEvents.SURVEY_MOVE_QUESTION_MODAL_SHOWN,\n        onConfirm: () =>\n          this.handleMoveQuestionFromSection(source, destination, draggableId),\n      });\n    }\n\n    return this.handleMoveQuestionFromSection(source, destination, draggableId);\n  };\n\n  trackQuestionMoved = (targetSection, currentSection) => {\n    const { tracking } = this.props;\n\n    tracking.trackEvent({\n      event: trackingEvents.SURVEY_QUESTION_MOVED_FROM_PAGE,\n      screener_section_target: targetSection.title,\n      screener_section_current: currentSection.title,\n    });\n  };\n\n  // TODO: RS-20454 Moving into QuestionUtilities\n  handleMoveQuestionFromSection = (source, destination, questionId) => {\n    let survey = { ...this.survey };\n\n    const currentSection = survey.sections[source.droppableId];\n    const targetSection = survey.sections[destination.droppableId];\n\n    this.trackQuestionMoved(targetSection, currentSection);\n\n    const currentPosition = currentSection.questionIds.indexOf(questionId);\n    const question = currentSection.questionIds.splice(currentPosition, 1)[0];\n\n    // Move question\n    targetSection.questionIds.splice(destination.index, 0, question);\n\n    // Remove question's skip logic conditions\n    const skipLogicUpdates =\n      SkipLogicConditionUtilities.removeQuestionConditions(\n        currentSection.uuid,\n        questionId,\n        survey,\n      );\n    survey = { ...survey, ...skipLogicUpdates };\n\n    // Remove origin section if last question\n    if (currentSection.questionIds.length === 0) {\n      survey = {\n        ...survey,\n        ...this.updatedSections(SectionUtilities.remove, currentSection.uuid),\n      };\n    }\n\n    this.handleUnsetModalProps();\n\n    this.updateSurvey({\n      sections: survey.sections,\n      sectionIds: survey.sectionIds,\n      skipLogics: survey.skipLogics,\n      skipLogicConditions: survey.skipLogicConditions,\n    });\n  };\n\n  handleRemoveSkipLogic = (sectionUUID, skipLogicUUID) => {\n    const updates = SkipLogicUtilities.remove(\n      sectionUUID,\n      skipLogicUUID,\n      this.survey,\n    );\n\n    this.updateSurvey(updates);\n  };\n\n  handleRemoveSkipLogicCondition = (skipLogicUUID, skipLogicConditionUUID) => {\n    const updates = SkipLogicConditionUtilities.removeConditions(\n      skipLogicUUID,\n      [skipLogicConditionUUID],\n      this.survey,\n    );\n\n    this.updateSurvey(updates);\n  };\n\n  handleEditSkipLogicClicked = (sectionUUID) => {\n    this.requestPremiumAction(this.handleOpenSkipLogic, [sectionUUID]);\n  };\n\n  handleCancelSkipLogicEdit = () => {\n    this.updateSurvey({\n      sections: {\n        ...this.state.surveyDuplicateBeforeEdit.sections,\n      },\n      skipLogicConditions: {\n        ...this.state.surveyDuplicateBeforeEdit.skipLogicConditions,\n      },\n      skipLogics: {\n        ...this.state.surveyDuplicateBeforeEdit.skipLogics,\n      },\n    });\n\n    this.handleCloseSkipLogic();\n  };\n\n  handleOpenSkipLogic = (sectionUUID) => {\n    this.setState({ skipLogicSectionId: sectionUUID });\n  };\n\n  handleRemoveAnswer = (questionUUID, answerUUID) => {\n    const updates = AnswerUtilities.remove(\n      questionUUID,\n      answerUUID,\n      this.survey,\n    );\n\n    this.updateSurvey(updates);\n  };\n\n  handleRemoveQuestion = (sectionUUID, questionUUID) => {\n    const update = QuestionUtilities.remove(\n      sectionUUID,\n      questionUUID,\n      this.survey,\n    );\n\n    this.updateSurvey(update);\n  };\n\n  handleSetModalProps = (modalProps) => {\n    this.setState({ modalProps });\n  };\n\n  handleUnsetModalProps = () => {\n    this.setState({\n      modalProps: {\n        buttonText: undefined,\n        confirmEvent: undefined,\n        message: undefined,\n        openEvent: undefined,\n        title: undefined,\n        onConfirm: undefined,\n      },\n    });\n  };\n\n  handleUpdateAnswer = (answerUUID, update) => {\n    const updates = AnswerUtilities.update(answerUUID, update, this.survey);\n\n    this.updateSurvey(updates);\n  };\n\n  handleUpdateQuestion = (questionUUID, updates) => {\n    const update = QuestionUtilities.update(questionUUID, updates, this.survey);\n\n    this.updateSurvey(update);\n  };\n\n  handleUpdateQuestionType = (questionUUID, questionType) => {\n    const update = QuestionUtilities.updateType(\n      questionUUID,\n      questionType,\n      this.survey,\n    );\n\n    this.updateSurvey(update);\n  };\n\n  handleAddQuestionColumn = (questionGroupUUID) => {\n    const update = QuestionGroupUtilities.addColumn(\n      questionGroupUUID,\n      this.survey,\n    );\n\n    this.updateSurvey(update);\n  };\n\n  handleAddQuestionRow = (questionGroupUUID) => {\n    const update = QuestionGroupUtilities.addRow(\n      questionGroupUUID,\n      this.survey,\n    );\n\n    this.updateSurvey(update);\n  };\n\n  handleRemoveQuestionColumn = (questionGroupUUID, answerIndex) => {\n    const update = QuestionGroupUtilities.removeColumn({\n      questionGroupUUID,\n      answerIndex,\n      survey: this.survey,\n    });\n\n    this.updateSurvey(update);\n  };\n\n  handleRemoveQuestionRow = (questionGroupUUID, questionUUID) => {\n    const update = QuestionGroupUtilities.removeRow({\n      questionGroupUUID,\n      questionUUID,\n      survey: this.survey,\n    });\n\n    this.updateSurvey(update);\n  };\n\n  handleUpdateQuestionColumn = (questionGroupUUID, answerIndex, updates) => {\n    const update = QuestionGroupUtilities.updateColumn({\n      questionGroupUUID,\n      answerIndex,\n      updates,\n      survey: this.survey,\n    });\n\n    this.updateSurvey(update);\n  };\n\n  handleUpdateSkipLogic = (skipLogicUUID, updates) => {\n    this.updateSurvey({\n      skipLogics: {\n        ...this.survey.skipLogics,\n        [skipLogicUUID]: {\n          ...this.survey.skipLogics[skipLogicUUID],\n          ...updates,\n          errors: {},\n        },\n      },\n    });\n  };\n\n  handleUpdateSkipLogicCondition = (skipLogicConditionUUID, updates) => {\n    this.updateSurvey({\n      skipLogicConditions: {\n        ...this.survey.skipLogicConditions,\n        [skipLogicConditionUUID]: {\n          ...this.survey.skipLogicConditions[skipLogicConditionUUID],\n          ...updates,\n          errors: {},\n        },\n      },\n    });\n  };\n\n  handleUpgradeModalUpgradeClick = () => {\n    const [callback, args] = this.state.requestedPremiumAction;\n    this.setState({ checkPremium: false, requestedPremiumAction: undefined });\n\n    callback.apply(this, args);\n    this.setState({ upgradeModalIsOpen: false });\n  };\n\n  handleUpgradeModalRequestClose = () => {\n    this.props.tracking.trackEvent({\n      event: trackingEvents.SURVEY_UPGRADE_DISMISSED,\n    });\n    this.setState({ upgradeModalIsOpen: false });\n  };\n\n  determineQuestionType = (question) =>\n    QuestionUtilities.determineType(question, this.survey);\n\n  get contextProps() {\n    return {\n      allowEmpty: this.props.allowEmpty,\n      isReadonly: this.props.isReadonly,\n      survey: this.survey,\n      setModalProps: this.handleSetModalProps,\n      setSurveyDuplicateBeforeEdit: this.setSurveyDuplicateBeforeEdit,\n      setToastMessage: this.props.setToastMessage,\n      answerFunctions: {\n        add: this.handleAddAnswer,\n        addBatch: this.handleAddAnswers,\n        addOther: this.handleAddOtherAnswer,\n        move: this.handleMoveAnswer,\n        remove: this.handleRemoveAnswer,\n        update: this.handleUpdateAnswer,\n      },\n      sectionFunctions: {\n        add: this.handleAddSectionClicked,\n        duplicate: this.handleDuplicateSectionClicked,\n        remove: this.handleRemoveSection,\n      },\n      questionFunctions: {\n        add: this.handleAddQuestion,\n        determineType: this.determineQuestionType,\n        duplicate: this.handleDuplicateQuestion,\n        move: this.handleMoveQuestion,\n        remove: this.handleRemoveQuestion,\n        update: this.handleUpdateQuestion,\n        updateType: this.handleUpdateQuestionType,\n      },\n      questionGroupFunctions: {\n        addColumn: this.handleAddQuestionColumn,\n        addRow: this.handleAddQuestionRow,\n        removeColumn: this.handleRemoveQuestionColumn,\n        removeRow: this.handleRemoveQuestionRow,\n        updateColumn: this.handleUpdateQuestionColumn,\n      },\n      skipLogicFunctions: {\n        add: this.handleAddSkipLogic,\n        addCondition: this.handleAddSkipLogicCondition,\n        removeCondition: this.handleRemoveSkipLogicCondition,\n        updateCondition: this.handleUpdateSkipLogicCondition,\n        edit: this.handleEditSkipLogicClicked,\n        remove: this.handleRemoveSkipLogic,\n        update: this.handleUpdateSkipLogic,\n      },\n    };\n  }\n\n  get survey() {\n    return this.props.survey;\n  }\n\n  requestPremiumAction(callback, args = []) {\n    if (this.state.checkPremium) {\n      this.setState({\n        requestedPremiumAction: [callback, args],\n        upgradeModalIsOpen: true,\n      });\n    } else {\n      callback.apply(this, args);\n    }\n  }\n\n  updateSurvey(updates) {\n    this.props.onUpdateSurvey(updates);\n  }\n\n  render() {\n    const contextValue = this.getMemoizedSurveyContextValue(\n      this.contextProps,\n      this.props.formType,\n    );\n\n    return (\n      <div className=\"SurveyBuilder form-well\">\n        <ConfirmationModal\n          buttonText={this.state.modalProps.buttonText}\n          confirmEvent={this.state.modalProps.confirmEvent}\n          message={this.state.modalProps.message}\n          openEvent={this.state.modalProps.openEvent}\n          title={this.state.modalProps.title}\n          onConfirm={this.state.modalProps.onConfirm}\n          onRequestClose={this.handleUnsetModalProps}\n        />\n        <SurveyContext.Provider value={contextValue}>\n          <SkipLogicModal\n            isReadonly={this.props.isReadonly}\n            sectionId={this.state.skipLogicSectionId}\n            survey={this.survey}\n            onRequestCancel={this.handleCancelSkipLogicEdit}\n            onRequestClose={this.handleCloseSkipLogic}\n          />\n\n          <SurveyUpgradeModal\n            isOpen={this.state.upgradeModalIsOpen}\n            onRequestClose={this.handleUpgradeModalRequestClose}\n            onUpgradeClick={this.handleUpgradeModalUpgradeClick}\n          />\n\n          <Sections survey={this.survey} />\n        </SurveyContext.Provider>\n      </div>\n    );\n  }\n}\n\nSurveyBuilder.propTypes = {\n  allowEmpty: propTypes.bool,\n  checkPremium: propTypes.bool.isRequired,\n  formType: propTypes.oneOf([OPT_IN_FORM_TYPE, SCREENER_FORM_TYPE]).isRequired,\n  isReadonly: propTypes.bool,\n  setToastMessage: propTypes.func,\n  survey: surveyPropType.isRequired,\n  onUpdateSurvey: propTypes.func.isRequired,\n  ...trackingPropsShape,\n};\n\nSurveyBuilder.defaultProps = {\n  allowEmpty: true,\n  isReadonly: false,\n};\n\nexport default track()(SurveyBuilder);\n","import { registerComponent } from 'lib/react_on_rails';\nimport SurveyBuilder from './survey_builder';\nimport * as SurveyBuilderConstants from './constants';\nimport SurveyContext from './context';\n\nregisterComponent('SurveyBuilder', SurveyBuilder);\n\nexport {\n  SurveyBuilder,\n  SurveyBuilderConstants,\n  SurveyContext as SurveyBuilderContext,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"t4R17IUpaCUQy4lnM28T\";\nvar _2 = \"Ju9dKLTcRWsUHzbSz2fc\";\nvar _3 = \"rOKErF3y3XqCwayeAJZQ\";\nvar _4 = \"B7VZ493fcR4Oor32LiRT\";\nvar _5 = \"MDXY1sro9Ntf90g9cDAw\";\nvar _6 = \"pD82CKh89KSatsZFRJdD\";\nvar _7 = \"BOJ990cUkecdQxMMnE9A\";\nvar _8 = \"_9dvfA0NUQsgX6wMg1mHK\";\nvar _9 = \"KfRTXySUTveFvhLCClx5\";\nvar _a = \"E27xDsw6EQ7l3Ojl0K9P\";\nvar _b = \"RxUlQhVuNlAD1DXpsTAJ\";\nvar _c = \"rTAVbjNvUnk_IlMJwIrQ\";\nvar _d = \"v_3UU5JH5A3p6NNuuX5l\";\nvar _e = \"DtErWqxwYvdAtz1QVK1u\";\nvar _f = \"w3iWVFPRj9_Uj8L3DGu0\";\nvar _10 = \"UfR0YbtadDHWcNIq_Vuz\";\nvar _11 = \"TYGAXtxGhzJYvMFUp7Hg\";\nvar _12 = \"GHe8LvDL1Xl_0Zc4MFyD\";\nvar _13 = \"f8NctEftd5asn7NDIVpg\";\nvar _14 = \"pFPF53NKSLDqAkzFNY3x\";\nexport { _1 as \"ApplySuccessCard__detail__date\", _2 as \"BillingInfoCard__column\", _3 as \"CopyToClipboard\", _4 as \"DataConsentNotice__content__preview__body\", _5 as \"Header\", _6 as \"Icon\", _7 as \"MessageList__message__timestamp\", _8 as \"MobileBreak\", _9 as \"ParticipantProfile__participant-details__attribute-value\", _a as \"PreviewBanner\", _b as \"ProjectCustomEmailSets\", _c as \"ProjectListItem__status-date\", _d as \"ProjectListing__detail\", _e as \"ProjectListing__details\", _f as \"TeamMemberInviterForm__section__invite-via-link\", _10 as \"UnmoderatedTask__deadline\", _11 as \"btn-link--neutral\", _12 as \"btn-outline-secondary\", _13 as \"participant-dashboard__project__info__status__string\", _14 as \"schedule-project-participant-page__time-slots\" }\n","import React from 'react';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './preview_banner.module.scss';\n\nexport function PreviewBanner() {\n  return (\n    <div className={styles.PreviewBanner}>\n      <span aria-label=\"Magnifying Glass\" className={styles.Icon} role=\"img\">\n        🔍&nbsp;\n      </span>\n      <span className={styles.Header}>You are in preview mode.&nbsp;</span>\n      <br className={styles.MobileBreak} />\n      <span>\n        Any added skip logic will be applied. We recommend testing all possible\n        paths.\n      </span>\n    </div>\n  );\n}\n","// extracted by mini-css-extract-plugin\nvar _1 = \"jD0X6GIIZIv1QfW541hn\";\nvar _2 = \"IP6yOUv5cY8G0EDlVgjZ\";\nexport { _1 as \"HubSurveyHeader\", _2 as \"Logo\" }\n","import React from 'react';\n\nimport {\n  Card,\n  CardSizes,\n  Flex,\n  Heading,\n  Text,\n} from '@user-interviews/ui-design-system';\nimport classNames from 'classnames';\n\nimport * as propTypes from 'lib/prop_types';\n\nimport StudyDetailsAccordion from 'participant/apply/study_details_accordion';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './hub_survey_preview_header.module.scss';\n\nexport function HubSurveyPreviewHeader({\n  cardSize,\n  logoUrl,\n  projectDetails,\n  teamName,\n  title,\n}) {\n  return (\n    <>\n      <Flex\n        alignItems=\"center\"\n        className={styles.HubSurveyHeader}\n        container\n        flexDirection=\"column\"\n      >\n        {logoUrl && (\n          <div\n            className={classNames(\n              'logo-container logo-container--centered',\n              styles.Logo,\n            )}\n          >\n            <img\n              alt={`${teamName} logo`}\n              className=\"logo-thumbnail\"\n              src={logoUrl}\n            />\n          </div>\n        )}\n\n        <Heading level={1} size=\"xxxl\" textAlign=\"center\">\n          Apply to see if you qualify for the study\n        </Heading>\n\n        <Text size=\"lg\" textAlign=\"center\">\n          {projectDetails.surveyCompletionTime}\n        </Text>\n      </Flex>\n\n      <Card noPadding size={cardSize}>\n        <StudyDetailsAccordion\n          description={projectDetails.description}\n          incentive={projectDetails.incentive}\n          noIncentive={projectDetails.noIncentive}\n          requiresDocumentSignature={projectDetails.requiresDocumentSignature}\n          sessionLength={projectDetails.sessionLength}\n          title={title}\n        />\n      </Card>\n    </>\n  );\n}\n\nHubSurveyPreviewHeader.propTypes = {\n  cardSize: propTypes.oneOf(Object.values(CardSizes)).isRequired,\n  logoUrl: propTypes.string,\n  projectDetails: propTypes.object,\n  teamName: propTypes.string,\n  title: propTypes.string.isRequired,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"GDuHyhSta8MuJsBOHH2Y\";\nvar _2 = \"ecBuu5N15dCjY6oSVCf9\";\nvar _3 = \"BW9Iv3k1v4mIVxNDp1Pj\";\nvar _4 = \"j8q52jdSSaxqZbeTH252\";\nvar _5 = \"WOO99kQFA6casVTZwR2x\";\nvar _6 = \"_7kQUpMvpdO86fjtDlwC\";\nvar _7 = \"Bd_qoVency4Yz7_8bPRb\";\nvar _8 = \"zaSWbB9sQKf9p6qq641p\";\nvar _9 = \"bm_fL4uS1v08QhU3xKcF\";\nvar _a = \"vd5g4_6ZY32CamrbWhi1\";\nvar _b = \"uVerhcCQWV_J6sNTucYN\";\nvar _c = \"Thxgh0d2ilTKi9RZJa1h\";\nvar _d = \"bEfagH2PGs6l9mYZTsyv\";\nvar _e = \"bixIJuAs_GzVPKmYxvNf\";\nvar _f = \"rL3WDQphMHvMDitvUzXr\";\nvar _10 = \"YbAMpW3H_GqEsl4jx1sL\";\nvar _11 = \"taVy_bGCX1oDRrm1p3Lu\";\nvar _12 = \"xi6utMuayQkFSpqLcE3z\";\nexport { _1 as \"ApplySuccessCard__detail__date\", _2 as \"BillingInfoCard__column\", _3 as \"CopyToClipboard\", _4 as \"DataConsentNotice__content__preview__body\", _5 as \"Divider\", _6 as \"Header\", _7 as \"MessageList__message__timestamp\", _8 as \"ParticipantProfile__participant-details__attribute-value\", _9 as \"ProjectCustomEmailSets\", _a as \"ProjectListItem__status-date\", _b as \"ProjectListing__detail\", _c as \"ProjectListing__details\", _d as \"TeamMemberInviterForm__section__invite-via-link\", _e as \"UnmoderatedTask__deadline\", _f as \"btn-link--neutral\", _10 as \"btn-outline-secondary\", _11 as \"participant-dashboard__project__info__status__string\", _12 as \"schedule-project-participant-page__time-slots\" }\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { Heading } from '@user-interviews/ui-design-system';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './recruit_survey_preview_header.module.scss';\n\nexport function RecruitSurveyPreviewHeader({ title }) {\n  return (\n    <div className={styles.Header}>\n      <Heading level={1} size=\"xxxl\" textAlign=\"center\">\n        {title}\n      </Heading>\n    </div>\n  );\n}\n\nRecruitSurveyPreviewHeader.propTypes = {\n  title: propTypes.string.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { CardSizes } from '@user-interviews/ui-design-system';\n\nimport { HubSurveyPreviewHeader } from './hub_survey_preview_header';\nimport { RecruitSurveyPreviewHeader } from './recruit_survey_preview_header';\n\nexport function SurveyPreviewFormHeader({\n  cardSize,\n  logoUrl,\n  projectDetails,\n  publicSurvey,\n  teamName,\n  title,\n}) {\n  return publicSurvey ? (\n    <RecruitSurveyPreviewHeader title={title} />\n  ) : (\n    <HubSurveyPreviewHeader\n      cardSize={cardSize}\n      logoUrl={logoUrl}\n      projectDetails={projectDetails}\n      teamName={teamName}\n      title={title}\n    />\n  );\n}\n\nSurveyPreviewFormHeader.propTypes = {\n  cardSize: propTypes.oneOf(Object.values(CardSizes)).isRequired,\n  logoUrl: propTypes.string,\n  projectDetails: propTypes.object,\n  publicSurvey: propTypes.bool.isRequired,\n  teamName: propTypes.string,\n  title: propTypes.string.isRequired,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"JwCEVOMQEKIQUCzFNDIw\";\nvar _2 = \"Oq4P8MzWkhZf06PMkB6C\";\nvar _3 = \"KG3_VxMfN1IERe1sxqGL\";\nvar _4 = \"bJsK7TNKcmVovX9QdyOa\";\nvar _5 = \"whShshlwbc4sj9jIJF4U\";\nvar _6 = \"Pxav6A_YZ9uZRJilOkc7\";\nvar _7 = \"FoelbympKZ9QI0eZmQcj\";\nvar _8 = \"D1dtbYqzEvsraY3jn86t\";\nvar _9 = \"aoGUAnVSy9AplT5x54YM\";\nvar _a = \"N9e2y_T_EJ2Oe9VYzUWM\";\nvar _b = \"zhh0mMntS39UIYi9SXwu\";\nvar _c = \"ooI3zTrcAIaIPCsGFvtz\";\nvar _d = \"N2jaeEdnd8EaV72wWgSv\";\nvar _e = \"xwOIrznqP3j5L2GPJ7H3\";\nvar _f = \"parydvWq6QDmL83dg1_N\";\nvar _10 = \"YQmnDHj156cliiSaA22n\";\nvar _11 = \"c7SLz7Aa768ct3Ib2dab\";\nvar _12 = \"X8SPaynG56Az3HiS3AM7\";\nexport { _1 as \"ApplySuccessCard__detail__date\", _2 as \"BillingInfoCard__column\", _3 as \"CopyToClipboard\", _4 as \"DataConsentNotice__content__preview__body\", _5 as \"MessageList__message__timestamp\", _6 as \"ParticipantProfile__participant-details__attribute-value\", _7 as \"ProjectCustomEmailSets\", _8 as \"ProjectListItem__status-date\", _9 as \"ProjectListing__detail\", _a as \"ProjectListing__details\", _b as \"RestartButton\", _c as \"SuccessIcon\", _d as \"TeamMemberInviterForm__section__invite-via-link\", _e as \"UnmoderatedTask__deadline\", _f as \"btn-link--neutral\", _10 as \"btn-outline-secondary\", _11 as \"participant-dashboard__project__info__status__string\", _12 as \"schedule-project-participant-page__time-slots\" }\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { faCircleCheck, faSync } from 'lib/font_awesome/solid';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, Flex, Heading, Text } from '@user-interviews/ui-design-system';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './survey_preview_end.module.scss';\n\nexport function SurveyPreviewEnd({ onRestartPreview, isOptInForm }) {\n  return (\n    <Flex alignItems=\"center\" container flexDirection=\"column\">\n      <div className={styles.SuccessIcon}>\n        <FontAwesomeIcon\n          data-testid=\"end-of-preview-check-icon\"\n          icon={faCircleCheck}\n        />\n      </div>\n\n      <Heading level={2} size=\"xxxl\" textAlign=\"center\" weight=\"bold\">\n        {`You've reached the end of the ${isOptInForm ? 'opt-in form' : 'screener survey'} preview.`}\n      </Heading>\n\n      <Text size=\"lg\" textAlign=\"center\">\n        {!isOptInForm &&\n          'If everything looks good, close this window and continue setting up your project. '}\n        To start over or test another skip logic path, click the button below.\n      </Text>\n\n      <Button className={styles.RestartButton} onClick={onRestartPreview}>\n        <FontAwesomeIcon className=\"icon-left\" icon={faSync} />\n        Go back to start\n      </Button>\n    </Flex>\n  );\n}\n\nSurveyPreviewEnd.propTypes = {\n  isOptInForm: propTypes.bool,\n  onRestartPreview: propTypes.func.isRequired,\n};\n\nSurveyPreviewEnd.defaultProps = {\n  isOptInForm: false,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"JkR8pAUtZZhp0gsXiPR1\";\nexport { _1 as \"SurveyPreviewForm\" }\n","import React, { useMemo, useState } from 'react';\nimport propTypes from 'prop-types';\n\nimport { CardStack, Flex } from '@user-interviews/ui-design-system';\n\nimport { TitledPage } from 'common/routing';\n\nimport { ProjectDefaultName } from 'lib/generated_constants/projects';\nimport { Header } from 'participant/opt_in/components/header';\nimport { DefaultQuestionsForm } from 'participant/opt_in/components/default_questions_form';\nimport { surveySectionPropType } from '../../prop_types';\nimport { PreviewBanner } from './preview_banner';\nimport { SurveyPreviewFormHeader } from './survey_preview_form_header';\nimport { SurveyPreviewEnd } from './survey_preview_end';\nimport { SurveySectionForm } from '../../components/survey_section_form';\nimport { determineCardSize } from '../../utils';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './survey_preview_form.module.scss';\n\n// Disabled when adding max-props rule.\n// Future work should stay under 6 props\n// eslint-disable-next-line local-rules/max-props\nexport function SurveyPreviewForm({\n  isLoading,\n  isSubmitting,\n  logoUrl,\n  previewCompleted,\n  projectDetails,\n  publicSurvey,\n  surveySection,\n  teamName,\n  title,\n  onRestartPreview,\n  onSubmitSection,\n  optInForm,\n}) {\n  const titleWithDefaultName = title || ProjectDefaultName;\n  const pageTitlePrefix = surveySection?.title\n    ? `${surveySection.title} - `\n    : '';\n  const pageTitle = `${optInForm ? 'Opt-in form' : `${pageTitlePrefix}Survey`} preview - ${titleWithDefaultName}`;\n\n  const cardSize = useMemo(\n    () => determineCardSize(surveySection),\n    [surveySection],\n  );\n  const [submittedDefaultQuestions, setSubmittedDefaultQuestions] =\n    useState(false);\n\n  const handleRestartPreview = () => {\n    setSubmittedDefaultQuestions(false);\n    onRestartPreview();\n  };\n\n  const showEndPage =\n    previewCompleted ||\n    (optInForm && !optInForm.surveyId && submittedDefaultQuestions);\n\n  return (\n    <TitledPage title={pageTitle}>\n      <Flex\n        alignItems=\"center\"\n        className={styles.SurveyPreviewForm}\n        container\n        flexDirection=\"column\"\n      >\n        <PreviewBanner />\n        <CardStack size={cardSize}>\n          {optInForm ? (\n            <Header\n              isPreview\n              logoOnly={showEndPage}\n              logoUrl={optInForm.logoUrl}\n              optInFormDescription={optInForm.description}\n              optInFormTitle={optInForm.title}\n              teamName={optInForm.team.name}\n            />\n          ) : (\n            <SurveyPreviewFormHeader\n              cardSize={cardSize}\n              logoUrl={logoUrl}\n              projectDetails={projectDetails}\n              publicSurvey={publicSurvey}\n              teamName={teamName}\n              title={titleWithDefaultName}\n            />\n          )}\n\n          {showEndPage ? (\n            <SurveyPreviewEnd\n              isOptInForm={!!optInForm}\n              onRestartPreview={handleRestartPreview}\n            />\n          ) : optInForm && !submittedDefaultQuestions ? (\n            <DefaultQuestionsForm\n              isSubmitting={false}\n              optInForm={optInForm}\n              onSubmitForm={() => {\n                setSubmittedDefaultQuestions(true);\n              }}\n            />\n          ) : (\n            <SurveySectionForm\n              cardSize={cardSize}\n              isLoading={isLoading}\n              isSubmitting={isSubmitting}\n              surveySection={surveySection}\n              onSubmit={onSubmitSection}\n            />\n          )}\n        </CardStack>\n      </Flex>\n    </TitledPage>\n  );\n}\n\nSurveyPreviewForm.propTypes = {\n  isLoading: propTypes.bool.isRequired,\n  isSubmitting: propTypes.bool.isRequired,\n  logoUrl: propTypes.string,\n  optInForm: propTypes.object,\n  previewCompleted: propTypes.bool.isRequired,\n  projectDetails: propTypes.object,\n  publicSurvey: propTypes.bool.isRequired,\n  surveySection: surveySectionPropType,\n  teamName: propTypes.string,\n  title: propTypes.string,\n  onRestartPreview: propTypes.func.isRequired,\n  onSubmitSection: propTypes.func.isRequired,\n};\n\nSurveyPreviewForm.defaultProps = {\n  logoUrl: undefined,\n  projectDetails: undefined,\n  title: undefined,\n  surveySection: null,\n  teamName: undefined,\n  optInForm: null,\n};\n","import { useMemo, useState } from 'react';\n\nimport Http, { FormatResponse } from 'lib/http';\nimport { useTracking } from 'react-tracking';\nimport { reactTrackingEvent } from 'lib/analytics';\n\nconst defaultOnError = (error) => {\n  throw error;\n};\n\nconst defaultOnSuccess = FormatResponse.jsonApi({});\n\nfunction buildMakeRequest(method, setLoading, trackEvent) {\n  return async (\n    url,\n    { data = {}, onSuccess = defaultOnSuccess, onError = defaultOnError } = {},\n  ) => {\n    let start;\n    try {\n      setLoading(true);\n\n      start = performance.now();\n      const response = await Http[method].call(null, url, data);\n      return onSuccess(response);\n    } catch (error) {\n      return onError(error);\n    } finally {\n      setLoading(false);\n      const end = performance.now() - start;\n      const pageLocation = window.location.pathname\n        .replace(/\\/[0-9]+\\//g, '/:id/')\n        .replace(/\\/[0-9]+/g, '/:id');\n      // e.g.: Loading Page -- '/projects/:id/messages/:id'\n      trackEvent({\n        event: `Loading Page -- '${pageLocation.replace(/\\/+$/, '')}'`,\n        request_url: url,\n        timeSpent: end,\n      });\n    }\n  };\n}\n\nconst useHttp = () => {\n  const [loading, setLoading] = useState(false);\n  const { trackEvent } = useTracking({}, { dispatch: reactTrackingEvent });\n  /* eslint-disable react-hooks/exhaustive-deps */\n  return {\n    loading,\n    delete: useMemo(\n      () => buildMakeRequest('delete', setLoading, trackEvent),\n      [],\n    ),\n    get: useMemo(() => buildMakeRequest('get', setLoading, trackEvent), []),\n    patch: useMemo(() => buildMakeRequest('patch', setLoading, trackEvent), []),\n    post: useMemo(() => buildMakeRequest('post', setLoading, trackEvent), []),\n    put: useMemo(() => buildMakeRequest('put', setLoading, trackEvent), []),\n  };\n  /* eslint-enable react-hooks/exhaustive-deps */\n};\n\nexport default useHttp;\n","// extracted by mini-css-extract-plugin\nvar _1 = \"UokFfKCU9QXSNZeqVzXo\";\nexport { _1 as \"surveyFormCard\" }\n","import { useState, useEffect } from 'react';\n\nexport function useClientHasRendered() {\n  const [hasRendered, setHasRendered] = useState(false);\n\n  useEffect(() => {\n    setHasRendered(true);\n  }, []);\n\n  return hasRendered;\n}\n","// extracted by mini-css-extract-plugin\nvar _1 = \"YOsCC24vMmJnhxxroaTM\";\nvar _2 = \"oyAXtBQqnkJwvNfSs52I\";\nvar _3 = \"O_kOuR6klBqZbBwD3RGP\";\nvar _4 = \"WEsqjcSTHuv12vKvo46h\";\nexport { _1 as \"consentNotice\", _2 as \"consentNoticeBody\", _3 as \"optInFormPage\", _4 as \"submitButton\" }\n","import { useContext } from 'react';\nimport { SidebarContext } from '../../sidebar_context_provider';\n\nexport function useSidebarContext() {\n  return useContext(SidebarContext);\n}\n","/* eslint-disable camelcase */\nimport type {\n  RequestOperations,\n  PathParameters,\n  ResponseBody,\n} from 'lib/swagger_helper';\nimport * as routes from 'lib/routes';\nimport { apiSlice } from 'api/base_slice';\nimport { POPULATION_LABELS_TAG } from 'api/tag_types';\nimport { headersAndCredentials } from 'api/utils';\n\nexport type ParticipantPopulationLabelsRawResponse =\n  ResponseBody<'getParticipantPopulationLabels'>;\nexport type BulkParticipantPopulationLabelOperations =\n  RequestOperations<'bulkParticipantPopulationLabels'>;\n\nfunction transformResponse(response: ParticipantPopulationLabelsRawResponse) {\n  const { data } = response;\n\n  return data\n    .sort((a, b) => a.attributes.label.localeCompare(b.attributes.label))\n    .map((raw) => ({\n      ...raw.attributes,\n      id: raw.id,\n      meta: raw.meta,\n      // older code expects this transformation of API response state\n      value: raw.attributes.label,\n    }));\n}\n\nexport type ParticipantPopulationLabelsApiResponse = ReturnType<\n  typeof transformResponse\n>;\n\nexport const populationLabelsApi = apiSlice.injectEndpoints({\n  endpoints: (builder) => ({\n    getPopulationLabels: builder.query<\n      ParticipantPopulationLabelsApiResponse,\n      PathParameters<'getParticipantPopulationLabels'>\n    >({\n      query: ({ participant_population_id }) =>\n        routes.api_participant_population_labels_path(\n          participant_population_id,\n        ),\n      providesTags: [POPULATION_LABELS_TAG],\n      transformResponse,\n    }),\n    bulkPopulationLabels: builder.mutation<\n      unknown,\n      {\n        operations: BulkParticipantPopulationLabelOperations;\n      } & PathParameters<'bulkParticipantPopulationLabels'>\n    >({\n      query: ({ operations, participant_population_id }) => ({\n        url: routes.bulk_api_participant_population_labels_path(\n          participant_population_id,\n        ),\n        method: 'POST',\n        body: { 'atomic:operations': operations },\n        ...headersAndCredentials(),\n      }),\n      invalidatesTags: [POPULATION_LABELS_TAG],\n    }),\n  }),\n  overrideExisting: 'throw',\n});\n\nexport const { useGetPopulationLabelsQuery, useBulkPopulationLabelsMutation } =\n  populationLabelsApi;\n","// using the any type here until this endpoint gets RSwag.\n// The API has a lot of conditionally included resources  so its a bit of work\n// to tease it out.\nimport { merge } from 'lodash';\nimport * as routes from 'lib/routes';\nimport type { RequestBodyAttributes } from 'lib/swagger_helper';\n\nimport { deserializeJSONApiResponse, headersAndCredentials } from 'api/utils';\nimport { apiSlice } from 'api/base_slice';\nimport {\n  PROJECT_TAG,\n  PROJECT_COST_BREAKDOWN_TAG,\n  PROJECT_EXPECTED_COST_DETAILS_TAG,\n  PROJECT_PAYMENT_METHODS_TAG,\n  PROJECT_DEMOGRAPHIC_RULES_TAG,\n  PROJECT_AVAILABILITY_SETTINGS_TAG,\n  PARTICIPANT_MANAGEMENT_SHORTLISTED_PARTICIPANTS_TAG,\n} from 'api/tag_types';\n\nexport const projectsApi = apiSlice.injectEndpoints({\n  endpoints: (builder) => ({\n    getProject: builder.query<\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      any,\n      {\n        projectId: string;\n        include?: string;\n      }\n    >({\n      query: ({ projectId, include }) =>\n        routes.api_project_path(projectId, { include }),\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      transformResponse: (response: any) =>\n        merge(deserializeJSONApiResponse(response), {\n          meta: {\n            invalidLaunchMessages: response.meta?.invalidLaunchMessages,\n            invalidLaunchProps: response.meta?.invalidLaunchProps,\n            firstProjectId: response.meta?.firstProjectId,\n            canEdit: response.meta?.canEdit,\n          },\n        }),\n      providesTags: (_result, _error, { projectId }) => [\n        { type: PROJECT_TAG, id: projectId },\n      ],\n    }),\n    createProject: builder.mutation<\n      { id: string },\n      RequestBodyAttributes<'createProject'>\n    >({\n      query: (attributes) => ({\n        url: routes.api_projects_path(),\n        method: 'POST',\n        body: { data: { attributes, type: 'project' } },\n        ...headersAndCredentials(),\n      }),\n      transformResponse: deserializeJSONApiResponse,\n    }),\n    updateProject: builder.mutation<\n      unknown,\n      {\n        projectId: string;\n        skipProjectInvalidation?: boolean;\n        attributes: unknown;\n      }\n    >({\n      query: ({ projectId, attributes }) => ({\n        url: routes.api_project_path(projectId),\n        method: 'PATCH',\n        body: { data: { attributes } },\n        ...headersAndCredentials(),\n      }),\n      transformResponse: deserializeJSONApiResponse,\n      invalidatesTags: (\n        _result,\n        _error,\n        { projectId, skipProjectInvalidation },\n      ) => [\n        ...(skipProjectInvalidation\n          ? []\n          : [{ type: PROJECT_TAG, id: projectId } as const]),\n        { type: PROJECT_COST_BREAKDOWN_TAG, id: projectId },\n        { type: PROJECT_EXPECTED_COST_DETAILS_TAG, id: projectId },\n        { type: PROJECT_PAYMENT_METHODS_TAG, id: projectId },\n        { type: PROJECT_DEMOGRAPHIC_RULES_TAG, id: projectId },\n        {\n          type: PARTICIPANT_MANAGEMENT_SHORTLISTED_PARTICIPANTS_TAG,\n          id: 'LIST',\n        },\n        PROJECT_AVAILABILITY_SETTINGS_TAG,\n      ],\n    }),\n    deleteProject: builder.mutation<unknown, { projectId: string | number }>({\n      query: ({ projectId }) => ({\n        url: routes.api_project_path(projectId),\n        method: 'DELETE',\n        ...headersAndCredentials(),\n      }),\n      invalidatesTags: (_result, _error, { projectId }) => [\n        { type: PROJECT_TAG, id: projectId },\n      ],\n    }),\n  }),\n  overrideExisting: 'throw',\n});\n\nexport const {\n  useGetProjectQuery,\n  useCreateProjectMutation,\n  useUpdateProjectMutation,\n  useDeleteProjectMutation,\n} = projectsApi;\n","export const ACTIVITY_STEP = 'activity';\nexport const DETAILS_STEP = 'details';\nexport const EXPERIENCE_STEP = 'experience';\nexport const RECRUITMENT_STEP = 'recruitment';\nexport const SCHEDULING_DRAWER = 'scheduling_drawer';\nexport const PREPARATION_INSTRUCTIONS_DRAWER =\n  'preparation_instructions_drawer';\nexport const TASK_LOCATION_DRAWER = 'task_location_drawer';\nexport const RECRUITMENT_CRITERIA_DRAWER = 'recruitment_criteria_drawer';\nexport const SCREENER_SURVEY_DRAWER = 'screener_survey_drawer';\nexport const SCREENER_VIDEO_DRAWER = 'screener_video_drawer';\nexport const INTERNAL_TITLE_DESCRIPTION_MODAL =\n  'internal_title_description_modal';\nexport const URL_REGEX = /https?:\\/\\/\\w+((:\\d+)?\\/\\S*)?/;\nexport const URL_SECURED_REGEX = /^https:\\/\\/(?:[\\w-]+\\.)*[\\w-]+\\.\\w+(?:.*)?$/;\nexport const TRACKING_ID = 'TRACKINGID';\nexport const VALID_TRACKING_ID_REGEX =\n  /(?:\\/TRACKINGID(?:\\/|$)|[?&][^=]+=TRACKINGID(?:&|$))/;\nexport const COMPENSATION_TYPE_OTHER = 'Other';\nexport const CASH_COMPENSATION_OPTION = { label: 'Cash', value: 'Cash' };\nexport const OTHER_COMPENSATION_OPTION = {\n  label: 'Other',\n  value: COMPENSATION_TYPE_OTHER,\n};\nexport const VISA_GIFT_CARD_COMPENSATION_OPTION = {\n  label: 'Visa gift card',\n  value: 'Visa gift card',\n};\nexport const ALL_THEY_PAY_COMPENSATION_OPTIONS = [\n  CASH_COMPENSATION_OPTION,\n  VISA_GIFT_CARD_COMPENSATION_OPTION,\n  { label: 'Tango gift card', value: 'Tango gift card' },\n  { label: 'Amazon gift card', value: 'Amazon gift card' },\n  OTHER_COMPENSATION_OPTION,\n];\n\nexport const THEY_PAY_IN_PERSON_DEFAULT_COMPENSATION =\n  CASH_COMPENSATION_OPTION.value;\nexport const THEY_PAY_DEFAULT_COMPENSATION =\n  VISA_GIFT_CARD_COMPENSATION_OPTION.value;\n\nexport const THEY_PAY_COMPENSATION_OPTION_VALUES = [\n  'Visa gift card',\n  'Tango gift card',\n  'Amazon gift card',\n];\n\nexport const THEY_PAY_COMPENSATION_IN_PERSON_OPTION_VALUES = [\n  CASH_COMPENSATION_OPTION.value,\n  ...THEY_PAY_COMPENSATION_OPTION_VALUES,\n];\n\nexport const TOAST_PROJECT_UPDATE_SUCCESS = 'Project updated.';\n","import { useContext, useMemo } from 'react';\nimport AuthUserContext from 'common/authorization/auth_user_context';\n\nimport { MATCH_TYPES } from 'common/authorization/match_types';\n\nconst MATCH_HANDLERS = {\n  [MATCH_TYPES.ANY]: (permissions) => permissions.some.bind(permissions),\n  [MATCH_TYPES.ALL]: (permissions) => permissions.every.bind(permissions),\n};\n\nconst checkAuthorization = (config, authorization) => {\n  const { matchType = MATCH_TYPES.ALL, to, notTo } = config;\n  const hasAllowlist = to && to.length > 0;\n  const hasBlocklist = notTo && notTo.length > 0;\n  if (!hasAllowlist && !hasBlocklist) {\n    return false;\n  }\n\n  const authorize = (permissions, target) => {\n    const permissionsArray = [].concat(permissions);\n    const checkPermissions = MATCH_HANDLERS[matchType](permissionsArray);\n    return checkPermissions(\n      (permission) => (authorization[permission] === true) === target,\n    );\n  };\n\n  const authorizationList = [];\n  if (hasAllowlist) {\n    authorizationList.push(authorize(to, true));\n  }\n  if (hasBlocklist) {\n    authorizationList.push(authorize(notTo, false));\n  }\n\n  return authorizationList.every((auth) => auth === true);\n};\n\nconst useAuthorization = (config) => {\n  const { matchType = MATCH_TYPES.ALL } = config;\n  if (MATCH_HANDLERS[matchType] === undefined) {\n    throw new Error(`matchType must be one of: ${Object.keys(MATCH_HANDLERS)}`);\n  }\n\n  const context = useContext(AuthUserContext);\n  if (!context) {\n    throw new Error('useAuthorization invoked without AuthUserContext');\n  }\n\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  const authorization = context.authorization || {};\n\n  return useMemo(\n    () => checkAuthorization(config, authorization),\n    [config, authorization],\n  );\n};\n\nexport default useAuthorization;\n","import React from 'react';\n\nimport { Card, CardSizes, Text } from '@user-interviews/ui-design-system';\n\nimport * as propTypes from 'lib/prop_types';\n\nexport function EmptySurveyNotice({ isPreview }) {\n  return (\n    <Card size={CardSizes.SMALL}>\n      <Text size=\"lg\" textAlign=\"center\" weight=\"bold\">\n        The survey for this project is empty\n      </Text>\n\n      {isPreview && (\n        <Text textAlign=\"center\">\n          Please fill in at least one question completely in order to preview\n          the screener survey.\n        </Text>\n      )}\n    </Card>\n  );\n}\n\nEmptySurveyNotice.propTypes = {\n  isPreview: propTypes.bool.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport {\n  FormControlLabel,\n  RadioButton,\n} from '@user-interviews/ui-design-system';\n\nimport { surveyAnswerPropType, surveyQuestionPropType } from '../../prop_types';\n\n// Disabled when adding max-props rule.\n// Future work should stay under 6 props\n// eslint-disable-next-line local-rules/max-props\nexport function BooleanAnswerInput({\n  answer,\n  ariaLabel,\n  bordered,\n  className,\n  formValue,\n  hasError,\n  question,\n  text,\n  value,\n  onBlur,\n  onChange,\n}) {\n  const checked = answer.id === formValue.answerId;\n\n  return (\n    <FormControlLabel\n      aria-describedby={hasError ? `form-errors-required-${question.id}` : null}\n      aria-invalid={hasError ? 'true' : null}\n      aria-label={ariaLabel}\n      bordered={bordered}\n      checked={checked}\n      className={className}\n      Control={RadioButton}\n      id={`pick-one-${answer.id}`}\n      name={`answer-${answer.id}`}\n      text={text}\n      value={value}\n      onBlur={onBlur}\n      onChange={() =>\n        onChange({\n          ...formValue,\n          answerId: answer.id,\n          value: answer.text,\n        })\n      }\n    />\n  );\n}\n\nBooleanAnswerInput.propTypes = {\n  answer: surveyAnswerPropType.isRequired,\n  ariaLabel: propTypes.string,\n  bordered: propTypes.bool,\n  className: propTypes.string,\n  formValue: propTypes.shape({\n    answerId: propTypes.string,\n  }).isRequired,\n  hasError: propTypes.bool,\n  question: surveyQuestionPropType.isRequired,\n  text: propTypes.string,\n  value: propTypes.string.isRequired,\n  onBlur: propTypes.func.isRequired,\n  onChange: propTypes.func.isRequired,\n};\n\nBooleanAnswerInput.defaultProps = {\n  bordered: true,\n  text: '',\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"HA92JZT6dYLppDUNcg3j\";\nvar _2 = \"x1YStjE3cGRx32ImFmOz\";\nexport { _1 as \"PickManyAnswer\", _2 as \"PickOneAnswer\" }\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { RadioButtonGroup } from '@user-interviews/ui-design-system';\nimport { Controller, useFormContext } from 'react-hook-form';\n\nimport * as Constants from '../../constants';\n\nimport { surveyQuestionPropType } from '../../prop_types';\n\nimport { BooleanAnswerInput } from './boolean_answer_input';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as styles from './answer_input.module.scss';\n\nexport function BooleanAnswerInputGroup({ hasError, question }) {\n  const { control } = useFormContext();\n\n  const validate = (value) => {\n    if (question.isMandatory && value.answerId === null) {\n      return Constants.REQUIRED_ERROR_MESSAGE;\n    }\n    return null;\n  };\n\n  return (\n    <Controller\n      control={control}\n      defaultValue={{ answerId: null }}\n      name={`${Constants.BOOLEAN_INPUT_GROUP_KEY}.q${question.id}`}\n      render={({ field: { onBlur, onChange, value } }) => (\n        <RadioButtonGroup fullWidth>\n          {question.answers.map((answer) => (\n            <BooleanAnswerInput\n              answer={answer}\n              checked={answer.id === value.answerId}\n              className={styles.PickOneAnswer}\n              formValue={value}\n              hasError={hasError}\n              key={answer.id}\n              question={question}\n              text={answer.text}\n              value={answer.id}\n              onBlur={onBlur}\n              onChange={onChange}\n            />\n          ))}\n        </RadioButtonGroup>\n      )}\n      rules={{ validate }}\n    />\n  );\n}\n\nBooleanAnswerInputGroup.propTypes = {\n  hasError: propTypes.bool,\n  question: surveyQuestionPropType.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { DateTimePicker } from 'common/deprecated';\n\nimport { Controller, useFormContext } from 'react-hook-form';\n\nimport * as Constants from '../../constants';\n\nimport { surveyQuestionPropType } from '../../prop_types';\n\nexport function DateAnswerInput({ hasError, question }) {\n  const { control } = useFormContext();\n\n  const answer = question.answers[0];\n\n  const validate = (inputValue) => {\n    if (question.isMandatory && inputValue.value.trim() === '') {\n      return Constants.REQUIRED_ERROR_MESSAGE;\n    }\n    return null;\n  };\n\n  return (\n    <Controller\n      control={control}\n      defaultValue={{ answerId: answer.id, value: '' }}\n      name={`${Constants.DATE_INPUT_GROUP_KEY}.q${question.id}`}\n      render={({ field: { value, onChange } }) => (\n        <DateTimePicker\n          aria-describedby={\n            hasError ? `form-errors-required-${question.id}` : null\n          }\n          aria-invalid={hasError}\n          aria-required={question.isMandatory}\n          className=\"form-control\"\n          date={value.value}\n          dateViewMode=\"years\"\n          id={`question-input-${question.id}`}\n          showPickerEnforcedInput\n          onChangeDate={(event) =>\n            onChange({ answerId: answer.id, value: event.startDate })\n          }\n        />\n      )}\n      rules={{\n        validate,\n      }}\n    />\n  );\n}\n\nDateAnswerInput.propTypes = {\n  hasError: propTypes.bool.isRequired,\n  question: surveyQuestionPropType.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { Input } from '@user-interviews/ui-design-system';\nimport { Controller, useFormContext } from 'react-hook-form';\n\nimport * as Constants from '../../constants';\n\nimport { surveyQuestionPropType } from '../../prop_types';\n\nexport function FloatAnswerInput({ hasError, question }) {\n  const { control } = useFormContext();\n\n  const answer = question.answers[0];\n\n  const validate = (inputValue) => {\n    if (question.isMandatory && inputValue.value.trim() === '') {\n      return Constants.REQUIRED_ERROR_MESSAGE;\n    }\n    return null;\n  };\n\n  return (\n    <Controller\n      control={control}\n      defaultValue={{ answerId: answer.id, value: '' }}\n      name={`${Constants.FLOAT_INPUT_GROUP_KEY}.q${question.id}`}\n      render={({ field: { onBlur, onChange, ref } }) => (\n        <Input\n          aria-describedby={\n            hasError ? `form-errors-required-${question.id}` : null\n          }\n          aria-invalid={hasError}\n          aria-required={question.isMandatory}\n          className=\"form-control\"\n          id={`question-input-${question.id}`}\n          ref={ref}\n          type=\"number\"\n          onBlur={onBlur}\n          onChange={(e) =>\n            onChange({ answerId: answer.id, value: e.currentTarget.value })\n          }\n        />\n      )}\n      rules={{\n        validate,\n      }}\n    />\n  );\n}\n\nFloatAnswerInput.propTypes = {\n  hasError: propTypes.bool.isRequired,\n  question: surveyQuestionPropType.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { Input } from '@user-interviews/ui-design-system';\n\nimport { Controller, useFormContext } from 'react-hook-form';\nimport { useTracking } from 'react-tracking';\n\nimport { trackingEvents } from 'lib/analytics';\nimport { hasValidURL } from 'lib/has_valid_url';\nimport * as Constants from '../../constants';\n\nimport { surveyQuestionPropType } from '../../prop_types';\n\nexport function TextAnswerInput({ hasError, question }) {\n  const { control } = useFormContext();\n  const { trackEvent } = useTracking();\n\n  const answer = question.answers[0];\n  const answerType = answer.responseClass;\n  const isLongTextAnswer = answerType === Constants.RESPONSE_CLASS_TEXT;\n\n  const InputComponent = isLongTextAnswer ? 'textarea' : Input;\n  const inputGroupKey = isLongTextAnswer\n    ? Constants.LONG_ANSWER_INPUT_GROUP_KEY\n    : Constants.SHORT_ANSWER_INPUT_GROUP_KEY;\n\n  const sendPasteTrackingEvent = () => {\n    trackEvent({\n      event: trackingEvents.PARTICIPANT_SURVEY_RESPONSE_ANSWER_TEXT_PASTED,\n      question_id: question.id,\n    });\n  };\n\n  const handlePaste = (onChange, value, e) => {\n    const pastedContent = e.clipboardData.getData('text');\n\n    // Need to check if first the entire input value doesn't have URL and then if the pasted content doesn't have URL\n    const wasValidPaste =\n      !hasValidURL(e.target.value) && !hasValidURL(pastedContent);\n\n    if (wasValidPaste) {\n      sendPasteTrackingEvent();\n    }\n\n    onChange({\n      ...value,\n      responseDetailAttributes: { wasPasted: wasValidPaste },\n    });\n  };\n\n  const validate = (inputValue) => {\n    if (question.isMandatory && inputValue.value.trim() === '') {\n      return Constants.REQUIRED_ERROR_MESSAGE;\n    }\n    return null;\n  };\n\n  return (\n    <Controller\n      control={control}\n      defaultValue={{ answerId: answer.id, value: '' }}\n      name={`${inputGroupKey}.q${question.id}`}\n      render={({ field: { onBlur, onChange, ref, value } }) => (\n        <InputComponent\n          aria-describedby={\n            hasError ? `form-errors-required-${question.id}` : null\n          }\n          aria-invalid={hasError}\n          aria-required={question.isMandatory}\n          className=\"form-control\"\n          id={`question-input-${question.id}`}\n          ref={ref}\n          onBlur={onBlur}\n          onChange={(e) =>\n            onChange({\n              ...value,\n              answerId: answer.id,\n              value: e.currentTarget.value,\n            })\n          }\n          onPaste={(e) => handlePaste(onChange, value, e)}\n        />\n      )}\n      rules={{\n        validate,\n      }}\n    />\n  );\n}\n\nTextAnswerInput.propTypes = {\n  hasError: propTypes.bool.isRequired,\n  question: surveyQuestionPropType.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { SurveyBuilderConstants as Constants } from 'components/survey_builder';\n\nimport { surveyQuestionPropType } from '../../prop_types';\n\nimport { DateAnswerInput } from './date_answer_input';\nimport { FloatAnswerInput } from './float_answer_input';\nimport { TextAnswerInput } from './text_answer_input';\n\nexport function PickNoneInput({ hasError, question, responseClass }) {\n  switch (responseClass) {\n    case Constants.RESPONSE_CLASS_DATE: {\n      return <DateAnswerInput hasError={hasError} question={question} />;\n    }\n    case Constants.RESPONSE_CLASS_FLOAT: {\n      return <FloatAnswerInput hasError={hasError} question={question} />;\n    }\n    default: {\n      return <TextAnswerInput hasError={hasError} question={question} />;\n    }\n  }\n}\n\nPickNoneInput.propTypes = {\n  hasError: propTypes.bool.isRequired,\n  question: surveyQuestionPropType.isRequired,\n  responseClass: propTypes.string.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport {\n  FormControlLabel,\n  Input,\n  RadioButton,\n} from '@user-interviews/ui-design-system';\n\nimport { surveyAnswerPropType, surveyQuestionPropType } from '../../prop_types';\n\n// Disabled when adding max-props rule.\n// Future work should stay under 6 props\n// eslint-disable-next-line local-rules/max-props\nexport function PickOneAnswerInput({\n  answer,\n  ariaLabel,\n  bordered,\n  className,\n  formValue,\n  hasError,\n  isOtherAnswer,\n  question,\n  text,\n  value,\n  onBlur,\n  onChange,\n}) {\n  const checked = answer.id === formValue.answerId;\n\n  return (\n    <FormControlLabel\n      aria-describedby={hasError ? `form-errors-required-${question.id}` : null}\n      aria-invalid={hasError ? 'true' : null}\n      aria-label={ariaLabel}\n      bordered={bordered}\n      checked={checked}\n      className={className}\n      Control={RadioButton}\n      id={`pick-one-${answer.id}`}\n      name={`answer-${answer.id}`}\n      text={text}\n      value={value}\n      onBlur={onBlur}\n      onChange={() =>\n        onChange({\n          ...formValue,\n          answerId: answer.id,\n        })\n      }\n    >\n      {isOtherAnswer && checked && (\n        <Input\n          aria-label=\"Other input\"\n          autoComplete=\"off\"\n          name={`answer-${answer.id}-other-input`}\n          placeholder=\"Type your response here\"\n          type=\"text\"\n          value={formValue.responseOther}\n          onBlur={onBlur}\n          onChange={(e) =>\n            onChange({ ...formValue, responseOther: e.currentTarget.value })\n          }\n        />\n      )}\n    </FormControlLabel>\n  );\n}\n\nPickOneAnswerInput.propTypes = {\n  answer: surveyAnswerPropType.isRequired,\n  ariaLabel: propTypes.string,\n  bordered: propTypes.bool,\n  className: propTypes.string,\n  formValue: propTypes.shape({\n    answerId: propTypes.string,\n    otherAnswerId: propTypes.string,\n    responseOther: propTypes.string,\n  }).isRequired,\n  hasError: propTypes.bool,\n  isOtherAnswer: propTypes.bool,\n\n  question: surveyQuestionPropType.isRequired,\n  text: propTypes.string,\n  value: propTypes.string.isRequired,\n  onBlur: propTypes.func.isRequired,\n  onChange: propTypes.func.isRequired,\n};\n\nPickOneAnswerInput.defaultProps = {\n  bordered: true,\n  isOtherAnswer: false,\n  text: '',\n};\n","import React, { useMemo } from 'react';\nimport propTypes from 'prop-types';\n\nimport { RadioButtonGroup } from '@user-interviews/ui-design-system';\nimport { Controller, useFormContext } from 'react-hook-form';\n\nimport * as Constants from '../../constants';\n\nimport { surveyQuestionPropType } from '../../prop_types';\n\nimport { PickOneAnswerInput } from './pick_one_answer_input';\nimport { isOtherAnswer } from '../../utils';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as styles from './answer_input.module.scss';\n\nexport function PickOneAnswerInputGroup({ hasError, question }) {\n  const { control } = useFormContext();\n\n  const otherAnswerId = useMemo(\n    () => question.answers.find(isOtherAnswer)?.id,\n    [question.answers],\n  );\n\n  const validate = (value) => {\n    if (question.isMandatory && value.answerId === null) {\n      return Constants.REQUIRED_ERROR_MESSAGE;\n    }\n    if (\n      value.answerId === value.otherAnswerId &&\n      value.responseOther.trim() === ''\n    ) {\n      return Constants.REQUIRED_OTHER_VALUE_ERROR_MESSAGE;\n    }\n    return null;\n  };\n\n  return (\n    <Controller\n      control={control}\n      defaultValue={{ answerId: null, otherAnswerId, responseOther: '' }}\n      name={`${Constants.PICK_ONE_INPUT_GROUP_KEY}.q${question.id}`}\n      render={({ field: { onBlur, onChange, value } }) => (\n        <RadioButtonGroup fullWidth>\n          {question.answers.map((answer) => (\n            <PickOneAnswerInput\n              answer={answer}\n              checked={answer.id === value.answerId}\n              className={styles.PickOneAnswer}\n              formValue={value}\n              hasError={hasError}\n              isOtherAnswer={isOtherAnswer(answer)}\n              key={answer.id}\n              question={question}\n              text={answer.text}\n              value={answer.id}\n              onBlur={onBlur}\n              onChange={onChange}\n            />\n          ))}\n        </RadioButtonGroup>\n      )}\n      rules={{ validate }}\n    />\n  );\n}\n\nPickOneAnswerInputGroup.propTypes = {\n  hasError: propTypes.bool,\n  question: surveyQuestionPropType.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport {\n  CheckboxButton,\n  FormControlLabel,\n  Input,\n} from '@user-interviews/ui-design-system';\n\nimport { surveyAnswerPropType, surveyQuestionPropType } from '../../prop_types';\n\n// Disabled when adding max-props rule.\n// Future work should stay under 6 props\n// eslint-disable-next-line local-rules/max-props\nexport function PickManyAnswerInput({\n  answer,\n  ariaLabel,\n  bordered,\n  checked,\n  className,\n  formValue,\n  hasError,\n  isOtherAnswer,\n  question,\n  text,\n  value,\n  onBlur,\n  onChange,\n  onFormChange,\n}) {\n  return (\n    <FormControlLabel\n      aria-describedby={hasError ? `form-errors-required-${question.id}` : null}\n      aria-invalid={hasError ? 'true' : null}\n      aria-label={ariaLabel}\n      bordered={bordered}\n      checked={checked}\n      className={className}\n      Control={CheckboxButton}\n      id={`pick-many-${answer.id}`}\n      name={`answer-${answer.id}`}\n      text={text}\n      value={value}\n      onBlur={onBlur}\n      onChange={onChange}\n    >\n      {isOtherAnswer && checked && (\n        <Input\n          aria-label=\"Other input\"\n          autoComplete=\"off\"\n          name={`answer-${answer.id}-other-input`}\n          placeholder=\"Type your response here\"\n          type=\"text\"\n          value={formValue.responseOther}\n          onBlur={onBlur}\n          onChange={(e) =>\n            onFormChange({ ...formValue, responseOther: e.currentTarget.value })\n          }\n        />\n      )}\n    </FormControlLabel>\n  );\n}\n\nPickManyAnswerInput.propTypes = {\n  answer: surveyAnswerPropType.isRequired,\n  ariaLabel: propTypes.string,\n  bordered: propTypes.bool,\n  checked: propTypes.bool,\n  className: propTypes.string,\n  formValue: propTypes.shape({\n    answerIds: propTypes.arrayOf(propTypes.string),\n    otherAnswerId: propTypes.string,\n    responseOther: propTypes.string,\n  }).isRequired,\n  hasError: propTypes.bool,\n  isOtherAnswer: propTypes.bool,\n  question: surveyQuestionPropType.isRequired,\n  text: propTypes.string,\n  value: propTypes.string.isRequired,\n  onBlur: propTypes.func.isRequired,\n  onChange: propTypes.func,\n  onFormChange: propTypes.func.isRequired,\n};\n\nPickManyAnswerInput.defaultProps = {\n  bordered: true,\n  checked: true,\n  isOtherAnswer: false,\n  text: '',\n};\n","import React, { useMemo } from 'react';\nimport propTypes from 'prop-types';\n\nimport {\n  BUTTON_GROUP_ORIENTATIONS,\n  CheckboxButtonGroup,\n} from '@user-interviews/ui-design-system';\nimport { Controller, useFormContext } from 'react-hook-form';\n\nimport * as Constants from '../../constants';\n\nimport { surveyQuestionPropType } from '../../prop_types';\nimport { isOtherAnswer } from '../../utils';\nimport { PickManyAnswerInput } from './pick_many_answer_input';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as styles from './answer_input.module.scss';\n\nexport function PickManyAnswerInputGroup({ hasError, question }) {\n  const { control } = useFormContext();\n\n  const validate = (value) => {\n    if (question.isMandatory && value.answerIds.length === 0) {\n      return Constants.REQUIRED_ERROR_MESSAGE;\n    }\n    if (\n      value.answerIds.includes(value.otherAnswerId) &&\n      value.responseOther.trim() === ''\n    ) {\n      return Constants.REQUIRED_OTHER_VALUE_ERROR_MESSAGE;\n    }\n    return null;\n  };\n\n  const otherAnswerId = useMemo(\n    () => question.answers.find(isOtherAnswer)?.id,\n    [question.answers],\n  );\n\n  return (\n    <Controller\n      control={control}\n      defaultValue={{ answerIds: [], otherAnswerId, responseOther: '' }}\n      name={`${Constants.PICK_MANY_INPUT_GROUP_KEY}.q${question.id}`}\n      render={({ field: { onBlur, onChange, value } }) => (\n        <CheckboxButtonGroup\n          fullWidth\n          orientation={BUTTON_GROUP_ORIENTATIONS.COLUMN}\n          value={value.answerIds}\n          onChange={(answerIds) => onChange({ ...value, answerIds })}\n        >\n          {question.answers.map((answer) => (\n            <PickManyAnswerInput\n              answer={answer}\n              className={styles.PickManyAnswer}\n              formValue={value}\n              hasError={hasError}\n              isOtherAnswer={isOtherAnswer(answer)}\n              key={answer.id}\n              question={question}\n              text={answer.text}\n              value={answer.id}\n              onBlur={onBlur}\n              onFormChange={onChange}\n            />\n          ))}\n        </CheckboxButtonGroup>\n      )}\n      rules={{ validate }}\n    />\n  );\n}\n\nPickManyAnswerInputGroup.propTypes = {\n  hasError: propTypes.bool,\n  question: surveyQuestionPropType.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { SurveyBuilderConstants as Constants } from 'components/survey_builder';\n\nimport { surveyQuestionPropType } from '../../prop_types';\n\nimport { BooleanAnswerInputGroup } from './boolean_answer_input_group';\nimport { PickNoneInput } from './pick_none_input';\nimport { PickOneAnswerInputGroup } from './pick_one_answer_input_group';\nimport { PickManyAnswerInputGroup } from './pick_many_answer_input_group';\n\nexport function SurveyAnswerInput({ hasError, question }) {\n  const questionType = question.pick;\n\n  switch (questionType) {\n    // Checkboxes (multi select)\n    case Constants.QUESTION_PICK_ANY: {\n      return (\n        <PickManyAnswerInputGroup hasError={hasError} question={question} />\n      );\n    }\n    case Constants.QUESTION_PICK_NONE: {\n      return (\n        <PickNoneInput\n          hasError={hasError}\n          question={question}\n          responseClass={question.answers[0].responseClass}\n        />\n      );\n    }\n    // Multiple choice (single select)\n    case Constants.QUESTION_PICK_ONE: {\n      return (\n        <PickOneAnswerInputGroup hasError={hasError} question={question} />\n      );\n    }\n    case Constants.QUESTION_BOOLEAN: {\n      return (\n        <BooleanAnswerInputGroup hasError={hasError} question={question} />\n      );\n    }\n    default:\n      return null;\n  }\n}\n\nSurveyAnswerInput.propTypes = {\n  hasError: propTypes.bool.isRequired,\n  question: surveyQuestionPropType.isRequired,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"ILBcxXyXCENPij4UL4fo\";\nvar _2 = \"p6JM4REQqNxlVBlwuAZl\";\nvar _3 = \"Jk2P2vuiHOXpUfGZNswI\";\nvar _4 = \"hRA2Qn6L7rhxr3qIZjpG\";\nvar _5 = \"cbOYS__y6QB6yU24iRLC\";\nvar _6 = \"RSUA73EZ01e8EDJddczA\";\nvar _7 = \"za7SZ17NkDWv9ReSZ3qk\";\nvar _8 = \"JU1e1ADOvP5h7zxfFTAn\";\nvar _9 = \"ObNkJeEE6ThDAj_ZoTDI\";\nvar _a = \"hJpc4s4nS8vUj85nUyI8\";\nvar _b = \"LrtLOowUNvE_DYCR53CJ\";\nvar _c = \"J6809Ro14kPE2cVWP366\";\nvar _d = \"Ek0HgS_Wi2xViEOTuM1b\";\nvar _e = \"vDRS6NLjGcIJ1Fw8awq0\";\nvar _f = \"f7pGGkyu2K8u4OuJ4Rwz\";\nvar _10 = \"n4TFzGqqRCNK8AcQRYQr\";\nvar _11 = \"mAbmWaHsnpt6TBkODFgd\";\nexport { _1 as \"ApplySuccessCard__detail__date\", _2 as \"BillingInfoCard__column\", _3 as \"CopyToClipboard\", _4 as \"DataConsentNotice__content__preview__body\", _5 as \"MessageList__message__timestamp\", _6 as \"ParticipantProfile__participant-details__attribute-value\", _7 as \"ProjectCustomEmailSets\", _8 as \"ProjectListItem__status-date\", _9 as \"ProjectListing__detail\", _a as \"ProjectListing__details\", _b as \"TeamMemberInviterForm__section__invite-via-link\", _c as \"Title\", _d as \"UnmoderatedTask__deadline\", _e as \"btn-link--neutral\", _f as \"btn-outline-secondary\", _10 as \"participant-dashboard__project__info__status__string\", _11 as \"schedule-project-participant-page__time-slots\" }\n","import React from 'react';\n\nimport { FormGroup } from '@user-interviews/ui-design-system';\nimport { useFormState } from 'react-hook-form';\n\nimport * as Constants from '../constants';\n\nimport { surveyQuestionPropType } from '../prop_types';\nimport { SurveyAnswerInput } from './answer_input_components/survey_answer_input';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './survey_question_form_group.module.scss';\n\nexport function SurveyQuestionFormGroup({ question }) {\n  const { errors } = useFormState();\n\n  const questionType = question.pick;\n  const answerType = question.answers[0].responseClass;\n\n  const inputGroupKey = `${questionType}${answerType}`;\n  const inputKey = `q${question.id}`;\n  const hasError = !!errors[inputGroupKey]?.[inputKey];\n\n  const elementType =\n    questionType === Constants.QUESTION_PICK_NONE ? 'div' : 'fieldset';\n\n  return (\n    <FormGroup\n      displayErrorText={hasError}\n      elementType={elementType}\n      errors={errors[inputGroupKey]}\n      helperText={question.helpText}\n      id={`question-${question.id}`}\n      inputKey={inputKey}\n      label={question.text}\n      labelClassName={styles.Title}\n      labelHtmlFor={`question-input-${question.id}`}\n      required={question.isMandatory}\n    >\n      <SurveyAnswerInput hasError={hasError} question={question} />\n    </FormGroup>\n  );\n}\n\nSurveyQuestionFormGroup.propTypes = {\n  question: surveyQuestionPropType.isRequired,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"hj9aA5MuoiBtmXhMxSGO\";\nvar _2 = \"oVjoqtCL9b8CXoVMqxk2\";\nvar _3 = \"blQTHBXXn0g_65mEidIL\";\nvar _4 = \"a3OFMZu2lNxoT9774Hmi\";\nvar _5 = \"l6OUXcUK3U9XDnxrg1ta\";\nexport { _1 as \"AnswerTitleCell\", _2 as \"GridQuestion\", _3 as \"InputCell\", _4 as \"QuestionTitleCell\", _5 as \"Title\" }\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { Flex } from '@user-interviews/ui-design-system';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as styles from './grid_question.module.scss';\n\nexport function QuestionTitleCell({ title }) {\n  return (\n    <Flex\n      alignItems=\"center\"\n      className={styles.QuestionTitleCell}\n      container\n      justifyContent=\"flex-start\"\n    >\n      {title}\n    </Flex>\n  );\n}\n\nQuestionTitleCell.propTypes = {\n  title: propTypes.string,\n};\n\nQuestionTitleCell.defaultProps = {\n  title: '',\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { Flex } from '@user-interviews/ui-design-system';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as styles from './grid_question.module.scss';\n\nexport function AnswerTitleCell({ title }) {\n  return (\n    <Flex\n      alignItems=\"center\"\n      className={styles.AnswerTitleCell}\n      container\n      justifyContent=\"center\"\n    >\n      {title}\n    </Flex>\n  );\n}\n\nAnswerTitleCell.propTypes = {\n  title: propTypes.string,\n};\n\nAnswerTitleCell.defaultProps = {\n  title: '',\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { Flex } from '@user-interviews/ui-design-system';\n\nimport { surveyAnswerPropType } from '../../prop_types';\nimport { QuestionTitleCell } from './row_title_cell';\n\nimport { AnswerTitleCell } from './column_title_cell';\n\nexport function AnswerTitleRow({ answers }) {\n  return (\n    <Flex alignItems=\"stretch\" container>\n      <QuestionTitleCell />\n      {answers.map((answer) => (\n        <AnswerTitleCell key={`answer-${answer.id}`} title={answer.text} />\n      ))}\n    </Flex>\n  );\n}\n\nAnswerTitleRow.propTypes = {\n  answers: propTypes.arrayOf(surveyAnswerPropType).isRequired,\n};\n","import React from 'react';\n\nimport { Controller, useFormContext, useFormState } from 'react-hook-form';\n\nimport * as Constants from '../../constants';\nimport { surveyQuestionPropType } from '../../prop_types';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as styles from './grid_question.module.scss';\nimport { PickOneAnswerInput } from '../answer_input_components/pick_one_answer_input';\n\nexport function PickOneInputRow({ question }) {\n  const { control } = useFormContext();\n  const { errors } = useFormState();\n\n  const validate = (value) => {\n    if (question.isMandatory && value.answerId === null) {\n      return Constants.REQUIRED_ERROR_MESSAGE;\n    }\n    return null;\n  };\n\n  const inputKey = `q${question.id}`;\n  const hasError = !!errors[Constants.PICK_ONE_INPUT_GROUP_KEY]?.[inputKey];\n\n  return (\n    <Controller\n      control={control}\n      defaultValue={{ answerId: null }}\n      name={`${Constants.PICK_ONE_INPUT_GROUP_KEY}.q${question.id}`}\n      render={({ field: { onBlur, onChange, value } }) =>\n        question.answers.map((answer) => (\n          <PickOneAnswerInput\n            answer={answer}\n            ariaLabel={`${question.text}-${answer.text}`}\n            bordered={false}\n            className={styles.InputCell}\n            formValue={value}\n            hasError={hasError}\n            key={answer.id}\n            question={question}\n            value={answer.id}\n            onBlur={onBlur}\n            onChange={onChange}\n          />\n        ))\n      }\n      rules={{ validate }}\n    />\n  );\n}\n\nPickOneInputRow.propTypes = {\n  question: surveyQuestionPropType.isRequired,\n};\n","import React from 'react';\n\nimport {\n  BUTTON_GROUP_ORIENTATIONS,\n  CheckboxButtonGroup,\n} from '@user-interviews/ui-design-system';\nimport { Controller, useFormContext, useFormState } from 'react-hook-form';\n\nimport * as Constants from '../../constants';\nimport { surveyQuestionPropType } from '../../prop_types';\nimport { PickManyAnswerInput } from '../answer_input_components/pick_many_answer_input';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as styles from './grid_question.module.scss';\n\nexport function PickManyInputRow({ question }) {\n  const { control } = useFormContext();\n  const { errors } = useFormState();\n\n  const validate = (value) => {\n    if (question.isMandatory && value.answerIds.length === 0) {\n      return Constants.REQUIRED_ERROR_MESSAGE;\n    }\n    return null;\n  };\n\n  const inputKey = `q${question.id}`;\n  const hasError = !!errors[Constants.PICK_MANY_INPUT_GROUP_KEY]?.[inputKey];\n\n  return (\n    <Controller\n      control={control}\n      defaultValue={{ answerIds: [] }}\n      name={`${Constants.PICK_MANY_INPUT_GROUP_KEY}.q${question.id}`}\n      render={({ field: { onBlur, onChange, value } }) => (\n        <CheckboxButtonGroup\n          orientation={BUTTON_GROUP_ORIENTATIONS.ROW}\n          value={value.answerIds}\n          onChange={(answerIds) => onChange({ ...value, answerIds })}\n        >\n          {question.answers.map((answer) => (\n            <PickManyAnswerInput\n              answer={answer}\n              ariaLabel={`${question.text}-${answer.text}`}\n              bordered={false}\n              className={styles.InputCell}\n              formValue={value}\n              hasError={hasError}\n              key={answer.id}\n              question={question}\n              value={answer.id}\n              onBlur={onBlur}\n              onFormChange={onChange}\n            />\n          ))}\n        </CheckboxButtonGroup>\n      )}\n      rules={{ validate }}\n    />\n  );\n}\n\nPickManyInputRow.propTypes = {\n  question: surveyQuestionPropType.isRequired,\n};\n","import React from 'react';\n\nimport { Flex } from '@user-interviews/ui-design-system';\n\nimport { isPickOneQuestion } from 'lib/surveys/utils';\n\nimport { surveyQuestionPropType } from '../../prop_types';\n\nimport { PickOneInputRow } from './pick_one_input_row';\nimport { PickManyInputRow } from './pick_many_input_row';\nimport { QuestionTitleCell } from './row_title_cell';\n\nexport function QuestionInputRow({ question }) {\n  const isPickOne = isPickOneQuestion(question);\n  const InputRow = isPickOne ? PickOneInputRow : PickManyInputRow;\n\n  return (\n    <Flex alignItems=\"stretch\" container key={question.id}>\n      <QuestionTitleCell title={question.text} />\n      <InputRow question={question} />\n    </Flex>\n  );\n}\n\nQuestionInputRow.propTypes = {\n  question: surveyQuestionPropType.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport {\n  Flex,\n  FormGroup,\n  InputLegend,\n} from '@user-interviews/ui-design-system';\nimport { useFormState } from 'react-hook-form';\n\nimport { useSidebarMobileBreakpoint } from 'hooks/use_sidebar_mobile_breakpoint';\n\nimport { isPickOneQuestion } from 'lib/surveys/utils';\n\nimport * as Constants from '../../constants';\nimport { surveyQuestionPropType } from '../../prop_types';\n\nimport { SurveyQuestionFormGroup } from '../survey_question_form_group';\nimport { AnswerTitleRow } from './answer_title_row';\nimport { QuestionInputRow } from './question_input_row';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as styles from './grid_question.module.scss';\n\nexport function GridQuestionFormGroup({ questions, questionGroup }) {\n  const { errors } = useFormState();\n  const isMobile = useSidebarMobileBreakpoint();\n\n  if (isMobile) {\n    return (\n      <div>\n        <InputLegend className={styles.Title} text={questionGroup.text} />\n        {questions.map((question) => (\n          <SurveyQuestionFormGroup key={question.id} question={question} />\n        ))}\n      </div>\n    );\n  }\n\n  const isPickOneGrid = isPickOneQuestion(questions[0]);\n  const inputGroupKey = isPickOneGrid\n    ? Constants.PICK_ONE_INPUT_GROUP_KEY\n    : Constants.PICK_MANY_INPUT_GROUP_KEY;\n\n  const someQuestionWithError = questions.find((question) => {\n    const inputKey = `q${question.id}`;\n    return !!errors[inputGroupKey]?.[inputKey];\n  });\n\n  const gridHasErrors = !!someQuestionWithError;\n\n  return (\n    <FormGroup\n      displayErrorText={gridHasErrors}\n      elementType=\"fieldset\"\n      errors={errors[inputGroupKey]}\n      id={`question-group-${questionGroup.id}`}\n      inputKey={`q${someQuestionWithError?.id}`}\n      label={questionGroup.text}\n      labelClassName={styles.Title}\n      required={questionGroup.isMandatory}\n    >\n      <Flex className={styles.GridQuestion} container flexDirection=\"column\">\n        <AnswerTitleRow answers={questions[0].answers} />\n\n        {questions.map((question) => (\n          <QuestionInputRow key={question.id} question={question} />\n        ))}\n      </Flex>\n    </FormGroup>\n  );\n}\n\nGridQuestionFormGroup.propTypes = {\n  questionGroup: propTypes.object.isRequired,\n  questions: propTypes.arrayOf(surveyQuestionPropType).isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { Card, CardSizes } from '@user-interviews/ui-design-system';\n\nimport {\n  QuestionEntityType,\n  groupQuestionsByQuestionGroup,\n} from 'lib/surveys/utils';\n\nimport { surveySectionPropType } from '../prop_types';\nimport { SurveyQuestionFormGroup } from './survey_question_form_group';\nimport { SurveySectionLoadingSkeleton } from './survey_section_loading_skeleton';\nimport { GridQuestionFormGroup } from './grid_question_components/grid_question_form_group';\n\nimport * as styles from './survey_section_form_card.module.css';\n\nexport function SurveySectionFormCard({ cardSize, isLoading, surveySection }) {\n  return (\n    <Card\n      className={styles.surveyFormCard}\n      isLoading={isLoading}\n      loadingSkeleton={<SurveySectionLoadingSkeleton />}\n      size={cardSize}\n    >\n      {surveySection?.questions &&\n        groupQuestionsByQuestionGroup(surveySection.questions).map(\n          (formQuestion) => {\n            if (formQuestion.type === QuestionEntityType.QUESTION_GROUP) {\n              return (\n                <GridQuestionFormGroup\n                  key={`questionGroup${formQuestion.questionGroup.id}`}\n                  questionGroup={formQuestion.questionGroup}\n                  questions={formQuestion.questions}\n                />\n              );\n            }\n            return (\n              <SurveyQuestionFormGroup\n                key={formQuestion.question.id}\n                question={formQuestion.question}\n              />\n            );\n          },\n        )}\n    </Card>\n  );\n}\n\nSurveySectionFormCard.propTypes = {\n  cardSize: propTypes.oneOf(Object.values(CardSizes)).isRequired,\n  isLoading: propTypes.bool.isRequired,\n  surveySection: surveySectionPropType,\n};\n\nSurveySectionFormCard.defaultProps = {\n  surveySection: null,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"x9Tc9GtCL3e7uWDwKjk1\";\nvar _2 = \"KzlzgutiWZmNk6Dye58k\";\nvar _3 = \"V_xMq6LtZZzIe9PR5nNw\";\nvar _4 = \"ovbRTwL2drd6wWYhZ7Sw\";\nvar _5 = \"_oszdEFGMTYE2OK5IsI8\";\nvar _6 = \"vzN_jBtAT2P9uRcthE3h\";\nvar _7 = \"Vd7cbniNsbpcG4Lb5jr3\";\nvar _8 = \"AUA3ycgVna3BV8BFjkfp\";\nvar _9 = \"EOATJgr5hwkAWK50xCMA\";\nvar _a = \"aD9x7QLAFSRiC4e7jJRd\";\nvar _b = \"Nw99pxwUc9QsdexW0cKF\";\nvar _c = \"d6CLJV_HcHHYHh1XBTzY\";\nvar _d = \"MkwkpMGEpGsnzFMVHJci\";\nvar _e = \"dhzr9_1WaZcuV1Mhgw1g\";\nvar _f = \"GEVPybDvBhfAi0U2czOw\";\nvar _10 = \"loiXLD8kUW2iEPTaByxw\";\nvar _11 = \"BgmFhi6ImB7rIoMVrhaE\";\nexport { _1 as \"ApplySuccessCard__detail__date\", _2 as \"BillingInfoCard__column\", _3 as \"CopyToClipboard\", _4 as \"DataConsentNotice__content__preview__body\", _5 as \"MessageList__message__timestamp\", _6 as \"ParticipantProfile__participant-details__attribute-value\", _7 as \"ProjectCustomEmailSets\", _8 as \"ProjectListItem__status-date\", _9 as \"ProjectListing__detail\", _a as \"ProjectListing__details\", _b as \"SubmitButton\", _c as \"TeamMemberInviterForm__section__invite-via-link\", _d as \"UnmoderatedTask__deadline\", _e as \"btn-link--neutral\", _f as \"btn-outline-secondary\", _10 as \"participant-dashboard__project__info__status__string\", _11 as \"schedule-project-participant-page__time-slots\" }\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { Button, CardSizes } from '@user-interviews/ui-design-system';\n\nimport { EmptySurveyNotice } from './empty_survey_notice';\nimport { surveySectionPropType } from '../prop_types';\nimport { SurveySectionFormCard } from './survey_section_form_card';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './survey_section_form.module.scss';\n\nexport function SurveySectionForm({\n  cardSize,\n  isLoading,\n  isSubmitting,\n  surveySection,\n  onSubmit,\n}) {\n  const surveyIsEmpty = !(isLoading || isSubmitting || surveySection);\n\n  if (surveyIsEmpty) return <EmptySurveyNotice isPreview />;\n\n  return (\n    <>\n      <SurveySectionFormCard\n        cardSize={cardSize}\n        isLoading={isLoading}\n        surveySection={surveySection}\n      />\n      {!isLoading && (\n        <div>\n          <Button\n            className={styles.SubmitButton}\n            disabled={isSubmitting}\n            isLoading={isSubmitting}\n            loadingText=\"Submitting\"\n            onClick={onSubmit}\n          >\n            Continue\n          </Button>\n        </div>\n      )}\n    </>\n  );\n}\n\nSurveySectionForm.propTypes = {\n  cardSize: propTypes.oneOf(Object.values(CardSizes)).isRequired,\n  isLoading: propTypes.bool.isRequired,\n  isSubmitting: propTypes.bool.isRequired,\n  surveySection: surveySectionPropType,\n  onSubmit: propTypes.func.isRequired,\n};\n\nSurveySectionForm.defaultProps = {\n  surveySection: null,\n};\n","import React, { createContext, useContext, useMemo } from 'react';\nimport propTypes from 'prop-types';\n\nimport {\n  Toast,\n  useToast,\n  MessageTypes,\n} from '@user-interviews/ui-design-system';\nimport { useTracking } from 'react-tracking';\nimport { connectedCalendarDetailsPropType } from 'components/connect_calendar/prop_types';\nimport { useAuthUserContext } from 'hooks/use_auth_user_context';\nimport { type SyncTrackingHook } from 'hooks/use_tracking_with_default_dispatch';\n\ntype ProjectWorkspaceProviderProps = {\n  children: React.ReactNode;\n\n  projectId: string;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  connectedCalendarDetails?: any;\n  serverProject?: {\n    isDraft: boolean;\n    isPrivate: boolean | null;\n    isUnmoderatedTask: boolean | null;\n  };\n};\n\ntype ProjectWorkspaceContextType = Omit<\n  ProjectWorkspaceProviderProps,\n  'children'\n> & {\n  setToastMessage: (options: {\n    title?: string;\n    type: (typeof MessageTypes)[keyof typeof MessageTypes];\n    message: string;\n  }) => void;\n};\n\nconst ProjectWorkspaceContext = createContext<ProjectWorkspaceContextType>(\n  {} as ProjectWorkspaceContextType,\n);\n\nexport function ProjectWorkspaceProvider({\n  children,\n  connectedCalendarDetails,\n  projectId,\n  serverProject,\n}: ProjectWorkspaceProviderProps) {\n  const authUserContext = useAuthUserContext();\n  const { dismissMessage, messages, setMessage } = useToast();\n\n  const { Track } = useTracking({\n    eventData: {\n      project_id: projectId,\n      ...(authUserContext?.account && {\n        account_id: authUserContext.account.id,\n      }),\n      ...(authUserContext?.user && { user_id: authUserContext.user.id }),\n    },\n  }) as SyncTrackingHook;\n\n  const contextValue = useMemo(\n    () => ({\n      connectedCalendarDetails,\n      projectId,\n      serverProject,\n      setToastMessage: setMessage,\n    }),\n    [connectedCalendarDetails, projectId, serverProject, setMessage],\n  );\n\n  return (\n    <ProjectWorkspaceContext.Provider value={contextValue}>\n      <Toast autoDismiss messages={messages} onToastClosed={dismissMessage} />\n      <Track>{children}</Track>\n    </ProjectWorkspaceContext.Provider>\n  );\n}\n\nProjectWorkspaceProvider.propTypes = {\n  connectedCalendarDetails: connectedCalendarDetailsPropType,\n  projectId: propTypes.string.isRequired,\n  serverProject: propTypes.object,\n};\n\n/**\n * Hook to access the project workspace context.\n *\n * @returns {ProjectWorkspaceContextType} The project workspace context containing:\n * - projectId: The ID of the current project\n * - connectedCalendarDetails: Details about connected calendar integrations\n * - serverProject: Server-side project data including draft/private/unmoderated status\n * - setToastMessage: Function to display toast notifications with title, type and message\n */\nexport function useProjectWorkspaceContext() {\n  return useContext(ProjectWorkspaceContext);\n}\n","// extracted by mini-css-extract-plugin\nvar _1 = \"ONzAHOqFKurN8664tjwW\";\nvar _2 = \"j9jIL9pnpe0UwHgLJFkK\";\nvar _3 = \"CpsWnPNGtEunMv4OObmf\";\nexport { _1 as \"Answer\", _2 as \"QuestionGroup\", _3 as \"QuestionTitle\" }\n","import React from 'react';\n\nimport { LoadingSkeleton } from '@user-interviews/ui-design-system';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './survey_section_loading_skeleton.module.scss';\n\nexport const TEST_ID = 'SurveySectionLoadingSkeleton';\n\nconst QUESTION_TITLE_HEIGHT = 14;\nconst QUESTION_TITLE_WIDTH = '40%';\nconst QUESTION_ANSWER_HEIGHT = 54;\nconst QUESTION_ANSWER_WIDTH = '100%';\n\nconst TOTAL_QUESTION_GROUPS = 2;\n\nexport function SurveySectionLoadingSkeleton() {\n  return (\n    <div data-testid={TEST_ID}>\n      {[...Array(TOTAL_QUESTION_GROUPS).keys()].map((key) => (\n        <div className={styles.QuestionGroup} key={key}>\n          <LoadingSkeleton\n            className={styles.QuestionTitle}\n            height={QUESTION_TITLE_HEIGHT}\n            width={QUESTION_TITLE_WIDTH}\n          />\n          <LoadingSkeleton\n            className={styles.Answer}\n            count={2}\n            height={QUESTION_ANSWER_HEIGHT}\n            width={QUESTION_ANSWER_WIDTH}\n          />\n        </div>\n      ))}\n    </div>\n  );\n}\n","import * as propTypes from 'lib/prop_types';\n\nexport const surveyAnswerPropType = propTypes.shape({\n  displayOrder: propTypes.number,\n  id: propTypes.string,\n  qualifyLogic: propTypes.string,\n  qualifyLogicDisplay: propTypes.string,\n  responseClass: propTypes.string,\n  text: propTypes.string,\n  uuid: propTypes.string,\n});\n\nexport const surveyQuestionPropType = propTypes.shape({\n  answers: propTypes.arrayOf(surveyAnswerPropType),\n  displayOrder: propTypes.number,\n  id: propTypes.string,\n  isKey: propTypes.bool,\n  isMandatory: propTypes.bool,\n  pick: propTypes.string,\n  text: propTypes.string,\n  uuid: propTypes.string,\n});\n\nexport const surveySkipLogicConditionPropType = propTypes.shape({\n  answerId: propTypes.string,\n  id: propTypes.string,\n  operator: propTypes.string,\n  questionId: propTypes.string,\n  uuid: propTypes.string,\n});\n\nexport const surveySkipLogicPropType = propTypes.shape({\n  id: propTypes.string,\n  joinMethod: propTypes.string,\n  skipLogicConditions: propTypes.arrayOf(surveySkipLogicConditionPropType),\n  targetSectionId: propTypes.string,\n  uuid: propTypes.string,\n});\n\nexport const surveySectionPropType = propTypes.shape({\n  displayOrder: propTypes.number,\n  id: propTypes.string,\n  questions: propTypes.arrayOf(surveyQuestionPropType),\n  skipLogics: propTypes.arrayOf(surveySkipLogicPropType),\n  title: propTypes.string,\n  uuid: propTypes.string,\n});\n\nexport const participantScreenerKeyPropType = propTypes.shape({\n  key: propTypes.string.isRequired,\n  participant_id: propTypes.number.isRequired,\n});\n","/* eslint-disable no-param-reassign */\nimport { createSlice, isAnyOf } from '@reduxjs/toolkit';\n\nimport { populationAttributesApi } from 'api/population_attributes';\n\nimport { accountHubConfigurationsApi } from 'api/account_hub_configurations';\n\nimport {\n  rearrangeColumnOrder,\n  updateHiddenColumns,\n} from 'researcher/participant_search/filtered_view/utils';\n\nconst matchPopulationAttributesFetched = isAnyOf(\n  populationAttributesApi.endpoints.getPopulationAttributes.matchFulfilled,\n);\n\nconst matchAccountHubConfigurationsFetched = isAnyOf(\n  accountHubConfigurationsApi.endpoints.getAccountHubConfigurations\n    .matchFulfilled,\n);\n\nconst initialState = {\n  columnOrder: [],\n  hiddenColumns: [],\n  populationAttributes: [],\n};\n\nexport const columnConfigurationSlice = createSlice({\n  name: 'columnConfiguration',\n  initialState,\n  reducers: {\n    HIDE_ALL_COLUMNS: (state, action) => {\n      const { columns } = action.payload;\n\n      const columnAccessors = columns.map((column) => column.accessor);\n\n      state.hiddenColumns = columnAccessors;\n    },\n    REORDER_COLUMNS: (state, action) => {\n      const { activeAccessor, currentColumnOrder, overAccessor } =\n        action.payload;\n\n      const reorderedColumns = rearrangeColumnOrder({\n        activeAccessor,\n        columnOrder: currentColumnOrder,\n        overAccessor,\n      });\n\n      state.columnOrder = reorderedColumns;\n    },\n    SHOW_ALL_COLUMNS: (state) => {\n      state.hiddenColumns = [];\n    },\n    TOGGLE_HIDDEN_COLUMN: (state, action) => {\n      const { hiddenColumns } = state;\n\n      const { accessor } = action.payload;\n\n      const updatedHiddenColumns = updateHiddenColumns(accessor, hiddenColumns);\n\n      state.hiddenColumns = updatedHiddenColumns;\n    },\n  },\n  extraReducers(builder) {\n    builder.addMatcher(matchPopulationAttributesFetched, (state, action) => {\n      const populationAttributes = action.payload;\n\n      return {\n        ...state,\n        populationAttributes,\n      };\n    });\n    builder.addMatcher(\n      matchAccountHubConfigurationsFetched,\n      (state, action) => {\n        const columnOrder = action.payload?.settings?.columns.order;\n        const hiddenColumns = action.payload?.settings?.columns.hidden || [];\n\n        return {\n          ...state,\n          columnOrder,\n          hiddenColumns,\n        };\n      },\n    );\n  },\n});\n\nexport const {\n  HIDE_ALL_COLUMNS,\n  REORDER_COLUMNS,\n  SHOW_ALL_COLUMNS,\n  TOGGLE_HIDDEN_COLUMN,\n} = columnConfigurationSlice.actions;\n\nexport const columnConfigurationSliceReducer = columnConfigurationSlice.reducer;\n","// eslint-disable-next-line no-restricted-imports\nimport { getCSRFToken } from 'lib/csrf';\n\nimport Jsona from 'jsona';\n\nexport const dataFormatter = new Jsona();\n\nconst ACCEPT_V1_HEADER = 'application/json';\nexport const ACCEPT_V2_HEADER = 'application/vnd.user-interviews.v2';\n\nexport const headersAndCredentials = (accept = ACCEPT_V1_HEADER) => ({\n  headers: {\n    Accept: accept,\n    'X-Requested-With': 'XMLHTTPRequest',\n    'X-CSRF-Token': getCSRFToken() as string | undefined,\n  },\n  credentials: 'same-origin' as RequestCredentials,\n});\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const deserializeJSONApiResponse = (response: any) =>\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  dataFormatter.deserialize(response) as any;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const deserializeJSONApiResponseWithMeta = (response: any) => {\n  const data = dataFormatter.deserialize(response);\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return { data: data as any, meta: response.meta as any };\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const parseJSONApiResponse = (schema: Zod.Schema) => (response: any) =>\n  schema.parse(deserializeJSONApiResponse(response));\n\nexport const parseJSONApiResponseWithMeta =\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  (schema: Zod.Schema) => (response: any) =>\n    schema.parse(deserializeJSONApiResponseWithMeta(response));\n\nconst sortAlphabeticalByKey = <T>(objectArray: T[], key: keyof T) =>\n  objectArray.sort((a, b) =>\n    (a[key] as string).localeCompare(b[key] as string),\n  );\n\nexport const sortAlphabeticalByName = <T>(\n  objectArray: Array<T & { name: string }>,\n) => sortAlphabeticalByKey(objectArray, 'name');\n\nexport const sortAlphabeticalByTitle = <T>(\n  objectArray: Array<T & { title: string }>,\n) => sortAlphabeticalByKey(objectArray, 'title');\n","import React, {\n  createContext,\n  useMemo,\n  useContext,\n  type ReactNode,\n} from 'react';\nimport { type JSClient } from '@appsignal/types';\nimport { Ownership } from 'lib/generated_constants/ownership';\n\nconst OwnershipContext = createContext<{\n  owner: Ownership | 'frontend';\n  logError: (error: Error) => void;\n} | null>(null);\n\ntype OwnershipProviderProps = {\n  owner: Ownership | 'frontend';\n  appsignal: JSClient | null;\n  children: ReactNode;\n};\n\nfunction fallbackErrorLogger(error: Error) {\n  // eslint-disable-next-line no-console\n  console.error(error);\n}\n\nexport function OwnershipProvider({\n  owner,\n  appsignal,\n  children,\n}: OwnershipProviderProps) {\n  const contextValue = useMemo(\n    () => ({\n      owner,\n      logError: appsignal ? appsignal.sendError : fallbackErrorLogger,\n    }),\n    [appsignal, owner],\n  );\n\n  return (\n    <OwnershipContext.Provider value={contextValue}>\n      {children}\n    </OwnershipContext.Provider>\n  );\n}\n\nexport function useOwnershipContext() {\n  const ownershipContext = useContext(OwnershipContext);\n  const logError = useMemo(\n    () => (ownershipContext ? ownershipContext.logError : () => {}),\n    [ownershipContext],\n  );\n\n  if (!ownershipContext) {\n    return {\n      owner: 'frontend' as const,\n      logError,\n    };\n  }\n\n  return ownershipContext;\n}\n","export const HUB_INVITE_RULES_HEADER = 'Edit Hub invite rules';\n\nexport const PROJECT_INVITE_LIMIT_TITLE = 'Project invite limits';\n\nexport const PROJECT_INVITE_LIMIT_MIN = 1;\nexport const PROJECT_INVITE_LIMIT_MAX = 99;\n\nexport const PROJECT_INVITE_LIMIT_OUT_OF_RANGE_ERROR = `Project invite limit must be between ${PROJECT_INVITE_LIMIT_MIN} and ${PROJECT_INVITE_LIMIT_MAX}.`;\n\nexport const PROJECT_INVITE_LIMIT_ENABLED_ERROR =\n  'Please enter a number to set your project invite limit.';\n\nexport const PROJECT_INVITE_LIMIT_INPUT_LABEL = 'Project invite multiplier';\nexport const PROJECT_INVITE_LIMIT_ENABLED_LABEL =\n  'Project invite multiplier enabled';\n\nexport const PROJECT_INVITE_LIMIT_TEXT =\n  'Set the maximum number of invites a researcher can send per project to prevent over recruiting. ' +\n  \"Invitation limits are set as a multiple of a project's requested participants.\";\nexport const PROJECT_INVITE_LIMIT_LINK_TEXT =\n  'Learn more about invitation limits';\nexport const PROJECT_INVITE_LIMIT_FORM_TEXT =\n  'x number of requested participants on project';\n\nexport const INVITE_FILTER_RULES_TITLE = 'Invite filter rules';\n\nexport const PUBLISH_INVITE_RULES = 'Publish changes';\n\nexport const PUBLISH_INVITE_RULES_SUCCESS_MESSAGE =\n  'Changes to Hub invite rules saved successfully';\nexport const PUBLISH_INVITE_RULES_ERROR_MESSAGE =\n  'There was an error saving Hub invite rules';\n\nexport const UNSUBSCRIBED_FILTER_KEY = 'unsubscribed';\n\nexport const UNSUBSCRIBED_PARTICIPANT_ALERT_MESSAGE =\n  'Unsubscribed participants are automatically excluded from invites.';\n\nexport const MULTI_TEAM_ORG_ALERT_MESSAGE =\n  'Invite rules affect all teams within your organization.';\n","import * as routes from 'lib/routes';\n\nimport { apiSlice } from 'api/base_slice';\n\nimport { SEGMENTS_TAG } from 'api/tag_types';\nimport {\n  deserializeJSONApiResponse,\n  headersAndCredentials,\n  sortAlphabeticalByName,\n} from 'api/utils';\n\nexport const segmentsApi = apiSlice.injectEndpoints({\n  endpoints: (builder) => ({\n    createSegment: builder.mutation({\n      query: ({\n        filterParams,\n        participantPopulationId,\n        teamId,\n        populationPanelId,\n        teamRoleId,\n      }) => {\n        // TODO: RS-15240 Update this to use V2 API\n        const { filterName, filters } = filterParams;\n        const params = {\n          filter_name: filterName,\n          filters: filters,\n          participant_population_id: participantPopulationId,\n          team_role_id: teamRoleId,\n          ...(populationPanelId\n            ? { population_panel_id: populationPanelId }\n            : { team_id: teamId }),\n        };\n\n        return {\n          url: routes.create_participant_population_search_filter_path({\n            participant_population_id: participantPopulationId,\n          }),\n          method: 'POST',\n          body: params,\n          ...headersAndCredentials(),\n        };\n      },\n      invalidatesTags: [SEGMENTS_TAG],\n    }),\n    deleteSegment: builder.mutation({\n      query: ({ populationId, segmentId }) => ({\n        url: routes.api_participant_population_segment_path(segmentId, {\n          participant_population_id: populationId,\n        }),\n        method: 'DELETE',\n        ...headersAndCredentials(),\n      }),\n      invalidatesTags: (result, error, { segmentId }) => [\n        { type: SEGMENTS_TAG, id: segmentId },\n      ],\n    }),\n    duplicateSegment: builder.mutation({\n      query: ({ populationId, segmentId, teamRoleId, attributes }) => ({\n        url: routes.api_participant_population_segment_duplicate_path(\n          segmentId,\n          {\n            participant_population_id: populationId,\n            team_role_id: teamRoleId,\n          },\n        ),\n        method: 'POST',\n        body: { data: { attributes } },\n        ...headersAndCredentials(),\n      }),\n      invalidatesTags: (result, error, { populationId }) => [\n        { type: SEGMENTS_TAG, id: populationId },\n      ],\n      transformResponse: deserializeJSONApiResponse,\n    }),\n    getSegments: builder.query({\n      query: ({ populationId, teamId, populationPanelId }) =>\n        routes.api_participant_population_segments_path({\n          participant_population_id: populationId,\n          ...(populationPanelId\n            ? { population_panel_id: populationPanelId }\n            : { team_id: teamId }),\n        }),\n      providesTags: (result, error, { populationId }) => [\n        { type: SEGMENTS_TAG, id: populationId },\n        ...(result?.data\n          ? result.data.map(({ id }) => ({ type: SEGMENTS_TAG, id }))\n          : []),\n      ],\n      transformResponse: (response) => {\n        const data = sortAlphabeticalByName(\n          deserializeJSONApiResponse(response),\n        );\n        const { meta } = response;\n        return { data, meta };\n      },\n    }),\n\n    updateSegment: builder.mutation({\n      query: ({ populationId, segmentId, attributes }) => ({\n        url: routes.api_participant_population_segment_path(segmentId, {\n          participant_population_id: populationId,\n        }),\n        method: 'PATCH',\n        body: { data: { attributes } },\n        ...headersAndCredentials(),\n      }),\n      invalidatesTags: (result, error, { segmentId }) => [\n        { type: SEGMENTS_TAG, id: segmentId },\n      ],\n      transformResponse: deserializeJSONApiResponse,\n    }),\n  }),\n  overrideExisting: 'throw',\n});\n\nexport const {\n  useCreateSegmentMutation,\n  useDeleteSegmentMutation,\n  useDuplicateSegmentMutation,\n  useGetSegmentsQuery,\n  useUpdateSegmentMutation,\n} = segmentsApi;\n","import { apiSlice } from 'api/base_slice';\nimport * as routes from 'lib/routes';\nimport {\n  deserializeJSONApiResponse,\n  headersAndCredentials,\n  sortAlphabeticalByTitle,\n} from 'api/utils';\nimport { OPT_IN_FORMS_TAG } from 'api/tag_types';\n\nexport const participantPopulationOptInFormsApi = apiSlice.injectEndpoints({\n  endpoints: (builder) => ({\n    getParticipantPopulationOptInForms: builder.query({\n      query: (participantPopulationId) =>\n        routes.api_participant_population_opt_in_forms_path({\n          participant_population_id: participantPopulationId,\n        }),\n      transformResponse: (response) =>\n        sortAlphabeticalByTitle(deserializeJSONApiResponse(response)),\n    }),\n    createOptInForm: builder.mutation({\n      query: ({ participantPopulationId, attributes }) => ({\n        url: routes.api_participant_population_opt_in_forms_path(\n          participantPopulationId,\n        ),\n        method: 'POST',\n        body: {\n          data: {\n            attributes,\n          },\n        },\n        ...headersAndCredentials(),\n      }),\n      transformResponse: deserializeJSONApiResponse,\n      invalidatesTags: [OPT_IN_FORMS_TAG],\n    }),\n  }),\n  overrideExisting: 'throw',\n});\n\nexport const {\n  useGetParticipantPopulationOptInFormsQuery,\n  useCreateOptInFormMutation,\n} = participantPopulationOptInFormsApi;\n","import React, {\n  useMemo,\n  useContext,\n  createContext,\n  type ReactNode,\n} from 'react';\nimport { z } from 'zod';\n\nimport { customContextSchema } from 'lib/react_on_rails/custom_context_schema';\n\ntype ReactOnRailsContext = z.infer<typeof customContextSchema>;\n\nexport type RailsContextValue = {\n  env: ReactOnRailsContext['env'];\n  request: {\n    csrfParam: ReactOnRailsContext['request']['csrfParam'];\n    csrfToken: ReactOnRailsContext['request']['csrfToken'];\n    location: ReactOnRailsContext['location'];\n  };\n  uiState: ReactOnRailsContext['uiState'];\n  user: ReactOnRailsContext['user'];\n};\n\nexport const RailsContext = createContext<RailsContextValue | null>(null);\n\nexport function useRailsContext() {\n  const ctx = useContext(RailsContext);\n\n  if (!ctx) return null;\n\n  return ctx;\n}\n\ntype RailsContextProviderProps = {\n  railsContext: unknown;\n  children: ReactNode;\n};\n\nexport function RailsContextProvider({\n  railsContext,\n  children,\n}: RailsContextProviderProps) {\n  const { env, location, request, uiState, user } =\n    customContextSchema.parse(railsContext);\n\n  const contextValue = useMemo(\n    () => ({\n      env,\n      request: {\n        ...request,\n        location,\n      },\n      uiState,\n      user,\n    }),\n    [env, location, request, uiState, user],\n  );\n\n  return (\n    <RailsContext.Provider value={contextValue}>\n      {children}\n    </RailsContext.Provider>\n  );\n}\n","import React, { Component } from 'react';\n\nimport { track, trackingPropsShape } from 'lib/analytics';\nimport * as propTypes from 'lib/prop_types';\n\nimport { getDisplayName } from './utils';\n\nexport default function withTrackedClick(Target) {\n  class TrackedComponent extends Component {\n    static displayName = `${getDisplayName(Target)}WithTrackedClick`;\n\n    static propTypes = {\n      event: propTypes.string.isRequired,\n      eventData: propTypes.object,\n      onClick: propTypes.func,\n      ...trackingPropsShape,\n    };\n\n    static defaultProps = {\n      eventData: {},\n    };\n\n    handleClick = (event) => {\n      this.props.tracking.trackEvent({\n        ...this.props.eventData,\n        event: this.props.event,\n      });\n\n      if (this.props.onClick) {\n        this.props.onClick(event);\n      }\n    };\n\n    get targetProps() {\n      const transferProps = { ...this.props };\n\n      // Need to remove eventData, otherwise child props complain about:\n      // https://reactjs.org/warnings/unknown-prop.html\n      delete transferProps.eventData;\n\n      return {\n        ...transferProps,\n        onClick: this.handleClick,\n      };\n    }\n\n    render() {\n      return <Target {...this.targetProps} />;\n    }\n  }\n\n  return track()(TrackedComponent);\n}\n","import { createSelector, createSlice, isAnyOf } from '@reduxjs/toolkit';\n\nimport { projectsApi } from 'api/projects';\n\nimport { buildProjectState } from 'researcher/project_workspace/hooks/use_get_project_state';\n\nimport {\n  ACTIVITY_STEP,\n  DETAILS_STEP,\n  EXPERIENCE_STEP,\n  RECRUITMENT_STEP,\n} from './constants';\nimport {\n  buildActivityStepFields,\n  buildDetailsStepFields,\n  buildExperienceStepFields,\n  buildRecruitmentStepFields,\n} from './store/utils';\n\nexport const STEPS_REQUIRED_FIELDS_SCHEMA = {\n  [ACTIVITY_STEP]: buildActivityStepFields,\n  [DETAILS_STEP]: buildDetailsStepFields,\n  [EXPERIENCE_STEP]: buildExperienceStepFields,\n  [RECRUITMENT_STEP]: buildRecruitmentStepFields,\n};\n\nconst matchProjectFetched = isAnyOf(\n  projectsApi.endpoints.getProject.matchFulfilled,\n);\n\nconst calculateStepCompletionPercentage = ({\n  invalidCount,\n  totalRequiredCount,\n}) => {\n  if (invalidCount === 0 && totalRequiredCount === 0) {\n    return 100;\n  }\n\n  return Math.round(\n    ((totalRequiredCount - invalidCount) / totalRequiredCount) * 100,\n  );\n};\n\nconst initializeForm = (stepId) => ({\n  stepId,\n});\n\nconst initializePrimaryForm = (stepId) => ({\n  ...initializeForm(stepId),\n  syncedValues: {},\n  isValid: false,\n});\n\nconst initializeStep = (stepId) => ({\n  id: stepId,\n  forms: {\n    primary: initializePrimaryForm(stepId),\n  },\n  metrics: {\n    invalidCount: 0,\n    totalRequiredCount: 0,\n  },\n});\n\nconst initialState = {\n  researchDesign: {\n    currentStepId: null,\n    steps: {\n      [ACTIVITY_STEP]: initializeStep(ACTIVITY_STEP),\n      [DETAILS_STEP]: initializeStep(DETAILS_STEP),\n      [EXPERIENCE_STEP]: initializeStep(EXPERIENCE_STEP),\n      [RECRUITMENT_STEP]: initializeStep(RECRUITMENT_STEP),\n    },\n  },\n};\n\nexport const projectWorkspaceSlice = createSlice({\n  name: 'projectWorkspace',\n  initialState,\n  /* eslint-disable no-param-reassign */\n  reducers: {\n    formPrimaryRegister(state, { payload }) {\n      const { stepId, defaultValues, isValid } = payload;\n\n      state.researchDesign.currentStepId = stepId;\n      state.researchDesign.steps[stepId].forms.primary.syncedValues =\n        defaultValues;\n      state.researchDesign.steps[stepId].forms.primary.isValid = isValid;\n    },\n    formPrimarySyncState(state, { payload }) {\n      const { stepId, values, isValid } = payload;\n\n      state.researchDesign.steps[stepId].forms.primary.syncedValues = {\n        ...state.researchDesign.steps[stepId].forms.primary.syncedValues,\n        ...values,\n      };\n      state.researchDesign.steps[stepId].forms.primary.isValid = isValid;\n    },\n  },\n  extraReducers(builder) {\n    /* the following logic handles updating step progressions after\n       a user hits the save button. This general procedure is followed:\n\n       1. watch for any RTK-Q project query to resolve\n       2. grab the invalidLaunchProps from the meta key on the json:api payload\n       3. loop over each step form (primary and drawers) to build our metrics state by\n          looking for the intersection between invalid launch props (from the server)\n          and required fields for that particular form.\n    */\n    builder.addMatcher(matchProjectFetched, (state, { payload }) => {\n      const { invalidLaunchProps, isDraft } = buildProjectState(payload);\n      const { steps } = state.researchDesign;\n\n      if (!isDraft || !invalidLaunchProps) return;\n\n      Object.entries(steps).forEach(([stepId, step]) => {\n        const requiredFieldsFn = STEPS_REQUIRED_FIELDS_SCHEMA[stepId];\n        const requiredFields = requiredFieldsFn(payload);\n\n        if (requiredFields) {\n          step.metrics.totalRequiredCount = requiredFields.length;\n          step.metrics.invalidCount = requiredFields.filter((field) =>\n            invalidLaunchProps.includes(field),\n          ).length;\n        }\n      });\n    });\n  },\n  /* eslint-enable no-param-reassign */\n});\n\nexport const { formPrimaryRegister, formPrimarySyncState } =\n  projectWorkspaceSlice.actions;\n\nconst rootSelector = (state) => state.projectWorkspace;\n\nconst stepsSelector = createSelector(\n  rootSelector,\n  (state) => state.researchDesign.steps,\n);\n\nexport const currentStepSelector = createSelector(rootSelector, (state) => {\n  const { currentStepId, steps } = state.researchDesign;\n  return steps[currentStepId];\n});\n\nexport const currentStepFormSelector = createSelector(\n  currentStepSelector,\n  (currentStep) => currentStep?.forms.primary,\n);\n\nexport const stepMetricsSelector = createSelector(\n  stepsSelector,\n  (_, stepId) => stepId,\n  (steps, stepId) => {\n    const { invalidCount, totalRequiredCount } = steps[stepId].metrics;\n\n    return {\n      completionPercentage: calculateStepCompletionPercentage({\n        invalidCount,\n        totalRequiredCount,\n      }),\n    };\n  },\n);\n","import { buildProjectState } from 'researcher/project_workspace/hooks/use_get_project_state';\n\n// the following `buildXStepFields` functions help derive the completion percentage\n// of a particular step. I have mapped all relevant model validation error keys\n// e.g. `:foo` from `errors.add(:foo, 'is required')` to the step that manages said field\n\nexport function buildActivityStepFields(projectPayload) {\n  const {\n    isInPersonInterview,\n    isOnlineInterview,\n    isUnmoderatedTask,\n    studyTypeId,\n  } = buildProjectState(projectPayload);\n  const fields = [\n    'estimatedTime', // Session length (Mod) || Task length (Unmod)\n    'interviewTypeId',\n    'studyType',\n  ];\n\n  if (isOnlineInterview) {\n    // Prep instructions drawer\n    fields.push('deviceRequirements');\n  }\n\n  if (studyTypeId) {\n    if (isUnmoderatedTask) {\n      // Deadline\n      fields.push('availabilityRanges');\n      // Task drawer\n      fields.push('task');\n      fields.push('timezone');\n    } else {\n      // Scheduling drawer (Attendance and location)\n      fields.push('defaultModeratorId');\n      // Scheduling drawer (Attendance and location)\n      fields.push('defaultSessionLocation');\n      // Scheduling drawer (scheduling rules)\n      fields.push('timezone');\n\n      if (isInPersonInterview) {\n        // Scheduling drawer (Attendance and location)\n        fields.push('location');\n        // Scheduling drawer (Attendance and location)\n        fields.push('locationExtraInfo');\n        // Scheduling drawer (Attendance and location)\n        fields.push('locationDetail');\n        // Scheduling drawer (Attendance and location)\n        fields.push('parkingDetails');\n      }\n    }\n  }\n\n  return fields;\n}\n\nexport function buildDetailsStepFields(projectPayload) {\n  const { compensationMethodId } = projectPayload;\n  const fields = ['compensationMethodId', 'numParticipants'];\n\n  // account for the fact that compensationInfo errors will only be present\n  // once all compensationMethodId errors are satisfied on the backend.\n  // HasCompensation#compensation_method_valid\n  if (compensationMethodId) {\n    fields.push('compensationInfo');\n  }\n\n  return fields;\n}\n\nexport function buildExperienceStepFields(_projectPayload) {\n  return ['publicDescription', 'publicTitle'];\n}\n\nexport function buildRecruitmentStepFields(projectPayload) {\n  const { isOnlineInterview, isPhoneInterview, isHubProject } =\n    buildProjectState(projectPayload);\n\n  const fields = ['sourceType'];\n\n  if (isHubProject) return fields;\n\n  // survey drawer\n  fields.push('surveyDraft');\n\n  if (isOnlineInterview || isPhoneInterview) {\n    // recruitment drawer\n    fields.push('location');\n  }\n\n  return fields;\n}\n","import { useEffect } from 'react';\n\nconst UPDATE_PAGE_TITLE_EVENT = 'updatePageTitle';\n\n/**\n * Used to trigger event to update html title\n */\nexport function triggerUsePageTitleUpdate(newTitle?: string) {\n  const event = new CustomEvent(UPDATE_PAGE_TITLE_EVENT, {\n    detail: { title: newTitle },\n  });\n  window.dispatchEvent(event);\n}\n\n/**\n * Hook that adds event listener to update html title\n * and updates the title whenever UPDATE_PAGE_TITLE_EVENT is sent\n */\nexport function usePageTitle(initialTitle?: string) {\n  useEffect(() => {\n    const updateTitle = (event: CustomEvent) => {\n      const newTitle = event.detail.title || initialTitle;\n      document.title = newTitle\n        ? `${newTitle} | User Interviews`\n        : 'User Interviews';\n    };\n\n    window.addEventListener(\n      UPDATE_PAGE_TITLE_EVENT,\n      updateTitle as EventListener,\n    );\n    // Dispatch event on mount to set the initial title\n    triggerUsePageTitleUpdate();\n\n    return () => {\n      window.removeEventListener(\n        UPDATE_PAGE_TITLE_EVENT,\n        updateTitle as EventListener,\n      );\n    };\n  }, [initialTitle]);\n}\n","import * as propTypes from 'lib/prop_types';\n\nexport const uUIDPropType = propTypes.string;\n\n// NOTE: This is supposed to encompass a survey passed to SurveyBuilder.\n// This should be what the server passes back to the view, not what the views use internally.\nexport const surveyPropType = propTypes.shape({\n  accessCode: propTypes.string,\n  answers: propTypes.objectOf(\n    propTypes.shape({\n      errors: propTypes.objectOf(propTypes.string).isRequired,\n      qualifyLogic: propTypes.string,\n      responseClass: propTypes.string,\n      text: propTypes.string,\n      uuid: uUIDPropType.isRequired,\n    }),\n  ).isRequired,\n  errors: propTypes.objectOf(propTypes.string).isRequired,\n  questions: propTypes.objectOf(\n    propTypes.shape({\n      answerIds: propTypes.arrayOf(uUIDPropType),\n      errors: propTypes.objectOf(propTypes.string).isRequired,\n      helpText: propTypes.string,\n      isKey: propTypes.bool,\n      isMandatory: propTypes.bool,\n      participantPopulationAttributeId: propTypes.oneOfType([\n        propTypes.number,\n        propTypes.string,\n      ]),\n      pick: propTypes.string,\n      questionIds: propTypes.arrayOf(propTypes.string),\n      text: propTypes.string,\n      uuid: uUIDPropType.isRequired,\n    }),\n  ).isRequired,\n  sectionIds: propTypes.arrayOf(uUIDPropType).isRequired,\n  sections: propTypes.objectOf(\n    propTypes.shape({\n      errors: propTypes.objectOf(propTypes.string).isRequired,\n      questionIds: propTypes.arrayOf(uUIDPropType).isRequired,\n      skipLogicIds: propTypes.arrayOf(uUIDPropType).isRequired,\n      title: propTypes.string,\n      uuid: uUIDPropType.isRequired,\n    }),\n  ).isRequired,\n  skipLogicConditions: propTypes.objectOf(\n    propTypes.shape({\n      answerId: uUIDPropType,\n      errors: propTypes.objectOf(propTypes.string).isRequired,\n      operator: propTypes.string,\n      questionId: uUIDPropType,\n      uuid: uUIDPropType.isRequired,\n    }),\n  ).isRequired,\n  skipLogics: propTypes.objectOf(\n    propTypes.shape({\n      conditionIds: propTypes.arrayOf(uUIDPropType).isRequired,\n      errors: propTypes.objectOf(propTypes.string).isRequired,\n      joinMethod: propTypes.string,\n      targetSectionId: uUIDPropType,\n      uuid: uUIDPropType.isRequired,\n    }),\n  ).isRequired,\n  title: propTypes.string,\n});\n","import propTypes from 'prop-types';\n\nexport const connectedCalendarDetailsPropType = propTypes.shape({\n  email: propTypes.string,\n  preferences: propTypes.shape({ allowTentativeEvents: propTypes.bool }),\n  provider: propTypes.string.isRequired,\n  tokenInvalid: propTypes.bool.isRequired,\n  tokenUpgradeRequested: propTypes.bool.isRequired,\n});\n"," import {\n  createEntityAdapter,\n  createSelector,\n  createSlice,\n  isAnyOf,\n} from '@reduxjs/toolkit';\n\nimport { participantPopulationOptInFormsApi } from 'api/participant_population_opt_in_forms';\n\nimport { populationInviteFiltersApi } from 'api/population_invite_filters';\n\nimport { populationLabelsApi } from 'api/population_labels';\n\nimport { populationAttributesApi } from 'api/population_attributes';\n\nimport { segmentsApi } from 'api/segments';\n\nimport { teamProjectsApi } from 'api/team_projects';\n\nimport {\n  PROJECT_INVITE_LIMIT_MAX,\n  PROJECT_INVITE_LIMIT_MIN,\n} from 'researcher/participant_search/invite_rules_drawer/constants';\n\nimport {\n  buildFilterList,\n  getDefaultParams,\n  getParamKey,\n} from 'researcher/participant_search/segment_builder/lib/filter_list';\n\nimport {\n  FILTER_RULE_APPLIED_SECTIONS,\n  FILTER_RULE_PENDING_SECTIONS,\n  appliedSectionLookup,\n  buildFromServerFilterRules,\n  hasApplicableFilterRule,\n} from 'researcher/participant_search/segment_builder/lib/filter_utils';\n\nimport { sortAlphabeticalByName } from 'api/utils';\n\nconst adapter = createEntityAdapter();\n\nconst matchPopulationInviteFilterFetched = isAnyOf(\n  populationInviteFiltersApi.endpoints.getInviteFilter.matchFulfilled,\n);\n\nconst matchLabelsFetched = isAnyOf(\n  populationLabelsApi.endpoints.getPopulationLabels.matchFulfilled,\n);\n\nconst matchOptInFormsFetched = isAnyOf(\n  participantPopulationOptInFormsApi.endpoints\n    .getParticipantPopulationOptInForms.matchFulfilled,\n);\n\nconst matchPopulationAttributesFetched = isAnyOf(\n  populationAttributesApi.endpoints.getPopulationAttributes.matchFulfilled,\n);\n\nconst matchSegmentsFetched = isAnyOf(\n  segmentsApi.endpoints.getSegments.matchFulfilled,\n);\n\nconst matchTeamProjectsFetched = isAnyOf(\n  teamProjectsApi.endpoints.getTeamProjects.matchFulfilled,\n);\n\nconst appliedInitialState = {\n  filterFlags: {},\n  filterKeys: [],\n  filterRules: {},\n};\n\nconst pendingInitialState = {\n  ...appliedInitialState,\n  removedFilterKeys: [],\n};\n\nexport const initialState = {\n  filterRules: {\n    filters: {},\n    applied: {\n      [FILTER_RULE_APPLIED_SECTIONS.edit]: appliedInitialState,\n      [FILTER_RULE_APPLIED_SECTIONS.inviteFilter]: appliedInitialState,\n      [FILTER_RULE_APPLIED_SECTIONS.segment]: appliedInitialState,\n    },\n    pending: {\n      [FILTER_RULE_PENDING_SECTIONS.builder]: pendingInitialState,\n      [FILTER_RULE_PENDING_SECTIONS.create]: pendingInitialState,\n      [FILTER_RULE_PENDING_SECTIONS.edit]: pendingInitialState,\n      [FILTER_RULE_PENDING_SECTIONS.inviteFilter]: pendingInitialState,\n    },\n  },\n  inviteFilter: {\n    applied: {},\n    pending: {},\n  },\n  labels: adapter.getInitialState(),\n  optInForms: adapter.getInitialState(),\n  populationAttributes: adapter.getInitialState(),\n  projects: adapter.getInitialState(),\n  segments: {\n    activeId: null,\n    meta: {},\n    ...adapter.getInitialState(),\n  },\n};\n\nexport const segmentsSlice = createSlice({\n  name: 'segments',\n  initialState,\n  reducers: {\n    ADD_FILTER_RULE_PARAM: (state, action) => {\n      const { filterKey, filterRuleSection } = action.payload;\n\n      const filter = state.filterRules.filters[filterKey];\n      const filterRule =\n        state.filterRules.pending[filterRuleSection].filterRules[filterKey];\n\n      const newParams = [...filterRule.params];\n\n      newParams.push(getDefaultParams(filter.isNotSetOperand));\n\n      const newFilter = {\n        ...filterRule,\n        params: newParams,\n      };\n\n      state.filterRules.pending[filterRuleSection].filterRules[filterKey] =\n        newFilter;\n    },\n    CLEAR_FILTERS: (state) => {\n      state.segments.activeId = initialState.segments.activeId;\n      state.filterRules.applied = initialState.filterRules.applied;\n      state.filterRules.pending = initialState.filterRules.pending;\n    },\n    CREATE_FILTER_RULE: (state, action) => {\n      const { filterKey, filterRuleSection } = action.payload;\n\n      const filter = state.filterRules.filters[filterKey];\n\n      state.filterRules.pending[filterRuleSection].filterRules[filterKey] = {\n        ...filter.defaultFilterRuleShape,\n      };\n    },\n    REMOVE_FILTER_RULE: (state, action) => {\n      const { filterKey, filterRuleSection } = action.payload;\n\n      const { removedFilterKeys } =\n        state.filterRules.pending[filterRuleSection];\n\n      if (!removedFilterKeys.includes(filterKey))\n        removedFilterKeys.push(filterKey);\n\n      state.filterRules.pending[filterRuleSection].removedFilterKeys =\n        removedFilterKeys;\n\n      delete state.filterRules.pending[filterRuleSection].filterFlags[\n        filterKey\n      ];\n      delete state.filterRules.pending[filterRuleSection].filterRules[\n        filterKey\n      ];\n\n      state.filterRules.pending[filterRuleSection].filterKeys =\n        state.filterRules.pending[filterRuleSection].filterKeys.filter(\n          (key) => key !== filterKey,\n        );\n    },\n    REMOVE_FILTER_RULE_PARAM: (state, action) => {\n      const { filterKey, filterParamKey, filterRuleSection } = action.payload;\n\n      const filter = state.filterRules.filters[filterKey];\n      const filterRule =\n        state.filterRules.pending[filterRuleSection].filterRules[filterKey];\n\n      let newParams = [...filterRule.params];\n\n      if (newParams.length === 1) {\n        newParams = [getDefaultParams(filter.isNotSetOperand)];\n      } else {\n        const paramIndex = newParams.findIndex(\n          (param) => param.key === filterParamKey,\n        );\n        newParams.splice(paramIndex, 1);\n      }\n\n      const newFilterRule = {\n        ...filterRule,\n        params: newParams,\n      };\n\n      state.filterRules.pending[filterRuleSection].filterRules[filterKey] =\n        newFilterRule;\n    },\n    RESET_PENDING_FILTERS: (state, action) => {\n      const { filterRuleSection } = action.payload;\n\n      state.filterRules.pending[filterRuleSection] = pendingInitialState;\n    },\n    SELECT_FILTER_RULE: (state, action) => {\n      const { activeFilterKey, filterKey, filterRuleSection } = action.payload;\n\n      if (activeFilterKey) {\n        const activeFilterIndex =\n          state.filterRules.pending[filterRuleSection].filterKeys.indexOf(\n            activeFilterKey,\n          );\n\n        if (activeFilterIndex !== -1) {\n          state.filterRules.pending[filterRuleSection].filterKeys[\n            activeFilterIndex\n          ] = filterKey;\n        }\n\n        delete state.filterRules.pending[filterRuleSection].filterRules[\n          activeFilterKey\n        ];\n      } else {\n        state.filterRules.pending[filterRuleSection].filterKeys = [\n          ...state.filterRules.pending[filterRuleSection].filterKeys,\n          filterKey,\n        ];\n      }\n    },\n    SELECT_FILTER_RULE_OPERAND: (state, action) => {\n      const { filterKey, filterRuleSection, operand } = action.payload;\n\n      const filterRule =\n        state.filterRules.pending[filterRuleSection].filterRules[filterKey];\n\n      const newFilterRule = {\n        ...filterRule,\n        operand: operand.key,\n        params: [getDefaultParams(filterRule.isNotSetOperand)],\n      };\n\n      state.filterRules.pending[filterRuleSection].filterRules[filterKey] =\n        newFilterRule;\n    },\n    SET_ACTIVE_SEGMENT_ID: (state, action) => {\n      const { segmentId } = action.payload;\n\n      state.segments.activeId = segmentId;\n    },\n    SET_APPLIED_FILTER_RULES: (state, action) => {\n      const { filterRuleSection, filterRules } = action.payload;\n\n      const applied = buildFromServerFilterRules({\n        filters: state.filterRules.filters,\n        filterRules,\n      });\n\n      const section = appliedSectionLookup[filterRuleSection];\n\n      state.filterRules.applied[section] = {\n        ...appliedInitialState,\n        filterFlags: applied.filterFlags,\n        filterKeys: applied.filterKeys,\n        filterRules: applied.filterRules,\n      };\n    },\n    SET_FILTER_RULE: (state, action) => {\n      const { filterKey, pendingFilterRule, filterRuleSection } =\n        action.payload;\n\n      state.filterRules.pending[filterRuleSection].filterRules[filterKey] =\n        pendingFilterRule;\n    },\n    SET_INVITE_FILTER_ATTRIBUTES: (state, action) => {\n      const { attributes } = action.payload;\n\n      state.inviteFilter.pending = {\n        ...state.inviteFilter.pending,\n        ...attributes,\n      };\n    },\n    SET_PENDING_FILTER_RULES: (state, action) => {\n      const { filterRules, filterRuleSection } = action.payload;\n\n      const pending = buildFromServerFilterRules({\n        filters: state.filterRules.filters,\n        filterRules,\n      });\n\n      state.filterRules.pending[filterRuleSection] = {\n        ...state.filterRules.pending[filterRuleSection],\n        filterFlags: {\n          ...state.filterRules.pending[filterRuleSection].filterFlags,\n          ...pending.filterFlags,\n        },\n        filterKeys: {\n          ...state.filterRules.pending[filterRuleSection].filterKeys,\n          ...pending.filterKeys,\n        },\n        filterRules: {\n          ...state.filterRules.pending[filterRuleSection].filterRules,\n          ...pending.filterRules,\n        },\n      };\n    },\n    SET_PENDING_FROM_APPLIED: (state, action) => {\n      const { filterRuleSection } = action.payload;\n\n      const section = appliedSectionLookup[filterRuleSection];\n\n      state.filterRules.pending[filterRuleSection] = {\n        ...pendingInitialState,\n        ...state.filterRules.applied[section],\n      };\n    },\n    SET_PENDING_FROM_SEGMENT: (state, action) => {\n      const { segmentId, filterRuleSection } = action.payload;\n\n      const { filterRules } = state.segments.entities[segmentId];\n\n      const pending = buildFromServerFilterRules({\n        filters: state.filterRules.filters,\n        filterRules,\n      });\n\n      const section = appliedSectionLookup[filterRuleSection];\n\n      state.filterRules.applied[section] = {\n        ...pendingInitialState,\n        filterFlags: pending.filterFlags,\n        filterKeys: pending.filterKeys,\n        filterRules: pending.filterRules,\n      };\n\n      state.filterRules.pending[filterRuleSection] = {\n        ...pendingInitialState,\n        filterFlags: pending.filterFlags,\n        filterKeys: pending.filterKeys,\n        filterRules: pending.filterRules,\n      };\n    },\n    TOGGLE_IS_NOT_SET_CHECKED: (state, action) => {\n      const { filterKey, filterRuleSection } = action.payload;\n\n      const isNotSetChecked =\n        state.filterRules.pending[filterRuleSection].filterFlags[filterKey]\n          ?.isNotSetChecked;\n\n      state.filterRules.pending[filterRuleSection].filterFlags[filterKey] = {\n        isNotSetChecked: !isNotSetChecked,\n        isSetChecked: false,\n      };\n    },\n    TOGGLE_IS_SET_CHECKED: (state, action) => {\n      const { filterKey, filterRuleSection } = action.payload;\n\n      const isSetChecked =\n        state.filterRules.pending[filterRuleSection].filterFlags[filterKey]\n          ?.isSetChecked;\n\n      if (!isSetChecked) {\n        state.filterRules.pending[filterRuleSection].filterRules[\n          filterKey\n        ].params = [{ key: getParamKey() }];\n      }\n\n      state.filterRules.pending[filterRuleSection].filterFlags[filterKey] = {\n        isNotSetChecked: false,\n        isSetChecked: !isSetChecked,\n      };\n    },\n    UPDATE_FILTER_RULE_PARAM: (state, action) => {\n      const {\n        filterKey,\n        filterRuleKey,\n        paramKey,\n        paramValue,\n        filterRuleSection,\n      } = action.payload;\n\n      const filterRule =\n        state.filterRules.pending[filterRuleSection].filterRules[filterKey];\n\n      const paramIndex = filterRule.params.findIndex(\n        (param) => param.key === filterRuleKey,\n      );\n\n      const newParam = {\n        ...filterRule.params[paramIndex],\n        [paramKey]: paramValue,\n      };\n\n      const { params } = filterRule;\n\n      params.splice(paramIndex, 1, newParam);\n\n      const newFilterRule = {\n        ...filterRule,\n        params,\n      };\n\n      state.filterRules.pending[filterRuleSection].filterRules[filterKey] =\n        newFilterRule;\n    },\n  },\n  extraReducers(builder) {\n    builder.addMatcher(matchPopulationInviteFilterFetched, (state, action) => {\n      state.inviteFilter.applied = action.payload;\n      state.inviteFilter.pending = action.payload;\n    });\n    builder.addMatcher(matchLabelsFetched, (state, action) => {\n      adapter.setAll(state.labels, action.payload);\n    });\n    builder.addMatcher(matchOptInFormsFetched, (state, action) => {\n      adapter.setAll(state.optInForms, action.payload);\n    });\n    builder.addMatcher(matchPopulationAttributesFetched, (state, action) => {\n      const populationAttributes = action.payload;\n\n      state.filterRules.filters = buildFilterList({ populationAttributes });\n\n      adapter.setAll(state.populationAttributes, populationAttributes);\n    });\n    builder.addMatcher(matchSegmentsFetched, (state, action) => {\n      state.segments.meta = action.payload.meta;\n      adapter.setAll(state.segments, action.payload.data);\n    });\n    builder.addMatcher(matchTeamProjectsFetched, (state, action) => {\n      adapter.setAll(state.projects, action.payload);\n    });\n  },\n});\n\nexport const { selectAll: selectAllLabels, selectEntities: selectLabels } =\n  adapter.getSelectors((state) => state.segments.labels);\n\nexport const { selectEntities: selectOptInForms } = adapter.getSelectors(\n  (state) => state.segments.optInForms,\n);\n\nexport const {\n  selectAll: selectAllPopulationAttributes,\n  selectIds: selectPopulationAttributeIds,\n} = adapter.getSelectors((state) => state.segments.populationAttributes);\n\nexport const {\n  selectEntities: selectSegmentsById,\n  selectAll: selectAllSegments,\n  selectEntities: selectSegments,\n} = adapter.getSelectors((state) => state.segments.segments);\n\nexport const selectSegmentsByAccessLevel = createSelector(\n  [selectSegments],\n  (segments) => {\n    let privateSegments = [];\n    let sharedSegments = [];\n\n    Object.values(segments).forEach((segment) => {\n      if (\n        segment.teamPermissionRoleId ||\n        segment.organizationPermissionRoleId\n      ) {\n        sharedSegments.push(segment);\n      } else {\n        privateSegments.push(segment);\n      }\n    });\n\n    privateSegments = sortAlphabeticalByName(privateSegments);\n    sharedSegments = sortAlphabeticalByName(sharedSegments);\n\n    return { privateSegments, sharedSegments };\n  },\n);\nexport const selectActiveSegmentId = (state) =>\n  state.segments.segments.activeId;\n\nconst selectPendingSections = (state) => state.segments.filterRules.pending;\n\nexport const selectPendingSection = createSelector(\n  [selectPendingSections, (_, sectionKey) => sectionKey],\n  (pendingSections, sectionKey) => pendingSections[sectionKey],\n);\n\nconst selectAppliedEditSection = (state) =>\n  state.segments.filterRules.applied[FILTER_RULE_APPLIED_SECTIONS.edit];\nconst selectAppliedInviteFilterSection = (state) =>\n  state.segments.filterRules.applied[FILTER_RULE_APPLIED_SECTIONS.inviteFilter];\nexport const selectAppliedSegmentSection = (state) =>\n  state.segments.filterRules.applied[FILTER_RULE_APPLIED_SECTIONS.segment];\nexport const selectAppliedSegmentFilterRules = (state) =>\n  state.segments.filterRules.applied[FILTER_RULE_APPLIED_SECTIONS.segment]\n    .filterRules;\n\nexport const selectPersistedFilterRule = createSelector(\n  [\n    selectAppliedEditSection,\n    selectAppliedInviteFilterSection,\n    selectAppliedSegmentSection,\n    (_, keys) => keys,\n  ],\n  (\n    editAppliedFilterRulesSection,\n    inviteFilterAppliedFilterRulesSection,\n    segmentFilterAppliedRulesSection,\n    keys,\n  ) => {\n    const { filterRuleSection, filterKey } = keys;\n\n    const appliedSectionKey = appliedSectionLookup[filterRuleSection];\n\n    switch (appliedSectionKey) {\n      case FILTER_RULE_APPLIED_SECTIONS.edit:\n        return editAppliedFilterRulesSection.filterRules[filterKey];\n      case FILTER_RULE_APPLIED_SECTIONS.inviteFilter:\n        return inviteFilterAppliedFilterRulesSection.filterRules[filterKey];\n      case FILTER_RULE_APPLIED_SECTIONS.segment:\n        return segmentFilterAppliedRulesSection.filterRules[filterKey];\n      default:\n        return undefined;\n    }\n  },\n);\n\nexport const selectSegmentRoles = (state) =>\n  state.segments.segments.meta?.roles;\n\nexport const selectFilters = (state) => state.segments.filterRules.filters;\n\nexport const selectInviteFilter = (state) =>\n  state.segments.inviteFilter.pending;\nexport const selectAppliedInviteFilter = (state) =>\n  state.segments.inviteFilter.applied;\n\nconst selectInviteFilterMultiplier = (state) =>\n  state.segments.inviteFilter.pending.projectInviteMultiplier;\nconst selectInviteFilterMultiplierEnabled = (state) =>\n  state.segments.inviteFilter.pending.projectInviteMultiplierEnabled;\n\nexport const selectAppliedInviteFilterRules = (state) =>\n  state.segments.filterRules.applied[FILTER_RULE_APPLIED_SECTIONS.inviteFilter];\nexport const selectInviteFilterRules = (state) =>\n  state.segments.filterRules.pending[FILTER_RULE_PENDING_SECTIONS.inviteFilter];\n\nexport const selectProjectInviteMultiplierOutOfRange = createSelector(\n  [selectInviteFilterMultiplier, selectInviteFilterMultiplierEnabled],\n  (projectInviteMultiplier, projectInviteMultiplierEnabled) =>\n    projectInviteMultiplierEnabled &&\n    Number.isInteger(projectInviteMultiplier) &&\n    (projectInviteMultiplier < PROJECT_INVITE_LIMIT_MIN ||\n      projectInviteMultiplier > PROJECT_INVITE_LIMIT_MAX),\n);\n\nconst selectPendingCreateFilterFlags = (state) =>\n  state.segments.filterRules.pending[FILTER_RULE_PENDING_SECTIONS.create]\n    .filterFlags;\n\nconst selectPendingCreateFilterRules = (state) =>\n  state.segments.filterRules.pending[FILTER_RULE_PENDING_SECTIONS.create]\n    .filterRules;\n\nconst selectPendingEditFilterFlags = (state) =>\n  state.segments.filterRules.pending[FILTER_RULE_PENDING_SECTIONS.edit]\n    .filterFlags;\n\nconst selectPendingEditFilterRules = (state) =>\n  state.segments.filterRules.pending[FILTER_RULE_PENDING_SECTIONS.edit]\n    .filterRules;\n\nexport const selectFilterOptions = createSelector([selectFilters], (filters) =>\n  Object.values(filters).map((filter) => ({\n    custom: !!filter.attribute,\n    label: filter.name,\n    value: filter.id,\n  })),\n);\n\nexport const selectAllFiltersCount = createSelector(\n  [selectFilters],\n  (filters) => Object.keys(filters).length,\n);\n\nexport const selectActiveSegment = createSelector(\n  [selectActiveSegmentId, selectSegments],\n  (activeSegmentId, segmentsByIds) => segmentsByIds[activeSegmentId],\n);\n\nexport const selectAppliedFilterCount = createSelector(\n  [selectAppliedSegmentFilterRules],\n  (filterRules) => Object.keys(filterRules).length,\n);\n\nexport const selectHasApplicableCreateFilterRule = createSelector(\n  [selectPendingCreateFilterFlags, selectPendingCreateFilterRules],\n  (filterFlags, filterRules) =>\n    hasApplicableFilterRule({ filterFlags, filterRules }),\n);\n\nexport const selectHasApplicableEditFilterRule = createSelector(\n  [selectPendingEditFilterFlags, selectPendingEditFilterRules],\n  (filterFlags, filterRules) =>\n    hasApplicableFilterRule({ filterFlags, filterRules }),\n);\n\nexport const selectSegmentName = createSelector(\n  [selectSegments, (_, segmentId) => segmentId],\n  (segmentsById, segmentId) => segmentsById[segmentId]?.name,\n);\n\nexport const {\n  ADD_FILTER_RULE_PARAM,\n  CLEAR_FILTERS,\n  CREATE_FILTER_RULE,\n  REMOVE_FILTER_RULE,\n  REMOVE_FILTER_RULE_PARAM,\n  RESET_PENDING_FILTERS,\n  SELECT_FILTER_RULE,\n  SELECT_FILTER_RULE_OPERAND,\n  SET_ACTIVE_SEGMENT_ID,\n  SET_APPLIED_FILTER_RULES,\n  SET_FILTER_RULE,\n  SET_INVITE_FILTER_ATTRIBUTES,\n  SET_PENDING_FILTER_RULES,\n  SET_PENDING_FROM_APPLIED,\n  SET_PENDING_FROM_SEGMENT,\n  TOGGLE_IS_NOT_SET_CHECKED,\n  TOGGLE_IS_SET_CHECKED,\n  UPDATE_FILTER_RULE_PARAM,\n} = segmentsSlice.actions;\n\nexport const segmentsSliceReducer = segmentsSlice.reducer;\n","// extracted by mini-css-extract-plugin\nvar _1 = \"BROB9Yo2nFE47axfpsAx\";\nvar _2 = \"UUEzPnYiATQ5IF6StQKq\";\nvar _3 = \"pcJwfHGdEyrbjvovspFb\";\nvar _4 = \"HBQO9q8a1PNOhlhvMKr1\";\nvar _5 = \"O0S3WqYj6DWNKlC09rNH\";\nvar _6 = \"fExsf5t68PD4C61oWaCX\";\nexport { _1 as \"description\", _2 as \"descriptionAccordionCollapse\", _3 as \"header\", _4 as \"logo\", _5 as \"logoContainer\", _6 as \"title\" }\n","import {\n  Accordion,\n  AccordionCollapse,\n  AccordionItem,\n  AccordionToggle,\n  Button,\n  Card,\n  Flex,\n  Heading,\n  Text,\n} from '@user-interviews/ui-design-system';\nimport * as routes from 'lib/routes';\nimport React from 'react';\n\nimport sanitizeHtml from 'sanitize-html';\nimport * as styles from './header.module.css';\n\ntype HeaderProps = {\n  isPreview?: boolean;\n  logoOnly: boolean;\n  logoUrl: string;\n  optInFormDescription?: string;\n  optInFormTitle?: string;\n  teamName: string;\n};\n\nexport function Header({\n  isPreview = false,\n  logoOnly = false,\n  logoUrl,\n  optInFormDescription,\n  optInFormTitle,\n  teamName,\n}: HeaderProps) {\n  const title = optInFormTitle || 'Sign up to participate in user research';\n\n  const description =\n    optInFormDescription ||\n    'Please fill out the information below to provide valuable' +\n      ' feedback on our products and services.';\n\n  return (\n    <div className={styles.header}>\n      {logoUrl && (\n        <Flex\n          alignItems=\"center\"\n          className={styles.logoContainer}\n          container\n          flexDirection=\"column\"\n        >\n          <img alt={`${teamName} logo`} className={styles.logo} src={logoUrl} />\n          {isPreview && (\n            <Button href={routes.team_branding_path()} variant=\"link\">\n              Edit team logo\n            </Button>\n          )}\n        </Flex>\n      )}\n\n      {!logoOnly && (\n        <>\n          <Heading\n            className={styles.title}\n            level={1}\n            size=\"xxxl\"\n            textAlign=\"center\"\n          >\n            {title}\n          </Heading>\n\n          <Card noPadding size=\"sm\">\n            <Accordion defaultActiveKey=\"0\" flush>\n              <AccordionItem borderless eventKey=\"0\">\n                <AccordionToggle eventKey=\"0\" title=\"Description\" />\n                <AccordionCollapse\n                  eventKey=\"0\"\n                  UNSAFE_className={styles.descriptionAccordionCollapse}\n                >\n                  <Text\n                    className={styles.description}\n                    dangerouslySetInnerHTML={{\n                      __html: sanitizeHtml(description),\n                    }}\n                    size=\"md\"\n                  />\n                </AccordionCollapse>\n              </AccordionItem>\n            </Accordion>\n          </Card>\n        </>\n      )}\n    </div>\n  );\n}\n","import * as routes from 'lib/routes';\n\nimport { apiSlice } from 'api/base_slice';\nimport { FEATURE_FLAG_TAG } from 'api/tag_types';\nimport { deserializeJSONApiResponse } from 'api/utils';\n\nexport const featureFlagApi = apiSlice.injectEndpoints({\n  endpoints: (builder) => ({\n    getFeatureFlag: builder.query({\n      query: ({ actorType, customProperties, featureName, sendTracking }) => ({\n        method: 'GET',\n        url: routes.api_feature_flag_path(featureName, {\n          actorType,\n          customProperties,\n          sendTracking,\n        }),\n      }),\n      transformResponse: deserializeJSONApiResponse,\n      providesTags: (_, __, { featureName }) => [\n        { type: FEATURE_FLAG_TAG, id: featureName },\n      ],\n    }),\n  }),\n  overrideExisting: 'throw',\n});\n\nexport const { useGetFeatureFlagQuery } = featureFlagApi;\n","import { Features } from 'lib/generated_constants/features';\nimport { useGetFeatureFlagQuery } from 'api/feature_flag';\n\n/*\n * There are situations where we may want to set a feature flag within a controller\n * instead of fetching from the api, as it gives the frontend the ability to immediately\n * reason about the flag's state (potentially useful for high level conditional rendering),\n * whereas fetching via the api will always have a bit of latency.\n *\n * To set this up in a controller add FeaturesConcern to your controller and\n * call set_feature_check before rendering. This will insert it into the window\n * via app/views/shared/_js_features.html.erb\n *\n * Note that this only supports features documented in app/services/features/flipper.rb\n *\n * While this does work, if you're looking for the new hotness you can add these\n * flags to the RailsContext in config/initializers/react_on_rails.rb and fetch it from\n * app/javascript/hooks/use_rails_context.tsx. An example of this can be found at\n * https://github.com/user-interviews/rails-server/pull/27742/files\n */\n\nconst Actors = {\n  Account: 'Account',\n  MixpanelUser: 'MixpanelUser',\n  Organization: 'Organization',\n  Participant: 'Participant',\n  Team: 'Team',\n  User: 'User',\n};\n\nfunction useFeatureFlag({\n  customProperties = {},\n  featureName,\n  actorType,\n  sendTracking,\n}) {\n  if (!Object.values(Features).includes(featureName)) {\n    throw new TypeError(`Received unexpected feature: ${featureName}`);\n  }\n\n  // When the featureName is already present in window.FEATURES, this means that\n  // set_feature_check has been called in a corresponding view controller.\n  // If that is the case, we can skip the redundant API request and just return that state.\n  const isFeatureCheckAlreadyPresent = Object.keys(\n    window.FEATURES || {},\n  ).includes(featureName);\n\n  const {\n    data: { isEnabled: isEnabledViaApi } = {},\n    isLoading: isGetFeatureFlagLoading,\n  } = useGetFeatureFlagQuery(\n    { actorType, customProperties, featureName, sendTracking },\n    { skip: isFeatureCheckAlreadyPresent },\n  );\n\n  const isEnabled = isFeatureCheckAlreadyPresent\n    ? window.FEATURES[featureName]\n    : isEnabledViaApi;\n\n  return {\n    isLoading: isFeatureCheckAlreadyPresent ? false : isGetFeatureFlagLoading,\n    isEnabled,\n  };\n}\n\nexport { Actors, Features, useFeatureFlag };\n","import equal from 'fast-deep-equal/es6';\n\nimport {\n  INCENTIVE_IS_NOT_SET_OPERAND,\n  INCENTIVE_IS_SET_OPERAND,\n  PROJECT_OPERANDS,\n  OPT_IN_FORM_OPERANDS,\n  OR_IS_NOT_SET_PARAM_KEY,\n} from 'lib/generated_constants/filters_constants';\n\nimport { QueryString } from 'lib/http';\nimport { FILTER_KEYS, defaultLabelOperand, getParamKey } from './filter_list';\n\nconst OPTIONAL_ROW_PARAM_KEYS = [\n  OR_IS_NOT_SET_PARAM_KEY,\n  'yearCeiling',\n  'yearFloor',\n];\n\nconst EMPTY_INCENTIVE_OPERANDS = [\n  INCENTIVE_IS_NOT_SET_OPERAND,\n  INCENTIVE_IS_SET_OPERAND,\n];\n\nexport const INVITE_FILTER_HIDDEN_FIELDS = [\n  FILTER_KEYS.labels,\n  FILTER_KEYS.project_participation,\n];\n\nexport const PII_HIDDEN_FIELDS = [\n  FILTER_KEYS.email,\n  FILTER_KEYS.last_name,\n  FILTER_KEYS.phone_number,\n];\n\nexport const FILTER_RULE_APPLIED_SECTIONS = {\n  edit: 'edit',\n  inviteFilter: 'inviteFilter',\n  segment: 'segment',\n};\n\nexport const FILTER_RULE_PENDING_SECTIONS = {\n  builder: 'builder',\n  create: 'create',\n  edit: 'edit',\n  inviteFilter: 'inviteFilter',\n};\n\nexport const appliedSectionLookup = {\n  [FILTER_RULE_PENDING_SECTIONS.builder]: FILTER_RULE_APPLIED_SECTIONS.segment,\n  [FILTER_RULE_PENDING_SECTIONS.create]: FILTER_RULE_APPLIED_SECTIONS.segment,\n  [FILTER_RULE_PENDING_SECTIONS.edit]: FILTER_RULE_APPLIED_SECTIONS.edit,\n  [FILTER_RULE_PENDING_SECTIONS.inviteFilter]:\n    FILTER_RULE_APPLIED_SECTIONS.inviteFilter,\n};\n\nexport const getIsInviteFilter = (filterRuleSection) =>\n  filterRuleSection === FILTER_RULE_PENDING_SECTIONS.inviteFilter;\n\nexport const defaultLabelFilterOperandKey = defaultLabelOperand.key;\n\nconst getKeylessParams = (params) => {\n  const keylessParams = [];\n\n  [...params].forEach((param) => {\n    const newParam = { ...param };\n    delete newParam.key;\n    keylessParams.push(newParam);\n  });\n\n  return keylessParams;\n};\n\nexport const buildLabelFilterRule = (labelIds = []) => ({\n  operand: defaultLabelFilterOperandKey,\n  params: [{ ids: labelIds }],\n});\n\nconst getProjectFilterKey = (jsonRule) => {\n  const operandKeys = PROJECT_OPERANDS.map((operand) => operand.key);\n\n  if (operandKeys.includes(jsonRule.operand))\n    return FILTER_KEYS.project_participation;\n\n  return undefined;\n};\n\nconst getOptInFormFilterKey = (jsonRule) => {\n  const operandKeys = OPT_IN_FORM_OPERANDS.map((operand) => operand.key);\n\n  if (operandKeys.includes(jsonRule.operand)) return FILTER_KEYS.opt_in_form;\n\n  return undefined;\n};\n\nconst getIncentiveFilterKey = (jsonRule) => {\n  if (jsonRule.operand.match(/^incentive/)) return FILTER_KEYS.yearly_payment;\n\n  return undefined;\n};\n\nconst getParticipantLabelFilterKey = (jsonRule) => {\n  if (jsonRule.operand.match(/^participant_label_has_any/))\n    return FILTER_KEYS.labels;\n\n  return undefined;\n};\n\nexport const getFilterKeyFromJsonRule = (jsonRule) =>\n  jsonRule.participantPopulationAttributeId ||\n  jsonRule.activityStat ||\n  jsonRule.field ||\n  getIncentiveFilterKey(jsonRule) ||\n  getProjectFilterKey(jsonRule) ||\n  getOptInFormFilterKey(jsonRule) ||\n  getParticipantLabelFilterKey(jsonRule);\n\nexport const buildFromServerFilterRules = ({ filters, filterRules }) => {\n  const appliedFilterRules = filterRules.reduce((acc, appliedFilterRule) => {\n    acc[getFilterKeyFromJsonRule(appliedFilterRule)] = appliedFilterRule;\n\n    return acc;\n  }, {});\n\n  const appliedFilterKeys = Object.keys(appliedFilterRules);\n\n  const appliedFilterFlags = appliedFilterKeys.reduce((acc, filterKey) => {\n    const appliedFilterRule = appliedFilterRules[filterKey];\n    const filter = filters[filterKey];\n\n    if (filter && appliedFilterRule) {\n      const { operand, params } = appliedFilterRule;\n\n      const { isNotSetOperand, isSetOperand } = filter;\n\n      const orIsNotSetParams = params?.some((param) => param.orIsNotSet);\n\n      acc[filterKey] = {\n        isNotSetChecked: !!(operand === isNotSetOperand || orIsNotSetParams),\n        isSetChecked: operand === isSetOperand,\n      };\n    }\n\n    return acc;\n  }, {});\n\n  const keyedAppliedFilterRules = {};\n\n  appliedFilterKeys.forEach((appliedFilterKey) => {\n    const isSetChecked = appliedFilterFlags[appliedFilterKey]?.isSetChecked;\n    const isNotSetOperand = filters[appliedFilterKey]?.isNotSetOperand;\n    const isIsNotSetOperand =\n      appliedFilterRules[appliedFilterKey].operand === isNotSetOperand;\n    const defaultOperand =\n      filters[appliedFilterKey]?.defaultFilterRuleShape.operand;\n    const operand =\n      isSetChecked || isIsNotSetOperand\n        ? defaultOperand\n        : appliedFilterRules[appliedFilterKey].operand;\n\n    keyedAppliedFilterRules[appliedFilterKey] = {\n      ...appliedFilterRules[appliedFilterKey],\n      operand,\n      params: [...appliedFilterRules[appliedFilterKey].params].map((param) => ({\n        ...param,\n        key: getParamKey(),\n      })),\n    };\n  });\n\n  return {\n    filterFlags: appliedFilterFlags,\n    filterKeys: appliedFilterKeys,\n    filterRules: keyedAppliedFilterRules,\n  };\n};\n\n// This is expected to return true if any values, including booleans, are set.\nexport const getHasValueSet = (param) => {\n  const {\n    ceiling,\n    days,\n    endAt,\n    endDate,\n    floor,\n    ids,\n    projectId,\n    startAt,\n    startDate,\n    value,\n  } = param;\n\n  // Due to value possibly being false it needs to be last option\n  const valueToCheck =\n    ceiling ||\n    days ||\n    endAt ||\n    endDate ||\n    floor ||\n    ids ||\n    projectId ||\n    startAt ||\n    startDate ||\n    value;\n\n  return (\n    valueToCheck !== null &&\n    valueToCheck !== undefined &&\n    valueToCheck.toString().trim() !== ''\n  );\n};\n\nexport const hasValueSet = (params) =>\n  params.some((param) => getHasValueSet(param));\n\nexport const hasApplicableFilterRule = ({ filterFlags, filterRules }) =>\n  Object.keys(filterRules).some(\n    (filterKey) =>\n      filterFlags[filterKey]?.isNotSetChecked ||\n      filterFlags[filterKey]?.isSetChecked ||\n      EMPTY_INCENTIVE_OPERANDS.includes(filterRules[filterKey].operand) ||\n      hasValueSet(filterRules[filterKey].params),\n  );\n\nconst preparePendingFilterRule = ({\n  filterFlags,\n  pendingFilterRule,\n  isNotSetOperand,\n  isSetOperand,\n}) => {\n  const preparedRule = { ...pendingFilterRule };\n\n  const emptyParams = [{}];\n\n  if (filterFlags?.isSetChecked) {\n    preparedRule.params = emptyParams;\n    preparedRule.operand = isSetOperand;\n  } else if (filterFlags?.isNotSetChecked) {\n    if (\n      !hasValueSet(preparedRule.params) ||\n      preparedRule.operand === isSetOperand\n    ) {\n      preparedRule.operand = isNotSetOperand;\n      preparedRule.params = emptyParams;\n    } else {\n      preparedRule.params = pendingFilterRule.params.map((param) => ({\n        ...param,\n        orIsNotSet: true,\n      }));\n    }\n  } else if (hasValueSet(preparedRule.params)) {\n    if (isNotSetOperand) {\n      preparedRule.params = pendingFilterRule.params.map((param) => ({\n        ...param,\n        orIsNotSet: false,\n      }));\n    }\n  } else if (!EMPTY_INCENTIVE_OPERANDS.includes(preparedRule.operand)) {\n    return null;\n  }\n\n  preparedRule.params = getKeylessParams(preparedRule.params);\n\n  return preparedRule;\n};\n\nexport const buildFilterRulesToApply = ({\n  filterFlags,\n  filters,\n  pendingFilterRules,\n}) =>\n  Object.keys(pendingFilterRules).reduce((acc, filterKey) => {\n    const filterRule = preparePendingFilterRule({\n      filterFlags: filterFlags[filterKey],\n      pendingFilterRule: pendingFilterRules[filterKey],\n      isNotSetOperand: filters[filterKey].isNotSetOperand,\n      isSetOperand: filters[filterKey].isSetOperand,\n    });\n\n    if (filterRule) acc[filterKey] = filterRule;\n\n    return acc;\n  }, {});\n\nexport const encodeFilterRules = (filterRules) =>\n  QueryString.base64Encode(Object.values(filterRules));\n\nexport const hasSegmentChanged = ({\n  activeSegmentId,\n  segmentsById,\n  appliedFilterRules,\n}) => {\n  if (!activeSegmentId) return false;\n\n  const activeSegment = segmentsById[activeSegmentId];\n\n  if (!activeSegment) return false;\n\n  const { filterRules } = segmentsById[activeSegmentId];\n\n  const appliedFilterKeys = Object.keys(appliedFilterRules);\n\n  if (appliedFilterKeys.length !== filterRules.length) return true;\n\n  return filterRules.some((filterRule) => {\n    const filterKey = getFilterKeyFromJsonRule(filterRule);\n\n    const appliedFilterRule = appliedFilterRules[filterKey];\n\n    if (!appliedFilterRule) return true;\n\n    const keylessAppliedFilterRule = {\n      ...appliedFilterRule,\n      params: getKeylessParams(appliedFilterRule.params),\n    };\n\n    if (!equal(keylessAppliedFilterRule, filterRule)) return true;\n\n    return false;\n  });\n};\n\nexport const getRowParams = (operand) => {\n  const params = Object.keys(operand.params)\n    .filter((param) => !OPTIONAL_ROW_PARAM_KEYS.includes(param))\n    .reduce((parsedParams, paramKey) => {\n      // Params either map directly to their type (string value) or to a more complex structure\n      // so we will unify them into one object interface every time the operand is set\n      const paramValue = operand.params[paramKey];\n\n      let parsedParam;\n      if (paramValue instanceof Object) {\n        parsedParam = {\n          attributes: {},\n          label: undefined,\n          ...paramValue,\n          key: paramKey,\n        };\n      } else {\n        parsedParam = {\n          attributes: {},\n          label: undefined,\n          key: paramKey,\n          type: paramValue,\n        };\n      }\n\n      return {\n        ...parsedParams,\n        [paramKey]: parsedParam,\n      };\n    }, {});\n\n  // Will only ever be one param object\n  return Object.values(params)[0] || {};\n};\n","import type { ReactElement } from 'react';\n\nimport React from 'react';\nimport { BrowserRouter, StaticRouter } from 'react-router';\nimport { isServer } from 'lib/ssr_utils';\n\nexport function DopeBrowserRouter({\n  location,\n  children,\n}: {\n  location: string;\n  children: ReactElement;\n}) {\n  if (isServer) {\n    return <StaticRouter location={location}>{children}</StaticRouter>;\n  }\n\n  return <BrowserRouter>{children}</BrowserRouter>;\n}\n","import React from 'react';\nimport { shouldIgnoreTurnstileError } from 'lib/telemetry/ignore_errors';\nimport { Turnstile } from '@marsidev/react-turnstile';\nimport { useEnvVars } from 'hooks/use_env_vars';\n\ntype CloudflareTurnstileProps = {\n  onSuccess: () => void;\n};\n\nexport function CloudflareTurnstile({\n  onSuccess = () => {},\n}: CloudflareTurnstileProps) {\n  const { cloudflareTurnstileCaptchaSiteKey } = useEnvVars();\n\n  const handleError = (code: string) => shouldIgnoreTurnstileError(code);\n\n  return (\n    <Turnstile\n      siteKey={cloudflareTurnstileCaptchaSiteKey || ''}\n      onError={handleError}\n      onSuccess={onSuccess}\n    />\n  );\n}\n","import React from 'react';\n\nimport {\n  Input,\n  InputLabel,\n  SingleSelect,\n} from '@user-interviews/ui-design-system';\n\nimport * as propTypes from 'lib/prop_types';\nimport { CountriesByCode } from 'lib/generated_constants/countries';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './phone_number.scss';\n\nconst SELECT_OPTIONS = Object.keys(CountriesByCode).map((code) => {\n  const phoneCode = CountriesByCode[code].phone_code;\n  const countryName = CountriesByCode[code].name;\n\n  let formattedCountryName = `${countryName}`;\n  if (phoneCode) formattedCountryName += ` (+${phoneCode})`;\n\n  const label = `${code} - ${formattedCountryName}`;\n\n  return { label, value: code };\n});\n\n// Disabled when adding max-props rule.\n// Future work should stay under 6 props\n// eslint-disable-next-line local-rules/max-props\nexport function PhoneNumber({\n  className,\n  countryCode,\n  disabled,\n  hideLabels,\n  labelClassName,\n  phoneNumber,\n  required,\n  onCountryCodeChange,\n  onPhoneNumberChange,\n}) {\n  const countryCodeAria = {\n    label: countryCode.labelText || 'Country code',\n  };\n\n  const phoneNumberAria = {\n    label: phoneNumber.labelText || 'Phone number',\n  };\n\n  const isPhoneNumberOrCountryCodeErrorPresent =\n    phoneNumber.phoneNumberErrorPresent ||\n    countryCode.phoneCountryCodeErrorPresent;\n\n  const getDefaultCountryCodeInput = () =>\n    SELECT_OPTIONS.find(({ value }) => value === countryCode.defaultValue);\n\n  const handleCountryCodeChange = (option) => {\n    const value = option ? option.value : null;\n\n    if (onCountryCodeChange) {\n      onCountryCodeChange({ name: countryCode.name, value });\n    }\n  };\n\n  const handlePhoneNumberChange = ({ target: { value } }) => {\n    if (onPhoneNumberChange) {\n      onPhoneNumberChange({ name: phoneNumber.name, value });\n    }\n  };\n\n  return (\n    <div className={`PhoneNumber ${className || ''}`}>\n      <div className=\"PhoneNumber__country-code\">\n        {!hideLabels && (\n          <InputLabel\n            className={`${labelClassName || ''}`}\n            labelHelperText={countryCode.optional && 'Optional'}\n            labelHtmlFor=\"country-code\"\n            required={required}\n            text={countryCodeAria.label}\n          />\n        )}\n        <SingleSelect\n          defaultValue={getDefaultCountryCodeInput()}\n          disabled={disabled}\n          inputId=\"country-code\"\n          isClearable\n          isSearchable\n          name={countryCode.name}\n          options={SELECT_OPTIONS}\n          placeholder={countryCode.placeholder}\n          onChange={handleCountryCodeChange}\n        />\n      </div>\n\n      <div className=\"PhoneNumber__phone-number\">\n        {!hideLabels && (\n          <InputLabel\n            className={`${labelClassName || ''}`}\n            labelHelperText={phoneNumber.optional && 'Optional'}\n            labelHtmlFor=\"phone-number\"\n            required={required}\n            text={phoneNumberAria.label}\n          />\n        )}\n        <Input\n          aria-describedby={\n            isPhoneNumberOrCountryCodeErrorPresent ? 'phone-error' : null\n          }\n          aria-invalid={isPhoneNumberOrCountryCodeErrorPresent}\n          defaultValue={phoneNumber.defaultValue}\n          disabled={disabled}\n          id=\"phone-number\"\n          name={phoneNumber.name}\n          placeholder={phoneNumber.placeholder}\n          required={required}\n          type=\"tel\"\n          onChange={handlePhoneNumberChange}\n        />\n      </div>\n    </div>\n  );\n}\n\nPhoneNumber.propTypes = {\n  className: propTypes.string,\n  countryCode: propTypes.shape({\n    defaultValue: propTypes.string,\n    labelText: propTypes.string,\n    name: propTypes.string,\n    optional: propTypes.bool,\n    phoneCountryCodeErrorPresent: propTypes.bool,\n    placeholder: propTypes.string,\n  }),\n  disabled: propTypes.bool,\n  hideLabels: propTypes.bool,\n  labelClassName: propTypes.string,\n  phoneNumber: propTypes.shape({\n    defaultValue: propTypes.string,\n    labelText: propTypes.oneOfType([propTypes.string, propTypes.element]),\n    name: propTypes.string,\n    optional: propTypes.bool,\n    phoneNumberErrorPresent: propTypes.bool,\n    placeholder: propTypes.string,\n  }),\n  required: propTypes.bool,\n  onCountryCodeChange: propTypes.func,\n  onPhoneNumberChange: propTypes.func,\n};\n\nPhoneNumber.defaultProps = {\n  countryCode: {},\n  disabled: false,\n  hideLabels: false,\n  phoneNumber: {},\n  required: false,\n};\n","export const ACCESS_GRANTS_TAG = 'AccessGrants';\nexport const ACCOUNT_AVAILABILITY_SETTINGS_TAG = 'AccountAvailabilitySettings';\nexport const ACCOUNT_CHECKLIST_TAG = 'AccountChecklist';\nexport const ACCOUNT_COLLABORATORS_TAG = 'AccountCollaborators';\nexport const ACCOUNT_HUB_CONFIGURATIONS = 'AccountHubConfigurations';\nexport const ACCOUNT_INTEGRATIONS_TAG = 'AccountIntegrations';\nexport const ACCOUNT_PROJECT_TASK_EVENTS_TAG = 'AccountProjectTaskEvents';\nexport const ACCOUNT_PROJECTS_TAG = 'AccountProjects';\nexport const ACCOUNT_SIGNUP_INFO_TAG = 'AccountSignupInfo';\nexport const ACCOUNTS_TAG = 'Accounts';\nexport const ACCOUNT_TEAMS_TAG = 'AccountTeams';\nexport const BULK_EMAIL_TAG = 'BulkEmail';\nexport const COMMENTERS_TAG = 'Commenters';\nexport const COMMENTS_TAG = 'Comments';\nexport const DATA_JOB_TAG = 'DataJob';\nexport const PROJECT_AVAILABILITY_RANGES_TAG = 'ProjectAvailabilityRanges';\nexport const DEFAULT_SESSION_ROLES_TAG = 'DefaultSessionRoles';\nexport const DOPE_TABLE_COLUMNS_TAG = 'DopeTableColumns';\nexport const EMAIL_DOMAINS_TAG = 'EmailDomains';\nexport const EMAIL_PROFILE_TAG = 'EmailProfile';\nexport const EMAIL_THEME_TAG = 'EmailTheme';\nexport const FEATURE_FLAG_TAG = 'FeatureFlag';\nexport const OPEN_RECRUIT_PERIOD_TAG = 'OpenRecruitPeriod';\nexport const OPT_IN_FORMS_TAG = 'OptInForms';\nexport const PROJECT_COLLABORATOR_CALENDAR_EVENTS_TAG =\n  'ProjectCollaboratorCalendarEvents';\nexport const ORGANIZATION_ACCOUNTS_TAG = 'OrganizationAccounts';\nexport const ORGANIZATION_EMAIL_THEMES_TAG = 'OrganizationEmailThemes';\nexport const ORGANIZATION_PARTICIPANTS_TAG = 'OrganizationParticipants';\nexport const ORGANIZATION_POPULATION_PANELS_TAG =\n  'OrganizationPopulationPanels';\nexport const ORGANIZATION_PROJECT_CUSTOM_EMAIL_SETS_TAG =\n  'OrganizationProjectCustomEmailSets';\nexport const ORGANIZATION_TEAMS_TAG = 'OrganizationTeams';\nexport const PARTICIPANT_ATTRIBUTE_VALUES_TAG = 'ParticipantAttributeValues';\nexport const PARTICIPANT_FRAUD_REPORT_TAG = 'FraudReport';\nexport const PARTICIPANT_LABELS_TAG = 'ParticipantLabels';\nexport const PARTICIPANT_MANAGEMENT_INVITED_PARTICIPANTS_TAG =\n  'ParticipantManagementInvitedParticipants';\nexport const PARTICIPANT_MANAGEMENT_SHORTLISTED_PARTICIPANTS_TAG =\n  'ParticipantManagementShortlistedParticipants';\nexport const PARTICIPANT_PROJECT_PARTICIPANTS_TAG =\n  'ParticipantProjectParticipants';\nexport const PARTICIPANT_PROJECTS_TAG = 'ParticipantProjects';\nexport const PARTICIPANT_SURVEY_RESPONSE_SETS_TAG =\n  'ParticipantSurveyResponseSets';\nexport const PARTICIPANT_TASK_EVENT_STATS_TAG = 'ParticipantTaskEventStats';\nexport const PARTICIPANTS_TAG = 'Participants';\nexport const PARTICIPATION_DETAILS_TAG = 'ParticipationDetails';\nexport const POPULATION_ATTRIBUTES_TAG = 'PopulationAttributes';\nexport const POPULATION_INVITE_FILTERS_TAG = 'PopulationInviteFilters';\nexport const POPULATION_LABELS_TAG = 'PopulationLabels';\nexport const POPULATION_PANEL_PARTICIPANTS_TAG = 'PopulationPanelParticipants';\nexport const PREPAID_BALANCE_ACCOUNTS_TAG = 'PrepaidBalanceAccounts';\nexport const PREPAID_BALANCE_INVITATIONS_TAG = 'PrepaidBalanceInvitations';\nexport const PREPAID_BALANCE_TAG = 'PrepaidBalance';\nexport const PREPAID_BALANCE_TRANSACTIONS_TAG = 'PrepaidBalanceTransactions';\nexport const PREPAID_BALANCES_TAG = 'PrepaidBalances';\nexport const PROJECT_ACCOUNT_ROLES_TAG = 'ProjectAccountRoles';\nexport const PROJECT_AVAILABILITY_SETTINGS_TAG = 'ProjectAvailabilitySettings';\nexport const PROJECT_CLOSE_REQUEST_TAG = 'ProjectCloseRequest';\nexport const PROJECT_COLLABORATORS_TAG = 'ProjectCollaborators';\nexport const PROJECT_COST_BREAKDOWN_TAG = 'ProjectCostBreakdown';\nexport const PROJECT_CUSTOM_EMAILS_TAG = 'ProjectCustomEmails';\nexport const PROJECT_DEMOGRAPHIC_RULES_TAG = 'ProjectDemographicRules';\nexport const PROJECT_EMAIL_STATS_TAG = 'ProjectEmailStats';\nexport const PROJECT_EXPECTED_COST_DETAILS_TAG = 'ProjectExpectedCostDetails';\nexport const PROJECT_FILE_UPLOADS_TAG = 'ProjectFileUploads';\nexport const PROJECT_INVOICES_TAG = 'ProjectInvoices';\nexport const PROJECT_LISTINGS_TAG = 'ProjectListings';\nexport const PROJECT_OCCUPATION_LINKS_TAG = 'ProjectOccupationLinks';\nexport const PROJECT_OCCUPATION_TAGS_TAG = 'ProjectOccupationTags';\nexport const PROJECT_PARTICIPANT_ADMIN_DATA_TAG = 'ProjectParticipantAdminData';\nexport const PROJECT_PARTICIPANT_APPLICATION_STATUSES_TAG =\n  'ProjectParticipantApplicationStatuses';\nexport const PROJECT_PARTICIPANT_TAG_TAG = 'ProjectParticipantTags';\nexport const PROJECT_PARTICIPANTS_TAG = 'ProjectParticipants';\nexport const PROJECT_PAYMENT_METHODS_TAG = 'ProjectPaymentMethods';\nexport const PROJECT_PROJECT_PARTICIPANTS_TAG = 'ProjectProjectParticipants';\nexport const PROJECT_PROJECT_SKILLS_TAG = 'ProjectProjectSkills';\nexport const PROJECT_PROJECT_TASKS_TAG = 'ProjectProjectTasks';\nexport const PROJECT_PROPOSED_AVAILABILITY_RANGE_COLLECTIONS_TAG =\n  'ProjectProposedAvailabilityRangeCollections';\nexport const PROJECT_PROPOSED_AVAILABILITY_RANGES_TAG =\n  'ProjectProposedAvailabilityRanges';\nexport const PROJECT_SCHEDULED_INVITE_SETTINGS_TAG =\n  'ProjectScheduledInviteSettings';\nexport const PROJECT_SESSIONS_SIGNUP_PAGE_TAG = 'ProjectSessionsSignupPage';\nexport const PROJECT_SESSIONS_TAG = 'ProjectSessions';\nexport const PROJECT_SETTINGS_TAG = 'ProjectSettings';\nexport const PROJECT_SUMMARIES_TAG = 'ProjectSummaries';\nexport const PROJECT_SURVEY_KEYS_TAG = 'ProjectSurveyKeys';\nexport const PROJECT_SURVEYS_TAG = 'ProjectSurveys';\nexport const PROJECT_TAG = 'Projects';\nexport const PROJECT_TAG_TAG = 'ProjectTag';\nexport const PROJECT_VIDEO_UPLOADS_TAG = 'ProjectVideoUploads';\nexport const PROJECT_WORKSPACE_CALENDAR_TAG = 'ProjectWorkspaceCalendar';\nexport const PROJECT_WORKSPACE_SESSIONS_TAG = 'ProjectWorkspaceSessions';\nexport const RECRUIT_PERIOD_TAG = 'RecruitPeriod';\nexport const REPORT_TAG = 'Report';\nexport const REPORTS_TAG = 'Reports';\nexport const RESEARCHER_NOTE_TAG = 'ResearcherNote';\nexport const RESPONSE_SETS_TAG = 'ResponseSets';\nexport const SCHEDULABLE_RANGES_TAG = 'SchedulableRanges';\nexport const SEGMENTS_TAG = 'Segments';\nexport const SESSION_PROJECT_PARTICIPANTS_TAG = 'SessionProjectParticipants';\nexport const SESSION_ROLES_TAG = 'SessionRoles';\nexport const SESSION_SIGNUP_PAGES_SESSIONS_TAG = 'SessionSignupPagesSessions';\nexport const SIGNATURE_REQUESTS_TAG = 'SignatureRequests';\nexport const STRIPE_CARDS_TAG = 'StripeCards';\nexport const SURVEY_PREVIEW_SECTIONS_TAG = 'SurveyPreviewSections';\nexport const SURVEY_SECTIONS_TAG = 'SurveySections';\nexport const TEAM_BILLING_INFOS_TAG = 'TeamBillingInfos';\nexport const TEAM_HUB_USAGE_TAG = 'TeamHubUsage';\nexport const TEAM_INVITES_TAG = 'TeamInvites';\nexport const TEAM_MEMBERS_TAG = 'TeamMembers';\nexport const TEAM_PARTICIPANTS_TAG = 'TeamParticipants';\nexport const TEAM_PROJECT_TEMPLATES_TAG = 'TeamProjectTemplates';\nexport const TEAM_PROJECTS_TAG = 'TeamProjects';\nexport const TEAM_SETTINGS_TAG = 'TeamSettings';\nexport const TEAM_SUBSCRIPTIONS_TAG = 'TeamSubscriptions';\nexport const TEAM_TAG = 'Team';\nexport const WORKSPACE_PARTICIPANTS_TAG = 'WorkspaceParticipants';\n","import React, { type ComponentType } from 'react';\nimport { Provider } from 'react-redux';\nimport { ErrorBoundary as AppsignalErrorBoundary } from '@appsignal/react';\n\nimport store from 'store/store';\nimport { DopeBrowserRouter } from 'components/dope_browser_router';\nimport { useTrackingWithDefaultDispatch } from 'hooks/use_tracking_with_default_dispatch';\nimport { RailsContextProvider, useRailsContext } from 'hooks/use_rails_context';\n// eslint-disable-next-line no-restricted-imports\nimport appsignal from 'lib/telemetry/appsignal';\n\nimport { getDisplayName } from './utils';\n\ntype PageProvidersProps = {\n  children: React.ReactNode;\n};\n\nfunction PageProviders({ children }: PageProvidersProps) {\n  const { Track } = useTrackingWithDefaultDispatch();\n  const railsContext = useRailsContext();\n\n  if (!appsignal) {\n    return (\n      <DopeBrowserRouter location={railsContext?.request.location ?? '/'}>\n        <Provider store={store}>\n          <Track>{children}</Track>\n        </Provider>\n      </DopeBrowserRouter>\n    );\n  }\n\n  return (\n    <AppsignalErrorBoundary\n      fallback={\n        railsContext?.env.APPSIGNAL_FALLBACK\n          ? (error?: Error) => (\n              <div className=\"ui-error-boundary-fallback\">\n                There was an error loading this component\n                <span aria-label=\"warning\" role=\"img\">\n                  {' '}\n                  ⚠️{' '}\n                </span>\n                {error && error.message}\n              </div>\n            )\n          : undefined\n      }\n      instance={appsignal}\n    >\n      <DopeBrowserRouter location={railsContext?.request.location ?? '/'}>\n        <Provider store={store}>\n          <Track>{children}</Track>\n        </Provider>\n      </DopeBrowserRouter>\n    </AppsignalErrorBoundary>\n  );\n}\n\nexport function withPageProviders<T extends object>(\n  WrappedComponent: ComponentType<T>,\n) {\n  function WithPageProviders(props: T, railsContext: unknown) {\n    return function () {\n      return (\n        <RailsContextProvider railsContext={railsContext}>\n          <PageProviders>\n            <WrappedComponent {...props} />\n          </PageProviders>\n        </RailsContextProvider>\n      );\n    };\n  }\n\n  WithPageProviders.displayName = `withPageProviders(${getDisplayName(WrappedComponent)})`;\n  return WithPageProviders;\n}\n","import * as routes from 'lib/routes';\n\nimport { apiSlice } from 'api/base_slice';\nimport { TEAM_PROJECTS_TAG } from 'api/tag_types';\nimport { deserializeJSONApiResponse, sortAlphabeticalByName } from 'api/utils';\n\n// TODO: Find graceful way to switch between sorted or not, likely backend?\n// Also researched passing args into transformResponse, but would not work even with upgrade\n// eslint-disable-next-line max-len\n// https://stackoverflow.com/questions/73070967/how-to-access-the-query-arguments-in-transformresponse-with-redux-toolkit-query\n// transformResponse: (response, meta, arg) => {\n\nexport const teamProjectsApi = apiSlice.injectEndpoints({\n  endpoints: (builder) => ({\n    getTeamProjects: builder.query({\n      query: ({ teamId, ...rest }) =>\n        routes.api_team_projects_path({ team_id: teamId, ...rest }),\n      transformResponse: (response) =>\n        sortAlphabeticalByName(deserializeJSONApiResponse(response)),\n      providesTags: [TEAM_PROJECTS_TAG],\n    }),\n    getUnsortedTeamProjects: builder.query({\n      query: ({ teamId, ...rest }) =>\n        routes.api_team_projects_path({ team_id: teamId, ...rest }),\n      transformResponse: deserializeJSONApiResponse,\n      providesTags: (_result, _error, { id }) => [\n        { type: TEAM_PROJECTS_TAG, id },\n      ],\n    }),\n  }),\n  overrideExisting: 'throw',\n});\n\nexport const { useGetTeamProjectsQuery, useGetUnsortedTeamProjectsQuery } =\n  teamProjectsApi;\n","import { useMemo } from 'react';\nimport { z, type ZodSchema } from 'zod';\n\nimport { useGetProjectQuery } from 'api/projects';\n\nimport { useErrorLogger } from 'hooks/use_error_logger';\nimport {\n  COMPENSATION_TYPE_OTHER,\n  THEY_PAY_COMPENSATION_OPTION_VALUES,\n  THEY_PAY_COMPENSATION_IN_PERSON_OPTION_VALUES,\n} from 'researcher/project_workspace/constants';\n\nimport { PARTICIPANT_EMAIL_CLASSES } from 'lib/generated_constants/emails';\nimport { PROJECT_SOURCE_TYPES } from 'lib/generated_constants/project_source_types';\nimport {\n  CompensationMethods,\n  IntegrationProviders,\n  ProjectSettings,\n  StudyTypes,\n  InterviewTypes,\n  ProjectStatuses,\n} from 'lib/generated_constants/projects';\n\nimport { useProjectWorkspaceContext } from './use_project_workspace_context';\n\nconst computeIsAutopayEnabled = (projectSettings: unknown) => {\n  if (!projectSettings || typeof projectSettings !== 'object') return false;\n  if (!('disableAutopay' in projectSettings)) return false;\n\n  if (typeof projectSettings.disableAutopay === 'boolean')\n    return projectSettings.disableAutopay === false;\n  if (typeof projectSettings.disableAutopay === 'string')\n    return projectSettings.disableAutopay === 'false';\n\n  return false;\n};\n\nconst projectSchema = z\n  .object({\n    id: z.string(),\n    accessCode: z.string(),\n    additionalRecruitmentRequirementsHtml: z.string().nullable(),\n    advancedScreening: z.boolean(),\n    billingAccount: z.object({\n      id: z.string(),\n      commenterId: z.string(),\n      initials: z.string(),\n      email: z.string(),\n      firstName: z.string(),\n      lastName: z.string(),\n      fullName: z.string(),\n      lookbackEnabledAt: z.string().nullable(),\n      name: z.string(),\n      nameLastFirst: z.string(),\n      messagerId: z.number(),\n      roleId: z.number().nullable().optional(),\n      phoneNumber: z.string().nullable(),\n      teams: z\n        .array(z.object({ id: z.string() }))\n        .optional()\n        .nullable(),\n    }),\n    compensationAmount: z.string().nullable(),\n    compensationMethodId: z.number().nullable(),\n    compensationType: z.string().nullable(),\n    confirmationNotesHtml: z.string().nullable(),\n    consumerFee: z.number(),\n    createdAt: z.string(),\n    currentStatus: z.string(),\n    defaultSessionLocation: z.string().nullable(),\n    deviceRequirements: z\n      .object({\n        summary: z.array(z.array(z.string())),\n        ids: z.array(z.number()),\n      })\n      .nullable(),\n    documentDescription: z.object({\n      description: z.string().nullable(),\n      signatureRequestDataKey: z.string().nullable(),\n    }),\n    documentName: z.string().optional(),\n    draftParticipantsCount: z.number(),\n    emailProfileId: z.number().nullable(),\n    emails: z.array(\n      z.object({\n        allowEdit: z.boolean(),\n        class: z.enum(PARTICIPANT_EMAIL_CLASSES as [string, ...string[]]),\n        description: z.string(),\n        id: z.number().nullable(),\n        purpose: z.string(),\n        name: z.string(),\n        slug: z.string(),\n      }),\n    ),\n    emailThemeId: z.number().nullable(),\n    hasDocumentSigning: z.boolean(),\n    incentive: z.string(),\n    internalDescription: z.string().nullable(),\n    interviewType: z.string().nullable(),\n    interviewTypeId: z.number().nullable(),\n    isActive: z.boolean(),\n    isEligibleForSessionObservers: z.boolean().nullable(),\n    isPrivate: z.boolean(),\n    isSystemHidden: z.boolean(),\n    isZeroCost: z.boolean(),\n    latestStatusTypeId: z.number(),\n    location: z\n      .object({\n        address: z.string().nullable().optional(),\n        autocomplete: z.string().nullable().optional(),\n        city: z.string().nullable().optional(),\n        countries: z.array(z.string()).optional(),\n        detail: z.string().nullable().optional(),\n        // TODO: Get a working type for this column; afaict it is indeed an array of objects. For some reason though, when\n        // specifying the type as z.array(z.object({})), the data is not being coerced into an empty object making users unable\n        // to see their City selections in the UI\n        // googleLocationInfo: z.array(z.object({})).optional(),\n        googleLocationInfo: z.any(),\n        googleMapsUrl: z.string().nullable().optional(),\n        latitude: z.number().nullable().optional().optional(),\n        locationExtraInfo: z.string().nullable().optional(),\n        longitude: z.number().nullable().optional().optional(),\n        parkingAvailable: z.boolean().optional(),\n        parkingInfo: z.string().nullable().optional(),\n        regions: z.array(z.string()).optional(),\n      })\n      .nullable(),\n    meta: z.object({\n      canView: z.boolean(),\n      canEdit: z.boolean(),\n      invalidLaunchMessages: z.string().optional(),\n      invalidLaunchProps: z.array(z.string()).optional(),\n      firstProjectId: z.string().optional(),\n    }),\n    name: z.string().nullable(),\n    numParticipants: z.number().nullable(),\n    organizationId: z.number(),\n    originalNumParticipants: z.number().nullable(),\n    owner: z.object({\n      id: z.string(),\n      commenterId: z.string(),\n      initials: z.string(),\n      email: z.string(),\n      firstName: z.string(),\n      lastName: z.string(),\n      fullName: z.string(),\n      lookbackEnabledAt: z.string().nullable(),\n      name: z.string(),\n      nameLastFirst: z.string(),\n      messagerId: z.number(),\n      roleId: z.number().nullable().optional(),\n      phoneNumber: z.string().nullable(),\n      teams: z\n        .array(z.object({ id: z.string() }))\n        .optional()\n        .nullable(),\n      relationshipNames: z.array(z.string()).optional(),\n    }),\n    participantPopulationId: z.number().nullable(),\n    participantReferrals: z.boolean(),\n    professionalFee: z.number(),\n    projectCustomEmailSetId: z.number().nullable(),\n    projectStatus: z.string(),\n    publicDescription: z.string().nullable(),\n    publicTitle: z.string().nullable(),\n    remainingInviteCount: z.number().optional(),\n    requireApproval: z.boolean().optional(),\n    researcherWillCall: z.boolean(),\n    screenerVideo: z\n      .object({\n        id: z.string(),\n        prompt: z.string(),\n      })\n      .nullable(),\n    sessionLength: z.string().nullable(),\n    settings: z.object({\n      // TODO: There are many more settings; their types are defined by the ProjectSetting BobEnum\n      confirmOnJoin: z.boolean().optional(),\n      requireApproval: z.boolean().optional(),\n      participantReschedulingEnabled: z.boolean().optional(),\n      rptInvitesOnly: z.boolean().optional(),\n    }),\n    sourceType: z.string(),\n    studyLength: z.object({\n      days: z.number().optional(),\n      hours: z.number().optional(),\n      minutes: z.number().optional(),\n    }),\n    studyType: z.string(),\n    studyTypeId: z.number().nullable(),\n    studyTypeName: z.string(),\n    surveyDraft: z\n      .object({\n        id: z.string(),\n        surveyJson: z.string(),\n      })\n      .nullable(),\n    targetProfessionals: z.boolean(),\n    task: z\n      .object({\n        id: z.string(),\n        externalId: z.string().nullable(),\n        provider: z.string(),\n        repositoryUrl: z.string().nullable(),\n        providerDisplayName: z.string().nullable(),\n        title: z.string().nullable(),\n        url: z.string().nullable(),\n      })\n      .nullable(),\n    taskSession: z\n      .object({\n        id: z.string(),\n        moderatorId: z.number(),\n        numScheduled: z.number(),\n        numSlots: z.number(),\n        sessionLocation: z.string().nullable(),\n        startTime: z.string(),\n        datetimeDisplay: z.string(),\n        hasPassed: z.boolean(),\n        hostUrl: z.string().nullable(),\n        hasZoomSessionLocation: z.boolean(),\n        hasMeetSessionLocation: z.boolean(),\n        start: z.string(),\n        startDate: z.string(),\n        timeDisplay: z.string(),\n      })\n      .nullable(),\n    teamDomain: z.string().nullable(),\n    teamId: z.number(),\n    timezone: z.string(),\n    timezoneAbbreviation: z.string(),\n    useEmailTheme: z.boolean(),\n    wePay: z.boolean().nullable(),\n  })\n  .passthrough()\n  .optional();\n\nexport function buildProjectState(project: z.infer<typeof projectSchema>) {\n  if (!project) return undefined;\n\n  const {\n    accessCode,\n    additionalRecruitmentRequirementsHtml,\n    advancedScreening,\n    billingAccount,\n    compensationAmount,\n    compensationMethodId,\n    compensationType,\n    confirmationNotesHtml,\n    consumerFee,\n    defaultSessionLocation,\n    deviceRequirements,\n    documentDescription,\n    documentName,\n    draftParticipantsCount,\n    emailProfileId,\n    emailThemeId,\n    emails,\n    hasDocumentSigning,\n    id,\n    internalDescription,\n    interviewTypeId,\n    isActive,\n    isEligibleForSessionObservers,\n    isPrivate,\n    isSystemHidden,\n    isZeroCost,\n    latestStatusTypeId,\n    location,\n    meta: { invalidLaunchMessages, invalidLaunchProps, firstProjectId } = {},\n    name,\n    numParticipants,\n    organizationId,\n    originalNumParticipants,\n    owner,\n    participantPopulationId,\n    participantReferrals,\n    professionalFee,\n    projectCustomEmailSetId,\n    publicDescription,\n    publicTitle,\n    remainingInviteCount,\n    requireApproval,\n    researcherWillCall,\n    screenerVideo,\n    sourceType,\n    studyLength,\n    studyTypeId,\n    surveyDraft,\n    targetProfessionals,\n    task,\n    taskSession,\n    teamDomain,\n    teamId,\n    timezone,\n    timezoneAbbreviation,\n    useEmailTheme,\n  } = project;\n\n  const isAutopayEnabled = computeIsAutopayEnabled(project.settings);\n  const isNoIncentiveTypeProject =\n    compensationMethodId === CompensationMethods.NONE;\n  const isWePay = compensationMethodId === CompensationMethods.WE_PAY;\n  const senderId = project.owner?.messagerId;\n  const hasIntegration =\n    !!task?.provider &&\n    IntegrationProviders.TRACKED_PROVIDERS.includes(task.provider);\n  const isConfirmOnJoin =\n    project.settings?.confirmOnJoin ?? ProjectSettings.confirmOnJoin.default;\n  const isParticipantApprovalRequired =\n    project.settings?.requireApproval ??\n    ProjectSettings.requireApproval.default;\n  const isRptProject =\n    project.settings?.rptInvitesOnly ?? ProjectSettings.rptInvitesOnly.default;\n  const isRecruitProject = sourceType === PROJECT_SOURCE_TYPES.PROJECT;\n  const isHubProject = sourceType === PROJECT_SOURCE_TYPES.BYOA_PROJECT;\n  const isSourcelessProject =\n    sourceType === PROJECT_SOURCE_TYPES.SOURCELESS_PROJECT;\n  const hasParticipantSource = !isSourcelessProject;\n  const isOneOnOne = studyTypeId === StudyTypes.ONE_ON_ONE;\n  const isFocusGroup = studyTypeId === StudyTypes.FOCUS_GROUP;\n  const isMultiDay = studyTypeId === StudyTypes.MULTI_DAY;\n  const isUnmoderatedTask = studyTypeId === StudyTypes.UNMODERATED_TASK;\n  const hasStudyType =\n    studyTypeId && Object.values(StudyTypes).includes(studyTypeId);\n  const isModerated = hasStudyType && !isUnmoderatedTask;\n  const isOnlineInterview = interviewTypeId === InterviewTypes.ONLINE;\n  const isPhoneInterview = interviewTypeId === InterviewTypes.PHONE;\n  const isInPersonInterview = interviewTypeId === InterviewTypes.IN_PERSON;\n  const isDraft = latestStatusTypeId === ProjectStatuses.DRAFT;\n  const isLaunchable = !invalidLaunchProps?.length;\n  const isLaunched = latestStatusTypeId === ProjectStatuses.LAUNCHED;\n  const participantReschedulingEnabled =\n    project.settings?.participantReschedulingEnabled;\n  const isFirstProject = String(firstProjectId) === String(id);\n\n  const hasOtherCompensationType =\n    !!compensationType &&\n    (isInPersonInterview\n      ? !THEY_PAY_COMPENSATION_IN_PERSON_OPTION_VALUES.includes(\n          compensationType,\n        )\n      : !THEY_PAY_COMPENSATION_OPTION_VALUES.includes(compensationType));\n  const derivedCompensationType = hasOtherCompensationType\n    ? COMPENSATION_TYPE_OTHER\n    : compensationType;\n  const compensationTypeOtherCustomValue = hasOtherCompensationType\n    ? compensationType\n    : undefined;\n\n  return {\n    accessCode,\n    additionalRecruitmentRequirementsHtml,\n    advancedScreening,\n    billingAccount,\n    compensationAmount,\n    compensationMethodId,\n    compensationType: derivedCompensationType,\n    compensationTypeOtherCustomValue,\n    confirmationNotesHtml,\n    consumerFee,\n    defaultSessionLocation,\n    deviceRequirements,\n    documentDescription,\n    documentName,\n    draftParticipantsCount,\n    emailProfileId,\n    emailThemeId,\n    emails,\n    hasDocumentSigning,\n    hasIntegration,\n    hasParticipantSource,\n    hasStudyType,\n    id,\n    internalDescription,\n    interviewTypeId,\n    invalidLaunchMessages,\n    invalidLaunchProps,\n    isActive,\n    isAutopayEnabled,\n    isConfirmOnJoin,\n    isDraft,\n    isEligibleForSessionObservers,\n    isFirstProject,\n    isFocusGroup,\n    isHubProject,\n    isInPersonInterview,\n    isLaunchable,\n    isLaunched,\n    isModerated,\n    isMultiDay,\n    isNoIncentiveTypeProject,\n    isOneOnOne,\n    isOnlineInterview,\n    isParticipantApprovalRequired,\n    isPhoneInterview,\n    isPrivate,\n    isRecruitProject,\n    isRptProject,\n    isSourcelessProject,\n    isSystemHidden,\n    isUnmoderatedTask,\n    isWePay,\n    isZeroCost,\n    latestStatusTypeId,\n    location,\n    name,\n    numParticipants,\n    organizationId,\n    originalNumParticipants,\n    owner,\n    participantPopulationId,\n    participantReferrals,\n    participantReschedulingEnabled,\n    professionalFee,\n    projectCustomEmailSetId,\n    publicDescription,\n    publicTitle,\n    remainingInviteCount,\n    requireApproval,\n    researcherWillCall,\n    screenerVideo,\n    senderId,\n    sourceType,\n    studyLength,\n    studyTypeId,\n    surveyDraft,\n    targetProfessionals,\n    task,\n    taskSession,\n    teamDomain,\n    teamId,\n    timezone,\n    timezoneAbbreviation,\n    useEmailTheme,\n  };\n}\n\nexport type ProjectState = ReturnType<typeof buildProjectState>;\n\nfunction safelyParseSchema<T>(\n  data: unknown,\n  schema: ZodSchema<T>,\n  callback: (error: Error) => void,\n) {\n  if (['development', 'test'].includes(process.env.NODE_ENV ?? '')) {\n    return schema.parse(data);\n  }\n\n  try {\n    return schema.parse(data);\n  } catch (error) {\n    callback(error as Error);\n\n    return data as T;\n  }\n}\n\n// use this hook to pull project state instead of the rtk query directly.\n// this allows us to deserialize the data into a more usable format\n// and prevents a bunch of potential fallout if/when we rework the project\n// model for \"continuous research.\"\nexport function useGetProjectState() {\n  const logError = useErrorLogger();\n  const { projectId } = useProjectWorkspaceContext();\n  const { data, ...rest } = useGetProjectQuery({\n    projectId,\n    include: [\n      'billing_account',\n      'default_session_location',\n      'document_description',\n      'document_name',\n      // TODO: remove draft_participants_count once we're not using it\n      // https://linear.app/user-interviews/issue/RXS-1981/[cleanup]-remove-feature-flag\n      'draft_participants_count',\n      'emails',\n      'screener_video',\n      'survey_draft',\n      'task',\n      'task_session',\n    ].join(','),\n  });\n\n  const schema = useMemo(() => projectSchema, []);\n\n  const projectState = useMemo(() => {\n    if (!data) return undefined;\n    const project = safelyParseSchema(data, schema, (error) => {\n      logError(error);\n    });\n\n    return buildProjectState(project);\n  }, [data, logError, schema]);\n\n  return {\n    ...rest,\n    projectState,\n  };\n}\n","import * as routes from 'lib/routes';\n\nimport { apiSlice } from 'api/base_slice';\nimport {\n  PARTICIPANT_SURVEY_RESPONSE_SETS_TAG,\n  RESPONSE_SETS_TAG,\n} from 'api/tag_types';\nimport { deserializeJSONApiResponse, headersAndCredentials } from 'api/utils';\n\nexport const responseSetListTag = { type: RESPONSE_SETS_TAG, id: 'LIST' };\n\nexport const responseSetsApi = apiSlice.injectEndpoints({\n  endpoints: (builder) => ({\n    getResponseSets: builder.query({\n      query: (params) => routes.api_response_sets_path(params),\n      transformResponse: deserializeJSONApiResponse,\n      providesTags: (result) =>\n        (result || [])\n          .map((item) => ({ type: RESPONSE_SETS_TAG, id: item.id }))\n          .concat([responseSetListTag]),\n    }),\n    createResponseSet: builder.mutation({\n      query: ({ surveyId, ...body }) => ({\n        url: routes.api_survey_response_sets_path({ survey_id: surveyId }),\n        method: 'POST',\n        body,\n        ...headersAndCredentials(),\n      }),\n      transformResponse: (response) => {\n        const data = deserializeJSONApiResponse(response);\n        return { data, meta: response.meta };\n      },\n      invalidatesTags: [responseSetListTag],\n    }),\n    updateResponseSet: builder.mutation({\n      query: (body) => ({\n        url: routes.api_response_set_path(body.data.id),\n        method: 'PATCH',\n        body,\n        ...headersAndCredentials(),\n      }),\n      transformResponse: (response) => {\n        const data = deserializeJSONApiResponse(response);\n        return { data, meta: response.meta };\n      },\n      invalidatesTags: (_result, _error, { id }) => [\n        responseSetListTag,\n        { type: RESPONSE_SETS_TAG, id },\n      ],\n    }),\n    deleteResponseSet: builder.mutation({\n      query: ({ responseSetId }) => ({\n        url: routes.api_response_set_path(responseSetId),\n        method: 'DELETE',\n        ...headersAndCredentials(),\n      }),\n      invalidatesTags: (_result, _error, { responseSetId }) => [\n        responseSetListTag,\n        { type: RESPONSE_SETS_TAG, id: responseSetId },\n        { type: PARTICIPANT_SURVEY_RESPONSE_SETS_TAG, id: responseSetId },\n      ],\n    }),\n  }),\n  overrideExisting: 'throw',\n});\n\nexport const {\n  useGetResponseSetsQuery,\n  useCreateResponseSetMutation,\n  useLazyGetResponseSetsQuery,\n  useUpdateResponseSetMutation,\n  useDeleteResponseSetMutation,\n} = responseSetsApi;\n","import type { ComponentType } from 'react';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getDisplayName(WrappedComponent: ComponentType<any>) {\n  return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n}\n","import { useContext } from 'react';\nimport { AuthUserContext } from 'common/authorization';\n\nexport function useAuthUserContext() {\n  return useContext(AuthUserContext);\n}\n","// extracted by mini-css-extract-plugin\nvar _1 = \"uZ8MYdiaESWJCjqimXr_\";\nvar _2 = \"aa9WlUhp90siVi_Ayqxn\";\nvar _3 = \"i_7LQn2fzgWYqOghLEsJ\";\nvar _4 = \"bOP4we4EJhWfZ29hojhw\";\nvar _5 = \"GpMsvbkp0xzLDEAdAY1P\";\nvar _6 = \"anplxCL1Xh4TQfnAP6m5\";\nvar _7 = \"WTDCDb0MrH_KJyB2KqJC\";\nvar _8 = \"yHeLU4wrRNzbB9A6Bsm6\";\nvar _9 = \"o4iyErwAfjslH12W8ZrQ\";\nvar _a = \"weOS2ShpYK55NLNmwQso\";\nvar _b = \"pUQlsNTSySEI3mf31Ie2\";\nvar _c = \"Wl9T3o9_QVLnptqBY2a7\";\nvar _d = \"MG27koMBbHco262N2hsH\";\nvar _e = \"_JZqcqc8HGsVbMVsr037\";\nvar _f = \"SijfAn9XLWNIE3g60WXj\";\nvar _10 = \"ABf0lDMn9qxRJGK0aTJM\";\nvar _11 = \"lMpXHGKGf9MSv3RGnAdA\";\nvar _12 = \"XNff4WDFfomxfyjEQ21A\";\nexport { _1 as \"ApplySuccessCard__detail__date\", _2 as \"BillingInfoCard__column\", _3 as \"CopyToClipboard\", _4 as \"DataConsentNotice__content__preview__body\", _5 as \"MessageList__message__timestamp\", _6 as \"ParticipantProfile__participant-details__attribute-value\", _7 as \"ProjectCustomEmailSets\", _8 as \"ProjectListItem__status-date\", _9 as \"ProjectListing__detail\", _a as \"ProjectListing__details\", _b as \"TeamMemberInviterForm__section__invite-via-link\", _c as \"UnmoderatedTask__deadline\", _d as \"btn-link--neutral\", _e as \"btn-outline-secondary\", _f as \"footer\", _10 as \"footerNavigationItem\", _11 as \"participant-dashboard__project__info__status__string\", _12 as \"schedule-project-participant-page__time-slots\" }\n","import React from 'react';\n\nimport * as routes from 'lib/routes';\nimport { trackingEvents } from 'lib/analytics/constants';\nimport { TeamActionTypes } from 'lib/generated_constants/team_action_types';\n\nimport { Authorization } from 'common/authorization';\nimport { NavigationItem } from '../navigation_item';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './footer.module.scss';\n\nconst { NAVIGATION_PARTICIPANTS_CLICKED, NAVIGATION_PROJECTS_CLICKED } =\n  trackingEvents;\n\nexport function Footer() {\n  return (\n    <footer className={styles.footer}>\n      <nav>\n        <NavigationItem\n          className={styles.footerNavigationItem}\n          event={NAVIGATION_PROJECTS_CLICKED}\n          href={routes.account_dashboard_path()}\n          iconSrcBase=\"/images/nav_icon_projects\"\n          label=\"Projects\"\n        />\n\n        <Authorization to={TeamActionTypes.SEARCH_PARTICIPANTS}>\n          <NavigationItem\n            className={styles.footerNavigationItem}\n            event={NAVIGATION_PARTICIPANTS_CLICKED}\n            href={routes.search_participants_path()}\n            iconSrcBase=\"/images/nav_icon_participants\"\n            label=\"Participants\"\n          />\n        </Authorization>\n      </nav>\n    </footer>\n  );\n}\n","/* eslint-disable camelcase */\nimport type {\n  PathParameters,\n  ResponseBody,\n  RequestBodyAttributes,\n} from 'lib/swagger_helper';\nimport * as routes from 'lib/routes';\n\nimport { apiSlice } from 'api/base_slice';\nimport { ACCOUNT_HUB_CONFIGURATIONS } from 'api/tag_types';\n\nimport { headersAndCredentials } from 'api/utils';\n\nexport type AccountHubConfigurationsRawResponse =\n  ResponseBody<'getAccountHubConfigurations'>;\nexport type AccountHubConfigurationsApiResponse = ReturnType<\n  typeof transformResponse\n>;\n\nexport const accountHubConfigurationsApi = apiSlice.injectEndpoints({\n  endpoints: (builder) => ({\n    getAccountHubConfigurations: builder.query<\n      AccountHubConfigurationsApiResponse,\n      PathParameters<'getAccountHubConfigurations'>\n    >({\n      query: ({ participant_population_id }) =>\n        routes.api_participant_population_hub_configs_path(\n          participant_population_id,\n        ),\n      providesTags: (_result, _error, { participant_population_id }) => [\n        { type: ACCOUNT_HUB_CONFIGURATIONS, id: participant_population_id },\n      ],\n      transformResponse,\n    }),\n    upsertAccountHubConfiguration: builder.mutation<\n      AccountHubConfigurationsApiResponse,\n      RequestBodyAttributes<'upsertAccountHubConfiguration'> &\n        PathParameters<'upsertAccountHubConfiguration'>\n    >({\n      query: ({ participant_population_id, ...configurations }) => ({\n        url: routes.api_participant_population_hub_configs_path(\n          participant_population_id,\n        ),\n        method: 'PATCH',\n        body: { data: { attributes: configurations } },\n        ...headersAndCredentials(),\n      }),\n      invalidatesTags: (_result, _error, { participant_population_id }) => [\n        { type: ACCOUNT_HUB_CONFIGURATIONS, id: participant_population_id },\n      ],\n      transformResponse,\n    }),\n  }),\n  overrideExisting: 'throw',\n});\n\nfunction transformResponse(\n  response:\n    | ResponseBody<'getAccountHubConfigurations'>\n    | ResponseBody<'upsertAccountHubConfiguration'>,\n) {\n  const { data } = response;\n\n  if (!data) return undefined;\n\n  return {\n    id: data.id,\n    ...data.attributes,\n  };\n}\n\nexport const {\n  useGetAccountHubConfigurationsQuery,\n  useUpsertAccountHubConfigurationMutation,\n} = accountHubConfigurationsApi;\n","import * as routes from 'lib/routes';\n\nimport { apiSlice } from 'api/base_slice';\nimport { PARTICIPANTS_TAG, TEAM_HUB_USAGE_TAG } from 'api/tag_types';\nimport {\n  ACCEPT_V2_HEADER,\n  deserializeJSONApiResponse,\n  headersAndCredentials,\n} from 'api/utils';\n\nexport const participantsApi = apiSlice.injectEndpoints({\n  endpoints: (builder) => ({\n    createParticipants: builder.mutation({\n      query: ({ email, teamIds }) => {\n        const params = { data: { attributes: { email } } };\n\n        if (teamIds) params.data.team_ids = teamIds;\n\n        return {\n          url: routes.api_participants_path(),\n          method: 'POST',\n          body: params,\n          ...headersAndCredentials(ACCEPT_V2_HEADER),\n        };\n      },\n      invalidatesTags: [TEAM_HUB_USAGE_TAG],\n    }),\n    getParticipant: builder.query({\n      query: ({ id, params }) => routes.api_participant_path(id, params),\n      providesTags: (result, error, { id }) => [{ type: PARTICIPANTS_TAG, id }],\n      transformResponse: deserializeJSONApiResponse,\n    }),\n    updateParticipant: builder.mutation({\n      query: ({ id, params }) => ({\n        url: routes.api_participant_path(id),\n        method: 'PATCH',\n        body: params,\n        ...headersAndCredentials(),\n      }),\n      invalidatesTags: (result, error, { id }) => [\n        { type: PARTICIPANTS_TAG, id },\n      ],\n    }),\n    updateParticipantTeams: builder.mutation({\n      query: ({ encodedFilterParams, teamIds, teamId }) => ({\n        url: routes.api_teams_participants_path({ team_id: teamId }),\n        method: 'PATCH',\n        body: {\n          team_ids: teamIds,\n          participant_filter: encodedFilterParams,\n        },\n        ...headersAndCredentials(),\n      }),\n    }),\n    upsertParticipants: builder.mutation({\n      query: ({ email, teamIds, teamId, populationId }) => {\n        const params = { data: { attributes: { email } } };\n\n        if (teamIds) params.data.team_ids = teamIds;\n\n        return {\n          url: routes.api_participants_path({\n            participant_population_id: populationId,\n            team_id: teamId,\n          }),\n          method: 'PATCH',\n          body: params,\n          ...headersAndCredentials(ACCEPT_V2_HEADER),\n        };\n      },\n      invalidatesTags: [TEAM_HUB_USAGE_TAG],\n    }),\n  }),\n  overrideExisting: 'throw',\n});\n\nexport const {\n  useGetParticipantQuery,\n  useUpdateParticipantMutation,\n  useUpdateParticipantTeamsMutation,\n  useUpsertParticipantsMutation,\n} = participantsApi;\n","import * as backendConstants from 'lib/generated_constants/participant_attributes';\n\nexport const updateSections = {\n  INFO: 'participant-info',\n  PASSWORD: 'participant-password',\n};\n\nconst BROWSERS_FORM_INPUT_LABEL = 'Which internet browser(s) do you use?';\nconst COMPUTER_OS_FORM_INPUT_LABEL =\n  'What computer operating system(s) do you use?';\nconst COMPUTER_WEBCAM_FORM_INPUT_LABEL =\n  'Do you have a computer with a webcam?';\nconst DISABILITIES_FORM_INPUT_LABEL =\n  'Do you identify as having any of the following disabilities?';\nconst HOUSEHOLD_INCOME_FORM_INPUT_LABEL = 'Household income per year';\nconst LEVEL_OF_EDUCATION_FORM_INPUT_LABEL = 'Highest level of education';\nconst SMALL_BUSINESS_OWNER_FORM_INPUT_LABEL = 'Small business owner?';\nconst SMARTPHONE_OS_FORM_INPUT_LABEL =\n  'What smartphone operating system(s) do you use?';\nconst TABLET_OS_FORM_INPUT_LABEL =\n  'What tablet operating system(s) do you use?';\n\nexport const attributeSlugsToInputLabels = {\n  [backendConstants.BROWSERS_SLUG]: BROWSERS_FORM_INPUT_LABEL,\n  [backendConstants.COMPUTER_OS_SLUG]: COMPUTER_OS_FORM_INPUT_LABEL,\n  [backendConstants.COMPUTER_WEBCAM_SLUG]: COMPUTER_WEBCAM_FORM_INPUT_LABEL,\n  [backendConstants.DISABILITIES_SLUG]: DISABILITIES_FORM_INPUT_LABEL,\n  [backendConstants.HOUSEHOLD_INCOME_SLUG]: HOUSEHOLD_INCOME_FORM_INPUT_LABEL,\n  [backendConstants.LEVEL_OF_EDUCATION_SLUG]:\n    LEVEL_OF_EDUCATION_FORM_INPUT_LABEL,\n  [backendConstants.SMALL_BUSINESS_OWNER_SLUG]:\n    SMALL_BUSINESS_OWNER_FORM_INPUT_LABEL,\n  [backendConstants.SMARTPHONE_OS_SLUG]: SMARTPHONE_OS_FORM_INPUT_LABEL,\n  [backendConstants.TABLET_OS_SLUG]: TABLET_OS_FORM_INPUT_LABEL,\n};\n\nexport const attributeSlugsToDefaultOptionNames = {\n  [backendConstants.CHILDREN_SLUG]:\n    backendConstants.CHILDREN_DEFAULT_OPTION_NAME,\n  [backendConstants.COMPUTER_OS_SLUG]:\n    backendConstants.COMPUTER_OS_DEFAULT_OPTION_NAME,\n  [backendConstants.SMARTPHONE_OS_SLUG]:\n    backendConstants.SMARTPHONE_OS_DEFAULT_OPTION_NAME,\n  [backendConstants.TABLET_OS_SLUG]:\n    backendConstants.TABLET_OS_DEFAULT_OPTION_NAME,\n  [backendConstants.TYPE_OF_INCOME_SLUG]:\n    backendConstants.TYPE_OF_INCOME_DEFAULT_OPTION_NAME,\n};\n\nexport * from 'lib/generated_constants/participant_attributes';\n","import React, { useState } from 'react';\nimport { JsonApiDataStore } from 'jsonapi-datastore';\nimport { LoadingOverlay } from '@user-interviews/ui-design-system';\n\nimport { AuthUserContext } from 'common/authorization';\nimport useHttp from 'hooks/use_http';\n\nimport { ErrorRenderer } from 'lib/errors';\nimport * as routes from 'lib/routes';\n\nimport { getDisplayName } from './utils';\n\n// authUserParams() takes props and returns a object of params to merge into the API call to\n// /authorization-user.\n// ex. props => ({ project_id: 17 })\n//\n// defaultValue() takes props and returns a object to use as the default value for the context\n// The object should be in the format expected by JsonAPIDataStore\n// ex. props => props.authUser\nfunction withAuthUserContext(\n  WrappedComponent,\n  authUserParams = () => ({}),\n  defaultValue = (props) => props.authUser || {},\n) {\n  function WithAuthUserContext(props) {\n    const { get, loading } = useHttp();\n\n    const [contextValue, setContextValue] = useState(\n      new JsonApiDataStore().sync(defaultValue(props)),\n    );\n    const [loadingOverlayEnabled, setLoadingOverlayEnabled] = useState(true);\n\n    const refreshAuthUserContext = async ({\n      skipLoadingOverlay = false,\n    } = {}) => {\n      if (skipLoadingOverlay) {\n        setLoadingOverlayEnabled(false);\n      }\n\n      const contextData = await get(\n        routes.api_authorization_user_path(authUserParams(props)),\n        { onError: ErrorRenderer.alert },\n      ).finally(() => setLoadingOverlayEnabled(true));\n\n      if (contextData) {\n        setContextValue(contextData);\n      }\n    };\n\n    return (\n      // TODO: RS-19294\n      // eslint-disable-next-line react/jsx-no-constructed-context-values\n      <AuthUserContext.Provider\n        value={{ ...contextValue, refreshAuthUserContext }}\n      >\n        <LoadingOverlay visible={loadingOverlayEnabled && loading} />\n        <WrappedComponent {...props} />\n      </AuthUserContext.Provider>\n    );\n  }\n\n  WithAuthUserContext.displayName = `withAuthUserContext(${getDisplayName(WrappedComponent)})`;\n\n  return WithAuthUserContext;\n}\n\nexport default withAuthUserContext;\n","import * as routes from 'lib/routes';\n\nimport { apiSlice } from 'api/base_slice';\nimport { SURVEY_SECTIONS_TAG } from 'api/tag_types';\nimport { deserializeJSONApiResponse } from 'api/utils';\n\nexport const surveySectionsApi = apiSlice.injectEndpoints({\n  endpoints: (builder) => ({\n    getSurveySections: builder.query({\n      query: ({ surveyId, params }) => ({\n        url: routes.api_survey_survey_sections_path({\n          survey_id: surveyId,\n          ...params,\n        }),\n      }),\n      providesTags: (result, _error, { surveyId }) =>\n        (result?.data || [])\n          .map((item) => ({ type: SURVEY_SECTIONS_TAG, id: item.id }))\n          .concat([{ type: SURVEY_SECTIONS_TAG, id: `${surveyId}_LIST` }]),\n      transformResponse: deserializeJSONApiResponse,\n    }),\n  }),\n  overrideExisting: 'throw',\n});\n\nexport const { useGetSurveySectionsQuery } = surveySectionsApi;\n","import { CardSizes } from '@user-interviews/ui-design-system';\n\nimport * as routes from 'lib/routes';\nimport { SurveySectionFormValues } from 'participant/project_application/components/survey/types';\n\nimport * as Constants from '../constants';\n\nconst MAX_SMALL_CARD_GRID_COLUMNS = 3;\nconst MAX_MEDIUM_CARD_GRID_COLUMNS = 5;\n\nexport const determineCardSize = (surveySection: {\n  questions: { answers: object[]; questionGroup?: object }[];\n}) => {\n  let cardSize: 'sm' | 'md' | 'lg' = CardSizes.SMALL;\n\n  if (surveySection?.questions) {\n    const { questions } = surveySection;\n\n    for (let i = 0; i < questions.length; i++) {\n      const question = questions[i];\n\n      if (question.questionGroup) {\n        const gridAnswerTotal = question.answers.length;\n\n        if (gridAnswerTotal > MAX_MEDIUM_CARD_GRID_COLUMNS) {\n          cardSize = CardSizes.LARGE;\n          break;\n        }\n\n        if (gridAnswerTotal > MAX_SMALL_CARD_GRID_COLUMNS) {\n          cardSize = CardSizes.MEDIUM;\n        }\n      }\n    }\n  }\n  return cardSize;\n};\n\nexport const redirectToSuccessPage = (responseSet: { accessCode: string }) => {\n  const path = routes.project_screener_form_success_path({\n    responseSetCode: responseSet.accessCode,\n  });\n\n  window.location.assign(path);\n};\n\nexport const isOtherAnswer = (answer: { responseClass: string }) =>\n  answer.responseClass === Constants.RESPONSE_CLASS_OTHER_AND_STRING;\n\nconst QUESTION_ID_KEY_REGEX = /q(\\d+)/;\nexport const parseIdFromQuestionIdKey = (attributeIdKey: string) =>\n  attributeIdKey.match(QUESTION_ID_KEY_REGEX)?.[1] || null;\n\nconst parsePickOneValues = (formValues: SurveySectionFormValues) => {\n  const pickOneFormValues = formValues[Constants.PICK_ONE_INPUT_GROUP_KEY];\n  if (!pickOneFormValues) return [];\n\n  return Object.entries(pickOneFormValues)\n    .filter(([, { answerId }]) => answerId !== null)\n    .map(([questionIdKey, { answerId, otherAnswerId, responseOther }]) => ({\n      answerId,\n      questionId: parseIdFromQuestionIdKey(questionIdKey),\n      ...(answerId === otherAnswerId && { responseOther }),\n    }));\n};\n\nconst parsePickManyValues = (formValues: SurveySectionFormValues) => {\n  const pickManyFormValues = formValues[Constants.PICK_MANY_INPUT_GROUP_KEY];\n  if (!pickManyFormValues) return [];\n\n  return Object.entries(pickManyFormValues).reduce(\n    (\n      pickManyResponses: {\n        answerId: string;\n        questionId: string | null;\n        responseOther?: string;\n      }[],\n      [questionIdKey, { answerIds, otherAnswerId, responseOther }],\n    ) => {\n      const newResponses = answerIds.map((answerId) => ({\n        answerId,\n        questionId: parseIdFromQuestionIdKey(questionIdKey),\n        ...(answerId === otherAnswerId && { responseOther }),\n      }));\n\n      return [...pickManyResponses, ...newResponses];\n    },\n    [],\n  );\n};\n\nconst parseShortAnswerValues = (formValues: SurveySectionFormValues) => {\n  const shortAnswerFormValues =\n    formValues[Constants.SHORT_ANSWER_INPUT_GROUP_KEY];\n  if (!shortAnswerFormValues) return [];\n\n  return Object.entries(shortAnswerFormValues)\n    .filter(([, { value }]) => value !== '')\n    .map(([questionIdKey, { answerId, value, responseDetailAttributes }]) => ({\n      answerId,\n      questionId: parseIdFromQuestionIdKey(questionIdKey),\n      stringValue: value,\n      ...(responseDetailAttributes && { responseDetailAttributes }),\n    }));\n};\n\nconst parseLongAnswerValues = (formValues: SurveySectionFormValues) => {\n  const longAnswerFormValues =\n    formValues[Constants.LONG_ANSWER_INPUT_GROUP_KEY];\n  if (!longAnswerFormValues) return [];\n\n  return Object.entries(longAnswerFormValues)\n    .filter(([, { value }]) => value !== '')\n    .map(([questionIdKey, { answerId, value, responseDetailAttributes }]) => ({\n      answerId,\n      questionId: parseIdFromQuestionIdKey(questionIdKey),\n      textValue: value,\n      ...(responseDetailAttributes && { responseDetailAttributes }),\n    }));\n};\n\nconst parseDateValues = (formValues: SurveySectionFormValues) => {\n  const dateFormValues = formValues[Constants.DATE_INPUT_GROUP_KEY];\n  if (!dateFormValues) return [];\n\n  return Object.entries(dateFormValues)\n    .filter(([, { value }]) => !!value)\n    .map(([questionIdKey, { answerId, value }]) => ({\n      answerId,\n      questionId: parseIdFromQuestionIdKey(questionIdKey),\n      dateValue: value,\n    }));\n};\n\nconst parseFloatValues = (formValues: SurveySectionFormValues) => {\n  const floatFormValues = formValues[Constants.FLOAT_INPUT_GROUP_KEY];\n  if (!floatFormValues) return [];\n\n  return Object.entries(floatFormValues)\n    .filter(([, { value }]) => !!value)\n    .map(([questionIdKey, { answerId, value }]) => ({\n      answerId,\n      questionId: parseIdFromQuestionIdKey(questionIdKey),\n      floatValue: parseFloat(value),\n    }));\n};\n\nconst parseBooleanValues = (formValues: SurveySectionFormValues) => {\n  const booleanFormValues = formValues[Constants.BOOLEAN_INPUT_GROUP_KEY];\n  if (!booleanFormValues) return [];\n\n  return Object.entries(booleanFormValues)\n    .filter(([, { answerId }]) => answerId !== null)\n    .map(([questionIdKey, { answerId, value }]) => ({\n      answerId,\n      questionId: parseIdFromQuestionIdKey(questionIdKey),\n      booleanValue: value === Constants.BOOLEAN_TRUE_VALUE,\n    }));\n};\n\nexport const transformFormValuesToSubmissionParams = (\n  values: SurveySectionFormValues,\n) => [\n  ...parseBooleanValues(values),\n  ...parseDateValues(values),\n  ...parseFloatValues(values),\n  ...parsePickOneValues(values),\n  ...parsePickManyValues(values),\n  ...parseShortAnswerValues(values),\n  ...parseLongAnswerValues(values),\n];\n\ntype ProjectMetaParams = {\n  participantId: string;\n  participantScreenerKey: string | undefined;\n  projectId: string;\n};\n\ntype OptInFormMetaParams = {\n  participantId: string;\n  participantOptInFormKey: string;\n  optInFormId: string;\n};\n\nconst buildResponseSetCreateParams = ({\n  formValues,\n  meta,\n  surveyId,\n}: {\n  formValues: SurveySectionFormValues;\n  surveyId: string;\n  meta: ProjectMetaParams | OptInFormMetaParams;\n}) => ({\n  surveyId,\n  data: {\n    type: 'responseSet',\n    attributes: {\n      responsesAttributes: transformFormValuesToSubmissionParams(formValues),\n    },\n  },\n  meta,\n});\n\nexport const buildProjectResponseSetCreateParams = ({\n  formValues,\n  participantId,\n  participantScreenerKey,\n  projectId,\n  surveyId,\n}: {\n  formValues: SurveySectionFormValues;\n  surveyId: string;\n} & ProjectMetaParams) =>\n  buildResponseSetCreateParams({\n    formValues,\n    surveyId,\n    meta: {\n      participantId,\n      participantScreenerKey,\n      projectId,\n    },\n  });\n\nexport const buildOptInResponseSetCreateParams = ({\n  formValues,\n  optInFormId,\n  participantId,\n  participantOptInFormKey,\n  surveyId,\n}: {\n  formValues: SurveySectionFormValues;\n  surveyId: string;\n} & OptInFormMetaParams) =>\n  buildResponseSetCreateParams({\n    formValues,\n    surveyId,\n    meta: {\n      optInFormId,\n      participantId,\n      participantOptInFormKey,\n    },\n  });\n\nconst buildResponseSetUpdateParams = ({\n  formValues,\n  meta,\n  responseSetId,\n}: {\n  formValues: SurveySectionFormValues;\n  responseSetId: string;\n  meta: ProjectMetaParams | OptInFormMetaParams;\n}) => ({\n  data: {\n    type: 'responseSet',\n    id: responseSetId,\n    attributes: {\n      responsesAttributes: transformFormValuesToSubmissionParams(formValues),\n    },\n  },\n  meta,\n});\n\nexport const buildProjectResponseSetUpdateParams = ({\n  formValues,\n  participantId,\n  participantScreenerKey,\n  projectId,\n  responseSetId,\n}: {\n  formValues: SurveySectionFormValues;\n  responseSetId: string;\n} & ProjectMetaParams) =>\n  buildResponseSetUpdateParams({\n    formValues,\n    responseSetId,\n    meta: {\n      participantId,\n      participantScreenerKey,\n      projectId,\n    },\n  });\n\nexport const buildOptInResponseSetUpdateParams = ({\n  formValues,\n  optInFormId,\n  participantId,\n  participantOptInFormKey,\n  responseSetId,\n}: {\n  formValues: SurveySectionFormValues;\n  responseSetId: string;\n} & OptInFormMetaParams) =>\n  buildResponseSetUpdateParams({\n    formValues,\n    responseSetId,\n    meta: {\n      optInFormId,\n      participantId,\n      participantOptInFormKey,\n    },\n  });\n","/* eslint-disable no-param-reassign */\nimport { createSlice } from '@reduxjs/toolkit';\n\nconst initialState = {\n  isActive: true,\n};\n\nexport const projectDetailsSlice = createSlice({\n  name: 'projectDetails',\n  initialState,\n  reducers: {\n    ADD_WORKSPACE_ATTRIBUTES: (state, action) => {\n      const { attributes } = action.payload;\n\n      state.isActive = !!attributes?.isActive;\n    },\n  },\n});\n\nexport const { ADD_WORKSPACE_ATTRIBUTES } = projectDetailsSlice.actions;\n\nexport const projectDetailsSliceReducer = projectDetailsSlice.reducer;\n","import { apiSlice } from 'api/base_slice';\nimport { columnConfigurationSliceReducer } from 'store/slices/column_configuration_slice';\nimport { segmentsSliceReducer } from 'store/slices/segments_slice';\nimport { participantProfileSliceReducer } from 'store/slices/participant_profile_slice';\nimport { projectDetailsSliceReducer } from 'store/slices/project_details_slice';\n\nimport { projectWorkspaceSlice } from 'researcher/project_workspace/slice';\n\nexport const rootReducer = {\n  [apiSlice.reducerPath]: apiSlice.reducer,\n  columnConfiguration: columnConfigurationSliceReducer,\n  participantProfile: participantProfileSliceReducer,\n  projectDetails: projectDetailsSliceReducer,\n  projectWorkspace: projectWorkspaceSlice.reducer,\n  segments: segmentsSliceReducer,\n};\n","import { configureStore } from '@reduxjs/toolkit';\nimport { setupListeners } from '@reduxjs/toolkit/query/react';\n\nimport { apiSlice } from '../api/base_slice';\n\nimport { rootReducer } from './root_reducer';\n\nconst isDevelopmentEnv = process.env.NODE_ENV === 'development';\n\n// When unit-testing there are times when a component uses Redux state populated from\n// sibling or parent actions.\n// This is to allow our specs to optionally pass in a preloaded state and avoid the overhead of\n// manually dispatching actions w/in the spec or mocking the store itself.\nexport const buildStore = (preloadedState = {}) =>\n  configureStore({\n    reducer: rootReducer,\n    middleware: (getDefaultMiddleware) =>\n      getDefaultMiddleware({\n        // disable for test env to speed up specs (always disabled for prod)\n        // https://redux-toolkit.js.org/api/getDefaultMiddleware#api-reference\n        actionCreatorCheck: isDevelopmentEnv,\n        immutableCheck: isDevelopmentEnv,\n        serializableCheck: isDevelopmentEnv,\n      }).concat(apiSlice.middleware),\n    preloadedState,\n  });\n\nconst store = buildStore();\n\nsetupListeners(store.dispatch);\n\nexport default store;\n","import {\n  useState,\n  useRef,\n  useMemo,\n  useCallback,\n  useEffect,\n  type RefObject,\n} from 'react';\nimport { isServer } from 'lib/ssr_utils';\nimport { useSidebarMobileBreakpoint } from 'hooks/use_sidebar_mobile_breakpoint';\n\nconst SidebarOpenDebounceMS = 200;\nconst SidebarCloseDebounceMS = 125;\n\ntype UseIsSidebarOpenArgs = {\n  isNavItemHovered: boolean;\n  isSidebarHovered: boolean;\n  sidebarRef: RefObject<HTMLElement | null>;\n};\n\nexport function useIsSidebarOpen({\n  sidebarRef,\n  isNavItemHovered,\n  isSidebarHovered,\n}: UseIsSidebarOpenArgs) {\n  const [isOpen, setIsOpen] = useState(false);\n  const [isTransitioning, setIsTransitioning] = useState(false);\n\n  const openSidebarTimeout = useRef<ReturnType<typeof setTimeout> | null>(null);\n  const closeSidebarTimeout = useRef<ReturnType<typeof setTimeout> | null>(\n    null,\n  );\n\n  const isMobile = useSidebarMobileBreakpoint();\n  const isReducedMotion = useMemo(() => {\n    if (isServer) return true;\n\n    return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  }, []);\n\n  const openSidebar = useCallback(() => {\n    if (isOpen || isMobile) return;\n\n    if (openSidebarTimeout.current) {\n      clearTimeout(openSidebarTimeout.current);\n    }\n\n    if (closeSidebarTimeout.current) {\n      clearTimeout(closeSidebarTimeout.current);\n    }\n\n    openSidebarTimeout.current = setTimeout(() => {\n      if (!isReducedMotion) setIsTransitioning(true);\n\n      setIsOpen(true);\n    }, SidebarOpenDebounceMS);\n  }, [isMobile, isOpen, isReducedMotion]);\n\n  const closeSidebar = useCallback(() => {\n    if (!isOpen) return;\n\n    if (openSidebarTimeout.current) {\n      clearTimeout(openSidebarTimeout.current);\n    }\n\n    if (closeSidebarTimeout.current) {\n      clearTimeout(closeSidebarTimeout.current);\n    }\n\n    closeSidebarTimeout.current = setTimeout(() => {\n      if (!isReducedMotion) setIsTransitioning(true);\n\n      setIsOpen(false);\n    }, SidebarCloseDebounceMS);\n  }, [isOpen, isReducedMotion]);\n\n  // This effect sets transitioning state back to false once the css transition has completed (via open or close)\n  useEffect(() => {\n    if (!sidebarRef.current) return undefined;\n\n    const { current: sidebar } = sidebarRef;\n\n    function handleTransitionEnd(event: TransitionEvent) {\n      if (event.propertyName !== 'width') return;\n\n      setIsTransitioning(false);\n    }\n\n    sidebar.addEventListener('transitionend', handleTransitionEnd);\n\n    return () => {\n      sidebar.removeEventListener('transitionend', handleTransitionEnd);\n    };\n  }, [sidebarRef]);\n\n  useEffect(() => {\n    if (isTransitioning) return;\n\n    if (isNavItemHovered) openSidebar();\n    if (!isNavItemHovered && !isSidebarHovered) closeSidebar();\n  }, [\n    closeSidebar,\n    isNavItemHovered,\n    isSidebarHovered,\n    isTransitioning,\n    openSidebar,\n  ]);\n\n  useEffect(() => {\n    setIsOpen(false);\n  }, [isMobile]);\n\n  return { isOpen, isTransitioning };\n}\n","import React, {\n  createContext,\n  useEffect,\n  useMemo,\n  useState,\n  type RefObject,\n  type ReactElement,\n} from 'react';\n\nimport { useIsSidebarOpen } from '../sidebar/hooks/use_is_sidebar_open';\n\nexport const SidebarContext = createContext<{\n  isOpen: boolean;\n  isTransitioning: boolean;\n  isRenderingOpen: boolean;\n  setIsNavItemHovered: React.Dispatch<React.SetStateAction<boolean>>;\n}>({\n  isOpen: false,\n  isTransitioning: false,\n  isRenderingOpen: false,\n  setIsNavItemHovered: () => {},\n});\n\nexport function SidebarContextProvider({\n  sidebarRef,\n  children,\n}: {\n  sidebarRef: RefObject<HTMLElement | null>;\n  children: ReactElement;\n}) {\n  const [isNavItemHovered, setIsNavItemHovered] = useState(false);\n  const [isSidebarHovered, setIsSidebarHovered] = useState(false);\n  const { isOpen, isTransitioning } = useIsSidebarOpen({\n    sidebarRef,\n    isNavItemHovered,\n    isSidebarHovered,\n  });\n\n  useEffect(() => {\n    if (!sidebarRef.current) return undefined;\n    const { current: sidebar } = sidebarRef;\n\n    function handleMouseEnter() {\n      setIsSidebarHovered(true);\n    }\n\n    function handleMouseLeave() {\n      setIsSidebarHovered(false);\n      setIsNavItemHovered(false);\n    }\n\n    sidebar.addEventListener('mouseenter', handleMouseEnter);\n    sidebar.addEventListener('mouseleave', handleMouseLeave);\n\n    return () => {\n      sidebar.removeEventListener('mouseenter', handleMouseEnter);\n      sidebar.removeEventListener('mouseleave', handleMouseLeave);\n    };\n  }, [sidebarRef]);\n\n  const contextValue = useMemo(\n    () => ({\n      isOpen,\n      isTransitioning,\n      isRenderingOpen: isOpen || isTransitioning,\n      setIsNavItemHovered,\n    }),\n    [isTransitioning, isOpen],\n  );\n\n  return (\n    <SidebarContext.Provider value={contextValue}>\n      {children}\n    </SidebarContext.Provider>\n  );\n}\n","import React, { type ReactNode } from 'react';\n\nimport { Ownership } from 'lib/generated_constants/ownership';\nimport { useAppsignal } from 'hooks/use_appsignal';\nimport { ErrorBoundary } from '@appsignal/react';\n\nimport { OwnershipProvider } from './context';\n\ntype OwnerBoundaryProps = {\n  children: ReactNode;\n} & {\n  [key in keyof typeof Ownership]?: boolean;\n};\n\nexport function OwnerBoundary({ children, ...props }: OwnerBoundaryProps) {\n  const ownershipKey = Object.keys(props).find(\n    (key) => props[key as keyof typeof props],\n  );\n  const owner = ownershipKey\n    ? Ownership[ownershipKey as keyof typeof Ownership]\n    : 'frontend';\n  const appsignal = useAppsignal({ namespace: owner });\n\n  return (\n    <OwnershipProvider appsignal={appsignal} owner={owner}>\n      {appsignal ? (\n        <ErrorBoundary instance={appsignal}>{children}</ErrorBoundary>\n      ) : (\n        children\n      )}\n    </OwnershipProvider>\n  );\n}\n","import { useMemo } from 'react';\nimport { Ownership } from 'lib/generated_constants/ownership';\nimport { useRailsContext } from 'hooks/use_rails_context';\n// eslint-disable-next-line no-restricted-imports\nimport {\n  DEFAULT_NAMESPACE,\n  initializeAppsignal,\n} from 'lib/telemetry/appsignal';\nimport { ENV } from 'lib/react_on_rails/env';\n\nexport function useAppsignal({\n  namespace,\n}: {\n  namespace: Ownership | typeof DEFAULT_NAMESPACE;\n}) {\n  const railsContext = useRailsContext();\n  const appsignal = useMemo(\n    () =>\n      initializeAppsignal({\n        namespace,\n        // Not all component trees are wrapped by rails context providers yet.\n        // Particularly staff & participant pages.\n        env: railsContext ? railsContext.env : ENV,\n      }),\n    [namespace, railsContext],\n  );\n\n  if (appsignal) {\n    appsignal.addBreadcrumb = appsignal.addBreadcrumb.bind(appsignal);\n    appsignal.addDecorator = appsignal.addDecorator.bind(appsignal);\n    appsignal.addOverride = appsignal.addOverride.bind(appsignal);\n    appsignal.createSpan = appsignal.createSpan.bind(appsignal);\n    appsignal.demo = appsignal.demo.bind(appsignal);\n    appsignal.send = appsignal.send.bind(appsignal);\n    appsignal.sendError = appsignal.sendError.bind(appsignal);\n    appsignal.use = appsignal.use.bind(appsignal);\n    appsignal.wrap = appsignal.wrap.bind(appsignal);\n  }\n\n  return appsignal;\n}\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { TEXT_PROPS, Text } from '@user-interviews/ui-design-system';\n\nimport { SurveyBuilderConstants as Constants } from 'components/survey_builder';\n\nimport { answerPropType, questionPropType } from './prop_types';\n\n// Disabled when adding max-props rule.\n// Future work should stay under 6 props\n// eslint-disable-next-line local-rules/max-props\nexport function QuestionSkipLogicSummaryCondition({\n  conditionAnswer,\n  conditionQuestion,\n  conditionQuestionGroup,\n  isLastCondition,\n  questionId,\n  skipLogicConditionOperator,\n  skipLogicJoinMethod,\n}) {\n  let questionReferenceName;\n  if (conditionQuestion === undefined) {\n    questionReferenceName = 'QUESTION NOT FOUND';\n  } else if (\n    conditionQuestion.uuid === questionId ||\n    conditionQuestion.questionGroupId === questionId\n  ) {\n    questionReferenceName = 'this question';\n  } else if (conditionQuestionGroup) {\n    questionReferenceName = conditionQuestionGroup.text;\n  } else {\n    questionReferenceName = conditionQuestion.text;\n  }\n\n  const conditionAnswerText = !conditionAnswer\n    ? 'ANSWER NOT FOUND'\n    : conditionAnswer.text;\n\n  const usesUnequalOperator =\n    skipLogicConditionOperator === Constants.CONDITION_OPERATOR_NOT_EQL;\n\n  return (\n    <li>\n      {conditionQuestion?.questionGroupId ? (\n        <Text as=\"span\" size={TEXT_PROPS.size.sm}>\n          <strong>{conditionQuestion.text}</strong>\n          &nbsp;-&nbsp;\n          <strong>{conditionAnswerText}</strong>\n        </Text>\n      ) : (\n        <Text as=\"span\" size={TEXT_PROPS.size.sm}>\n          <strong>{conditionAnswerText}</strong>\n        </Text>\n      )}\n      <Text as=\"span\" size={TEXT_PROPS.size.sm}>\n        &nbsp;in&nbsp;\n        <strong>{questionReferenceName}</strong>\n        &nbsp;is {usesUnequalOperator && 'not'} chosen\n        {!isLastCondition && ` ${skipLogicJoinMethod.toUpperCase()}`}\n      </Text>\n    </li>\n  );\n}\n\nQuestionSkipLogicSummaryCondition.propTypes = {\n  conditionAnswer: answerPropType,\n  conditionQuestion: questionPropType,\n  conditionQuestionGroup: questionPropType,\n  isLastCondition: propTypes.bool.isRequired,\n  questionId: propTypes.string.isRequired,\n  skipLogicConditionOperator: propTypes.string.isRequired,\n  skipLogicJoinMethod: propTypes.string.isRequired,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"wz6mN8n1MW2I2tCGRY0w\";\nvar _2 = \"BA3lT4gIMfopminHKDHG\";\nvar _3 = \"qMtZtIdjUyph1xzQdLJV\";\nvar _4 = \"sqn9crmdSBbuG0IxsEtU\";\nvar _5 = \"go4FkyUAHMuoE1mE9UsY\";\nexport { _1 as \"skipLogicSummary\", _2 as \"skipLogicSummaryLogic\", _3 as \"skipLogicSummaryLogicHeader\", _4 as \"skipLogicSummaryLogicList\", _5 as \"skipLogicSummaryTitle\" }\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { TEXT_PROPS, Text } from '@user-interviews/ui-design-system';\n\nimport { QuestionSkipLogicSummaryCondition } from './question_skip_logic_summary_condition';\n\nimport { skipLogicConditionPropType } from './prop_types';\n\n// eslint-disable-next-line local-rules/no_leaky_css_modules\nimport * as styles from './question_skip_logic_summary.module.css';\n\nconst SURVEY_END_SECTION_TITLE = 'Finish';\n\nexport function QuestionSkipLogicSummaryConditions({\n  questionId,\n  skipLogicJoinMethod,\n  skipLogicConditions,\n  survey,\n  targetSectionTitle,\n}) {\n  const completedConditions = skipLogicConditions.filter(\n    (condition) => condition.answerId && condition.questionId,\n  );\n\n  if (completedConditions.length === 0) {\n    return null;\n  }\n\n  const sanitizedTargetSectionTitle =\n    targetSectionTitle === undefined\n      ? SURVEY_END_SECTION_TITLE\n      : targetSectionTitle;\n\n  const conditionRows = completedConditions.map((condition, index) => {\n    const conditionQuestion = survey.questions[condition.questionId];\n    const conditionQuestionGroup =\n      conditionQuestion?.questionGroupId &&\n      survey.questions[conditionQuestion.questionGroupId];\n\n    return (\n      <QuestionSkipLogicSummaryCondition\n        conditionAnswer={survey.answers[condition.answerId]}\n        conditionQuestion={conditionQuestion}\n        conditionQuestionGroup={conditionQuestionGroup}\n        isLastCondition={index === completedConditions.length - 1}\n        key={condition.uuid}\n        questionId={questionId}\n        skipLogicConditionOperator={condition.operator}\n        skipLogicJoinMethod={skipLogicJoinMethod}\n      />\n    );\n  });\n\n  return (\n    <div className={styles.skipLogicSummaryLogic}>\n      <Text\n        className={styles.skipLogicSummaryLogicHeader}\n        size={TEXT_PROPS.size.sm}\n      >\n        Skip to <strong>{sanitizedTargetSectionTitle}</strong> if:\n      </Text>\n      <ul className={styles.skipLogicSummaryLogicList}>{conditionRows}</ul>\n    </div>\n  );\n}\n\nQuestionSkipLogicSummaryConditions.propTypes = {\n  questionId: propTypes.string.isRequired,\n  skipLogicConditions: propTypes.arrayOf(skipLogicConditionPropType).isRequired,\n  skipLogicJoinMethod: propTypes.string.isRequired,\n  survey: propTypes.object.isRequired,\n  targetSectionTitle: propTypes.string,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { TEXT_PROPS, Text } from '@user-interviews/ui-design-system';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport { faCodeBranch } from 'lib/font_awesome/regular';\n\nimport { skipLogicPropType, surveySectionPropType } from './prop_types';\nimport { QuestionSkipLogicSummaryConditions } from './question_skip_logic_summary_conditions';\n\nimport * as styles from './question_skip_logic_summary.module.css';\n\nexport function QuestionSkipLogicSummary({\n  questionId,\n  screenerSections,\n  skipLogics,\n  survey,\n}) {\n  const sectionTitlesByUuid = screenerSections\n    .filter((section) => section !== undefined && section.uuid !== undefined)\n    .reduce(\n      (mappingById, section) => ({\n        ...mappingById,\n        [section.uuid]: section.title,\n      }),\n      {},\n    );\n\n  return (\n    <div className={`${styles.skipLogicSummary} skip-logic-summary`}>\n      <Text className={styles.skipLogicSummaryTitle} size={TEXT_PROPS.size.sm}>\n        <Text as=\"span\" size={TEXT_PROPS.size.md}>\n          <FontAwesomeIcon className=\"icon-left\" icon={faCodeBranch} />\n        </Text>\n        Applied skip logic\n      </Text>\n      {skipLogics.map((skipLogic) => (\n        <QuestionSkipLogicSummaryConditions\n          key={skipLogic.uuid}\n          questionId={questionId}\n          skipLogicConditions={skipLogic.skipLogicConditions}\n          skipLogicJoinMethod={skipLogic.joinMethod}\n          survey={survey}\n          targetSectionTitle={sectionTitlesByUuid[skipLogic.targetSectionId]}\n        />\n      ))}\n    </div>\n  );\n}\n\nQuestionSkipLogicSummary.propTypes = {\n  questionId: propTypes.string.isRequired,\n  screenerSections: propTypes.arrayOf(surveySectionPropType).isRequired,\n  skipLogics: propTypes.arrayOf(skipLogicPropType).isRequired,\n  survey: propTypes.object.isRequired,\n};\n","import { useGetFirstSurveySection } from '../../hooks/use_get_first_survey_section';\nimport { useGetNextSurveySection } from '../../hooks/use_get_next_survey_section';\n\nexport const useGetSurveyPreviewSection = (\n  surveyId,\n  { previousSectionId = null, previousSectionResponses = null },\n) => {\n  const isFirstSection = !previousSectionId;\n\n  const firstSection = useGetFirstSurveySection(surveyId, {\n    skip: !isFirstSection,\n  });\n\n  const nextSection = useGetNextSurveySection(surveyId, {\n    previousSectionId,\n    previousSectionResponses,\n    skip: isFirstSection,\n  });\n\n  const queryResult = isFirstSection ? firstSection : nextSection;\n  const previewCompleted =\n    !isFirstSection && !nextSection.isFetching && !nextSection.data?.[0];\n\n  // We want the latest loaded survey section\n  // So when actively requesting \"next\" section, grab latest loaded \"next\" section\n  // If there is no loaded \"next\" section, grab the first section till we finish fetching \"next\" one\n  const currentSurveySection =\n    (!isFirstSection && nextSection.data?.[0]) || firstSection.data?.[0];\n\n  return {\n    ...queryResult,\n    isLoadingFirstSection: firstSection.isLoading,\n    previewCompleted,\n    surveySection: currentSurveySection,\n  };\n};\n","import { useGetSurveySectionsQuery } from 'api/survey_sections';\n\nexport const useGetFirstSurveySection = (\n  surveyId,\n  { projectId = null, participantScreenerKey = null, skip = false } = {},\n) => {\n  const queryResult = useGetSurveySectionsQuery(\n    {\n      surveyId,\n      params: {\n        limit: 1,\n        meta: {\n          projectId,\n          participantId: participantScreenerKey?.participant_id,\n          participantScreenerKey: participantScreenerKey?.key,\n        },\n      },\n    },\n    {\n      skip,\n    },\n  );\n\n  return {\n    ...queryResult,\n    firstSurveySection: queryResult.data?.[0],\n  };\n};\n","import { useGetSurveySectionsQuery } from 'api/survey_sections';\n\nexport const useGetNextSurveySection = (\n  surveyId,\n  {\n    previousSectionId = null,\n    previousSectionResponses = null,\n    projectId = null,\n    participantScreenerKey = null,\n    skip = false,\n  } = {},\n) =>\n  useGetSurveySectionsQuery(\n    {\n      surveyId,\n      params: {\n        limit: 1,\n        submittedPreviewSectionId: previousSectionId,\n        submittedPreviewResponsesAttributes: previousSectionResponses,\n        meta: {\n          projectId,\n          participantId: participantScreenerKey?.participant_id,\n          participantScreenerKey: participantScreenerKey?.key,\n        },\n      },\n    },\n    {\n      skip,\n    },\n  );\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { FormProvider, useForm } from 'react-hook-form';\n\nimport { useGetSurveyPreviewSection } from '../hooks/use_get_survey_preview_section';\nimport { useRequestedPreviewSectionParams } from '../hooks/use_requested_preview_section_params';\n\nimport { SurveyPreviewForm } from '../components/survey_preview_form';\n\n// Disabled when adding max-props rule.\n// Future work should stay under 6 props\n// eslint-disable-next-line local-rules/max-props\nexport function SurveyPreview({\n  logoUrl,\n  projectDetails,\n  publicSurvey,\n  surveyId,\n  teamName,\n  title,\n  optInForm,\n}) {\n  const form = useForm({ shouldUnregister: true });\n\n  const {\n    requestedSectionParams,\n    updateRequestedSectionParams,\n    resetRequestedSectionParams: handleRestartPreview,\n  } = useRequestedPreviewSectionParams();\n\n  const { isFetching, isLoadingFirstSection, previewCompleted, surveySection } =\n    useGetSurveyPreviewSection(surveyId, requestedSectionParams);\n\n  const handleSubmitSection = form.handleSubmit((formValues) =>\n    updateRequestedSectionParams(formValues, surveySection.id),\n  );\n\n  return (\n    // eslint-disable-next-line react/jsx-props-no-spreading\n    <FormProvider {...form}>\n      <SurveyPreviewForm\n        isLoading={isLoadingFirstSection}\n        isSubmitting={isFetching}\n        logoUrl={logoUrl}\n        optInForm={optInForm}\n        previewCompleted={previewCompleted}\n        projectDetails={projectDetails}\n        publicSurvey={publicSurvey}\n        surveySection={surveySection}\n        teamName={teamName}\n        title={title}\n        onRestartPreview={handleRestartPreview}\n        onSubmitSection={handleSubmitSection}\n      />\n    </FormProvider>\n  );\n}\n\nSurveyPreview.propTypes = {\n  logoUrl: propTypes.string,\n  optInForm: propTypes.object,\n  projectDetails: propTypes.object,\n  publicSurvey: propTypes.bool.isRequired,\n  surveyId: propTypes.number,\n  teamName: propTypes.string,\n  title: propTypes.string.isRequired,\n};\n\nSurveyPreview.defaultProps = {\n  optInForm: null,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { Page } from 'components/page';\nimport { OwnerBoundary } from 'components/owner_boundary';\n\nimport { useAlertFocus } from '../../hooks/use_alert_focus';\nimport { SurveyPreview } from './survey_preview';\n\n// Disabled when adding max-props rule.\n// Future work should stay under 6 props\n// eslint-disable-next-line local-rules/max-props\nexport function SurveyPreviewPage({\n  logoUrl,\n  optInForm,\n  projectDetails,\n  publicSurvey,\n  surveyId,\n  teamName,\n  title,\n}) {\n  useAlertFocus();\n\n  return (\n    <OwnerBoundary RESEARCH_EXPERIENCE>\n      <Page isPadded>\n        <SurveyPreview\n          logoUrl={logoUrl}\n          optInForm={optInForm}\n          projectDetails={projectDetails}\n          publicSurvey={publicSurvey}\n          surveyId={surveyId}\n          teamName={teamName}\n          title={title}\n        />\n      </Page>\n    </OwnerBoundary>\n  );\n}\n\nSurveyPreviewPage.propTypes = {\n  logoUrl: propTypes.string,\n  optInForm: propTypes.object,\n  projectDetails: propTypes.object,\n  publicSurvey: propTypes.bool.isRequired,\n  surveyId: propTypes.number, // Because opt in form might not have a survey, this cannot be required\n  teamName: propTypes.string,\n  title: propTypes.string.isRequired,\n};\n\nSurveyPreviewPage.defaultProps = {\n  optInForm: null,\n};\n","import React from 'react';\nimport * as propTypes from 'lib/prop_types';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n  faClock,\n  faFileSignature,\n  faGift,\n  faBell,\n} from 'lib/font_awesome/regular';\n\nimport {\n  Accordion,\n  AccordionItem,\n  AccordionToggle,\n  AccordionCollapse,\n} from '@user-interviews/ui-design-system';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './study_details_accordion.scss';\n\n// Disabled when adding max-props rule.\n// Future work should stay under 6 props\n// eslint-disable-next-line local-rules/max-props\nfunction StudyDetailsAccordion({\n  description,\n  requiresDocumentSignature,\n  incentive,\n  noIncentive,\n  sessionLength,\n  title,\n  deadline,\n}) {\n  return (\n    <Accordion defaultActiveKey=\"0\">\n      <AccordionItem borderless>\n        <AccordionToggle eventKey=\"0\" title={title} />\n        <AccordionCollapse\n          eventKey=\"0\"\n          UNSAFE_className=\"StudyDetailsAccordion__collapse\"\n        >\n          <div className=\"StudyDetailsAccordion__details\">\n            {deadline && (\n              <div\n                aria-label=\"Session length\"\n                className=\"StudyDetailsAccordion__details__line-item\"\n              >\n                <FontAwesomeIcon className=\"fa-fw\" icon={faBell} /> Complete by{' '}\n                {deadline}\n              </div>\n            )}\n            <div\n              aria-label=\"Session length\"\n              className=\"StudyDetailsAccordion__details__line-item\"\n            >\n              <FontAwesomeIcon className=\"fa-fw\" icon={faClock} />{' '}\n              {sessionLength}\n            </div>\n            <div\n              aria-label=\"Compensation\"\n              className=\"StudyDetailsAccordion__details__line-item\"\n            >\n              {!noIncentive && (\n                <>\n                  <FontAwesomeIcon className=\"fa-fw\" icon={faGift} />{' '}\n                  {incentive}\n                </>\n              )}\n            </div>\n            {requiresDocumentSignature && (\n              <div aria-label=\"Document signing\">\n                <FontAwesomeIcon className=\"fa-fw\" icon={faFileSignature} />{' '}\n                Document review and signature required\n              </div>\n            )}\n          </div>\n          <p className=\"StudyDetailsAccordion__description\">{description}</p>\n        </AccordionCollapse>\n      </AccordionItem>\n    </Accordion>\n  );\n}\n\nStudyDetailsAccordion.propTypes = {\n  deadline: propTypes.string,\n  description: propTypes.string.isRequired,\n  incentive: propTypes.string.isRequired,\n  noIncentive: propTypes.bool,\n  requiresDocumentSignature: propTypes.bool.isRequired,\n  sessionLength: propTypes.string.isRequired,\n  title: propTypes.string.isRequired,\n};\n\nStudyDetailsAccordion.defaultProps = {\n  noIncentive: false,\n};\n\nexport default StudyDetailsAccordion;\n","// extracted by mini-css-extract-plugin\nvar _1 = \"TJi9zqadPTOyC5gz6BRu\";\nvar _2 = \"jHnNImjCVl9PvGMLs2wg\";\nvar _3 = \"JB4BkRvi_uTLHYXcQiJi\";\nvar _4 = \"ux2gkrWfKY27ZpqhxRo8\";\nvar _5 = \"K0jv5HLaqm8IdOuuUPZP\";\nvar _6 = \"PNcQrVL8GRhx2uV2JnDc\";\nvar _7 = \"k4Z4dVFkr45WyJsH8Jjj\";\nvar _8 = \"CfzV4WPD7dBdqYSoo3zJ\";\nvar _9 = \"xWlNHGUmAGfxDiaHCMMb\";\nvar _a = \"_PQr8FcZt7AYkpdesE4W\";\nvar _b = \"WGY9pgQZaDKH48nRGJAi\";\nvar _c = \"ghSRwZMPc8BUDh9B7RPr\";\nvar _d = \"ZF_hUaXPVReq1DAgQizJ\";\nvar _e = \"IASiXeOHWN0kvie4DWv9\";\nvar _f = \"C6oK68KR9JiskX06ocFo\";\nvar _10 = \"DW_HPJ0LyHgxgR3epmur\";\nvar _11 = \"KbWMn2iIgVPPqwRXLYmw\";\nvar _12 = \"cHFJeUAVz6JKDAAs_f7Y\";\nvar _13 = \"aYjbQ6OkPC_7SFBega6J\";\nexport { _1 as \"ApplySuccessCard__detail__date\", _2 as \"BillingInfoCard__column\", _3 as \"CopyToClipboard\", _4 as \"DataConsentNotice__content__preview__body\", _5 as \"MessageList__message__timestamp\", _6 as \"ParticipantProfile__participant-details__attribute-value\", _7 as \"ProjectCustomEmailSets\", _8 as \"ProjectListItem__status-date\", _9 as \"ProjectListing__detail\", _a as \"ProjectListing__details\", _b as \"TeamMemberInviterForm__section__invite-via-link\", _c as \"UnmoderatedTask__deadline\", _d as \"active\", _e as \"btn-link--neutral\", _f as \"btn-outline-secondary\", _10 as \"loadingBackground\", _11 as \"navigationItem\", _12 as \"participant-dashboard__project__info__status__string\", _13 as \"schedule-project-participant-page__time-slots\" }\n","import React, { useState, useEffect, useMemo } from 'react';\nimport type { MouseEvent as ReactMouseEvent } from 'react';\n\nimport classNames from 'classnames';\nimport { NavLink } from 'react-router';\nimport { Text } from '@user-interviews/ui-design-system';\nimport { useTracking } from 'react-tracking';\n\nimport { useSidebarContext } from '../sidebar/hooks/use_sidebar_context';\nimport { useIsActive } from './hooks/use_is_active';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './navigation_item.module.scss';\n\ntype LinkProps = {\n  href: string;\n  target?: string;\n};\n\ntype ReactRouterLinkProps = {\n  to: string;\n};\n\ntype SidebarNavigationItemProps = {\n  className?: string;\n  event?: string;\n  iconSrcBase: string;\n  label: string;\n  onHandleNavigating?: () => void;\n};\n\nexport function NavigationItem({\n  className,\n  event,\n  iconSrcBase,\n  label,\n  onHandleNavigating,\n  ...linkProps\n}:\n  | (SidebarNavigationItemProps & LinkProps)\n  | (SidebarNavigationItemProps & ReactRouterLinkProps)) {\n  const { isRenderingOpen, setIsNavItemHovered } = useSidebarContext();\n  const { trackEvent } = useTracking();\n  const isActive = useIsActive(\n    'href' in linkProps ? linkProps.href : linkProps.to,\n  );\n  const [isHovered, setIsHovered] = useState(false);\n\n  const SRCs = useMemo(\n    () => ({\n      active: `${iconSrcBase}-selected.svg`,\n      hovered: `${iconSrcBase}-hover.svg`,\n      default: `${iconSrcBase}.svg`,\n    }),\n    [iconSrcBase],\n  );\n\n  useEffect(() => {\n    Object.values(SRCs).forEach((src) => {\n      const img = new Image();\n      img.src = src;\n    });\n  }, [SRCs]);\n\n  const iconSrc = isActive\n    ? SRCs.active\n    : isHovered\n      ? SRCs.hovered\n      : SRCs.default;\n\n  function handleMouseEnter() {\n    setIsHovered(true);\n    setIsNavItemHovered(true);\n  }\n\n  function handleMouseLeave() {\n    setIsHovered(false);\n    setIsNavItemHovered(false);\n  }\n\n  const baseProps = {\n    'aria-label': label,\n    className: classNames(className, styles.navigationItem, {\n      [styles.active]: isActive,\n    }),\n    onMouseEnter: handleMouseEnter,\n    onFocus: handleMouseEnter,\n    onBlur: handleMouseLeave,\n    onMouseLeave: handleMouseLeave,\n  };\n\n  function handleClick(ev: ReactMouseEvent<HTMLAnchorElement>) {\n    // Check if user uses CMD or Ctrl + Click to open new tab and not trigger loading animation.\n    // This prevents having a persistent loading animation on current tab if no page refresh happens.\n    const isCmdorCtrlPressed = ev.metaKey || ev.ctrlKey;\n\n    if (onHandleNavigating && !isCmdorCtrlPressed) {\n      onHandleNavigating();\n    }\n\n    if (!event) return;\n\n    trackEvent({ event });\n  }\n\n  if ('href' in linkProps) {\n    return (\n      <a\n        aria-current={isActive ? 'page' : undefined}\n        href={linkProps.href}\n        target={linkProps.target}\n        onClick={(ev) => handleClick(ev)}\n        {...baseProps}\n      >\n        <img alt=\"\" src={iconSrc} />\n        {isRenderingOpen && <Text>{label}</Text>}\n      </a>\n    );\n  }\n\n  return (\n    <NavLink to={linkProps.to} onClick={handleClick} {...baseProps}>\n      <img alt=\"\" src={iconSrc} />\n      {isRenderingOpen && <Text>{label}</Text>}\n    </NavLink>\n  );\n}\n","import { useLocation } from 'react-router';\nimport * as routes from 'lib/routes';\n\n// We have two primary navigation elements: Projects and Participants.\n// However, the pages the fall under these two categories span a number of different URL schemes.\n// For now, rather than changing our existing URL schemes to match the information architecture,\n// this hook instead just maps these URLs to their corresponding primary nav element.\n// eg:\n//\n// Project nav items:\n// - pre-builder  /start\n// - builder      /projects/builder/:id\n// - workspace    /projects/:id\n//\n// Participant nav items:\n// - RPT /teams/:id/recruit-participants\n// - Hub /research-hub/participants\n// - Opt in forms /participant-populations/:id\n\nexport function useIsActive(path: string) {\n  const { pathname } = useLocation();\n\n  if (pathname === path) return true;\n\n  if (path === routes.account_dashboard_path()) {\n    const projectRoutes = [\n      /\\/start/,\n      /\\/projects\\/builder\\/\\d+/,\n      /\\/projects\\/\\d+/,\n      /\\/projects\\/review/,\n    ];\n    return projectRoutes.some((regExp) => pathname.match(regExp));\n  }\n\n  if (path === routes.search_participants_path()) {\n    const participantRoutes = [\n      /\\/teams\\/\\d+\\/recruit-participants/,\n      /\\/research-hub\\/participants/,\n      /\\/participant-populations\\/\\d+/,\n    ];\n\n    return participantRoutes.some((regExp) => pathname.match(regExp));\n  }\n\n  return false;\n}\n","import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';\n\nimport * as rawTagTypes from './tag_types';\n\nconst tagTypes = Object.values(rawTagTypes);\n\nexport const apiSlice = createApi({\n  reducerPath: 'api',\n  baseQuery: fetchBaseQuery({ baseUrl: '' }),\n  tagTypes,\n  endpoints: () => ({}),\n});\n","import { z } from 'zod';\nimport * as routes from 'lib/routes';\nimport { apiSlice } from 'api/base_slice';\nimport { POPULATION_ATTRIBUTES_TAG } from 'api/tag_types';\nimport {\n  deserializeJSONApiResponse,\n  headersAndCredentials,\n  sortAlphabeticalByName,\n} from 'api/utils';\n\n// TODO: Update to use RSwag instead of explicitly declaring this\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst populationAttributesSchema = z.object({\n  data: z.array(\n    z.object({\n      id: z.string(),\n      attributes: z.object({\n        name: z.string(),\n        required: z.boolean(),\n        type: z.string(),\n        slug: z.string(),\n      }),\n      relationships: z.object({\n        options: z.object({\n          data: z.array(\n            z.object({\n              id: z.string(),\n            }),\n          ),\n        }),\n      }),\n      meta: z.object({\n        canDelete: z.boolean(),\n        canUpdate: z.boolean(),\n      }),\n    }),\n  ),\n  included: z\n    .array(\n      z.object({\n        id: z.string(),\n        type: z.literal('participantPopulationAttributeSelectOption'),\n        attributes: z.object({\n          description: z.string().nullable(),\n          isExclusive: z.boolean(),\n          participantPopulationAttributeId: z.number(),\n          position: z.number(),\n          name: z.string(),\n        }),\n      }),\n    )\n    .optional(),\n});\n\nexport type PopulationAttributesRawResponse = z.infer<\n  typeof populationAttributesSchema\n>;\nexport type PopulationAttributesAPIResponse = ReturnType<\n  typeof sortAlphabeticalByName<ReturnType<typeof deserializeJSONApiResponse>>\n>;\n\ntype DeletePopulationAttributeParams = {\n  participantPopulationId: string;\n  participantPopulationAttributeId: string;\n};\n\ntype UpdatePopulationAttributeParams = {\n  participantPopulationId: string;\n  participantPopulationAttributeId: string;\n  patch: string;\n};\n\ntype CreatePopulationAttributeParams = {\n  participantPopulationId: string;\n  name: string;\n  type: string;\n};\n\nexport const populationAttributesApi = apiSlice.injectEndpoints({\n  endpoints: (builder) => ({\n    getPopulationAttributes: builder.query<\n      PopulationAttributesAPIResponse,\n      string\n    >({\n      query: (participantPopulationId: string) =>\n        routes.api_participant_population_attributes_path(\n          participantPopulationId,\n        ),\n      providesTags: [POPULATION_ATTRIBUTES_TAG],\n      transformResponse: (\n        response: PopulationAttributesRawResponse,\n      ): PopulationAttributesAPIResponse =>\n        sortAlphabeticalByName(deserializeJSONApiResponse(response)),\n    }),\n    deletePopulationAttribute: builder.mutation<\n      void,\n      DeletePopulationAttributeParams\n    >({\n      query: ({\n        participantPopulationId,\n        participantPopulationAttributeId,\n      }) => ({\n        url: routes.api_participant_population_attribute_path(\n          participantPopulationId,\n          participantPopulationAttributeId,\n        ),\n        method: 'DELETE',\n        ...headersAndCredentials(),\n      }),\n      invalidatesTags: [POPULATION_ATTRIBUTES_TAG],\n    }),\n    updatePopulationAttribute: builder.mutation<\n      PopulationAttributesRawResponse,\n      UpdatePopulationAttributeParams\n    >({\n      query: ({\n        participantPopulationId,\n        participantPopulationAttributeId,\n        ...patch\n      }) => ({\n        url: routes.api_participant_population_attribute_path(\n          participantPopulationId,\n          participantPopulationAttributeId,\n        ),\n        method: 'PATCH',\n        body: {\n          data: {\n            attributes: patch,\n          },\n        },\n        ...headersAndCredentials(),\n      }),\n      invalidatesTags: [POPULATION_ATTRIBUTES_TAG],\n    }),\n    createPopulationAttribute: builder.mutation<\n      PopulationAttributesRawResponse,\n      CreatePopulationAttributeParams\n    >({\n      query: ({ participantPopulationId, name, type }) => {\n        const params = {\n          data: {\n            attributes: {\n              name,\n              type,\n            },\n          },\n        };\n\n        return {\n          url: routes.api_participant_population_attributes_path(\n            participantPopulationId,\n          ),\n          method: 'POST',\n          body: params,\n          ...headersAndCredentials(),\n        };\n      },\n      invalidatesTags: [POPULATION_ATTRIBUTES_TAG],\n    }),\n  }),\n  overrideExisting: 'throw',\n});\n\nexport const {\n  useCreatePopulationAttributeMutation,\n  useDeletePopulationAttributeMutation,\n  useGetPopulationAttributesQuery,\n  useUpdatePopulationAttributeMutation,\n} = populationAttributesApi;\n","import { useState } from 'react';\n\nimport { transformFormValuesToSubmissionParams } from '../../utils';\n\nconst EMPTY_SECTION_PARAMS = {\n  previousSectionId: null,\n  previousSectionResponses: [],\n};\n\nexport const useRequestedPreviewSectionParams = () => {\n  const [requestedSectionParams, setRequestedSectionParams] =\n    useState(EMPTY_SECTION_PARAMS);\n\n  const updateRequestedSectionParams = (formValues, previousSectionId) => {\n    const currentSectionResponses =\n      transformFormValuesToSubmissionParams(formValues);\n\n    setRequestedSectionParams({\n      previousSectionId,\n      previousSectionResponses: currentSectionResponses,\n    });\n  };\n\n  const resetRequestedSectionParams = () =>\n    setRequestedSectionParams(EMPTY_SECTION_PARAMS);\n\n  return {\n    requestedSectionParams,\n    updateRequestedSectionParams,\n    resetRequestedSectionParams,\n  };\n};\n","import {\n  createEntityAdapter,\n  createSelector,\n  createSlice,\n  isAnyOf,\n} from '@reduxjs/toolkit';\n\nimport { participantsApi } from 'api/participants';\nimport { populationAttributesApi } from 'api/population_attributes';\n\nimport * as profileConstants from 'participant/participant_profile/constants';\n\nconst matchParticipantFetched = isAnyOf(\n  participantsApi.endpoints.getParticipant.matchFulfilled,\n);\nconst matchPopulationAttributesFetched = isAnyOf(\n  populationAttributesApi.endpoints.getPopulationAttributes.matchFulfilled,\n);\n\nconst populationAttributesAdapter = createEntityAdapter({\n  selectId: (attribute) => attribute.slug,\n});\n\nexport const participantProfileSlice = createSlice({\n  name: 'participantProfile',\n  initialState: {\n    dirtyPages: [],\n    participant: undefined,\n    populationAttributes: populationAttributesAdapter.getInitialState(),\n    redirectTo: undefined,\n  },\n  reducers: {\n    SET_DIRTY_PAGE: (state, action) => {\n      state.dirtyPages = [\n        ...new Set([...state.dirtyPages, action.payload.pageName]),\n      ];\n    },\n    SET_REDIRECT_TO: (state, action) => {\n      state.redirectTo = action.payload.redirectTo;\n    },\n  },\n  extraReducers(builder) {\n    builder.addMatcher(matchParticipantFetched, (state, action) => ({\n      ...state,\n      participant: action.payload,\n    }));\n    builder.addMatcher(matchPopulationAttributesFetched, (state, action) => {\n      populationAttributesAdapter.setAll(\n        state.populationAttributes,\n        action.payload,\n      );\n    });\n  },\n});\n\nexport const { SET_DIRTY_PAGE, SET_REDIRECT_TO } =\n  participantProfileSlice.actions;\n\nexport const participantProfileSliceReducer = participantProfileSlice.reducer;\n\nexport const selectParticipant = (state) =>\n  state.participantProfile.participant;\nexport const selectRedirectTo = (state) => state.participantProfile.redirectTo;\n\nexport const {\n  selectAll: selectAllAttributes,\n  selectById: selectAttributeBySlug,\n  selectEntities: selectAttributes,\n} = populationAttributesAdapter.getSelectors(\n  (state) => state.participantProfile.populationAttributes,\n);\n\nexport const selectAttributeBySlugWithMetadata = createSelector(\n  [selectAttributeBySlug],\n  (attribute) => ({\n    ...attribute,\n    defaultOptionName:\n      profileConstants.attributeSlugsToDefaultOptionNames[attribute.slug],\n    inputLabel:\n      profileConstants.attributeSlugsToInputLabels[attribute.slug] ||\n      attribute.name,\n  }),\n);\n\nexport const selectEmploymentAttribute = (state) =>\n  selectAttributeBySlugWithMetadata(\n    state,\n    profileConstants.EMPLOYMENT_STATUS_SLUG,\n  );\n\nconst selectDirtyPages = (state) => state.participantProfile.dirtyPages;\n\nexport const selectPageIsDirty = createSelector(\n  [selectDirtyPages, (_, pageName) => pageName],\n  (dirtyPages, pageName) => dirtyPages.includes(pageName),\n);\n","import { useCallback } from 'react';\nimport { useOwnershipContext } from 'components/owner_boundary/context';\nimport { useRailsContext } from './use_rails_context';\n\nconst errorMessages = new Map<string, number>();\n\nexport function useErrorLogger() {\n  const ctx = useRailsContext();\n  const expirationSeconds =\n    ctx?.env.APPSIGNAL_JS_ERROR_LOG_EXPIRATION_SECONDS ?? 30;\n\n  const { logError } = useOwnershipContext();\n\n  return useCallback(\n    (error: Error) => {\n      const lastLoggedAt = errorMessages.get(error.message);\n      const now = Date.now();\n\n      if (!lastLoggedAt || now - lastLoggedAt > expirationSeconds * 1000) {\n        logError(error);\n        errorMessages.set(error.message, Date.now());\n      }\n    },\n    [expirationSeconds, logError],\n  );\n}\n","/* eslint-disable camelcase */\n\nimport * as routes from 'lib/routes';\nimport {\n  RequestBodyAttributes,\n  RequestParameters,\n  ResponseBody,\n} from 'lib/swagger_helper';\n\nimport { apiSlice } from 'api/base_slice';\nimport { PARTICIPANTS_TAG } from 'api/tag_types';\nimport { headersAndCredentials } from 'api/utils';\n\nexport type OptInFormParticipantRawResponse =\n  ResponseBody<'upsertParticipantPopulationOptInFormParticipant'>;\n\nexport function transformResponse(response: OptInFormParticipantRawResponse) {\n  const { data, meta } = response;\n\n  if (!data) return undefined;\n\n  return {\n    id: data.id,\n    ...data.attributes,\n    optInFormKey: meta.optInFormKey,\n  };\n}\n\nexport type OptInFormParticipantAPIResponse = ReturnType<\n  typeof transformResponse\n>;\n\nconst participantPopulationOptInFormParticipantsApi = apiSlice.injectEndpoints({\n  endpoints: (builder) => ({\n    upsertParticipantPopulationOptInFormParticipant: builder.mutation<\n      OptInFormParticipantAPIResponse,\n      RequestBodyAttributes<'upsertParticipantPopulationOptInFormParticipant'> &\n        RequestParameters<'upsertParticipantPopulationOptInFormParticipant'>\n    >({\n      query: (params) => ({\n        url: routes.api_opt_in_form_participants_path(params.opt_in_form_id),\n        method: 'PUT',\n        body: params,\n        ...headersAndCredentials(),\n      }),\n      invalidatesTags: [PARTICIPANTS_TAG],\n      transformResponse,\n    }),\n  }),\n  overrideExisting: 'throw',\n});\n\nexport const { useUpsertParticipantPopulationOptInFormParticipantMutation } =\n  participantPopulationOptInFormParticipantsApi;\n","import { useGetOptInFormQuery } from 'api/opt_in_forms';\n\nexport function useGetOptInForm(optInFormId: string) {\n  return useGetOptInFormQuery({\n    optInFormId,\n    include: ['team'].join(','),\n  });\n}\n","import React from 'react';\n\nimport {\n  FlexContainer,\n  Text,\n  Heading,\n} from '@user-interviews/ui-design-system';\n\nimport stars from 'images/stars.png';\n\nexport function OptInSuccess() {\n  return (\n    <FlexContainer\n      alignItems=\"center\"\n      flexDirection=\"column\"\n      gap={2}\n      justifyContent=\"center\"\n      width=\"sm\"\n    >\n      <img alt=\"Stars\" src={stars} />\n      <Heading level={4} size=\"xxl\">\n        You're all set!\n      </Heading>\n      <Text textAlign=\"center\">\n        Thank you for joining our research panel! We'll be in touch when there\n        is a study we think you'd be a good fit for.\n      </Text>\n    </FlexContainer>\n  );\n}\n","import React, { useEffect } from 'react';\n\nimport { CardStack } from '@user-interviews/ui-design-system';\nimport { SetMessageHandler } from '@user-interviews/ui-design-system/lib/Toast/useToast';\nimport { FormProvider, useForm } from 'react-hook-form';\n\nimport { TitledPage } from 'common/routing';\n\nimport { SurveySectionFormValues } from 'participant/project_application/components/survey/types';\n\nimport { SurveySectionForm } from 'researcher/surveys/components/survey_section_form';\n\nimport { useGetFirstSurveySection } from '../hooks/use_get_first_survey_section';\nimport { useSurveyResponseSet } from '../hooks/use_survey_response_set';\n\ninterface SurveyProps {\n  optInFormId: string;\n  participantOptInFormKey: string;\n  participantId: string;\n  surveyId: string;\n  setToastMessage: SetMessageHandler;\n  onComplete: () => void;\n}\n\nexport function Survey({\n  participantId,\n  optInFormId,\n  participantOptInFormKey,\n  surveyId,\n  setToastMessage,\n  onComplete,\n}: SurveyProps) {\n  const form = useForm<SurveySectionFormValues>({ shouldUnregister: true });\n\n  const {\n    currentSurveySection: responseSetSurveySection,\n    handleSubmit,\n    isLoading: isLoadingResponseSet,\n    isSubmitting,\n    responseSet,\n  } = useSurveyResponseSet({\n    optInFormId,\n    participantId,\n    participantOptInFormKey,\n    surveyId,\n    setToastMessage,\n  });\n\n  const { isLoading: isLoadingFirstSurveySection, firstSurveySection } =\n    useGetFirstSurveySection({\n      optInFormId,\n      participantId,\n      participantOptInFormKey,\n      surveyId,\n      skip: isLoadingResponseSet || !!responseSet,\n    });\n\n  const surveyCompleted = !!responseSet?.completedAt;\n  useEffect(() => {\n    if (surveyCompleted) onComplete();\n  }, [surveyCompleted, onComplete]);\n\n  const currentSurveySection = responseSetSurveySection || firstSurveySection;\n  const isLoading = isLoadingResponseSet || isLoadingFirstSurveySection;\n\n  const pageTitlePrefix = currentSurveySection?.title\n    ? `${currentSurveySection.title} - `\n    : '';\n  const pageTitle = `${pageTitlePrefix}Survey`;\n\n  return (\n    // eslint-disable-next-line react/jsx-props-no-spreading\n    <FormProvider {...form}>\n      <TitledPage title={pageTitle}>\n        <CardStack size=\"sm\">\n          <SurveySectionForm\n            cardSize=\"sm\"\n            isLoading={isLoading || surveyCompleted}\n            isSubmitting={isSubmitting}\n            surveySection={currentSurveySection}\n            onSubmit={form.handleSubmit(handleSubmit)}\n          />\n        </CardStack>\n      </TitledPage>\n    </FormProvider>\n  );\n}\n","import { useState } from 'react';\n\nimport { MessageTypes } from '@user-interviews/ui-design-system';\nimport { SetMessageHandler } from '@user-interviews/ui-design-system/lib/Toast/useToast';\n\nimport {\n  useCreateResponseSetMutation,\n  useGetResponseSetsQuery,\n  useUpdateResponseSetMutation,\n} from 'api/response_sets';\n\nimport { ErrorRenderer } from 'lib/errors';\n\nimport { SurveySectionFormValues } from 'participant/project_application/components/survey/types';\n\nimport {\n  buildOptInResponseSetCreateParams,\n  buildOptInResponseSetUpdateParams,\n} from 'researcher/surveys/utils';\n\nimport { responseSetOutdated } from '../utils';\n\ntype UseSurveyResponseSetParams = {\n  optInFormId: string;\n  participantId: string;\n  participantOptInFormKey: string;\n  surveyId: string;\n  setToastMessage: SetMessageHandler;\n};\n\n// TODO Placeholder until swagger defs added to response set api endpoints\ntype SurveySection = {\n  id: string;\n};\n\nexport const useSurveyResponseSet = ({\n  optInFormId,\n  participantId,\n  participantOptInFormKey,\n  surveyId,\n  setToastMessage,\n}: UseSurveyResponseSetParams) => {\n  const [currentSurveySection, setCurrentSurveySection] =\n    useState<SurveySection | null>(null);\n\n  const [\n    createResponseSet,\n    { data: createdResponseSetData, isLoading: createResponseSetLoading },\n  ] = useCreateResponseSetMutation();\n\n  const [\n    updateResponseSet,\n    { data: updatedResponseSetData, isLoading: updateResponseSetLoading },\n  ] = useUpdateResponseSetMutation();\n\n  const latestMutatedResponseSetData =\n    updatedResponseSetData || createdResponseSetData;\n\n  let responseSet = latestMutatedResponseSetData?.data;\n  const surveyCompletedRedirect =\n    latestMutatedResponseSetData?.meta.surveyCompletedRedirect;\n\n  const isSubmitting = createResponseSetLoading || updateResponseSetLoading;\n\n  const { data: existingResponseSetResponse, isLoading } =\n    useGetResponseSetsQuery(\n      {\n        surveyId,\n        participantId,\n        limit: 1,\n        meta: {\n          optInFormId,\n          participantId,\n          participantOptInFormKey,\n        },\n      },\n      { skip: isSubmitting || !!responseSet },\n    );\n\n  const existingResponseSet = existingResponseSetResponse?.[0];\n\n  // only use an existing response set if it's not complete and not outdated, so P can retake survey from beginning\n  const useExistingResponseSet =\n    existingResponseSet &&\n    !existingResponseSet.completedAt &&\n    !responseSetOutdated(existingResponseSet);\n\n  if (useExistingResponseSet) {\n    responseSet ||= existingResponseSet; // ||= to prioritize latest mutated response set\n  }\n\n  const handleError = (error: Error) => {\n    setToastMessage({\n      type: MessageTypes.ERROR,\n      message: ErrorRenderer.compileRtkQueryErrorMessage(\n        error,\n        'submitting your survey responses',\n      ),\n    });\n  };\n\n  const handleSuccess = (responseSetData: {\n    data: { surveySection: SurveySection };\n  }) => {\n    if (responseSetData.data.surveySection) {\n      setCurrentSurveySection(responseSetData.data.surveySection);\n    }\n  };\n\n  const handleUpdate = async (formValues: SurveySectionFormValues) => {\n    const params = buildOptInResponseSetUpdateParams({\n      formValues,\n      optInFormId,\n      participantId,\n      participantOptInFormKey,\n      responseSetId: responseSet.id,\n    });\n\n    await updateResponseSet(params)\n      .unwrap()\n      .then(handleSuccess)\n      .catch(handleError);\n  };\n\n  const handleCreate = async (formValues: SurveySectionFormValues) => {\n    const params = buildOptInResponseSetCreateParams({\n      formValues,\n      optInFormId,\n      participantId,\n      participantOptInFormKey,\n      surveyId,\n    });\n\n    await createResponseSet(params)\n      .unwrap()\n      .then(handleSuccess)\n      .catch(handleError);\n  };\n\n  const handleSubmit = async (formValues: SurveySectionFormValues) => {\n    if (responseSet?.id) return handleUpdate(formValues);\n\n    return handleCreate(formValues);\n  };\n\n  return {\n    handleSubmit,\n    responseSet,\n    currentSurveySection:\n      currentSurveySection ||\n      (useExistingResponseSet && existingResponseSet?.surveySection),\n    isLoading,\n    isSubmitting,\n    surveyCompletedRedirect,\n  };\n};\n","import { differenceInDays, parseISO } from 'date-fns';\n\nconst RESPONSE_SET_TIME_LIMIT_IN_DAYS = 1;\n\nexport const responseSetOutdated = (responseSet: { updatedAt: string }) =>\n  differenceInDays(new Date(), parseISO(responseSet.updatedAt)) >\n  RESPONSE_SET_TIME_LIMIT_IN_DAYS;\n","import { useGetSurveySectionsQuery } from 'api/survey_sections';\n\ntype UseGetFirstSurveySectionParams = {\n  optInFormId: string;\n  participantId: string;\n  participantOptInFormKey: string;\n  skip: boolean;\n  surveyId: string;\n};\n\nexport const useGetFirstSurveySection = ({\n  optInFormId,\n  participantId,\n  participantOptInFormKey,\n  skip = false,\n  surveyId,\n}: UseGetFirstSurveySectionParams) => {\n  const queryResult = useGetSurveySectionsQuery(\n    {\n      surveyId,\n      params: {\n        limit: 1,\n        meta: {\n          optInFormId,\n          participantId,\n          participantOptInFormKey,\n        },\n      },\n    },\n    {\n      skip,\n    },\n  );\n\n  return {\n    ...queryResult,\n    firstSurveySection: queryResult.data?.[0],\n  };\n};\n","import React, { useEffect, useState } from 'react';\n\nimport {\n  CardStack,\n  Flex,\n  MessageTypes,\n  Toast,\n  useToast,\n} from '@user-interviews/ui-design-system';\nimport { useLocation, useNavigate } from 'react-router';\n\nimport { useUpsertParticipantPopulationOptInFormParticipantMutation } from 'api/participant_population_opt_in_form_participants';\nimport { useLazyGetResponseSetsQuery } from 'api/response_sets';\n\nimport { ErrorRenderer } from 'lib/errors';\n\nimport { ProjectApplicationLoadingSkeleton } from 'participant/project_application/components/project_application_loading_skeleton';\n\nimport { useGetOptInForm } from '../hooks/use_get_opt_in_form';\nimport { useOptInFormKeyFromQueryUrl } from '../hooks/use_opt_in_form_key_from_url';\n\nimport {\n  DefaultQuestionsForm,\n  OptInFormFieldValues,\n} from './default_questions_form';\nimport { Header } from './header';\nimport { OptInSuccess } from './opt_in_success';\nimport { Survey } from './survey';\n\nimport * as styles from './opt_in.module.css';\n\ninterface OptInProps {\n  optInFormId: string;\n}\n\n// Order of page loading:\n// - Load opt in form data\n// - If URL does not have P opt in form key data, that's it. page loaded\n// - But if there IS opt in form key data, then fetch latest existing response set\n// - Show default question form or survey depending on latest response set status\nexport function OptIn({ optInFormId }: OptInProps) {\n  const [surveyComplete, setSurveyComplete] = useState(false);\n  const [isLoading, setIsLoading] = useState(true);\n\n  const { dismissMessage, messages, setMessage } = useToast();\n\n  const {\n    participantId: participantIdFromUrl,\n    participantOptInFormKey: participantOptInFormKeyFromUrl,\n  } = useOptInFormKeyFromQueryUrl();\n\n  const location = useLocation();\n  const navigate = useNavigate();\n\n  const { data: optInForm } = useGetOptInForm(optInFormId);\n\n  const [getExistingResponseSet, existingResponseSetResult] =\n    useLazyGetResponseSetsQuery();\n\n  const [\n    upsertParticipant,\n    { data: upsertedParticipant, isLoading: isUpsertingParticipant },\n  ] = useUpsertParticipantPopulationOptInFormParticipantMutation();\n\n  // Set the opt in form key data as query params in the URL for access on page refresh\n  useEffect(() => {\n    if (upsertedParticipant) {\n      const { id: participantId, optInFormKey } = upsertedParticipant;\n      navigate(\n        `${location.pathname}?participant_id=${participantId}&participant_opt_in_form_key=${optInFormKey}`,\n      );\n    }\n  }, [upsertedParticipant, navigate, location.pathname]);\n\n  useEffect(() => {\n    if (!optInForm) return;\n\n    // No URL params so don't bother fetching existing P data\n    if (!participantIdFromUrl || !participantOptInFormKeyFromUrl) {\n      setIsLoading(false);\n      return;\n    }\n\n    getExistingResponseSet({\n      surveyId: optInForm.surveyId,\n      participantId: participantIdFromUrl,\n      limit: 1,\n      meta: {\n        optInFormId: optInForm.id,\n        participantId: participantIdFromUrl,\n        participantOptInFormKey: participantOptInFormKeyFromUrl,\n      },\n    }).finally(() => setIsLoading(false));\n  }, [\n    optInForm,\n    getExistingResponseSet,\n    participantIdFromUrl,\n    participantOptInFormKeyFromUrl,\n  ]);\n\n  const handleSubmissionError = (error: Error) => {\n    setMessage({\n      type: MessageTypes.ERROR,\n      message: ErrorRenderer.compileRtkQueryErrorMessage(\n        error,\n        'submitting your responses',\n      ),\n    });\n  };\n\n  const onSubmitDefaultQuestionsForm = (formValues: OptInFormFieldValues) => {\n    upsertParticipant({\n      opt_in_form_id: optInForm.id,\n      accept_data_consent_notice: formValues.acceptDataConsentNotice,\n      accept_texts: formValues.acceptTexts,\n      cloudflare_turnstile: formValues.cloudflareTurnstile,\n      email: formValues.email,\n      ...(formValues.firstName && { first_name: formValues.firstName }),\n      ...(formValues.lastName && { last_name: formValues.lastName }),\n      ...(formValues.phone?.phoneCountryCode && {\n        phone_country_code: formValues.phone.phoneCountryCode,\n      }),\n      ...(formValues.phone?.phoneNumber && {\n        phone_number: formValues.phone.phoneNumber,\n      }),\n      ...(formValues.timezone && { timezone_name: formValues.timezone }),\n    })\n      .unwrap()\n      .catch(handleSubmissionError);\n  };\n\n  // TODO replace with own loading skeleton\n  if (isLoading) return <ProjectApplicationLoadingSkeleton />;\n\n  const submittedDefaultQuestionsForm = !!upsertedParticipant;\n  const urlOptInFormKeyValid = existingResponseSetResult.isSuccess;\n\n  const optInFormComplete =\n    surveyComplete || (submittedDefaultQuestionsForm && !optInForm.surveyId);\n\n  const showSurvey = submittedDefaultQuestionsForm || urlOptInFormKeyValid;\n\n  const participantId =\n    upsertedParticipant?.id || (urlOptInFormKeyValid && participantIdFromUrl);\n  const optInFormKey =\n    upsertedParticipant?.optInFormKey ||\n    (urlOptInFormKeyValid && participantOptInFormKeyFromUrl);\n\n  return (\n    <div className={styles.optInFormPage}>\n      <Toast autoDismiss messages={messages} onToastClosed={dismissMessage} />\n      <Flex alignItems=\"center\" container flexDirection=\"column\">\n        <CardStack size=\"sm\">\n          <Header\n            logoOnly={optInFormComplete}\n            logoUrl={optInForm.logoUrl}\n            optInFormDescription={optInForm.description}\n            optInFormTitle={optInForm.title}\n            teamName={optInForm.team.name}\n          />\n\n          {optInFormComplete ? (\n            <OptInSuccess />\n          ) : showSurvey ? (\n            <Survey\n              optInFormId={optInForm.id}\n              participantId={participantId as string}\n              participantOptInFormKey={optInFormKey as string}\n              setToastMessage={setMessage}\n              surveyId={optInForm.surveyId}\n              onComplete={() => setSurveyComplete(true)}\n            />\n          ) : (\n            <DefaultQuestionsForm\n              isSubmitting={isUpsertingParticipant}\n              optInForm={optInForm}\n              onSubmitForm={onSubmitDefaultQuestionsForm}\n            />\n          )}\n        </CardStack>\n      </Flex>\n    </div>\n  );\n}\n","import { useLocation } from 'react-router';\n\nexport function useOptInFormKeyFromQueryUrl() {\n  const location = useLocation();\n\n  const searchParams = new URLSearchParams(location.search);\n\n  const participantId = searchParams.get('participant_id');\n  const participantOptInFormKey = searchParams.get(\n    'participant_opt_in_form_key',\n  );\n\n  return {\n    participantId,\n    participantOptInFormKey,\n  };\n}\n","import React from 'react';\nimport { Provider } from 'react-redux';\nimport { z } from 'zod';\n\nimport { useZodSchema } from 'hooks/use_zod_schema';\nimport { useRailsContext } from 'hooks/use_rails_context';\nimport { DopeBrowserRouter } from 'components/dope_browser_router';\nimport store from 'store/store';\n\nimport { OptIn } from './components/opt_in';\n\nconst optInPageSchema = z.object({\n  optInFormId: z.string(),\n});\n\nexport function OptInPage(props: unknown) {\n  const { optInFormId } = useZodSchema(props, optInPageSchema);\n  const railsContext = useRailsContext();\n\n  return (\n    <DopeBrowserRouter location={railsContext?.request.location ?? '/'}>\n      <Provider store={store}>\n        <OptIn optInFormId={optInFormId} />\n      </Provider>\n    </DopeBrowserRouter>\n  );\n}\n","import React from 'react';\nimport { LoadingOverlay } from '@user-interviews/ui-design-system';\nimport { z } from 'zod';\nimport { useZodSchema } from 'hooks/use_zod_schema';\nimport { useGetOptInForm } from 'participant/opt_in/hooks/use_get_opt_in_form';\nimport { SurveyPreviewPage } from 'researcher/surveys/survey_preview/survey_preview/survey_preview_page';\n\nconst optInPreviewPageSchema = z.object({\n  optInFormId: z.string(),\n});\n\nexport function OptInPreviewPage(props: unknown) {\n  const { optInFormId } = useZodSchema(props, optInPreviewPageSchema);\n  const { data: optInForm } = useGetOptInForm(optInFormId);\n\n  return !optInForm ? (\n    <LoadingOverlay />\n  ) : (\n    <SurveyPreviewPage\n      logoUrl={optInForm.logoUrl}\n      optInForm={optInForm}\n      publicSurvey={false}\n      surveyId={optInForm.surveyId}\n      teamName={optInForm.team.name}\n      title={optInForm.title}\n    />\n  );\n}\n","import { registerComponent } from 'lib/react_on_rails';\n\nimport withAuthUserContext from 'hoc/with_auth_user_context';\n\nimport { withPageProviders } from 'hoc/with_page_providers';\nimport { OptInPage } from './opt_in_page';\nimport { OptInPreviewPage } from './opt_in_preview_page';\n\nexport const OptInEntrypoint = withAuthUserContext(OptInPage);\nexport const OptInPreviewEntrypoint = withPageProviders(\n  withAuthUserContext(OptInPreviewPage),\n);\n\nregisterComponent('OptInPage', OptInEntrypoint);\nregisterComponent('OptInPreviewPage', OptInPreviewEntrypoint);\n","// extracted by mini-css-extract-plugin\nvar _1 = \"Z5DmoCIG5yo9JljcboTA\";\nvar _2 = \"PmkMvIZViFGtxI01RESJ\";\nvar _3 = \"XSHRkeJML_qa75MgKJbX\";\nvar _4 = \"g_U2RoctRopmrOk18lzb\";\nexport { _1 as \"accountSettingsPopover\", _2 as \"link\", _3 as \"teamLink\", _4 as \"text\" }\n","import React, { forwardRef, type MouseEvent } from 'react';\nimport classNames from 'classnames';\nimport { useTracking } from 'react-tracking';\nimport { Flex } from '@user-interviews/ui-design-system';\nimport * as routes from 'lib/routes';\nimport { trackingEvents } from 'lib/analytics';\n\nimport { useAuthUserContext } from 'hooks/use_auth_user_context';\nimport { TeamActionTypes } from 'lib/generated_constants/team_action_types';\n\nimport { Authorization } from 'common/authorization';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as accountSettingsNavigationItemStyles from '../../account_navigation_item.module.scss';\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './account_menu_popover.module.scss';\n\nconst {\n  NAVIGATION_ACCOUNT_CLICKED,\n  NAVIGATION_SIGN_OUT_CLICKED,\n  NAVIGATION_TEAMS_CLICKED,\n} = trackingEvents;\n\nexport const AccountMenuPopover = forwardRef<HTMLDivElement>((_props, ref) => {\n  const { trackEvent } = useTracking();\n  const authUserContext = useAuthUserContext();\n\n  if (!authUserContext?.account) return null;\n\n  const { account, team } = authUserContext;\n\n  function handleLinkClick({ currentTarget }: MouseEvent<HTMLAnchorElement>) {\n    const trackingEvent = currentTarget.dataset.event;\n    if (!trackingEvent) return;\n\n    trackEvent({ event: trackingEvent });\n  }\n\n  return (\n    <div\n      className={\n        accountSettingsNavigationItemStyles.accountMenuPopoverContainer\n      }\n      ref={ref}\n    >\n      <Flex\n        alignItems=\"flex-start\"\n        className={classNames(styles.accountSettingsPopover)}\n        container\n        flexDirection=\"column\"\n      >\n        {team && (\n          <Authorization to={TeamActionTypes.VIEW_MEMBERS}>\n            <a\n              className={styles.link}\n              data-event={NAVIGATION_TEAMS_CLICKED}\n              href={routes.team_members_path()}\n              onClick={handleLinkClick}\n            >\n              Team settings\n            </a>\n          </Authorization>\n        )}\n        <a\n          className={styles.link}\n          data-event={NAVIGATION_ACCOUNT_CLICKED}\n          href={routes.edit_account_path(account.id)}\n          onClick={handleLinkClick}\n        >\n          Account settings\n        </a>\n        <a\n          className={styles.link}\n          data-event={NAVIGATION_SIGN_OUT_CLICKED}\n          data-method=\"delete\"\n          href=\"/accounts/signout\"\n          onClick={handleLinkClick}\n        >\n          Sign out\n        </a>\n      </Flex>\n    </div>\n  );\n});\n","// extracted by mini-css-extract-plugin\nvar _1 = \"ifHaWxzJApaaaXMQhaTN\";\nvar _2 = \"q_JAcmqf3jguxMUeNY2x\";\nvar _3 = \"Eilkb4fe8vxD3KkSBzo7\";\nvar _4 = \"LEac1e_DBMe4gPnVSgzf\";\nvar _5 = \"sVMmOOVIR1bZUvrJzxY2\";\nvar _6 = \"cHtrnXP35bF4gkbtPk0h\";\nvar _7 = \"t23wNS_GUoYISAyrPpBN\";\nvar _8 = \"gzgkzMNxCN6C3P5v6yaQ\";\nvar _9 = \"lQCYBtzgu7f0AU_9xRqR\";\nvar _a = \"BnI3yTU8FBuiG4dKRKYe\";\nvar _b = \"_EOjKws8kZOmafrjGJg7\";\nvar _c = \"ijdPHe4_2hyvE21Uit6y\";\nvar _d = \"IZlCPYN_dkKUeVY0df79\";\nvar _e = \"SR1QXWkIibsPWrq4Ec7u\";\nvar _f = \"x1v2t1BqrwSQ88P2Leyx\";\nvar _10 = \"XTeiZnwiDBBXGhKZ1A_Q\";\nvar _11 = \"W0vFLGpQWSRIpeTdPeGO\";\nvar _12 = \"wRIfQ3b53v1puSENjkVB\";\nvar _13 = \"CVRSr7TvXfHmouIOi1HR\";\nvar _14 = \"b2jEh17oobkfohB0ZJi_\";\nvar _15 = \"PW1VRyyHa3R9CjtVgV6a\";\nvar _16 = \"ohuJKe1pDDnppn93itwP\";\nvar _17 = \"UUKUDQBv0qTP2qEhpgta\";\nvar _18 = \"Ot5by4Zm3t1nt8d52fKL\";\nexport { _1 as \"ApplySuccessCard__detail__date\", _2 as \"BillingInfoCard__column\", _3 as \"CopyToClipboard\", _4 as \"DataConsentNotice__content__preview__body\", _5 as \"MessageList__message__timestamp\", _6 as \"ParticipantProfile__participant-details__attribute-value\", _7 as \"ProjectCustomEmailSets\", _8 as \"ProjectListItem__status-date\", _9 as \"ProjectListing__detail\", _a as \"ProjectListing__details\", _b as \"TeamMemberInviterForm__section__invite-via-link\", _c as \"UnmoderatedTask__deadline\", _d as \"accountDetails\", _e as \"accountMenuPopoverContainer\", _f as \"accountNavItemText\", _10 as \"accountSettingsNavigationItem\", _11 as \"accountSettingsNavigationItemContainer\", _12 as \"avatar\", _13 as \"boldedText\", _14 as \"btn-link--neutral\", _15 as \"btn-outline-secondary\", _16 as \"participant-dashboard__project__info__status__string\", _17 as \"schedule-project-participant-page__time-slots\", _18 as \"text\" }\n","import type { MouseEvent as ReactMouseEvent } from 'react';\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Text, TEXT_PROPS } from '@user-interviews/ui-design-system';\nimport { useTracking } from 'react-tracking';\n\nimport { trackingEvents } from 'lib/analytics';\n\nimport { useAuthUserContext } from 'hooks/use_auth_user_context';\n\nimport { useSidebarMobileBreakpoint } from 'hooks/use_sidebar_mobile_breakpoint';\nimport { useSidebarContext } from '../../hooks/use_sidebar_context';\nimport { AccountMenuPopover } from './components/account_menu_popover';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './account_navigation_item.module.scss';\n\nconst { NAVIGATION_ACCOUNT_POPOVER_OPENED } = trackingEvents;\n\nexport function AccountNavigationItem() {\n  const { trackEvent } = useTracking();\n  const ref = useRef<HTMLDivElement>(null);\n  const { isRenderingOpen, setIsNavItemHovered } = useSidebarContext();\n  const isMobile = useSidebarMobileBreakpoint();\n  const [isAccountMenuOpen, setIsAccountMenuOpen] = useState(false);\n  const authUserContext = useAuthUserContext();\n\n  useEffect(() => {\n    if (isRenderingOpen) return;\n\n    setIsAccountMenuOpen(false);\n  }, [isRenderingOpen]);\n\n  useEffect(() => {\n    function handleDocumentClick(event: MouseEvent) {\n      if (!ref.current) return;\n      const { clientX, clientY } = event;\n      const { top, bottom, left, right } = ref.current.getBoundingClientRect();\n\n      if (\n        clientX >= left &&\n        clientX <= right &&\n        clientY >= top &&\n        clientY <= bottom\n      )\n        return;\n\n      setIsAccountMenuOpen(false);\n    }\n\n    function addEventListener() {\n      window.addEventListener('click', handleDocumentClick);\n    }\n\n    function removeEventListener() {\n      window.removeEventListener('click', handleDocumentClick);\n    }\n\n    addEventListener();\n\n    return removeEventListener;\n  }, []);\n\n  function handlePopoverButtonClick(event: ReactMouseEvent) {\n    event.stopPropagation();\n    setIsAccountMenuOpen((prev) => !prev);\n  }\n\n  function handleMouseEnter() {\n    setIsNavItemHovered(true);\n  }\n\n  function handleMouseLeave() {\n    setIsNavItemHovered(false);\n  }\n\n  useEffect(() => {\n    if (!isAccountMenuOpen) return;\n\n    trackEvent({ event: NAVIGATION_ACCOUNT_POPOVER_OPENED });\n  }, [isAccountMenuOpen, trackEvent]);\n\n  if (!authUserContext?.account) return null;\n\n  const { account, organization } = authUserContext;\n  const isRenderingAccountMenu =\n    isAccountMenuOpen && (isRenderingOpen || isMobile);\n\n  return (\n    <div className={styles.accountSettingsNavigationItemContainer}>\n      <button\n        aria-label=\"open account menu\"\n        className={styles.accountSettingsNavigationItem}\n        type=\"button\"\n        onClick={handlePopoverButtonClick}\n        onFocus={handleMouseEnter}\n        onMouseEnter={handleMouseEnter}\n        onMouseLeave={handleMouseLeave}\n      >\n        <div className={styles.avatar}>\n          <span>{account.initials}</span>\n        </div>\n\n        {isRenderingOpen && (\n          <div className={styles.accountDetails}>\n            <Text className={styles.boldedText} size={TEXT_PROPS.size.sm}>\n              {account.fullName}\n            </Text>\n            {organization && (\n              <Text className={styles.text} size={TEXT_PROPS.size.sm}>\n                {organization.name}\n              </Text>\n            )}\n          </div>\n        )}\n      </button>\n      {isRenderingAccountMenu && <AccountMenuPopover ref={ref} />}\n    </div>\n  );\n}\n","// extracted by mini-css-extract-plugin\nvar _1 = \"GOtNPedALIgxJEGA5WKI\";\nvar _2 = \"bfLpZr2Gll2UzSE12qQ_\";\nvar _3 = \"xkGU3cvLGHrZhUtDe1_g\";\nvar _4 = \"ql7v321JNf2eCxRtYUOX\";\nvar _5 = \"cYvhDWWOpBjvIKrPy2rX\";\nvar _6 = \"ts3qwQY8yu8PnQCBayOA\";\nvar _7 = \"Vle68HDjZe4239MT898p\";\nvar _8 = \"GXuZdKLsqk7pzxiNFPce\";\nvar _9 = \"L3005TumQe0jN9S4et2g\";\nvar _a = \"afAFGGzd5i1JYG1KYhs4\";\nvar _b = \"JByjrMNXtursxRyO4Wk6\";\nvar _c = \"QFO8PDFPS5WY03w0XxQy\";\nvar _d = \"QOTnwtIOIdxn_QQZE0L8\";\nvar _e = \"W7h6R5cYtaPhbMVNuHJL\";\nvar _f = \"t2EkOKJAyRC2sJtGfCaQ\";\nvar _10 = \"yO_M6bb8Puc6XUD9skmm\";\nvar _11 = \"ZfEUB0JxyiPwMO96esDD\";\nvar _12 = \"k3fLPAhhtM7pNUCWP9S0\";\nvar _13 = \"oa5fjdCL9NS8BANEhjxQ\";\nvar _14 = \"r2khQ9dNmhqnCLt0lgQ5\";\nvar _15 = \"cBPRidm9bKMcNc6FT49U\";\nvar _16 = \"gVYnDGSxpZbIS2xRlkWm\";\nvar _17 = \"w_7XxcrTZPfV3tzW2BRL\";\nvar _18 = \"sp8XFlrb3u__HQCSh75j\";\nexport { _1 as \"ApplySuccessCard__detail__date\", _2 as \"BillingInfoCard__column\", _3 as \"CopyToClipboard\", _4 as \"DataConsentNotice__content__preview__body\", _5 as \"MessageList__message__timestamp\", _6 as \"ParticipantProfile__participant-details__attribute-value\", _7 as \"ProjectCustomEmailSets\", _8 as \"ProjectListItem__status-date\", _9 as \"ProjectListing__detail\", _a as \"ProjectListing__details\", _b as \"TeamMemberInviterForm__section__invite-via-link\", _c as \"UnmoderatedTask__deadline\", _d as \"btn-link--neutral\", _e as \"btn-outline-secondary\", _f as \"isOpen\", _10 as \"isTransitioning\", _11 as \"logo\", _12 as \"logoWrapper\", _13 as \"mobileLogo\", _14 as \"navLeft\", _15 as \"navRight\", _16 as \"participant-dashboard__project__info__status__string\", _17 as \"schedule-project-participant-page__time-slots\", _18 as \"sidebar\" }\n","import React, { forwardRef, type ForwardedRef } from 'react';\nimport classNames from 'classnames';\n\nimport * as routes from 'lib/routes';\nimport { trackingEvents } from 'lib/analytics/constants';\nimport { useAuthUserContext } from 'hooks/use_auth_user_context';\nimport { TeamActionTypes } from 'lib/generated_constants/team_action_types';\n\nimport { Authorization } from 'common/authorization';\nimport { NavigationItem } from '../navigation_item';\nimport { AccountNavigationItem } from './components/account_navigation_item';\nimport { useSidebarContext } from './hooks/use_sidebar_context';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './sidebar.module.scss';\n\nconst {\n  NAVIGATION_PARTICIPANTS_CLICKED,\n  NAVIGATION_PLANS_CLICKED,\n  NAVIGATION_PROJECTS_CLICKED,\n  NAVIGATION_SUPPORT_CLICKED,\n} = trackingEvents;\n\ntype SidebarProps = {\n  onHandlePageLoading?: () => void;\n};\n\nexport const Sidebar = forwardRef(\n  (\n    { onHandlePageLoading }: SidebarProps,\n    sidebarRef: ForwardedRef<HTMLDivElement>,\n  ) => {\n    const { isOpen, isTransitioning } = useSidebarContext();\n    const authContext = useAuthUserContext();\n\n    const isAccount = !!authContext.account;\n    const isStaff = !!authContext.user;\n    const rootPath = isAccount ? routes.account_dashboard_path() : '/staff';\n\n    return (\n      <div\n        className={classNames(\n          styles.sidebar,\n          { [styles.isOpen]: isOpen },\n          { [styles.isTransitioning]: isTransitioning },\n        )}\n        ref={sidebarRef}\n      >\n        <a href={rootPath}>\n          <img\n            alt=\"User Interview logo\"\n            className={styles.mobileLogo}\n            src=\"/images/ui-logo-white.svg\"\n          />\n        </a>\n\n        <nav aria-label=\"primary navigation\">\n          <div className={styles.navLeft}>\n            <div className={styles.logoWrapper}>\n              <a href={rootPath}>\n                <img\n                  alt=\"User Interview logo\"\n                  className={styles.logo}\n                  src={\n                    isOpen ? '/images/ui-logo-white.svg' : '/images/ui-icon.svg'\n                  }\n                />\n              </a>\n            </div>\n\n            {isAccount && (\n              <>\n                <NavigationItem\n                  event={NAVIGATION_PROJECTS_CLICKED}\n                  href={routes.account_dashboard_path()}\n                  iconSrcBase=\"/images/nav_icon_projects\"\n                  label=\"Projects\"\n                  onHandleNavigating={onHandlePageLoading}\n                />\n\n                <Authorization to={TeamActionTypes.SEARCH_PARTICIPANTS}>\n                  <NavigationItem\n                    event={NAVIGATION_PARTICIPANTS_CLICKED}\n                    href={routes.search_participants_path()}\n                    iconSrcBase=\"/images/nav_icon_participants\"\n                    label=\"Participants\"\n                    onHandleNavigating={onHandlePageLoading}\n                  />\n                </Authorization>\n              </>\n            )}\n\n            {isStaff && (\n              <NavigationItem\n                href=\"/staff\"\n                iconSrcBase=\"/images/nav_icon_participants\"\n                label=\"Staff\"\n              />\n            )}\n          </div>\n          <div className={styles.navRight}>\n            {isAccount && (\n              <>\n                {!authContext?.teamSubscription?.paidSubscription && (\n                  <Authorization to={TeamActionTypes.VIEW_BILLING}>\n                    <NavigationItem\n                      event={NAVIGATION_PLANS_CLICKED}\n                      href={routes.team_billing_url()}\n                      iconSrcBase=\"/images/nav_icon_explore_plans\"\n                      label=\"Explore plans\"\n                      onHandleNavigating={onHandlePageLoading}\n                    />\n                  </Authorization>\n                )}\n                <NavigationItem\n                  event={NAVIGATION_SUPPORT_CLICKED}\n                  href=\"/support\"\n                  iconSrcBase=\"/images/nav_icon_support\"\n                  label=\"Support\"\n                  target=\"_blank\"\n                />\n              </>\n            )}\n\n            <AccountNavigationItem />\n          </div>\n        </nav>\n      </div>\n    );\n  },\n);\n","import React from 'react';\n\nimport {\n  Button,\n  Card,\n  CheckboxButton,\n  FormControlLabel,\n  FormGroup,\n  Input,\n} from '@user-interviews/ui-design-system';\nimport { Controller, useForm } from 'react-hook-form';\n\nimport { PhoneNumber } from 'components/phone_number';\nimport { CloudflareTurnstile } from 'components/cloudflare_turnstile';\nimport { TimezoneSelect } from 'common/timezone_select';\n\nimport { useEnvVars } from 'hooks/use_env_vars';\n\nimport { Copy } from 'lib/generated_constants/recruiting';\n\n// eslint-disable-next-line local-rules/no_leaky_css_modules\nimport * as surveyFormCardStyles from 'researcher/surveys/components/survey_section_form_card.module.css';\n// eslint-disable-next-line local-rules/no_leaky_css_modules\nimport * as styles from './opt_in.module.css';\n\nexport type OptInFormFieldValues = {\n  acceptDataConsentNotice: boolean;\n  acceptTexts: boolean;\n  cloudflareTurnstile: string;\n  email: string;\n  phone: { phoneCountryCode: string; phoneNumber: string };\n  firstName: string;\n  lastName: string;\n  timezone: string;\n};\n\ninterface Field {\n  data?: { required: boolean };\n  ui?: { hidden: boolean };\n}\n\ntype FieldName = 'firstName' | 'lastName' | 'phoneNumber' | 'timezoneName';\n\ninterface DefaultQuestionsFormProps {\n  isSubmitting: boolean;\n  optInForm: {\n    team: { dataConsentNotice: { active: boolean; body: string } };\n    schema: {\n      fields: Record<FieldName, Field>;\n    } | null;\n  };\n  onSubmitForm: (formValues: OptInFormFieldValues) => void;\n}\n\nexport function DefaultQuestionsForm({\n  isSubmitting,\n  optInForm,\n  onSubmitForm,\n}: DefaultQuestionsFormProps) {\n  const { cloudflareTurnstileCaptchaEnabled } = useEnvVars();\n\n  const {\n    register,\n    control,\n    handleSubmit,\n    formState: { errors },\n  } = useForm<OptInFormFieldValues>({\n    mode: 'onChange',\n    shouldUnregister: false,\n  });\n\n  const isFieldRequired = (fieldName: FieldName) =>\n    optInForm.schema?.fields[fieldName]?.data?.required;\n  const isFieldVisible = (fieldName: FieldName) =>\n    !optInForm.schema?.fields[fieldName]?.ui?.hidden;\n\n  const validatePhone = (value: {\n    phoneCountryCode: string;\n    phoneNumber: string;\n  }) => {\n    if (!isFieldRequired('phoneNumber')) {\n      return true;\n    }\n\n    const { phoneCountryCode, phoneNumber } = value;\n\n    if (!phoneCountryCode?.length) {\n      return !phoneNumber.length\n        ? 'Country code and phone number cannot be left blank.'\n        : 'Country code cannot be left blank.';\n    }\n\n    if (!phoneNumber.length) {\n      return 'Phone number cannot be left blank.';\n    }\n\n    return true;\n  };\n\n  return (\n    <>\n      <Card className={surveyFormCardStyles.surveyFormCard} size=\"sm\">\n        <FormGroup\n          errors={errors}\n          inputKey=\"email\"\n          label=\"Email\"\n          labelHtmlFor=\"email\"\n          required\n        >\n          <Input id=\"email\" {...register('email', { required: true })} />\n        </FormGroup>\n\n        {isFieldVisible('firstName') && (\n          <FormGroup\n            errors={errors}\n            inputKey=\"firstName\"\n            label=\"First name\"\n            labelHtmlFor=\"firstName\"\n            required={isFieldRequired('firstName')}\n          >\n            <Input\n              id=\"firstName\"\n              {...register('firstName', {\n                required: isFieldRequired('firstName'),\n              })}\n            />\n          </FormGroup>\n        )}\n\n        {isFieldVisible('lastName') && (\n          <FormGroup\n            errors={errors}\n            inputKey=\"lastName\"\n            label=\"Last name\"\n            labelHtmlFor=\"lastName\"\n            required={isFieldRequired('lastName')}\n          >\n            <Input\n              id=\"lastName\"\n              {...register('lastName', {\n                required: isFieldRequired('lastName'),\n              })}\n            />\n          </FormGroup>\n        )}\n\n        {isFieldVisible('phoneNumber') && (\n          <>\n            <Controller\n              control={control}\n              defaultValue={{ phoneCountryCode: '', phoneNumber: '' }}\n              name=\"phone\"\n              render={({ field: { value, onChange } }) => (\n                <FormGroup errors={errors} inputKey=\"phone\">\n                  <PhoneNumber\n                    countryCode={{ defaultValue: '', name: 'phoneCountryCode' }}\n                    phoneNumber={{ defaultValue: '', name: 'phoneNumber' }}\n                    required={isFieldRequired('phoneNumber')}\n                    onCountryCodeChange={({\n                      value: phoneCountryCode,\n                    }: {\n                      value: string;\n                    }) => onChange({ ...value, phoneCountryCode })}\n                    onPhoneNumberChange={({\n                      value: phoneNumber,\n                    }: {\n                      value: string;\n                    }) => onChange({ ...value, phoneNumber })}\n                  />\n                </FormGroup>\n              )}\n              rules={{ validate: validatePhone }}\n            />\n\n            <FormControlLabel\n              {...register('acceptTexts')}\n              Control={CheckboxButton}\n              id=\"accept-texts-checkbox\"\n              text={Copy.TEXT_MESSAGE_RELEASE_OPTIONAL}\n            />\n          </>\n        )}\n\n        {isFieldVisible('timezoneName') && (\n          <Controller\n            control={control}\n            name=\"timezone\"\n            render={({ field: { value, onChange } }) => (\n              <FormGroup\n                errors={errors}\n                inputKey=\"timezone\"\n                label=\"Timezone\"\n                labelHtmlFor=\"timezone-select\"\n                required={isFieldRequired('timezoneName')}\n              >\n                <TimezoneSelect\n                  className={undefined}\n                  defaultValue={undefined}\n                  id=\"timezone-select\"\n                  menuPlacement={undefined}\n                  modal={undefined}\n                  name=\"timezone select!\"\n                  useSystemFallback={undefined}\n                  value={value}\n                  onSelectChange={(option: { value: string }) =>\n                    onChange(option.value)\n                  }\n                />\n              </FormGroup>\n            )}\n            rules={{ required: isFieldRequired('timezoneName') }}\n          />\n        )}\n\n        {optInForm.team.dataConsentNotice?.active && (\n          <FormGroup>\n            <FormControlLabel\n              {...register('acceptDataConsentNotice')}\n              className={styles.consentNotice}\n              Control={CheckboxButton}\n              id=\"accept-data-consent-notice-checkbox\"\n              text={\n                <div\n                  className={styles.consentNoticeBody}\n                  dangerouslySetInnerHTML={{\n                    __html: optInForm.team.dataConsentNotice.body,\n                  }}\n                />\n              }\n            />\n          </FormGroup>\n        )}\n\n        {cloudflareTurnstileCaptchaEnabled && (\n          <Controller\n            control={control}\n            name=\"cloudflareTurnstile\"\n            render={({ field: { onChange } }) => (\n              <FormGroup errors={errors} inputKey=\"cloudflareTurnstile\">\n                <CloudflareTurnstile onSuccess={onChange} />\n              </FormGroup>\n            )}\n            rules={{ required: 'Verification cannot be left blank.' }}\n          />\n        )}\n      </Card>\n\n      <div>\n        <Button\n          className={styles.submitButton}\n          isLoading={isSubmitting}\n          loadingText=\"Submitting\"\n          onClick={handleSubmit(onSubmitForm)}\n        >\n          Continue\n        </Button>\n      </div>\n    </>\n  );\n}\n","import { useEffect } from 'react';\n\nexport const useAlertFocus = () => {\n  useEffect(() => {\n    // For a11y on Safari browsers:\n    // if any Toast errors are present, then use Javascript to set focus\n    // to ensure the screen reader reads it first\n    const alertElements = document.getElementsByClassName('Alert__message');\n    if (alertElements.length) {\n      alertElements[0].focus();\n    }\n  }, []);\n};\n","import { useTracking } from 'react-tracking';\nimport { reactTrackingEvent } from 'lib/analytics';\nimport type { TrackingHook } from 'react-tracking';\n\n// Force the Track component to be synchronous\nexport type SyncTrackingHook = Omit<TrackingHook, 'Track'> & {\n  Track: React.ComponentType<{ children?: React.ReactNode }>;\n};\n\nexport const useTrackingWithDefaultDispatch = (\n  trackingData = {},\n): SyncTrackingHook =>\n  useTracking(trackingData, {\n    dispatch: reactTrackingEvent,\n  }) as SyncTrackingHook;\n","import * as BuilderConstants from 'components/survey_builder/constants';\n\nexport const PICK_ONE_INPUT_GROUP_KEY =\n  `${BuilderConstants.QUESTION_PICK_ONE}${BuilderConstants.RESPONSE_CLASS_ANSWER}` as const;\nexport const PICK_MANY_INPUT_GROUP_KEY =\n  `${BuilderConstants.QUESTION_PICK_ANY}${BuilderConstants.RESPONSE_CLASS_ANSWER}` as const;\nexport const SHORT_ANSWER_INPUT_GROUP_KEY =\n  `${BuilderConstants.QUESTION_PICK_NONE}${BuilderConstants.RESPONSE_CLASS_STRING}` as const;\nexport const LONG_ANSWER_INPUT_GROUP_KEY =\n  `${BuilderConstants.QUESTION_PICK_NONE}${BuilderConstants.RESPONSE_CLASS_TEXT}` as const;\nexport const BOOLEAN_INPUT_GROUP_KEY =\n  `${BuilderConstants.QUESTION_BOOLEAN}${BuilderConstants.RESPONSE_CLASS_BOOLEAN}` as const;\nexport const DATE_INPUT_GROUP_KEY =\n  `${BuilderConstants.QUESTION_PICK_NONE}${BuilderConstants.RESPONSE_CLASS_DATE}` as const;\nexport const FLOAT_INPUT_GROUP_KEY =\n  `${BuilderConstants.QUESTION_PICK_NONE}${BuilderConstants.RESPONSE_CLASS_FLOAT}` as const;\n","export const BOOLEAN_TRUE_VALUE = 'Yes';\n\nexport const REQUIRED_ERROR_MESSAGE = 'This question cannot be left blank.';\nexport const REQUIRED_OTHER_VALUE_ERROR_MESSAGE =\n  'Write-in cannot be left blank.';\n\nexport * from 'components/survey_builder/constants';\nexport * from 'participant/project_application/components/survey/constants';\n","import * as routes from 'lib/routes';\n\nimport { apiSlice } from 'api/base_slice';\n\nimport { POPULATION_INVITE_FILTERS_TAG } from 'api/tag_types';\nimport { deserializeJSONApiResponse, headersAndCredentials } from 'api/utils';\n\nexport const populationInviteFiltersApi = apiSlice.injectEndpoints({\n  endpoints: (builder) => ({\n    createInviteFilter: builder.mutation({\n      query: ({ populationId, attributes }) => ({\n        url: routes.api_participant_population_invite_filters_path({\n          participant_population_id: populationId,\n        }),\n        method: 'POST',\n        body: {\n          data: { attributes },\n        },\n        ...headersAndCredentials(),\n      }),\n      invalidatesTags: [POPULATION_INVITE_FILTERS_TAG],\n    }),\n    getInviteFilter: builder.query({\n      query: ({ populationId, id }) =>\n        routes.api_participant_population_invite_filter_path(id, {\n          participant_population_id: populationId,\n        }),\n      providesTags: (_result, _error, { id }) => [\n        { type: POPULATION_INVITE_FILTERS_TAG, id },\n      ],\n      transformResponse: deserializeJSONApiResponse,\n    }),\n    updateInviteFilter: builder.mutation({\n      query: ({ populationId, id, attributes }) => ({\n        url: routes.api_participant_population_invite_filter_path(id, {\n          participant_population_id: populationId,\n        }),\n        method: 'PATCH',\n        body: {\n          data: { attributes },\n        },\n        ...headersAndCredentials(),\n      }),\n      invalidatesTags: [POPULATION_INVITE_FILTERS_TAG],\n    }),\n  }),\n  overrideExisting: 'throw',\n});\n\nexport const {\n  useGetInviteFilterQuery,\n  useCreateInviteFilterMutation,\n  useUpdateInviteFilterMutation,\n} = populationInviteFiltersApi;\n"],"names":["useZodSchema","unknownProps","schema","logError","useErrorLogger","useMemo","includes","process","parse","error","firstNameAccessor","lastNameAccessor","phoneNumberAccessor","timezoneAccessor","sourceTypeAccessor","participantLabelsAccessor","createdAtAccessor","daysSinceInvitedAccessor","lastBulkEmailAccessor","daysSinceAppliedAccessor","daysSinceParticipatedAccessor","totalIncentivesEarnedAccessor","unsubscribedAccessor","populationAttributeAccessorPrefix","buildColumns","canViewPii","columnOrder","hiddenColumns","maxIncentiveYear","minIncentiveYear","populationAttributes","hiddenColumnsLookUp","buildHiddenColumnsLookUp","populationAttributesLookUp","buildPopulationAttributeColumnsLookUp","baseColumnLookUp","buildHubDefaultColumnsLookUp","columnMap","Map","order","length","completeColumnOrder","buildHubDefaultColumnOrder","columns","forEach","columnAccessor","column","get","push","yearlyIncentiveAccessors","populationAttributeAccessors","lookup","hiddenColumn","set","accessor","Header","hidden","id","meta","nonEditableMetaData","buildYearlyIncentiveColumnsLookUp","lookUp","populationAttribute","editable","name","yearlyIncentiveYears","year","missingPopulationAttributes","canDelete","canUpdate","map","rearrangeColumnOrder","activeAccessor","overAccessor","reorderColumns","activeColumnIndex","indexOf","activeColumn","splice","spliceIndex","updateHiddenColumns","index","years","currentYear","MEDIA_BREAKPOINT_LG","MEDIA_BREAKPOINT_MD","MEDIA_BREAKPOINT_SM","MEDIA_BREAKPOINT_XS","mediaQuery","mediaQueryList","isServer","window","matchMedia","_useState2","useState","matches","mediaQueryMatches","setMediaQueryMatches","handleMediaQueryChange","useCallback","useEffect","addEventListener","addListener","removeEventListener","removeListener","_f","_10","_11","CONDITION_OPERATOR_EQL","CONDITION_OPERATOR_NOT_EQL","JOIN_METHOD_OR","JOIN_METHOD_AND","OPT_IN_FORM_TYPE","SCREENER_FORM_TYPE","questionPropType","propTypes","text","isRequired","uuid","answerPropType","skipLogicConditionPropType","answerId","operator","questionId","skipLogicPropType","joinMethod","skipLogicConditions","targetSectionId","surveySectionPropType","title","useEnvVars","useClientHasRendered","ENV","billingPagePaidSubContactUrl","BILLING_PAGE_PAID_SUB_CONTACT_URL","billingPageFreeTrialContactUrl","BILLING_PAGE_FREE_TRIAL_CONTACT_URL","chiliPiperRouterKey","CHILIPIPER_TEAMS_PLANS_INBOUND_ROUTER_KEY","isWorkspaceEmailStatsEnabled","WORKSPACE_EMAIL_STATS_ENABLED","isSubscriptionSelfServeEnabled","SUBSCRIPTION_SELF_SERVE_ENABLED","isPageThemesEnabled","PAGE_THEMES_ENABLED","cloudflareTurnstileCaptchaSiteKey","CLOUDFLARE_TURNSTILE_CAPTCHA_SITE_KEY","cloudflareTurnstileCaptchaEnabled","CLOUDFLARE_TURNSTILE_CAPTCHA_ENABLED","participantQnrSignupBuffer","PARTICIPANT_QNR_SIGNUP_BUFFER","siteBaseUrl","SITE_BASE_URL","paragonConfig","PARAGON_CONFIG","_13","TEST_ID","TITLE_HEIGHT","GREETING_HEIGHT","SUB_GREETING_HEIGHT","TITLE_WIDTH","GREETING_WIDTH","SUB_GREETING_WIDTH","ProjectApplicationLoadingSkeleton","hideHeader","React","Flex","alignItems","container","flexDirection","className","styles","headerStyles","LoadingSkeleton","height","width","CardStack","size","Card","SurveySectionLoadingSkeleton","_12","Page","children","isCentered","isFullHeight","isPadded","sidebarRef","useRef","isNavigationItemTriggeringPageLoad","setIsNavigationItemTriggeringPageLoad","classNames","LoadingOverlay","visible","SidebarContextProvider","Sidebar","ref","onHandlePageLoading","handlePageLoading","Main","Footer","useSidebarMobileBreakpoint","useMediaQuery","FILTER_KEYS","email","created_at","first_name","labels","last_applied_at","last_invited_at","last_participated_at","last_name","opt_in_form","phone_number","project_participation","source","yearly_payment","unsubscribed","getParamKey","generateUUID","getDefaultParams","isNotSetOperand","key","orIsNotSet","defaultFilterRuleOperand","operands","type","defaultLabelOperand","PARTICIPANT_LABEL_OPERANDS","defaultBooleanOperand","FIELD_FILTER_OPERANDS","defaultActivityStatDateOperand","ACTIVITY_STAT_FILTER_OPERANDS","defaultDecimalOperand","INCENTIVE_OPERANDS","defaultIntegerOperand","defaultStringOperand","standardFilters","availableOperands","defaultFilterRuleShape","activityStat","field","operand","params","participantPopulationAttributeId","PROJECT_OPERANDS","addRowLabel","OPT_IN_FORM_OPERANDS","string","integer","boolean","date","isSetOperand","decimal","buildFilterList","attributes","attribute","defaultAttributeFilterRuleOperand","ATTRIBUTE_FILTER_OPERANDS","POPULATION_ATTRIBUTE_IS_NOT_SET_OPERANDS","POPULATION_ATTRIBUTE_IS_SET_OPERANDS","createPopulationAttributeFilter","_objectSpread","optInFormsApi","apiSlice","injectEndpoints","endpoints","builder","getOptInForm","query","optInFormId","include","routes","transformResponse","deserializeJSONApiResponse","providesTags","_result","_error","OPT_IN_FORMS_TAG","updateOptInForm","mutation","url","method","body","data","headersAndCredentials","invalidatesTags","overrideExisting","useGetOptInFormQuery","useUpdateOptInFormMutation","ConfirmationModal","buttonText","confirmEvent","message","openEvent","onConfirm","onRequestClose","isOpen","TrackedModal","event","ModalHeader","titleId","ModalBody","ModalFooter","Button","variant","onClick","TrackedButton","defaultProps","ConditionSelect","isReadonly","position","onUpdate","handleChange","target","value","disabled","onChange","Constants","Actions","skipLogicCondition","skipLogicId","skipLogicFunctions","useContext","SurveyContext","handleRemove","removeCondition","FontAwesomeIcon","icon","faMinus","handleAdd","addCondition","faPlus","AnswerSelect","answerIds","survey","answers","answer","errors","OperatorSelect","questionType","Controls","skipLogicOptions","handleQuestionChanged","conditionQuestion","questions","controls","pick","SingleSelect","question","inputId","modal","options","label","ConditionRow","skipLogic","_useContext$skipLogic","updateSkipLogic","update","updateSkipLogicCondition","updateCondition","handleSkipLogicUpdate","changes","handleConditionUpdate","Errors","hasConditionErrors","conditionIds","find","Object","keys","hasErrors","SkipLogic","sectionId","onRemove","handleUpdate","targetableSections","sectionIds","slice","section","sections","conditionId","getSkipLogicOptions","groupedOptions","questionIds","reduce","acc","questionGroupQuestions","questionGroupQuestionId","questionGroupQuestion","SectionSkipLogic","addSkipLogic","add","removeSkipLogic","remove","skipLogicIds","skipLogics","leadingIcon","faPlusCircle","SkipLogicModal","onRequestCancel","skipLogicsIncomplete","undefined","every","condition","Modal","MODAL_SIZES","LARGE","surveyPropType","SurveyUpgradeModal","onUpgradeClick","trackingEvents","SURVEY_UPGRADE_MODAL_SHOWN","PREMIUM_SURVEY_FEE","LegacyBundleMonthlyDisplayPrices","SubscriptionNames","CONSUMER","SURVEY_UPGRADE_ACCEPTED","isRemovableQuestion","isVisible","questionUUID","sectionUUID","onDuplicate","account","AuthUserContext","TrackedIconButton","action","ariaLabel","BUILD_PROJECT_SCREENER_QUESTION_DUPLICATED","stopPropagation","SURVEY_REMOVE_QUESTION","eventData","account_id","QualifyLogicSelect","isPickOne","onAnswerChange","handleQualifyLogicChange","selected","qualifyLogic","recruitApiEnabled","useFeatureFlag","featureName","Features","RECRUIT_API","isEnabled","option","inputKey","Editing","isEditing","isRemovableAnswer","onAdd","isBoolean","useFormContext","formState","isScreenerForm","SurveyBuilderContext","formType","answerName","answerInput","useController","defaultValue","rules","required","_useSortable","useSortable","listeners","setNodeRef","transform","transition","style","CSS","Translate","toString","handleTextChange","eventValue","split","NEW_LINE_REGEX","optionNumber","display","assign","faGripVertical","IconButton","Pick","qualifier","PickNone","responseClass","resize","OtherAnswer","Text","Answer","_useContext$answerFun","answerFunctions","addAnswer","addAnswers","addBatch","removeAnswer","updateAnswer","filter","onAddBatch","Answers","_useContext","moveAnswer","move","sensors","useSensors","useSensor","MouseSensor","TouchSensor","KeyboardSensor","useDroppable","handleDragEnd","active","over","surveyAnswers","isOtherAnswer","answerUUIDs","DndContext","collisionDetection","closestCenter","modifiers","restrictToVerticalAxis","onDragEnd","SortableContext","items","strategy","verticalListSortingStrategy","isKey","isMandatory","isNew","_14","_16","Accept","questionGroupPick","currentOption","nextKey","justifyContent","RemoveButton","trackingEvent","trackEvent","useTracking","useAutosizeGridTextArea","textAreaRef","questionGroupId","questionGroup","useAutosizeTextArea","dependencies","resizeTextArea","scrollHeight","resizeListener","Resize","_18","_19","_1a","_1b","_1c","_1d","_1e","_1f","_20","_21","_22","GridAnswer","isRemovable","onUpdateColumn","setTextAreaRef","answerText","placeholder","rows","SURVEY_REMOVE_GRID_COLUMN","textAlign","GridQuestion","questionName","questionText","questionInput","SURVEY_REMOVE_GRID_ROW","Grid","isMobile","updateQuestion","questionFunctions","_useContext$questionG","questionGroupFunctions","addColumn","addRow","removeColumn","removeRow","updateColumn","firstQuestion","firstAnswers","answerCount","questionCount","handleAnswerChange","answerUUID","handleQuestionChange","handleAddColumn","handleAddRow","handleRemoveColumn","answerIndex","handleRemoveRow","handleUpdateColumn","Alert","removeBorderLeft","MessageTypes","INFO","boxStyle","MIN_COLUMN_COUNT","MIN_ROW_COUNT","MAX_ROW_COUNT","SURVEY_ADD_GRID_ROW","MAX_COLUMN_COUNT","SURVEY_ADD_GRID_COLUMN","fixedWidth","faBullseyePointer","Hint","FormGroup","labelHelperText","labelHtmlFor","Input","helpText","handleHintChange","iconMap","faFont","pick_one","pick_any","faDotCircle","faCalendarAlt","faHashtag","SurveyFormQuestionIconLabel","SurveyNewAttributeModal","onClose","onSave","attributeTypes","QUESTION_TYPE_BOOLEAN","QUESTION_TYPE_DATE","QUESTION_TYPE_FLOAT","defaultAttributeType","dataTypeOptions","entries","updatedAttribute","shouldCloseOnOverlayClick","MEDIUM","handleInputChange","MapAttribute","setToastMessage","_slicedToArray","newAttributeModalVisible","setNewAttributeModalVisible","_useState4","newAttribute","setNewAttribute","participantPopulationId","useParams","createParticipantPopulationAttribute","useCreatePopulationAttributeMutation","mappedAttributeIds","values","current","concat","attributeOptions","isDisabled","selectedAttribute","attributeOption","newAttr","handleAttributeModalClose","async","_await$createParticip","createdAttribute","ERROR","ErrorRenderer","compileRtkQueryErrorMessage","SURVEY_PARTICIPANT_POPULATION_ATTRIBUTE_CREATED","participant_population_attribute_id","labelTooltip","CreatableSelect","allowCreateWhileLoading","createOptionPosition","formatOptionLabel","inputValue","isSearchable","isValidNewOption","indicatorSeparator","provided","selectedOption","SURVEY_PARTICIPANT_POPULATION_ATTRIBUTE_SELECTED","onCreateOption","KeyQuestion","pageTitle","keyQuestionToggleInputId","tooltipText","ToggleInput","isChecked","labelLeft","labelText","onToggle","currentTarget","checked","SURVEY_KEY_QUESTION_SLIDER_CLICKED","is_enabled","Tooltip","OtherOptionCheckbox","otherAnswerUuid","questionUuid","_useContext2$answerFu","addOther","SURVEY_OTHER_OPTION_CHECKBOX_CLICKED","Required","SURVEY_REQUIRED_CHECKBOX_CLICKED","QuestionControls","otherAnswer","isPickOneOrAny","isQuestionGroup","serverErrors","errorMessage","whiteSpace","PropTypes","questionTypes","Type","filteredQuestionTypes","Question","questionSkipLogics","screenerSections","sectionAnswers","sectionQuestions","_useFormContext","getValues","_useContext$questionF","addQuestion","determineQuestionType","determineType","duplicateQuestion","duplicate","removeQuestion","updateQuestionType","updateType","isOptInForm","_useGetPopulationAttr","useGetPopulationAttributesQuery","skip","participantPopulationAttributes","isLoading","setEditing","hasFrontendErrors","some","isIncompletePage","formData","pageStatuses","controlsVisible","filteredAttributes","handleQuestionSelected","handleChangeType","handleEnterPress","keyCode","Keycodes","hasSkipLogic","questionNumber","count","Draggable","draggableId","isDragDisabled","snapshot","editing","dragging","isDragging","innerRef","draggableProps","role","tabIndex","onKeyDown","dragHandleProps","e","QuestionSkipLogicSummary","AddNewPageButton","onAddSection","SectionControls","_useContext2","setSurveyDuplicateBeforeEdit","handleAddQuestion","handleEditSkipLogic","edit","skipLogicCTA","SURVEY_ADD_NEW_QUESTION","SURVEY_EDIT_SKIP_LOGIC","SURVEY_ADD_SKIP_LOGIC","faCodeBranch","SectionDropdown","removeable","Dropdown","DropdownToggle","removeCaret","faEllipsisV","DropdownMenu","TrackedDropdownItem","SURVEY_DUPLICATE_PAGE_CLICKED","DropdownItem","Section","allowEmpty","sectionFunctions","setModalProps","sectionQuestion","hasSkipLogicErrors","SURVEY_DELETE_PAGE_MODAL_SHOWN","SURVEY_DELETE_PAGE_CONFIRM_CLICKED","handleAddSection","handleDuplicateSection","sectionQuestionCount","helperText","Droppable","droppableId","noPadding","CardSizes","Accordion","defaultActiveKey","flush","AccordionItem","borderless","AccordionToggle","chevronLateral","chevronLeft","collapsedText","eventKey","AccordionCollapse","getSkipLogicsInvolvingQuestion","skipLogicsInvolvingThisQuestion","hasConditionsInvolvingThisQuestion","conditions","Sections","hasSections","handleMove","result","DragDropContext","SurveyBuilder","Component","constructor","_args","state","checkPremium","this","props","upgradeModalIsOpen","modalProps","surveyDuplicateBeforeEdit","getMemoizedSurveyContextValue","memoizeOne","contextProps","handleAddAnswers","tracking","SURVEY_ANSWER_BATCH_ADDED","updates","AnswerUtilities","updateSurvey","handleAddAnswer","prevAnswerUUID","handleAddOtherAnswer","handleMoveAnswer","activeAnswerId","overAnswerId","SURVEY_ANSWER_MOVED","prevQuestionUUID","QuestionUtilities","prevSectionUUID","updatedSections","SectionUtilities","handleRemoveSection","handleUnsetModalProps","updateFn","sectionIdentifier","handleAddSectionClicked","requestPremiumAction","handleDuplicateSectionClicked","handleAddSkipLogic","newSkipLogic","buildSkipLogic","insertIntoArray","newSkipLogicCondition","buildSkipLogicCondition","handleAddSkipLogicCondition","skipLogicUUID","prevConditionUUID","setState","handleCloseSkipLogic","skipLogicSectionId","handleDuplicateQuestion","handleMoveQuestion","destination","moveWithinSection","numSkipConditions","handleSetModalProps","SURVEY_MOVE_QUESTION_CONFIRM_CLICKED","SURVEY_MOVE_QUESTION_MODAL_SHOWN","handleMoveQuestionFromSection","trackQuestionMoved","targetSection","currentSection","SURVEY_QUESTION_MOVED_FROM_PAGE","screener_section_target","screener_section_current","currentPosition","skipLogicUpdates","SkipLogicConditionUtilities","removeQuestionConditions","handleRemoveSkipLogic","SkipLogicUtilities","handleRemoveSkipLogicCondition","skipLogicConditionUUID","removeConditions","handleEditSkipLogicClicked","handleOpenSkipLogic","handleCancelSkipLogicEdit","handleRemoveAnswer","handleRemoveQuestion","handleUpdateAnswer","handleUpdateQuestion","handleUpdateQuestionType","handleAddQuestionColumn","questionGroupUUID","QuestionGroupUtilities","handleAddQuestionRow","handleRemoveQuestionColumn","handleRemoveQuestionRow","handleUpdateQuestionColumn","handleUpdateSkipLogic","handleUpdateSkipLogicCondition","handleUpgradeModalUpgradeClick","_this$state$requested","requestedPremiumAction","callback","args","apply","handleUpgradeModalRequestClose","SURVEY_UPGRADE_DISMISSED","onUpdateSurvey","render","contextValue","Provider","trackingPropsShape","track","registerComponent","_5","_6","_8","_a","PreviewBanner","HubSurveyPreviewHeader","cardSize","logoUrl","projectDetails","teamName","alt","src","Heading","level","surveyCompletionTime","StudyDetailsAccordion","description","incentive","noIncentive","requiresDocumentSignature","sessionLength","RecruitSurveyPreviewHeader","SurveyPreviewFormHeader","publicSurvey","SurveyPreviewEnd","onRestartPreview","faCircleCheck","weight","faSync","SurveyPreviewForm","isSubmitting","previewCompleted","surveySection","onSubmitSection","optInForm","titleWithDefaultName","ProjectDefaultName","pageTitlePrefix","determineCardSize","submittedDefaultQuestions","setSubmittedDefaultQuestions","showEndPage","surveyId","TitledPage","isPreview","logoOnly","optInFormDescription","optInFormTitle","team","handleRestartPreview","DefaultQuestionsForm","onSubmitForm","SurveySectionForm","onSubmit","defaultOnError","defaultOnSuccess","FormatResponse","jsonApi","buildMakeRequest","setLoading","onSuccess","onError","start","performance","now","Http","call","end","pageLocation","location","pathname","replace","request_url","timeSpent","useHttp","loading","dispatch","reactTrackingEvent","delete","patch","post","put","_1","hasRendered","setHasRendered","_2","_3","_4","useSidebarContext","SidebarContext","response","sort","a","b","localeCompare","raw","populationLabelsApi","getPopulationLabels","participant_population_id","POPULATION_LABELS_TAG","bulkPopulationLabels","operations","useGetPopulationLabelsQuery","useBulkPopulationLabelsMutation","projectsApi","getProject","projectId","merge","invalidLaunchMessages","invalidLaunchProps","firstProjectId","canEdit","PROJECT_TAG","createProject","updateProject","skipProjectInvalidation","PROJECT_COST_BREAKDOWN_TAG","PROJECT_EXPECTED_COST_DETAILS_TAG","PROJECT_PAYMENT_METHODS_TAG","PROJECT_DEMOGRAPHIC_RULES_TAG","PARTICIPANT_MANAGEMENT_SHORTLISTED_PARTICIPANTS_TAG","PROJECT_AVAILABILITY_SETTINGS_TAG","deleteProject","useGetProjectQuery","useCreateProjectMutation","useUpdateProjectMutation","useDeleteProjectMutation","ACTIVITY_STEP","DETAILS_STEP","EXPERIENCE_STEP","RECRUITMENT_STEP","SCHEDULING_DRAWER","PREPARATION_INSTRUCTIONS_DRAWER","RECRUITMENT_CRITERIA_DRAWER","SCREENER_SURVEY_DRAWER","INTERNAL_TITLE_DESCRIPTION_MODAL","URL_SECURED_REGEX","TRACKING_ID","VALID_TRACKING_ID_REGEX","COMPENSATION_TYPE_OTHER","CASH_COMPENSATION_OPTION","VISA_GIFT_CARD_COMPENSATION_OPTION","ALL_THEY_PAY_COMPENSATION_OPTIONS","THEY_PAY_IN_PERSON_DEFAULT_COMPENSATION","THEY_PAY_DEFAULT_COMPENSATION","THEY_PAY_COMPENSATION_OPTION_VALUES","THEY_PAY_COMPENSATION_IN_PERSON_OPTION_VALUES","TOAST_PROJECT_UPDATE_SUCCESS","MATCH_HANDLERS","MATCH_TYPES","ANY","permissions","bind","ALL","config","_config$matchType2","matchType","Error","context","authorization","checkAuthorization","_config$matchType","to","notTo","hasAllowlist","hasBlocklist","authorize","permissionsArray","checkPermissions","permission","authorizationList","auth","EmptySurveyNotice","SMALL","BooleanAnswerInput","bordered","formValue","hasError","onBlur","FormControlLabel","Control","RadioButton","surveyAnswerPropType","surveyQuestionPropType","BooleanAnswerInputGroup","control","Controller","RadioButtonGroup","fullWidth","validate","DateAnswerInput","DateTimePicker","dateViewMode","showPickerEnforcedInput","onChangeDate","startDate","trim","FloatAnswerInput","TextAnswerInput","isLongTextAnswer","InputComponent","inputGroupKey","onPaste","handlePaste","pastedContent","clipboardData","getData","wasValidPaste","hasValidURL","PARTICIPANT_SURVEY_RESPONSE_ANSWER_TEXT_PASTED","question_id","responseDetailAttributes","wasPasted","PickNoneInput","PickOneAnswerInput","autoComplete","responseOther","otherAnswerId","PickOneAnswerInputGroup","PickManyAnswerInput","onFormChange","CheckboxButton","PickManyAnswerInputGroup","CheckboxButtonGroup","orientation","BUTTON_GROUP_ORIENTATIONS","COLUMN","SurveyAnswerInput","_c","SurveyQuestionFormGroup","useFormState","elementType","displayErrorText","labelClassName","QuestionTitleCell","AnswerTitleCell","AnswerTitleRow","PickOneInputRow","PickManyInputRow","ROW","QuestionInputRow","InputRow","isPickOneQuestion","GridQuestionFormGroup","InputLegend","someQuestionWithError","gridHasErrors","SurveySectionFormCard","loadingSkeleton","groupQuestionsByQuestionGroup","formQuestion","QuestionEntityType","QUESTION_GROUP","loadingText","ProjectWorkspaceContext","createContext","ProjectWorkspaceProvider","connectedCalendarDetails","serverProject","authUserContext","useAuthUserContext","_useToast","useToast","dismissMessage","messages","setMessage","Track","project_id","user","user_id","Toast","autoDismiss","onToastClosed","useProjectWorkspaceContext","connectedCalendarDetailsPropType","QUESTION_TITLE_HEIGHT","QUESTION_TITLE_WIDTH","QUESTION_ANSWER_HEIGHT","QUESTION_ANSWER_WIDTH","TOTAL_QUESTION_GROUPS","Array","displayOrder","qualifyLogicDisplay","surveySkipLogicConditionPropType","surveySkipLogicPropType","participant_id","matchPopulationAttributesFetched","isAnyOf","populationAttributesApi","getPopulationAttributes","matchFulfilled","matchAccountHubConfigurationsFetched","accountHubConfigurationsApi","getAccountHubConfigurations","columnConfigurationSlice","createSlice","initialState","reducers","HIDE_ALL_COLUMNS","columnAccessors","payload","REORDER_COLUMNS","_action$payload","currentColumnOrder","reorderedColumns","SHOW_ALL_COLUMNS","TOGGLE_HIDDEN_COLUMN","updatedHiddenColumns","extraReducers","addMatcher","settings","_columnConfigurationS","actions","columnConfigurationSliceReducer","reducer","dataFormatter","Jsona","ACCEPT_V2_HEADER","accept","headers","getCSRFToken","credentials","deserialize","deserializeJSONApiResponseWithMeta","parseJSONApiResponse","parseJSONApiResponseWithMeta","sortAlphabeticalByKey","objectArray","sortAlphabeticalByName","sortAlphabeticalByTitle","OwnershipContext","fallbackErrorLogger","console","OwnershipProvider","owner","appsignal","sendError","useOwnershipContext","ownershipContext","HUB_INVITE_RULES_HEADER","PROJECT_INVITE_LIMIT_TITLE","PROJECT_INVITE_LIMIT_MIN","PROJECT_INVITE_LIMIT_MAX","PROJECT_INVITE_LIMIT_OUT_OF_RANGE_ERROR","PROJECT_INVITE_LIMIT_ENABLED_ERROR","PROJECT_INVITE_LIMIT_INPUT_LABEL","PROJECT_INVITE_LIMIT_ENABLED_LABEL","PROJECT_INVITE_LIMIT_TEXT","PROJECT_INVITE_LIMIT_LINK_TEXT","INVITE_FILTER_RULES_TITLE","PUBLISH_INVITE_RULES","PUBLISH_INVITE_RULES_SUCCESS_MESSAGE","PUBLISH_INVITE_RULES_ERROR_MESSAGE","UNSUBSCRIBED_PARTICIPANT_ALERT_MESSAGE","MULTI_TEAM_ORG_ALERT_MESSAGE","segmentsApi","createSegment","filterParams","teamId","populationPanelId","teamRoleId","filter_name","filterName","filters","team_role_id","population_panel_id","team_id","SEGMENTS_TAG","deleteSegment","populationId","segmentId","duplicateSegment","getSegments","updateSegment","useCreateSegmentMutation","useDeleteSegmentMutation","useDuplicateSegmentMutation","useGetSegmentsQuery","useUpdateSegmentMutation","participantPopulationOptInFormsApi","getParticipantPopulationOptInForms","createOptInForm","useGetParticipantPopulationOptInFormsQuery","useCreateOptInFormMutation","RailsContext","useRailsContext","RailsContextProvider","railsContext","_customContextSchema$","customContextSchema","env","request","uiState","withTrackedClick","Target","TrackedComponent","handleClick","targetProps","transferProps","displayName","getDisplayName","STEPS_REQUIRED_FIELDS_SCHEMA","projectPayload","_buildProjectState","buildProjectState","isInPersonInterview","isOnlineInterview","isUnmoderatedTask","studyTypeId","fields","compensationMethodId","_projectPayload","_buildProjectState2","isPhoneInterview","isHubProject","matchProjectFetched","calculateStepCompletionPercentage","invalidCount","totalRequiredCount","Math","round","initializePrimaryForm","stepId","initializeForm","syncedValues","isValid","initializeStep","forms","primary","metrics","researchDesign","currentStepId","steps","projectWorkspaceSlice","formPrimaryRegister","defaultValues","formPrimarySyncState","isDraft","step","requiredFields","requiredFieldsFn","_projectWorkspaceSlic","rootSelector","projectWorkspace","stepsSelector","createSelector","currentStepSelector","_state$researchDesign","currentStepFormSelector","currentStep","stepMetricsSelector","_","_steps$stepId$metrics","completionPercentage","UPDATE_PAGE_TITLE_EVENT","triggerUsePageTitleUpdate","newTitle","CustomEvent","detail","dispatchEvent","usePageTitle","initialTitle","updateTitle","document","uUIDPropType","accessCode","preferences","allowTentativeEvents","provider","tokenInvalid","tokenUpgradeRequested","adapter","createEntityAdapter","matchPopulationInviteFilterFetched","populationInviteFiltersApi","getInviteFilter","matchLabelsFetched","matchOptInFormsFetched","matchSegmentsFetched","matchTeamProjectsFetched","teamProjectsApi","getTeamProjects","appliedInitialState","filterFlags","filterKeys","filterRules","pendingInitialState","removedFilterKeys","applied","FILTER_RULE_APPLIED_SECTIONS","inviteFilter","segment","pending","FILTER_RULE_PENDING_SECTIONS","create","getInitialState","optInForms","projects","segments","activeId","segmentsSlice","ADD_FILTER_RULE_PARAM","filterKey","filterRuleSection","filterRule","newParams","newFilter","CLEAR_FILTERS","CREATE_FILTER_RULE","_action$payload2","REMOVE_FILTER_RULE","_action$payload3","REMOVE_FILTER_RULE_PARAM","_action$payload4","filterParamKey","paramIndex","findIndex","param","newFilterRule","RESET_PENDING_FILTERS","SELECT_FILTER_RULE","_action$payload5","activeFilterKey","activeFilterIndex","SELECT_FILTER_RULE_OPERAND","_action$payload6","SET_ACTIVE_SEGMENT_ID","SET_APPLIED_FILTER_RULES","_action$payload7","buildFromServerFilterRules","appliedSectionLookup","SET_FILTER_RULE","_action$payload8","pendingFilterRule","SET_INVITE_FILTER_ATTRIBUTES","SET_PENDING_FILTER_RULES","_action$payload9","SET_PENDING_FROM_APPLIED","SET_PENDING_FROM_SEGMENT","_action$payload10","entities","TOGGLE_IS_NOT_SET_CHECKED","_action$payload11","isNotSetChecked","isSetChecked","TOGGLE_IS_SET_CHECKED","_action$payload12","UPDATE_FILTER_RULE_PARAM","_action$payload13","filterRuleKey","paramKey","paramValue","newParam","setAll","_adapter$getSelectors","getSelectors","selectAllLabels","selectAll","selectLabels","selectEntities","selectOptInForms","_adapter$getSelectors3","selectAllPopulationAttributes","_adapter$getSelectors4","selectIds","selectAllSegments","selectSegments","selectSegmentsByAccessLevel","privateSegments","sharedSegments","teamPermissionRoleId","organizationPermissionRoleId","selectActiveSegmentId","selectPendingSection","sectionKey","pendingSections","selectPersistedFilterRule","editAppliedFilterRulesSection","inviteFilterAppliedFilterRulesSection","segmentFilterAppliedRulesSection","selectSegmentRoles","roles","selectFilters","selectInviteFilter","selectAppliedInviteFilter","selectAppliedInviteFilterRules","selectInviteFilterRules","selectProjectInviteMultiplierOutOfRange","projectInviteMultiplier","projectInviteMultiplierEnabled","Number","isInteger","selectFilterOptions","custom","selectAllFiltersCount","selectActiveSegment","activeSegmentId","segmentsByIds","selectSegmentName","hasApplicableFilterRule","segmentsById","_segmentsSlice$action","segmentsSliceReducer","href","UNSAFE_className","dangerouslySetInnerHTML","__html","sanitizeHtml","useGetFeatureFlagQuery","getFeatureFlag","actorType","customProperties","sendTracking","__","FEATURE_FLAG_TAG","Actors","Account","MixpanelUser","Organization","Participant","Team","User","TypeError","isFeatureCheckAlreadyPresent","FEATURES","_useGetFeatureFlagQue","_useGetFeatureFlagQue2","isEnabledViaApi","isGetFeatureFlagLoading","OPTIONAL_ROW_PARAM_KEYS","OR_IS_NOT_SET_PARAM_KEY","EMPTY_INCENTIVE_OPERANDS","INCENTIVE_IS_NOT_SET_OPERAND","INCENTIVE_IS_SET_OPERAND","INVITE_FILTER_HIDDEN_FIELDS","PII_HIDDEN_FIELDS","getIsInviteFilter","getKeylessParams","keylessParams","appliedFilterRules","appliedFilterRule","jsonRule","match","getIncentiveFilterKey","getProjectFilterKey","getOptInFormFilterKey","getParticipantLabelFilterKey","appliedFilterKeys","appliedFilterFlags","orIsNotSetParams","keyedAppliedFilterRules","appliedFilterKey","isIsNotSetOperand","defaultOperand","getHasValueSet","ceiling","days","endAt","endDate","floor","ids","startAt","valueToCheck","hasValueSet","buildFilterRulesToApply","pendingFilterRules","preparePendingFilterRule","preparedRule","emptyParams","getRowParams","parsedParams","parsedParam","DopeBrowserRouter","StaticRouter","BrowserRouter","CloudflareTurnstile","Turnstile","siteKey","code","shouldIgnoreTurnstileError","SELECT_OPTIONS","CountriesByCode","phoneCode","phone_code","formattedCountryName","PhoneNumber","countryCode","hideLabels","phoneNumber","onCountryCodeChange","onPhoneNumberChange","countryCodeAria","phoneNumberAria","isPhoneNumberOrCountryCodeErrorPresent","phoneNumberErrorPresent","phoneCountryCodeErrorPresent","InputLabel","optional","isClearable","handlePhoneNumberChange","ACCESS_GRANTS_TAG","ACCOUNT_AVAILABILITY_SETTINGS_TAG","ACCOUNT_CHECKLIST_TAG","ACCOUNT_COLLABORATORS_TAG","ACCOUNT_HUB_CONFIGURATIONS","ACCOUNT_INTEGRATIONS_TAG","ACCOUNT_PROJECT_TASK_EVENTS_TAG","ACCOUNT_PROJECTS_TAG","ACCOUNT_SIGNUP_INFO_TAG","ACCOUNTS_TAG","ACCOUNT_TEAMS_TAG","BULK_EMAIL_TAG","COMMENTERS_TAG","COMMENTS_TAG","DATA_JOB_TAG","PROJECT_AVAILABILITY_RANGES_TAG","DEFAULT_SESSION_ROLES_TAG","DOPE_TABLE_COLUMNS_TAG","EMAIL_DOMAINS_TAG","EMAIL_PROFILE_TAG","EMAIL_THEME_TAG","OPEN_RECRUIT_PERIOD_TAG","PROJECT_COLLABORATOR_CALENDAR_EVENTS_TAG","ORGANIZATION_ACCOUNTS_TAG","ORGANIZATION_EMAIL_THEMES_TAG","ORGANIZATION_PARTICIPANTS_TAG","ORGANIZATION_POPULATION_PANELS_TAG","ORGANIZATION_PROJECT_CUSTOM_EMAIL_SETS_TAG","ORGANIZATION_TEAMS_TAG","PARTICIPANT_ATTRIBUTE_VALUES_TAG","PARTICIPANT_FRAUD_REPORT_TAG","PARTICIPANT_LABELS_TAG","PARTICIPANT_MANAGEMENT_INVITED_PARTICIPANTS_TAG","PARTICIPANT_PROJECT_PARTICIPANTS_TAG","PARTICIPANT_PROJECTS_TAG","PARTICIPANT_SURVEY_RESPONSE_SETS_TAG","PARTICIPANT_TASK_EVENT_STATS_TAG","PARTICIPANTS_TAG","PARTICIPATION_DETAILS_TAG","POPULATION_ATTRIBUTES_TAG","POPULATION_INVITE_FILTERS_TAG","POPULATION_PANEL_PARTICIPANTS_TAG","PREPAID_BALANCE_ACCOUNTS_TAG","PREPAID_BALANCE_INVITATIONS_TAG","PREPAID_BALANCE_TAG","PREPAID_BALANCE_TRANSACTIONS_TAG","PREPAID_BALANCES_TAG","PROJECT_ACCOUNT_ROLES_TAG","PROJECT_CLOSE_REQUEST_TAG","PROJECT_COLLABORATORS_TAG","PROJECT_CUSTOM_EMAILS_TAG","PROJECT_EMAIL_STATS_TAG","PROJECT_FILE_UPLOADS_TAG","PROJECT_INVOICES_TAG","PROJECT_LISTINGS_TAG","PROJECT_OCCUPATION_LINKS_TAG","PROJECT_OCCUPATION_TAGS_TAG","PROJECT_PARTICIPANT_ADMIN_DATA_TAG","PROJECT_PARTICIPANT_APPLICATION_STATUSES_TAG","PROJECT_PARTICIPANT_TAG_TAG","PROJECT_PARTICIPANTS_TAG","PROJECT_PROJECT_PARTICIPANTS_TAG","PROJECT_PROJECT_SKILLS_TAG","PROJECT_PROJECT_TASKS_TAG","PROJECT_PROPOSED_AVAILABILITY_RANGE_COLLECTIONS_TAG","PROJECT_PROPOSED_AVAILABILITY_RANGES_TAG","PROJECT_SCHEDULED_INVITE_SETTINGS_TAG","PROJECT_SESSIONS_SIGNUP_PAGE_TAG","PROJECT_SESSIONS_TAG","PROJECT_SETTINGS_TAG","PROJECT_SUMMARIES_TAG","PROJECT_SURVEY_KEYS_TAG","PROJECT_SURVEYS_TAG","PROJECT_TAG_TAG","PROJECT_VIDEO_UPLOADS_TAG","PROJECT_WORKSPACE_CALENDAR_TAG","PROJECT_WORKSPACE_SESSIONS_TAG","RECRUIT_PERIOD_TAG","REPORT_TAG","REPORTS_TAG","RESEARCHER_NOTE_TAG","RESPONSE_SETS_TAG","SCHEDULABLE_RANGES_TAG","SESSION_PROJECT_PARTICIPANTS_TAG","SESSION_ROLES_TAG","SESSION_SIGNUP_PAGES_SESSIONS_TAG","SIGNATURE_REQUESTS_TAG","STRIPE_CARDS_TAG","SURVEY_PREVIEW_SECTIONS_TAG","SURVEY_SECTIONS_TAG","TEAM_BILLING_INFOS_TAG","TEAM_HUB_USAGE_TAG","TEAM_INVITES_TAG","TEAM_MEMBERS_TAG","TEAM_PARTICIPANTS_TAG","TEAM_PROJECT_TEMPLATES_TAG","TEAM_PROJECTS_TAG","TEAM_SETTINGS_TAG","TEAM_SUBSCRIPTIONS_TAG","TEAM_TAG","WORKSPACE_PARTICIPANTS_TAG","PageProviders","useTrackingWithDefaultDispatch","AppsignalErrorBoundary","fallback","APPSIGNAL_FALLBACK","instance","store","withPageProviders","WrappedComponent","WithPageProviders","_ref","rest","_objectWithoutProperties","_excluded","getUnsortedTeamProjects","_ref2","_excluded2","useGetTeamProjectsQuery","useGetUnsortedTeamProjectsQuery","computeIsAutopayEnabled","projectSettings","disableAutopay","projectSchema","z","object","additionalRecruitmentRequirementsHtml","nullable","advancedScreening","billingAccount","commenterId","initials","firstName","lastName","fullName","lookbackEnabledAt","nameLastFirst","messagerId","number","roleId","teams","array","compensationAmount","compensationType","confirmationNotesHtml","consumerFee","createdAt","currentStatus","defaultSessionLocation","deviceRequirements","summary","documentDescription","signatureRequestDataKey","documentName","draftParticipantsCount","emailProfileId","emails","allowEdit","class","enum","PARTICIPANT_EMAIL_CLASSES","purpose","slug","emailThemeId","hasDocumentSigning","internalDescription","interviewType","interviewTypeId","isActive","isEligibleForSessionObservers","isPrivate","isSystemHidden","isZeroCost","latestStatusTypeId","address","autocomplete","city","countries","googleLocationInfo","any","googleMapsUrl","latitude","locationExtraInfo","longitude","parkingAvailable","parkingInfo","regions","canView","numParticipants","organizationId","originalNumParticipants","relationshipNames","participantReferrals","professionalFee","projectCustomEmailSetId","projectStatus","publicDescription","publicTitle","remainingInviteCount","requireApproval","researcherWillCall","screenerVideo","prompt","confirmOnJoin","participantReschedulingEnabled","rptInvitesOnly","sourceType","studyLength","hours","minutes","studyType","studyTypeName","surveyDraft","surveyJson","targetProfessionals","task","externalId","repositoryUrl","providerDisplayName","taskSession","moderatorId","numScheduled","numSlots","sessionLocation","startTime","datetimeDisplay","hasPassed","hostUrl","hasZoomSessionLocation","hasMeetSessionLocation","timeDisplay","teamDomain","timezone","timezoneAbbreviation","useEmailTheme","wePay","passthrough","project","_project$meta","_project$meta2","isAutopayEnabled","isNoIncentiveTypeProject","CompensationMethods","NONE","isWePay","WE_PAY","senderId","hasIntegration","IntegrationProviders","TRACKED_PROVIDERS","isConfirmOnJoin","ProjectSettings","default","isParticipantApprovalRequired","isRptProject","isRecruitProject","PROJECT_SOURCE_TYPES","PROJECT","BYOA_PROJECT","isSourcelessProject","SOURCELESS_PROJECT","hasParticipantSource","isOneOnOne","StudyTypes","ONE_ON_ONE","isFocusGroup","FOCUS_GROUP","isMultiDay","MULTI_DAY","UNMODERATED_TASK","hasStudyType","isModerated","InterviewTypes","ONLINE","PHONE","IN_PERSON","ProjectStatuses","DRAFT","isLaunchable","isLaunched","LAUNCHED","isFirstProject","String","hasOtherCompensationType","compensationTypeOtherCustomValue","useGetProjectState","_useGetProjectQuery","join","projectState","safelyParseSchema","responseSetListTag","responseSetsApi","getResponseSets","item","createResponseSet","survey_id","updateResponseSet","deleteResponseSet","responseSetId","useGetResponseSetsQuery","useCreateResponseSetMutation","useLazyGetResponseSetsQuery","useUpdateResponseSetMutation","useDeleteResponseSetMutation","NAVIGATION_PARTICIPANTS_CLICKED","NAVIGATION_PROJECTS_CLICKED","NavigationItem","iconSrcBase","Authorization","TeamActionTypes","SEARCH_PARTICIPANTS","upsertAccountHubConfiguration","configurations","useGetAccountHubConfigurationsQuery","useUpsertAccountHubConfigurationMutation","participantsApi","createParticipants","teamIds","team_ids","getParticipant","updateParticipant","updateParticipantTeams","encodedFilterParams","participant_filter","upsertParticipants","useGetParticipantQuery","useUpdateParticipantMutation","useUpdateParticipantTeamsMutation","useUpsertParticipantsMutation","attributeSlugsToInputLabels","backendConstants","attributeSlugsToDefaultOptionNames","authUserParams","authUser","WithAuthUserContext","_useHttp","JsonApiDataStore","sync","setContextValue","loadingOverlayEnabled","setLoadingOverlayEnabled","refreshAuthUserContext","skipLoadingOverlay","contextData","alert","finally","useGetSurveySectionsQuery","getSurveySections","i","gridAnswerTotal","QUESTION_ID_KEY_REGEX","parseIdFromQuestionIdKey","attributeIdKey","parsePickOneValues","formValues","pickOneFormValues","questionIdKey","parsePickManyValues","pickManyFormValues","pickManyResponses","parseShortAnswerValues","shortAnswerFormValues","stringValue","parseLongAnswerValues","longAnswerFormValues","textValue","parseDateValues","dateFormValues","dateValue","parseFloatValues","floatFormValues","floatValue","parseFloat","parseBooleanValues","booleanFormValues","booleanValue","transformFormValuesToSubmissionParams","buildResponseSetCreateParams","responsesAttributes","buildProjectResponseSetCreateParams","participantId","participantScreenerKey","buildOptInResponseSetCreateParams","participantOptInFormKey","buildResponseSetUpdateParams","buildProjectResponseSetUpdateParams","buildOptInResponseSetUpdateParams","projectDetailsSlice","ADD_WORKSPACE_ATTRIBUTES","projectDetailsSliceReducer","rootReducer","reducerPath","columnConfiguration","participantProfile","participantProfileSliceReducer","isDevelopmentEnv","buildStore","preloadedState","configureStore","middleware","getDefaultMiddleware","actionCreatorCheck","immutableCheck","serializableCheck","setupListeners","SidebarOpenDebounceMS","SidebarCloseDebounceMS","isTransitioning","isRenderingOpen","setIsNavItemHovered","isNavItemHovered","isSidebarHovered","setIsSidebarHovered","_useIsSidebarOpen","setIsOpen","setIsTransitioning","openSidebarTimeout","closeSidebarTimeout","isReducedMotion","openSidebar","clearTimeout","setTimeout","closeSidebar","sidebar","handleTransitionEnd","propertyName","useIsSidebarOpen","handleMouseEnter","handleMouseLeave","OwnerBoundary","ownershipKey","Ownership","namespace","initializeAppsignal","addBreadcrumb","addDecorator","addOverride","createSpan","demo","send","use","wrap","useAppsignal","ErrorBoundary","QuestionSkipLogicSummaryCondition","conditionAnswer","conditionQuestionGroup","isLastCondition","skipLogicConditionOperator","skipLogicJoinMethod","questionReferenceName","conditionAnswerText","usesUnequalOperator","as","TEXT_PROPS","sm","toUpperCase","SURVEY_END_SECTION_TITLE","QuestionSkipLogicSummaryConditions","targetSectionTitle","completedConditions","sanitizedTargetSectionTitle","conditionRows","sectionTitlesByUuid","mappingById","md","useGetSurveyPreviewSection","previousSectionId","previousSectionResponses","isFirstSection","firstSection","useGetFirstSurveySection","queryResult","limit","firstSurveySection","nextSection","useGetNextSurveySection","submittedPreviewSectionId","submittedPreviewResponsesAttributes","isFetching","currentSurveySection","isLoadingFirstSection","SurveyPreview","form","useForm","shouldUnregister","_useRequestedPreviewS","useRequestedPreviewSectionParams","requestedSectionParams","updateRequestedSectionParams","resetRequestedSectionParams","_useGetSurveyPreviewS","handleSubmitSection","handleSubmit","FormProvider","SurveyPreviewPage","useAlertFocus","RESEARCH_EXPERIENCE","deadline","faBell","faClock","faGift","faFileSignature","_d","onHandleNavigating","linkProps","_useSidebarContext","path","useLocation","regExp","useIsActive","isHovered","setIsHovered","SRCs","hovered","Image","iconSrc","baseProps","onMouseEnter","onFocus","onMouseLeave","ev","isCmdorCtrlPressed","metaKey","ctrlKey","NavLink","tagTypes","rawTagTypes","createApi","baseQuery","fetchBaseQuery","baseUrl","relationships","included","literal","isExclusive","deletePopulationAttribute","updatePopulationAttribute","createPopulationAttribute","useDeletePopulationAttributeMutation","useUpdatePopulationAttributeMutation","EMPTY_SECTION_PARAMS","setRequestedSectionParams","currentSectionResponses","matchParticipantFetched","populationAttributesAdapter","selectId","participantProfileSlice","dirtyPages","participant","redirectTo","SET_DIRTY_PAGE","Set","pageName","SET_REDIRECT_TO","_participantProfileSl","selectParticipant","selectRedirectTo","_populationAttributes","selectAllAttributes","selectAttributeBySlug","selectById","selectAttributes","selectAttributeBySlugWithMetadata","defaultOptionName","profileConstants","inputLabel","selectEmploymentAttribute","selectPageIsDirty","errorMessages","ctx","expirationSeconds","APPSIGNAL_JS_ERROR_LOG_EXPIRATION_SECONDS","lastLoggedAt","Date","optInFormKey","useUpsertParticipantPopulationOptInFormParticipantMutation","upsertParticipantPopulationOptInFormParticipant","opt_in_form_id","useGetOptInForm","OptInSuccess","FlexContainer","gap","stars","Survey","onComplete","_useSurveyResponseSet","useSurveyResponseSet","setCurrentSurveySection","_useCreateResponseSet2","_useCreateResponseSet3","createdResponseSetData","createResponseSetLoading","_useUpdateResponseSet2","_useUpdateResponseSet3","updatedResponseSetData","updateResponseSetLoading","latestMutatedResponseSetData","responseSet","surveyCompletedRedirect","_useGetResponseSetsQu","existingResponseSetResponse","existingResponseSet","useExistingResponseSet","completedAt","differenceInDays","parseISO","updatedAt","responseSetOutdated","handleError","handleSuccess","responseSetData","unwrap","then","catch","handleCreate","responseSetSurveySection","isLoadingResponseSet","_useGetFirstSurveySec","isLoadingFirstSurveySection","surveyCompleted","OptIn","surveyComplete","setSurveyComplete","setIsLoading","_useOptInFormKeyFromQ","searchParams","URLSearchParams","search","useOptInFormKeyFromQueryUrl","participantIdFromUrl","participantOptInFormKeyFromUrl","navigate","useNavigate","_useLazyGetResponseSe2","getExistingResponseSet","existingResponseSetResult","_useUpsertParticipant2","upsertParticipant","_useUpsertParticipant3","upsertedParticipant","isUpsertingParticipant","handleSubmissionError","submittedDefaultQuestionsForm","urlOptInFormKeyValid","isSuccess","optInFormComplete","showSurvey","accept_data_consent_notice","acceptDataConsentNotice","accept_texts","acceptTexts","cloudflare_turnstile","cloudflareTurnstile","phone","phoneCountryCode","phone_country_code","timezone_name","optInPageSchema","optInPreviewPageSchema","OptInEntrypoint","withAuthUserContext","OptInPreviewEntrypoint","NAVIGATION_ACCOUNT_CLICKED","NAVIGATION_SIGN_OUT_CLICKED","NAVIGATION_TEAMS_CLICKED","AccountMenuPopover","forwardRef","_props","handleLinkClick","dataset","VIEW_MEMBERS","NAVIGATION_ACCOUNT_POPOVER_OPENED","AccountNavigationItem","isAccountMenuOpen","setIsAccountMenuOpen","handleDocumentClick","clientX","clientY","_ref$current$getBound","getBoundingClientRect","top","bottom","left","right","organization","isRenderingAccountMenu","prev","NAVIGATION_PLANS_CLICKED","NAVIGATION_SUPPORT_CLICKED","authContext","isAccount","isStaff","rootPath","teamSubscription","paidSubscription","VIEW_BILLING","_useForm","mode","register","isFieldRequired","fieldName","isFieldVisible","ui","surveyFormCardStyles","Copy","TEXT_MESSAGE_RELEASE_OPTIONAL","TimezoneSelect","menuPlacement","useSystemFallback","onSelectChange","dataConsentNotice","alertElements","getElementsByClassName","focus","trackingData","PICK_ONE_INPUT_GROUP_KEY","BuilderConstants","PICK_MANY_INPUT_GROUP_KEY","SHORT_ANSWER_INPUT_GROUP_KEY","LONG_ANSWER_INPUT_GROUP_KEY","BOOLEAN_INPUT_GROUP_KEY","DATE_INPUT_GROUP_KEY","FLOAT_INPUT_GROUP_KEY","BOOLEAN_TRUE_VALUE","REQUIRED_ERROR_MESSAGE","REQUIRED_OTHER_VALUE_ERROR_MESSAGE","createInviteFilter","updateInviteFilter","useGetInviteFilterQuery","useCreateInviteFilterMutation","useUpdateInviteFilterMutation"],"sourceRoot":""}